From 720ed4aab52ee019034095cc5cb7ab8886df236a Mon Sep 17 00:00:00 2001 From: zhangtao Date: Thu, 6 Mar 2025 15:04:20 +0800 Subject: [PATCH] up rag3 Signed-off-by: zhangtao --- linux-5.10/rk3568_patch/kernel.patch | 44422 ++++++++++++------------- 1 file changed, 21619 insertions(+), 22803 deletions(-) diff --git a/linux-5.10/rk3568_patch/kernel.patch b/linux-5.10/rk3568_patch/kernel.patch index 82df26e..3ddea5e 100755 --- a/linux-5.10/rk3568_patch/kernel.patch +++ b/linux-5.10/rk3568_patch/kernel.patch @@ -1,5 +1,5 @@ diff --git a/Documentation/devicetree/bindings/devfreq/event/rockchip-dfi.txt b/Documentation/devicetree/bindings/devfreq/event/rockchip-dfi.txt -index 148191b0fc15..eee2a7f7cb92 100644 +index 148191b0f..eee2a7f7c 100644 --- a/Documentation/devicetree/bindings/devfreq/event/rockchip-dfi.txt +++ b/Documentation/devicetree/bindings/devfreq/event/rockchip-dfi.txt @@ -1,8 +1,22 @@ @@ -28,7 +28,7 @@ index 148191b0fc15..eee2a7f7cb92 100644 - rockchip,pmu: phandle to the syscon managing the "pmu general register files" - clocks: phandles for clock specified in "clock-names" property diff --git a/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt b/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt -index 027d76c27a41..a548f404033c 100644 +index 027d76c27..a548f4040 100644 --- a/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt +++ b/Documentation/devicetree/bindings/display/bridge/analogix_dp.txt @@ -21,17 +21,23 @@ Required properties for dp-controller: @@ -56,7 +56,7 @@ index 027d76c27a41..a548f404033c 100644 [1]: Documentation/devicetree/bindings/media/video-interfaces.txt ------------------------------------------------------------------------------- diff --git a/Documentation/devicetree/bindings/iio/adc/rockchip-saradc.yaml b/Documentation/devicetree/bindings/iio/adc/rockchip-saradc.yaml -index 1bb76197787b..de8e78d56dea 100644 +index 1bb761977..de8e78d56 100644 --- a/Documentation/devicetree/bindings/iio/adc/rockchip-saradc.yaml +++ b/Documentation/devicetree/bindings/iio/adc/rockchip-saradc.yaml @@ -18,6 +18,7 @@ properties: @@ -68,7 +68,7 @@ index 1bb76197787b..de8e78d56dea 100644 - rockchip,rk3328-saradc - rockchip,rv1108-saradc diff --git a/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt b/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt -index 6ecefea1c6f9..0b906fb630e2 100644 +index 6ecefea1c..0b906fb63 100644 --- a/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt +++ b/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt @@ -24,6 +24,10 @@ Optional properties: @@ -84,7 +84,7 @@ index 6ecefea1c6f9..0b906fb630e2 100644 diff --git a/Documentation/devicetree/bindings/mtd/rockchip,nand-controller.yaml b/Documentation/devicetree/bindings/mtd/rockchip,nand-controller.yaml new file mode 100644 -index 000000000000..0922536b1811 +index 000000000..0922536b1 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/rockchip,nand-controller.yaml @@ -0,0 +1,161 @@ @@ -250,7 +250,7 @@ index 000000000000..0922536b1811 + +... diff --git a/Documentation/devicetree/bindings/nvmem/rockchip-efuse.yaml b/Documentation/devicetree/bindings/nvmem/rockchip-efuse.yaml -index 104dd508565e..af1b9c31862a 100644 +index 104dd5085..af1b9c318 100644 --- a/Documentation/devicetree/bindings/nvmem/rockchip-efuse.yaml +++ b/Documentation/devicetree/bindings/nvmem/rockchip-efuse.yaml @@ -15,10 +15,13 @@ allOf: @@ -268,7 +268,7 @@ index 104dd508565e..af1b9c31862a 100644 - rockchip,rk3368-efuse - rockchip,rk3399-efuse diff --git a/Documentation/devicetree/bindings/nvmem/rockchip-otp.txt b/Documentation/devicetree/bindings/nvmem/rockchip-otp.txt -index 40f649f7c2e5..6e61345829e7 100644 +index 40f649f7c..6e6134582 100644 --- a/Documentation/devicetree/bindings/nvmem/rockchip-otp.txt +++ b/Documentation/devicetree/bindings/nvmem/rockchip-otp.txt @@ -7,6 +7,8 @@ Required properties: @@ -281,7 +281,7 @@ index 40f649f7c2e5..6e61345829e7 100644 See ../../reset/reset.txt for details. - reset-names: Should be "phy". diff --git a/Documentation/devicetree/bindings/phy/phy-rockchip-typec.txt b/Documentation/devicetree/bindings/phy/phy-rockchip-typec.txt -index 960da7fcaa9e..ac82f7b4dd58 100644 +index 960da7fca..ac82f7b4d 100644 --- a/Documentation/devicetree/bindings/phy/phy-rockchip-typec.txt +++ b/Documentation/devicetree/bindings/phy/phy-rockchip-typec.txt @@ -17,6 +17,11 @@ Required properties: @@ -341,7 +341,7 @@ index 960da7fcaa9e..ac82f7b4dd58 100644 #phy-cells = <0>; }; diff --git a/Documentation/devicetree/bindings/power/rockchip-io-domain.txt b/Documentation/devicetree/bindings/power/rockchip-io-domain.txt -index e66fd4eab71c..09824bca248e 100644 +index e66fd4eab..09824bca2 100644 --- a/Documentation/devicetree/bindings/power/rockchip-io-domain.txt +++ b/Documentation/devicetree/bindings/power/rockchip-io-domain.txt @@ -41,8 +41,10 @@ Required properties: @@ -391,7 +391,7 @@ index e66fd4eab71c..09824bca248e 100644 io-domains { diff --git a/Documentation/devicetree/bindings/soc/rockchip/power_domain.txt b/Documentation/devicetree/bindings/soc/rockchip/power_domain.txt -index 8304eceb62e4..e1920b15c86f 100644 +index 8304eceb6..e1920b15c 100644 --- a/Documentation/devicetree/bindings/soc/rockchip/power_domain.txt +++ b/Documentation/devicetree/bindings/soc/rockchip/power_domain.txt @@ -16,6 +16,7 @@ Required properties for power domain controller: @@ -419,7 +419,7 @@ index 8304eceb62e4..e1920b15c86f 100644 Example of the node using power domain: diff --git a/Documentation/devicetree/bindings/sound/rt5651.txt b/Documentation/devicetree/bindings/sound/rt5651.txt -index 56e736a1cba9..e7cd338d2b59 100644 +index 56e736a1c..e7cd338d2 100644 --- a/Documentation/devicetree/bindings/sound/rt5651.txt +++ b/Documentation/devicetree/bindings/sound/rt5651.txt @@ -38,6 +38,8 @@ Optional properties: @@ -432,7 +432,7 @@ index 56e736a1cba9..e7cd338d2b59 100644 * DMIC L1 diff --git a/Documentation/devicetree/bindings/spi/spi-rockchip.yaml b/Documentation/devicetree/bindings/spi/spi-rockchip.yaml -index 1e6cf29e6388..7f987e79337c 100644 +index 1e6cf29e6..7f987e793 100644 --- a/Documentation/devicetree/bindings/spi/spi-rockchip.yaml +++ b/Documentation/devicetree/bindings/spi/spi-rockchip.yaml @@ -33,6 +33,7 @@ properties: @@ -444,7 +444,7 @@ index 1e6cf29e6388..7f987e79337c 100644 reg: diff --git a/Documentation/devicetree/bindings/thermal/rockchip-thermal.txt b/Documentation/devicetree/bindings/thermal/rockchip-thermal.txt -index 7f94669e9ebe..346e466c2006 100644 +index 7f94669e9..346e466c2 100644 --- a/Documentation/devicetree/bindings/thermal/rockchip-thermal.txt +++ b/Documentation/devicetree/bindings/thermal/rockchip-thermal.txt @@ -9,6 +9,7 @@ Required properties: @@ -456,7 +456,7 @@ index 7f94669e9ebe..346e466c2006 100644 region. - interrupts : The interrupt number to the cpu. The interrupt specifier format diff --git a/arch/arm/boot/dts/rk3036.dtsi b/arch/arm/boot/dts/rk3036.dtsi -index 093567022386..dc4c26a8a196 100644 +index 093567022..dc4c26a8a 100644 --- a/arch/arm/boot/dts/rk3036.dtsi +++ b/arch/arm/boot/dts/rk3036.dtsi @@ -85,6 +85,11 @@ display-subsystem { @@ -508,7 +508,7 @@ index 093567022386..dc4c26a8a196 100644 status = "disabled"; }; diff --git a/arch/arm/boot/dts/rk3066a-rayeager.dts b/arch/arm/boot/dts/rk3066a-rayeager.dts -index 309518403d86..1a9891f802f8 100644 +index 309518403..1a9891f80 100644 --- a/arch/arm/boot/dts/rk3066a-rayeager.dts +++ b/arch/arm/boot/dts/rk3066a-rayeager.dts @@ -23,6 +23,20 @@ ir: ir-receiver { @@ -533,7 +533,7 @@ index 309518403d86..1a9891f802f8 100644 compatible = "gpio-keys"; diff --git a/arch/arm/boot/dts/rk3066a.dtsi b/arch/arm/boot/dts/rk3066a.dtsi -index bbc3bff50856..49b8652da097 100644 +index bbc3bff50..49b8652da 100644 --- a/arch/arm/boot/dts/rk3066a.dtsi +++ b/arch/arm/boot/dts/rk3066a.dtsi @@ -800,22 +800,22 @@ power-domain@RK3066_PD_GPU { @@ -564,7 +564,7 @@ index bbc3bff50856..49b8652da097 100644 }; diff --git a/arch/arm/boot/dts/rk3188.dtsi b/arch/arm/boot/dts/rk3188.dtsi -index ddf23748ead4..e3fe43499c8a 100644 +index ddf23748e..e3fe43499 100644 --- a/arch/arm/boot/dts/rk3188.dtsi +++ b/arch/arm/boot/dts/rk3188.dtsi @@ -738,22 +738,22 @@ power-domain@RK3188_PD_GPU { @@ -595,7 +595,7 @@ index ddf23748ead4..e3fe43499c8a 100644 }; diff --git a/arch/arm/boot/dts/rk322x.dtsi b/arch/arm/boot/dts/rk322x.dtsi -index 2f17bf35d7a6..aae403bfaff1 100644 +index 2f17bf35d..aae403bfa 100644 --- a/arch/arm/boot/dts/rk322x.dtsi +++ b/arch/arm/boot/dts/rk322x.dtsi @@ -398,7 +398,7 @@ pwm0: pwm@110b0000 { @@ -635,7 +635,7 @@ index 2f17bf35d7a6..aae403bfaff1 100644 status = "disabled"; }; diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi -index 250a03a066a1..8a81801bd90d 100644 +index 250a03a06..8a81801bd 100644 --- a/arch/arm/boot/dts/rk3288.dtsi +++ b/arch/arm/boot/dts/rk3288.dtsi @@ -695,7 +695,7 @@ pwm0: pwm@ff680000 { @@ -675,7 +675,7 @@ index 250a03a066a1..8a81801bd90d 100644 clocks = <&cru PCLK_RKPWM>; clock-names = "pwm"; diff --git a/arch/arm/boot/dts/rv1108.dtsi b/arch/arm/boot/dts/rv1108.dtsi -index a1a08cb9364e..b079c0008032 100644 +index a1a08cb93..b079c0008 100644 --- a/arch/arm/boot/dts/rv1108.dtsi +++ b/arch/arm/boot/dts/rv1108.dtsi @@ -217,7 +217,7 @@ pwm4: pwm@10280000 { @@ -751,7 +751,7 @@ index a1a08cb9364e..b079c0008032 100644 #pwm-cells = <3>; status = "disabled"; diff --git a/arch/arm/kernel/psci_smp.c b/arch/arm/kernel/psci_smp.c -index d4392e177484..059db0b1c1de 100644 +index d4392e177..059db0b1c 100644 --- a/arch/arm/kernel/psci_smp.c +++ b/arch/arm/kernel/psci_smp.c @@ -107,11 +107,12 @@ static int psci_cpu_kill(unsigned int cpu) @@ -769,7 +769,7 @@ index d4392e177484..059db0b1c1de 100644 const struct smp_operations psci_smp_ops __initconst = { .smp_boot_secondary = psci_boot_secondary, diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c -index 0ce388f15422..6f874647b63b 100644 +index 0ce388f15..6f874647b 100644 --- a/arch/arm/kernel/reboot.c +++ b/arch/arm/kernel/reboot.c @@ -18,7 +18,6 @@ typedef void (*phys_reset_t)(unsigned long, bool); @@ -794,7 +794,7 @@ index 0ce388f15422..6f874647b63b 100644 /* Give a grace period for failure to restart of 1s */ mdelay(1000); diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms -index 889e78f40a25..4a783983410a 100644 +index 889e78f40..4a7839834 100644 --- a/arch/arm64/Kconfig.platforms +++ b/arch/arm64/Kconfig.platforms @@ -224,11 +224,8 @@ config ARCH_RENESAS @@ -810,7 +810,7 @@ index 889e78f40a25..4a783983410a 100644 This enables support for the ARMv8 based Rockchip chipsets, like the RK3368. diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile -index 485b7dbd4f9e..7b56d7f760a8 100644 +index 485b7dbd4..7b56d7f76 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -198,3 +198,16 @@ define archhelp @@ -831,7 +831,7 @@ index 485b7dbd4f9e..7b56d7f760a8 100644 +CLEAN_DIRS += out +CLEAN_FILES += boot.img kernel.img resource.img zboot.img diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile -index 26661c7b736b..a2386c005926 100644 +index 26661c7b7..a2386c005 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile @@ -44,3 +44,43 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-rockpro64.dtb @@ -880,7 +880,7 @@ index 26661c7b736b..a2386c005926 100644 +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-nvr-demo-v12-linux-spi-nand.dtb diff --git a/arch/arm64/boot/dts/rockchip/px30-ad-d6-anx6345.dts b/arch/arm64/boot/dts/rockchip/px30-ad-d6-anx6345.dts new file mode 100755 -index 000000000000..2f258286286a +index 000000000..2f2582862 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-ad-d6-anx6345.dts @@ -0,0 +1,759 @@ @@ -1645,7 +1645,7 @@ index 000000000000..2f258286286a +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-dual-lvds.dts b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-dual-lvds.dts new file mode 100755 -index 000000000000..09fc265a8d7a +index 000000000..09fc265a8 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-dual-lvds.dts @@ -0,0 +1,147 @@ @@ -1798,7 +1798,7 @@ index 000000000000..09fc265a8d7a +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-hdmi-lvds.dts b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-hdmi-lvds.dts new file mode 100755 -index 000000000000..d4f202189250 +index 000000000..d4f202189 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-hdmi-lvds.dts @@ -0,0 +1,241 @@ @@ -2045,7 +2045,7 @@ index 000000000000..d4f202189250 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-hdmi.dts b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-hdmi.dts new file mode 100755 -index 000000000000..0ea056682e57 +index 000000000..0ea056682 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-hdmi.dts @@ -0,0 +1,105 @@ @@ -2156,7 +2156,7 @@ index 000000000000..0ea056682e57 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-lvds.dts b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-lvds.dts new file mode 100755 -index 000000000000..8b54a9a18fcc +index 000000000..8b54a9a18 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb-rk618-lvds.dts @@ -0,0 +1,146 @@ @@ -2308,7 +2308,7 @@ index 000000000000..8b54a9a18fcc +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb.dtsi b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb.dtsi new file mode 100755 -index 000000000000..bbcd18959dc4 +index 000000000..bbcd18959 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-ad-r35-mb.dtsi @@ -0,0 +1,823 @@ @@ -3137,7 +3137,7 @@ index 000000000000..bbcd18959dc4 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-android.dtsi b/arch/arm64/boot/dts/rockchip/px30-android.dtsi new file mode 100755 -index 000000000000..aecb6344f01f +index 000000000..aecb6344f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-android.dtsi @@ -0,0 +1,131 @@ @@ -3274,7 +3274,7 @@ index 000000000000..aecb6344f01f +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-ddr4p416dd6-timing.dtsi b/arch/arm64/boot/dts/rockchip/px30-ddr4p416dd6-timing.dtsi new file mode 100755 -index 000000000000..fde5895db94a +index 000000000..fde5895db --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-ddr4p416dd6-timing.dtsi @@ -0,0 +1,216 @@ @@ -3496,7 +3496,7 @@ index 000000000000..fde5895db94a +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-dram-default-timing.dtsi b/arch/arm64/boot/dts/rockchip/px30-dram-default-timing.dtsi new file mode 100755 -index 000000000000..c75c5ef4ef2a +index 000000000..c75c5ef4e --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-dram-default-timing.dtsi @@ -0,0 +1,294 @@ @@ -3796,7 +3796,7 @@ index 000000000000..c75c5ef4ef2a +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-lvds-v10.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-lvds-v10.dts new file mode 100755 -index 000000000000..eb60e71b77f3 +index 000000000..eb60e71b7 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-lvds-v10.dts @@ -0,0 +1,689 @@ @@ -4491,7 +4491,7 @@ index 000000000000..eb60e71b77f3 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-avb.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-avb.dts new file mode 100755 -index 000000000000..fca982485b16 +index 000000000..fca982485 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-avb.dts @@ -0,0 +1,109 @@ @@ -4606,7 +4606,7 @@ index 000000000000..fca982485b16 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-linux.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-linux.dts new file mode 100755 -index 000000000000..ff24bdd46aea +index 000000000..ff24bdd46 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-linux.dts @@ -0,0 +1,939 @@ @@ -5551,7 +5551,7 @@ index 000000000000..ff24bdd46aea + diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-robot-linux.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-robot-linux.dts new file mode 100755 -index 000000000000..317b53b2a1eb +index 000000000..317b53b2a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-robot-linux.dts @@ -0,0 +1,627 @@ @@ -6184,7 +6184,7 @@ index 000000000000..317b53b2a1eb +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-robot-no-gpu-linux.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-robot-no-gpu-linux.dts new file mode 100755 -index 000000000000..81f44c36686c +index 000000000..81f44c366 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10-robot-no-gpu-linux.dts @@ -0,0 +1,627 @@ @@ -6817,7 +6817,7 @@ index 000000000000..81f44c36686c +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts new file mode 100755 -index 000000000000..b814812edbe9 +index 000000000..b814812ed --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dts @@ -0,0 +1,127 @@ @@ -6950,7 +6950,7 @@ index 000000000000..b814812edbe9 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dtsi b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dtsi new file mode 100755 -index 000000000000..3d8e81009bef +index 000000000..3d8e81009 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dtsi @@ -0,0 +1,815 @@ @@ -7771,7 +7771,7 @@ index 000000000000..3d8e81009bef +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11-avb.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11-avb.dts new file mode 100755 -index 000000000000..f2659a7f524e +index 000000000..f2659a7f5 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11-avb.dts @@ -0,0 +1,276 @@ @@ -8053,7 +8053,7 @@ index 000000000000..f2659a7f524e +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11-linux.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11-linux.dts new file mode 100755 -index 000000000000..54a4c19d11b3 +index 000000000..54a4c19d1 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11-linux.dts @@ -0,0 +1,296 @@ @@ -8355,7 +8355,7 @@ index 000000000000..54a4c19d11b3 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11.dts new file mode 100755 -index 000000000000..2e59a09d3c5c +index 000000000..2e59a09d3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v11.dts @@ -0,0 +1,293 @@ @@ -8654,7 +8654,7 @@ index 000000000000..2e59a09d3c5c +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr4-v10.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ddr4-v10.dts new file mode 100755 -index 000000000000..7bfe640d32de +index 000000000..7bfe640d3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr4-v10.dts @@ -0,0 +1,853 @@ @@ -9513,7 +9513,7 @@ index 000000000000..7bfe640d32de + diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618-avb.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618-avb.dts new file mode 100755 -index 000000000000..ea44da5066af +index 000000000..ea44da506 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618-avb.dts @@ -0,0 +1,11 @@ @@ -9530,7 +9530,7 @@ index 000000000000..ea44da5066af +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618.dts b/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618.dts new file mode 100755 -index 000000000000..69f44b4d115c +index 000000000..69f44b4d1 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618.dts @@ -0,0 +1,33 @@ @@ -9569,7 +9569,7 @@ index 000000000000..69f44b4d115c +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618.dtsi b/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618.dtsi new file mode 100755 -index 000000000000..0eac63181407 +index 000000000..0eac63181 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ext-rk618.dtsi @@ -0,0 +1,202 @@ @@ -9777,7 +9777,7 @@ index 000000000000..0eac63181407 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-robot-no-gpu.dtsi b/arch/arm64/boot/dts/rockchip/px30-robot-no-gpu.dtsi new file mode 100755 -index 000000000000..e3f4274b2309 +index 000000000..e3f4274b2 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-robot-no-gpu.dtsi @@ -0,0 +1,57 @@ @@ -9840,7 +9840,7 @@ index 000000000000..e3f4274b2309 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-robot.dtsi b/arch/arm64/boot/dts/rockchip/px30-robot.dtsi new file mode 100755 -index 000000000000..f48a753e6453 +index 000000000..f48a753e6 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-robot.dtsi @@ -0,0 +1,93 @@ @@ -9939,7 +9939,7 @@ index 000000000000..f48a753e6453 +}; diff --git a/arch/arm64/boot/dts/rockchip/px30-z7-a0-rk618-dsi.dts b/arch/arm64/boot/dts/rockchip/px30-z7-a0-rk618-dsi.dts new file mode 100755 -index 000000000000..1657151c988f +index 000000000..1657151c9 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/px30-z7-a0-rk618-dsi.dts @@ -0,0 +1,875 @@ @@ -10819,7 +10819,7 @@ index 000000000000..1657151c988f + }; +}; diff --git a/arch/arm64/boot/dts/rockchip/px30.dtsi b/arch/arm64/boot/dts/rockchip/px30.dtsi -index 0d6761074b11..237c0d9af325 100644 +index 0d6761074..237c0d9af 100644 --- a/arch/arm64/boot/dts/rockchip/px30.dtsi +++ b/arch/arm64/boot/dts/rockchip/px30.dtsi @@ -25,6 +25,9 @@ aliases { @@ -10974,7 +10974,7 @@ index 0d6761074b11..237c0d9af325 100644 status = "disabled"; diff --git a/arch/arm64/boot/dts/rockchip/rk1808-dram-default-timing.dtsi b/arch/arm64/boot/dts/rockchip/rk1808-dram-default-timing.dtsi new file mode 100755 -index 000000000000..0fa79e2f05c0 +index 000000000..0fa79e2f0 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808-dram-default-timing.dtsi @@ -0,0 +1,302 @@ @@ -11282,7 +11282,7 @@ index 000000000000..0fa79e2f05c0 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk1808-evb-v10.dts b/arch/arm64/boot/dts/rockchip/rk1808-evb-v10.dts new file mode 100755 -index 000000000000..a09824816188 +index 000000000..a09824816 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808-evb-v10.dts @@ -0,0 +1,305 @@ @@ -11593,7 +11593,7 @@ index 000000000000..a09824816188 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk1808-evb-x4-second.dts b/arch/arm64/boot/dts/rockchip/rk1808-evb-x4-second.dts new file mode 100755 -index 000000000000..413d4f6fa29d +index 000000000..413d4f6fa --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808-evb-x4-second.dts @@ -0,0 +1,272 @@ @@ -11871,7 +11871,7 @@ index 000000000000..413d4f6fa29d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk1808-evb-x4.dts b/arch/arm64/boot/dts/rockchip/rk1808-evb-x4.dts new file mode 100755 -index 000000000000..17993d1ff44a +index 000000000..17993d1ff --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808-evb-x4.dts @@ -0,0 +1,271 @@ @@ -12148,7 +12148,7 @@ index 000000000000..17993d1ff44a +}; diff --git a/arch/arm64/boot/dts/rockchip/rk1808-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk1808-evb.dtsi new file mode 100755 -index 000000000000..3b9c88660701 +index 000000000..3b9c88660 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808-evb.dtsi @@ -0,0 +1,717 @@ @@ -12871,7 +12871,7 @@ index 000000000000..3b9c88660701 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk1808-fpga.dts b/arch/arm64/boot/dts/rockchip/rk1808-fpga.dts new file mode 100755 -index 000000000000..d021918cacd1 +index 000000000..d021918ca --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808-fpga.dts @@ -0,0 +1,58 @@ @@ -12935,7 +12935,7 @@ index 000000000000..d021918cacd1 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk1808.dtsi b/arch/arm64/boot/dts/rockchip/rk1808.dtsi new file mode 100755 -index 000000000000..3469abac4f34 +index 000000000..3469abac4 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808.dtsi @@ -0,0 +1,3040 @@ @@ -15981,7 +15981,7 @@ index 000000000000..3469abac4f34 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk1808k.dtsi b/arch/arm64/boot/dts/rockchip/rk1808k.dtsi new file mode 100755 -index 000000000000..78bd92e4c2c6 +index 000000000..78bd92e4c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk1808k.dtsi @@ -0,0 +1,51 @@ @@ -16038,7 +16038,7 @@ index 000000000000..78bd92e4c2c6 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-ai-va-v10.dts b/arch/arm64/boot/dts/rockchip/rk3308-ai-va-v10.dts new file mode 100755 -index 000000000000..c77d2e963266 +index 000000000..c77d2e963 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-ai-va-v10.dts @@ -0,0 +1,681 @@ @@ -16725,7 +16725,7 @@ index 000000000000..c77d2e963266 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-amic-v10.dts b/arch/arm64/boot/dts/rockchip/rk3308-evb-amic-v10.dts new file mode 100755 -index 000000000000..557daa856132 +index 000000000..557daa856 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-amic-v10.dts @@ -0,0 +1,55 @@ @@ -16786,7 +16786,7 @@ index 000000000000..557daa856132 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-amic-v11.dts b/arch/arm64/boot/dts/rockchip/rk3308-evb-amic-v11.dts new file mode 100755 -index 000000000000..90a29a903545 +index 000000000..90a29a903 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-amic-v11.dts @@ -0,0 +1,56 @@ @@ -16848,7 +16848,7 @@ index 000000000000..90a29a903545 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-i2s-v10.dts b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-i2s-v10.dts new file mode 100755 -index 000000000000..88c1e9c6c8ac +index 000000000..88c1e9c6c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-i2s-v10.dts @@ -0,0 +1,101 @@ @@ -16955,7 +16955,7 @@ index 000000000000..88c1e9c6c8ac +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-i2s-v11.dts b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-i2s-v11.dts new file mode 100755 -index 000000000000..364f74a40d9d +index 000000000..364f74a40 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-i2s-v11.dts @@ -0,0 +1,77 @@ @@ -17038,7 +17038,7 @@ index 000000000000..364f74a40d9d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-pdm-v10.dts b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-pdm-v10.dts new file mode 100755 -index 000000000000..e2891ce1092c +index 000000000..e2891ce10 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-pdm-v10.dts @@ -0,0 +1,88 @@ @@ -17132,7 +17132,7 @@ index 000000000000..e2891ce1092c +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-pdm-v11.dts b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-pdm-v11.dts new file mode 100755 -index 000000000000..c4a7178f1dc8 +index 000000000..c4a7178f1 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-dmic-pdm-v11.dts @@ -0,0 +1,92 @@ @@ -17230,7 +17230,7 @@ index 000000000000..c4a7178f1dc8 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-ext-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3308-evb-ext-v10.dtsi new file mode 100755 -index 000000000000..1c0e66384c16 +index 000000000..1c0e66384 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-ext-v10.dtsi @@ -0,0 +1,235 @@ @@ -17471,7 +17471,7 @@ index 000000000000..1c0e66384c16 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi new file mode 100755 -index 000000000000..3d052d0da477 +index 000000000..3d052d0da --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi @@ -0,0 +1,780 @@ @@ -18257,7 +18257,7 @@ index 000000000000..3d052d0da477 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi b/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi new file mode 100755 -index 000000000000..7b692a810333 +index 000000000..7b692a810 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb-v11.dtsi @@ -0,0 +1,835 @@ @@ -19098,7 +19098,7 @@ index 000000000000..7b692a810333 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-fpga.dts b/arch/arm64/boot/dts/rockchip/rk3308-fpga.dts new file mode 100755 -index 000000000000..225aca323f4d +index 000000000..225aca323 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-fpga.dts @@ -0,0 +1,51 @@ @@ -19154,7 +19154,7 @@ index 000000000000..225aca323f4d + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts -index 213c0759c4b8..b89eaf1075ab 100644 +index 213c0759c..b89eaf107 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts @@ -78,8 +78,8 @@ vcc_sdmmc: vcc-sdmmc { @@ -19170,7 +19170,7 @@ index 213c0759c4b8..b89eaf1075ab 100644 diff --git a/arch/arm64/boot/dts/rockchip/rk3308-voice-module-board-v10.dts b/arch/arm64/boot/dts/rockchip/rk3308-voice-module-board-v10.dts new file mode 100755 -index 000000000000..2586d9905072 +index 000000000..2586d9905 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308-voice-module-board-v10.dts @@ -0,0 +1,19 @@ @@ -19194,7 +19194,7 @@ index 000000000000..2586d9905072 + console-size = <0xc0000>; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308.dtsi b/arch/arm64/boot/dts/rockchip/rk3308.dtsi -index 2560b98771ca..cc86c0880cec 100644 +index 2560b9877..cc86c0880 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3308.dtsi @@ -10,6 +10,7 @@ @@ -19337,7 +19337,7 @@ index 2560b98771ca..cc86c0880cec 100644 status = "disabled"; diff --git a/arch/arm64/boot/dts/rockchip/rk3308b-evb-amic-v10.dts b/arch/arm64/boot/dts/rockchip/rk3308b-evb-amic-v10.dts new file mode 100755 -index 000000000000..d5e2d9ebd4aa +index 000000000..d5e2d9ebd --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308b-evb-amic-v10.dts @@ -0,0 +1,62 @@ @@ -19405,7 +19405,7 @@ index 000000000000..d5e2d9ebd4aa +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308b-evb-ext-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3308b-evb-ext-v10.dtsi new file mode 100755 -index 000000000000..e2414b67f0d1 +index 000000000..e2414b67f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308b-evb-ext-v10.dtsi @@ -0,0 +1,124 @@ @@ -19535,7 +19535,7 @@ index 000000000000..e2414b67f0d1 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308b-evb-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3308b-evb-v10.dtsi new file mode 100755 -index 000000000000..902ae3544235 +index 000000000..902ae3544 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308b-evb-v10.dtsi @@ -0,0 +1,784 @@ @@ -20325,7 +20325,7 @@ index 000000000000..902ae3544235 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3308k.dtsi b/arch/arm64/boot/dts/rockchip/rk3308k.dtsi new file mode 100755 -index 000000000000..ffd53fd158c5 +index 000000000..ffd53fd15 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3308k.dtsi @@ -0,0 +1,46 @@ @@ -20377,7 +20377,7 @@ index 000000000000..ffd53fd158c5 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-863-cif-sensor.dtsi b/arch/arm64/boot/dts/rockchip/rk3326-863-cif-sensor.dtsi new file mode 100755 -index 000000000000..c01f4d014a1b +index 000000000..c01f4d014 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-863-cif-sensor.dtsi @@ -0,0 +1,54 @@ @@ -20437,7 +20437,7 @@ index 000000000000..c01f4d014a1b + diff --git a/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10-avb.dts b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10-avb.dts new file mode 100755 -index 000000000000..174d05e37ccb +index 000000000..174d05e37 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10-avb.dts @@ -0,0 +1,112 @@ @@ -20555,7 +20555,7 @@ index 000000000000..174d05e37ccb +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10-rkisp1.dts b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10-rkisp1.dts new file mode 100755 -index 000000000000..d80dad694c1d +index 000000000..d80dad694 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10-rkisp1.dts @@ -0,0 +1,103 @@ @@ -20664,7 +20664,7 @@ index 000000000000..d80dad694c1d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10.dts b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10.dts new file mode 100755 -index 000000000000..7a399b3356ac +index 000000000..7a399b335 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10.dts @@ -0,0 +1,42 @@ @@ -20712,7 +20712,7 @@ index 000000000000..7a399b3356ac +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10.dtsi new file mode 100755 -index 000000000000..6e6e3be2f104 +index 000000000..6e6e3be2f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-863-lp3-v10.dtsi @@ -0,0 +1,833 @@ @@ -21551,7 +21551,7 @@ index 000000000000..6e6e3be2f104 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-86v-v10.dts b/arch/arm64/boot/dts/rockchip/rk3326-86v-v10.dts new file mode 100755 -index 000000000000..86d048c0d731 +index 000000000..86d048c0d --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-86v-v10.dts @@ -0,0 +1,840 @@ @@ -22397,7 +22397,7 @@ index 000000000000..86d048c0d731 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts new file mode 100755 -index 000000000000..02308ebae99e +index 000000000..02308ebae --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts @@ -0,0 +1,1308 @@ @@ -23711,7 +23711,7 @@ index 000000000000..02308ebae99e +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts new file mode 100755 -index 000000000000..0af03d1ec2a8 +index 000000000..0af03d1ec --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts @@ -0,0 +1,1330 @@ @@ -25047,7 +25047,7 @@ index 000000000000..0af03d1ec2a8 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts new file mode 100755 -index 000000000000..fa8b7cff619f +index 000000000..fa8b7cff6 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts @@ -0,0 +1,1317 @@ @@ -26370,7 +26370,7 @@ index 000000000000..fa8b7cff619f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts new file mode 100755 -index 000000000000..9669993499e0 +index 000000000..966999349 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts @@ -0,0 +1,1317 @@ @@ -27693,7 +27693,7 @@ index 000000000000..9669993499e0 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-avb.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-avb.dts new file mode 100755 -index 000000000000..4c12a79f814b +index 000000000..4c12a79f8 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-avb.dts @@ -0,0 +1,91 @@ @@ -27790,7 +27790,7 @@ index 000000000000..4c12a79f814b +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-linux.dts new file mode 100755 -index 000000000000..67c131c9618a +index 000000000..67c131c96 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-linux.dts @@ -0,0 +1,1024 @@ @@ -28820,7 +28820,7 @@ index 000000000000..67c131c9618a +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-robot-linux.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-robot-linux.dts new file mode 100755 -index 000000000000..6966806150f5 +index 000000000..696680615 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-robot-linux.dts @@ -0,0 +1,748 @@ @@ -29574,7 +29574,7 @@ index 000000000000..6966806150f5 +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-robot-no-gpu-linux.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-robot-no-gpu-linux.dts new file mode 100755 -index 000000000000..b3b9efec92e4 +index 000000000..b3b9efec9 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10-robot-no-gpu-linux.dts @@ -0,0 +1,728 @@ @@ -30308,7 +30308,7 @@ index 000000000000..b3b9efec92e4 +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10.dts new file mode 100755 -index 000000000000..58bbfdafb489 +index 000000000..58bbfdafb --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10.dts @@ -0,0 +1,37 @@ @@ -30351,7 +30351,7 @@ index 000000000000..58bbfdafb489 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10.dtsi new file mode 100755 -index 000000000000..940c05df8304 +index 000000000..940c05df8 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v10.dtsi @@ -0,0 +1,887 @@ @@ -31244,7 +31244,7 @@ index 000000000000..940c05df8304 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v11-avb.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v11-avb.dts new file mode 100755 -index 000000000000..2f0c3fc3a38d +index 000000000..2f0c3fc3a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v11-avb.dts @@ -0,0 +1,351 @@ @@ -31601,7 +31601,7 @@ index 000000000000..2f0c3fc3a38d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v11.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v11.dts new file mode 100755 -index 000000000000..139efd9d1332 +index 000000000..139efd9d1 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-lp3-v11.dts @@ -0,0 +1,297 @@ @@ -31904,7 +31904,7 @@ index 000000000000..139efd9d1332 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3326-linux.dtsi b/arch/arm64/boot/dts/rockchip/rk3326-linux.dtsi new file mode 100755 -index 000000000000..a386cd291cf3 +index 000000000..a386cd291 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3326-linux.dtsi @@ -0,0 +1,120 @@ @@ -32030,7 +32030,7 @@ index 000000000000..a386cd291cf3 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-android.dtsi new file mode 100755 -index 000000000000..809b6501b78f +index 000000000..809b6501b --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-android.dtsi @@ -0,0 +1,88 @@ @@ -32124,7 +32124,7 @@ index 000000000000..809b6501b78f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-box-liantong-avb.dts b/arch/arm64/boot/dts/rockchip/rk3328-box-liantong-avb.dts new file mode 100755 -index 000000000000..ee04d8988fbb +index 000000000..ee04d8988 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-box-liantong-avb.dts @@ -0,0 +1,13 @@ @@ -32143,7 +32143,7 @@ index 000000000000..ee04d8988fbb +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-box-liantong.dts b/arch/arm64/boot/dts/rockchip/rk3328-box-liantong.dts new file mode 100755 -index 000000000000..dcff87208d39 +index 000000000..dcff87208 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-box-liantong.dts @@ -0,0 +1,34 @@ @@ -32183,7 +32183,7 @@ index 000000000000..dcff87208d39 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-box-liantong.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-box-liantong.dtsi new file mode 100755 -index 000000000000..ad7ef6be49fa +index 000000000..ad7ef6be4 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-box-liantong.dtsi @@ -0,0 +1,673 @@ @@ -32862,7 +32862,7 @@ index 000000000000..ad7ef6be49fa +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-box-plus-dram-timing.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-box-plus-dram-timing.dtsi new file mode 100755 -index 000000000000..0ea270539a23 +index 000000000..0ea270539 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-box-plus-dram-timing.dtsi @@ -0,0 +1,221 @@ @@ -33089,7 +33089,7 @@ index 000000000000..0ea270539a23 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-dram-2layer-timing.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-dram-2layer-timing.dtsi new file mode 100755 -index 000000000000..940024920b5d +index 000000000..940024920 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-dram-2layer-timing.dtsi @@ -0,0 +1,257 @@ @@ -33352,7 +33352,7 @@ index 000000000000..940024920b5d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-dram-default-timing.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-dram-default-timing.dtsi new file mode 100755 -index 000000000000..a3f5ff4bdc47 +index 000000000..a3f5ff4bd --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-dram-default-timing.dtsi @@ -0,0 +1,311 @@ @@ -33669,7 +33669,7 @@ index 000000000000..a3f5ff4bdc47 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-evb-android-avb.dts b/arch/arm64/boot/dts/rockchip/rk3328-evb-android-avb.dts new file mode 100755 -index 000000000000..0d72e05e2d59 +index 000000000..0d72e05e2 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-evb-android-avb.dts @@ -0,0 +1,13 @@ @@ -33688,7 +33688,7 @@ index 000000000000..0d72e05e2d59 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-evb-android.dts b/arch/arm64/boot/dts/rockchip/rk3328-evb-android.dts new file mode 100755 -index 000000000000..6d50444a5a1d +index 000000000..6d50444a5 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-evb-android.dts @@ -0,0 +1,34 @@ @@ -33728,7 +33728,7 @@ index 000000000000..6d50444a5a1d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-evb-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-evb-android.dtsi new file mode 100755 -index 000000000000..e050047420a6 +index 000000000..e05004742 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-evb-android.dtsi @@ -0,0 +1,715 @@ @@ -34448,7 +34448,7 @@ index 000000000000..e050047420a6 + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-evb.dts b/arch/arm64/boot/dts/rockchip/rk3328-evb.dts -index a48767931af6..82d2f01a8be6 100644 +index a48767931..82d2f01a8 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-evb.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-evb.dts @@ -37,6 +37,18 @@ sdio_pwrseq: sdio-pwrseq { @@ -34495,7 +34495,7 @@ index a48767931af6..82d2f01a8be6 100644 #gpio-cells = <2>; pinctrl-names = "default"; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts -index 83a0bdbe00d6..1eecad724f04 100644 +index 83a0bdbe0..1eecad724 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts @@ -71,8 +71,8 @@ vcc_io_sdio: sdmmcio-regulator { @@ -34510,7 +34510,7 @@ index 83a0bdbe00d6..1eecad724f04 100644 }; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts -index 22ab5e1d7319..a0c4d321cc0b 100644 +index 22ab5e1d7..a0c4d321c 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts @@ -45,8 +45,8 @@ vcc_sd: sdmmc-regulator { @@ -34526,7 +34526,7 @@ index 22ab5e1d7319..a0c4d321cc0b 100644 regulator-min-microvolt = <1800000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64-android-avb.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64-android-avb.dts new file mode 100755 -index 000000000000..adc1dd7cd4da +index 000000000..adc1dd7cd --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64-android-avb.dts @@ -0,0 +1,32 @@ @@ -34564,7 +34564,7 @@ index 000000000000..adc1dd7cd4da +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64-android.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64-android.dts new file mode 100755 -index 000000000000..66e83916c728 +index 000000000..66e83916c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64-android.dts @@ -0,0 +1,34 @@ @@ -34604,7 +34604,7 @@ index 000000000000..66e83916c728 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-rock64-android.dtsi new file mode 100755 -index 000000000000..3dad4f4fafcb +index 000000000..3dad4f4fa --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64-android.dtsi @@ -0,0 +1,612 @@ @@ -35221,7 +35221,7 @@ index 000000000000..3dad4f4fafcb + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts -index 95ab6928cfd4..4c33c21eee8d 100644 +index 95ab6928c..4c33c21ee 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts @@ -21,6 +21,13 @@ gmac_clkin: external-gmac-clock { @@ -35260,7 +35260,7 @@ index 95ab6928cfd4..4c33c21eee8d 100644 status = "okay"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi -index 72112fe05a5c..a3fcf36f8ecc 100644 +index 72112fe05..a3fcf36f8 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -318,13 +318,13 @@ power: power-controller { @@ -35365,7 +35365,7 @@ index 72112fe05a5c..a3fcf36f8ecc 100644 #interrupt-cells = <3>; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-808-evb.dts b/arch/arm64/boot/dts/rockchip/rk3368-808-evb.dts new file mode 100755 -index 000000000000..7e803a8ed30c +index 000000000..7e803a8ed --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-808-evb.dts @@ -0,0 +1,189 @@ @@ -35560,7 +35560,7 @@ index 000000000000..7e803a8ed30c +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-808.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-808.dtsi new file mode 100755 -index 000000000000..fdea0c73932e +index 000000000..fdea0c739 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-808.dtsi @@ -0,0 +1,982 @@ @@ -36548,7 +36548,7 @@ index 000000000000..fdea0c73932e + diff --git a/arch/arm64/boot/dts/rockchip/rk3368-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-android.dtsi new file mode 100755 -index 000000000000..a3e0bbaaf7c5 +index 000000000..a3e0bbaaf --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-android.dtsi @@ -0,0 +1,357 @@ @@ -36911,7 +36911,7 @@ index 000000000000..a3e0bbaaf7c5 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-cif-sensor.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-cif-sensor.dtsi new file mode 100755 -index 000000000000..7d2aac22c020 +index 000000000..7d2aac22c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-cif-sensor.dtsi @@ -0,0 +1,35 @@ @@ -36952,7 +36952,7 @@ index 000000000000..7d2aac22c020 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-dram-default-timing.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-dram-default-timing.dtsi new file mode 100755 -index 000000000000..10bfbebda989 +index 000000000..10bfbebda --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-dram-default-timing.dtsi @@ -0,0 +1,66 @@ @@ -37024,7 +37024,7 @@ index 000000000000..10bfbebda989 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-p9-avb.dts b/arch/arm64/boot/dts/rockchip/rk3368-p9-avb.dts new file mode 100755 -index 000000000000..6a971781032a +index 000000000..6a9717810 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-p9-avb.dts @@ -0,0 +1,35 @@ @@ -37065,7 +37065,7 @@ index 000000000000..6a971781032a +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-p9.dts b/arch/arm64/boot/dts/rockchip/rk3368-p9.dts new file mode 100755 -index 000000000000..29658be08696 +index 000000000..29658be08 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-p9.dts @@ -0,0 +1,34 @@ @@ -37105,7 +37105,7 @@ index 000000000000..29658be08696 + diff --git a/arch/arm64/boot/dts/rockchip/rk3368-p9.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-p9.dtsi new file mode 100755 -index 000000000000..7eeb9db4f13b +index 000000000..7eeb9db4f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-p9.dtsi @@ -0,0 +1,841 @@ @@ -37952,7 +37952,7 @@ index 000000000000..7eeb9db4f13b + diff --git a/arch/arm64/boot/dts/rockchip/rk3368-px5-evb-android.dts b/arch/arm64/boot/dts/rockchip/rk3368-px5-evb-android.dts new file mode 100755 -index 000000000000..1d50d3fa549f +index 000000000..1d50d3fa5 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-px5-evb-android.dts @@ -0,0 +1,993 @@ @@ -38951,7 +38951,7 @@ index 000000000000..1d50d3fa549f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-r88-dcdc.dts b/arch/arm64/boot/dts/rockchip/rk3368-r88-dcdc.dts new file mode 100755 -index 000000000000..4a755f1207c1 +index 000000000..4a755f120 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-r88-dcdc.dts @@ -0,0 +1,676 @@ @@ -39633,7 +39633,7 @@ index 000000000000..4a755f1207c1 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-sheep-lvds.dts b/arch/arm64/boot/dts/rockchip/rk3368-sheep-lvds.dts new file mode 100755 -index 000000000000..b7b11f895cab +index 000000000..b7b11f895 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-sheep-lvds.dts @@ -0,0 +1,662 @@ @@ -40301,7 +40301,7 @@ index 000000000000..b7b11f895cab +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-sheep.dts b/arch/arm64/boot/dts/rockchip/rk3368-sheep.dts new file mode 100755 -index 000000000000..b9b6b24ff37b +index 000000000..b9b6b24ff --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-sheep.dts @@ -0,0 +1,746 @@ @@ -41053,7 +41053,7 @@ index 000000000000..b9b6b24ff37b +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-sziauto-rk618.dts b/arch/arm64/boot/dts/rockchip/rk3368-sziauto-rk618.dts new file mode 100755 -index 000000000000..eff7c2fed990 +index 000000000..eff7c2fed --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-sziauto-rk618.dts @@ -0,0 +1,808 @@ @@ -41867,7 +41867,7 @@ index 000000000000..eff7c2fed990 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-tablet.dts b/arch/arm64/boot/dts/rockchip/rk3368-tablet.dts new file mode 100755 -index 000000000000..d7dc6d67e242 +index 000000000..d7dc6d67e --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-tablet.dts @@ -0,0 +1,1070 @@ @@ -42943,7 +42943,7 @@ index 000000000000..d7dc6d67e242 + diff --git a/arch/arm64/boot/dts/rockchip/rk3368-xikp-avb.dts b/arch/arm64/boot/dts/rockchip/rk3368-xikp-avb.dts new file mode 100755 -index 000000000000..b455e32c3e29 +index 000000000..b455e32c3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-xikp-avb.dts @@ -0,0 +1,139 @@ @@ -43088,7 +43088,7 @@ index 000000000000..b455e32c3e29 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-xikp.dts b/arch/arm64/boot/dts/rockchip/rk3368-xikp.dts new file mode 100755 -index 000000000000..bc320ffdc3b7 +index 000000000..bc320ffdc --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-xikp.dts @@ -0,0 +1,33 @@ @@ -43128,7 +43128,7 @@ index 000000000000..bc320ffdc3b7 \ No newline at end of file diff --git a/arch/arm64/boot/dts/rockchip/rk3368-xikp.dtsi b/arch/arm64/boot/dts/rockchip/rk3368-xikp.dtsi new file mode 100755 -index 000000000000..aa73096aff9d +index 000000000..aa73096af --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368-xikp.dtsi @@ -0,0 +1,893 @@ @@ -44026,7 +44026,7 @@ index 000000000000..aa73096aff9d +}; + diff --git a/arch/arm64/boot/dts/rockchip/rk3368.dtsi b/arch/arm64/boot/dts/rockchip/rk3368.dtsi -index 3746f23dc3df..e962c7962789 100644 +index 3746f23dc..e962c7962 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3368.dtsi @@ -562,7 +562,7 @@ pwm0: pwm@ff680000 { @@ -44093,7 +44093,7 @@ index 3746f23dc3df..e962c7962789 100644 diff --git a/arch/arm64/boot/dts/rockchip/rk3368a-817-tablet-bnd.dts b/arch/arm64/boot/dts/rockchip/rk3368a-817-tablet-bnd.dts new file mode 100755 -index 000000000000..0a489bf8fc84 +index 000000000..0a489bf8f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368a-817-tablet-bnd.dts @@ -0,0 +1,1074 @@ @@ -45173,7 +45173,7 @@ index 000000000000..0a489bf8fc84 + diff --git a/arch/arm64/boot/dts/rockchip/rk3368a-817-tablet.dts b/arch/arm64/boot/dts/rockchip/rk3368a-817-tablet.dts new file mode 100755 -index 000000000000..31f25e44504d +index 000000000..31f25e445 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3368a-817-tablet.dts @@ -0,0 +1,1333 @@ @@ -46512,7 +46512,7 @@ index 000000000000..31f25e44504d + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi new file mode 100755 -index 000000000000..ffaa92b7a89e +index 000000000..ffaa92b7a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi @@ -0,0 +1,339 @@ @@ -46857,7 +46857,7 @@ index 000000000000..ffaa92b7a89e + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-box-rev1.dts b/arch/arm64/boot/dts/rockchip/rk3399-box-rev1.dts new file mode 100755 -index 000000000000..c4572da2ec87 +index 000000000..c4572da2e --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-box-rev1.dts @@ -0,0 +1,134 @@ @@ -46997,7 +46997,7 @@ index 000000000000..c4572da2ec87 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-box-rev2.dts b/arch/arm64/boot/dts/rockchip/rk3399-box-rev2.dts new file mode 100755 -index 000000000000..1c9b884736b1 +index 000000000..1c9b88473 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-box-rev2.dts @@ -0,0 +1,158 @@ @@ -47161,7 +47161,7 @@ index 000000000000..1c9b884736b1 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-box.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-box.dtsi new file mode 100755 -index 000000000000..704e0df4e122 +index 000000000..704e0df4e --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-box.dtsi @@ -0,0 +1,891 @@ @@ -48058,7 +48058,7 @@ index 000000000000..704e0df4e122 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-dram-default-timing.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-dram-default-timing.dtsi new file mode 100755 -index 000000000000..981777b82329 +index 000000000..981777b82 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-dram-default-timing.dtsi @@ -0,0 +1,80 @@ @@ -48144,7 +48144,7 @@ index 000000000000..981777b82329 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-early-opp.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-early-opp.dtsi new file mode 100755 -index 000000000000..2a675ec7c342 +index 000000000..2a675ec7c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-early-opp.dtsi @@ -0,0 +1,127 @@ @@ -48277,7 +48277,7 @@ index 000000000000..2a675ec7c342 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-cros.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-evb-cros.dtsi new file mode 100755 -index 000000000000..4cac4981b267 +index 000000000..4cac4981b --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-cros.dtsi @@ -0,0 +1,181 @@ @@ -48464,7 +48464,7 @@ index 000000000000..4cac4981b267 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-android-avb.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-android-avb.dts new file mode 100755 -index 000000000000..343a9fc389e1 +index 000000000..343a9fc38 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-android-avb.dts @@ -0,0 +1,389 @@ @@ -48859,7 +48859,7 @@ index 000000000000..343a9fc389e1 + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-android.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-android.dts new file mode 100755 -index 000000000000..72aa97affa99 +index 000000000..72aa97aff --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-android.dts @@ -0,0 +1,157 @@ @@ -49022,7 +49022,7 @@ index 000000000000..72aa97affa99 + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-linux.dts new file mode 100755 -index 000000000000..5b6b7131fdd1 +index 000000000..5b6b7131f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-linux.dts @@ -0,0 +1,321 @@ @@ -49349,7 +49349,7 @@ index 000000000000..5b6b7131fdd1 + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-v13-android-avb.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-v13-android-avb.dts new file mode 100755 -index 000000000000..8439d91dd125 +index 000000000..8439d91dd --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-v13-android-avb.dts @@ -0,0 +1,425 @@ @@ -49780,7 +49780,7 @@ index 000000000000..8439d91dd125 + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dtsi new file mode 100755 -index 000000000000..dc821a2d45c4 +index 000000000..dc821a2d4 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dtsi @@ -0,0 +1,1430 @@ @@ -51216,7 +51216,7 @@ index 000000000000..dc821a2d45c4 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1-android.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1-android.dts new file mode 100755 -index 000000000000..bb7ddac77f23 +index 000000000..bb7ddac77 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1-android.dts @@ -0,0 +1,145 @@ @@ -51367,7 +51367,7 @@ index 000000000000..bb7ddac77f23 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1-cros.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1-cros.dts new file mode 100755 -index 000000000000..bf27556295ec +index 000000000..bf2755629 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1-cros.dts @@ -0,0 +1,51 @@ @@ -51424,7 +51424,7 @@ index 000000000000..bf27556295ec +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1.dtsi new file mode 100755 -index 000000000000..f35d6ee56072 +index 000000000..f35d6ee56 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev1.dtsi @@ -0,0 +1,352 @@ @@ -51782,7 +51782,7 @@ index 000000000000..f35d6ee56072 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2-android.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2-android.dts new file mode 100755 -index 000000000000..b15fb8a9d088 +index 000000000..b15fb8a9d --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2-android.dts @@ -0,0 +1,156 @@ @@ -51944,7 +51944,7 @@ index 000000000000..b15fb8a9d088 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2-cros.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2-cros.dts new file mode 100755 -index 000000000000..2daf9f1235f3 +index 000000000..2daf9f123 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2-cros.dts @@ -0,0 +1,51 @@ @@ -52001,7 +52001,7 @@ index 000000000000..2daf9f1235f3 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2.dtsi new file mode 100755 -index 000000000000..4b23c1fcadd8 +index 000000000..4b23c1fca --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev2.dtsi @@ -0,0 +1,366 @@ @@ -52373,7 +52373,7 @@ index 000000000000..4b23c1fcadd8 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-edp.dts new file mode 100755 -index 000000000000..7f730f5633dd +index 000000000..7f730f563 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-edp.dts @@ -0,0 +1,126 @@ @@ -52505,7 +52505,7 @@ index 000000000000..7f730f5633dd +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-lp4.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-lp4.dts new file mode 100755 -index 000000000000..85f4356a0030 +index 000000000..85f4356a0 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-lp4.dts @@ -0,0 +1,233 @@ @@ -52744,7 +52744,7 @@ index 000000000000..85f4356a0030 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-mipi-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-mipi-edp.dts new file mode 100755 -index 000000000000..fffd92f00ff4 +index 000000000..fffd92f00 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android-mipi-edp.dts @@ -0,0 +1,300 @@ @@ -53050,7 +53050,7 @@ index 000000000000..fffd92f00ff4 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android.dts new file mode 100755 -index 000000000000..9ba1b0381fed +index 000000000..9ba1b0381 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-android.dts @@ -0,0 +1,176 @@ @@ -53232,7 +53232,7 @@ index 000000000000..9ba1b0381fed +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-cros.dts b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-cros.dts new file mode 100755 -index 000000000000..e1bb5f129680 +index 000000000..e1bb5f129 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3-cros.dts @@ -0,0 +1,51 @@ @@ -53289,7 +53289,7 @@ index 000000000000..e1bb5f129680 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3.dtsi new file mode 100755 -index 000000000000..e34379ded3a5 +index 000000000..e34379ded --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-rev3.dtsi @@ -0,0 +1,353 @@ @@ -53648,7 +53648,7 @@ index 000000000000..e34379ded3a5 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-evb.dtsi new file mode 100755 -index 000000000000..aa8ea436ae9b +index 000000000..aa8ea436a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb.dtsi @@ -0,0 +1,646 @@ @@ -54300,7 +54300,7 @@ index 000000000000..aa8ea436ae9b + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-excavator-sapphire.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-excavator-sapphire.dtsi new file mode 100755 -index 000000000000..adbda6ba4e0d +index 000000000..adbda6ba4 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-excavator-sapphire.dtsi @@ -0,0 +1,324 @@ @@ -54630,7 +54630,7 @@ index 000000000000..adbda6ba4e0d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-android.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-android.dts new file mode 100755 -index 000000000000..c372ade536f2 +index 000000000..c372ade53 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-android.dts @@ -0,0 +1,1102 @@ @@ -55738,7 +55738,7 @@ index 000000000000..c372ade536f2 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts new file mode 100755 -index 000000000000..5a023389a033 +index 000000000..5a023389a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts @@ -0,0 +1,1074 @@ @@ -56818,7 +56818,7 @@ index 000000000000..5a023389a033 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-fpga.dts b/arch/arm64/boot/dts/rockchip/rk3399-fpga.dts new file mode 100755 -index 000000000000..1192dfa42940 +index 000000000..1192dfa42 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-fpga.dts @@ -0,0 +1,64 @@ @@ -56888,7 +56888,7 @@ index 000000000000..1192dfa42940 + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-gru.dts b/arch/arm64/boot/dts/rockchip/rk3399-gru-gru.dts new file mode 100755 -index 000000000000..e8d771e2b90e +index 000000000..e8d771e2b --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-gru-gru.dts @@ -0,0 +1,165 @@ @@ -57059,7 +57059,7 @@ index 000000000000..e8d771e2b90e +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-kevin-r0.dts b/arch/arm64/boot/dts/rockchip/rk3399-gru-kevin-r0.dts new file mode 100755 -index 000000000000..7a1c36e981d5 +index 000000000..7a1c36e98 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-gru-kevin-r0.dts @@ -0,0 +1,118 @@ @@ -57183,7 +57183,7 @@ index 000000000000..7a1c36e981d5 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-kevin-r1.dts b/arch/arm64/boot/dts/rockchip/rk3399-gru-kevin-r1.dts new file mode 100755 -index 000000000000..44b04e1606fc +index 000000000..44b04e160 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-gru-kevin-r1.dts @@ -0,0 +1,85 @@ @@ -57273,7 +57273,7 @@ index 000000000000..44b04e1606fc + }; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi -index e9ecffc409c0..60cd1c18cd4e 100644 +index e9ecffc40..60cd1c18c 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi @@ -245,7 +245,7 @@ &ppvar_gpu_pwm { @@ -57286,7 +57286,7 @@ index e9ecffc409c0..60cd1c18cd4e 100644 }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi -index fb0a13cad6c9..1ce91e36aa49 100644 +index fb0a13cad..1ce91e36a 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi @@ -247,8 +247,8 @@ ppvar_sd_card_io: ppvar-sd-card-io { @@ -57302,7 +57302,7 @@ index fb0a13cad6c9..1ce91e36aa49 100644 regulator-max-microvolt = <3000000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-linux.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-linux.dtsi new file mode 100755 -index 000000000000..0549701d615e +index 000000000..0549701d6 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-linux.dtsi @@ -0,0 +1,306 @@ @@ -57614,7 +57614,7 @@ index 000000000000..0549701d615e +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-mid-818-android.dts b/arch/arm64/boot/dts/rockchip/rk3399-mid-818-android.dts new file mode 100755 -index 000000000000..8610539ef284 +index 000000000..8610539ef --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-mid-818-android.dts @@ -0,0 +1,1121 @@ @@ -58740,7 +58740,7 @@ index 000000000000..8610539ef284 + assigned-clock-parents = <&cru PLL_VPLL>; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi -index d6f1095abb04..f9f2cc8abec7 100644 +index d6f1095ab..f9f2cc8ab 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi @@ -3,35 +3,99 @@ @@ -59138,7 +59138,7 @@ index d6f1095abb04..f9f2cc8abec7 100644 &gpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi -index 35b7ab3bf10c..20309076dbac 100644 +index 35b7ab3bf..20309076d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi @@ -384,7 +384,6 @@ regulator-state-mem { @@ -59160,7 +59160,7 @@ index 35b7ab3bf10c..20309076dbac 100644 regulator-state-mem { diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock960-ab.dts b/arch/arm64/boot/dts/rockchip/rk3399-rock960-ab.dts new file mode 100755 -index 000000000000..86e45dc0074d +index 000000000..86e45dc00 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock960-ab.dts @@ -0,0 +1,1088 @@ @@ -60253,7 +60253,7 @@ index 000000000000..86e45dc0074d + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dts b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dts -index c88295782e7b..1a23e8f3cdf6 100644 +index c88295782..1a23e8f3c 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dts @@ -63,6 +63,20 @@ bt_active_led: led-6 { @@ -60325,7 +60325,7 @@ index c88295782e7b..1a23e8f3cdf6 100644 }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-box.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-box.dts new file mode 100755 -index 000000000000..3106512b87cd +index 000000000..3106512b8 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-box.dts @@ -0,0 +1,181 @@ @@ -60512,7 +60512,7 @@ index 000000000000..3106512b87cd +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dts new file mode 100755 -index 000000000000..3e9ef7b0773b +index 000000000..3e9ef7b07 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp-avb.dts @@ -0,0 +1,128 @@ @@ -60646,7 +60646,7 @@ index 000000000000..3e9ef7b0773b + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts new file mode 100755 -index 000000000000..c2f8673198d5 +index 000000000..c2f867319 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts @@ -0,0 +1,82 @@ @@ -60734,7 +60734,7 @@ index 000000000000..c2f8673198d5 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dtsi new file mode 100755 -index 000000000000..8156e5f7c795 +index 000000000..8156e5f7c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dtsi @@ -0,0 +1,488 @@ @@ -61228,7 +61228,7 @@ index 000000000000..8156e5f7c795 + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-linux-for-rk1808-cascade.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-linux-for-rk1808-cascade.dts new file mode 100755 -index 000000000000..e1e482938481 +index 000000000..e1e482938 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-linux-for-rk1808-cascade.dts @@ -0,0 +1,487 @@ @@ -61721,7 +61721,7 @@ index 000000000000..e1e482938481 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-linux.dts new file mode 100755 -index 000000000000..9f370a7bff1c +index 000000000..9f370a7bf --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-linux.dts @@ -0,0 +1,452 @@ @@ -62179,7 +62179,7 @@ index 000000000000..9f370a7bff1c +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-lp4-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-lp4-linux.dts new file mode 100755 -index 000000000000..da471a636103 +index 000000000..da471a636 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-lp4-linux.dts @@ -0,0 +1,497 @@ @@ -62681,7 +62681,7 @@ index 000000000000..da471a636103 + }; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi -index 701a567d7638..3d9e27750139 100644 +index 701a567d7..3d9e27750 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi @@ -515,6 +515,8 @@ &pwm0 { @@ -62695,7 +62695,7 @@ index 701a567d7638..3d9e27750139 100644 &saradc { diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sched-energy.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-sched-energy.dtsi new file mode 100755 -index 000000000000..373a776b9207 +index 000000000..373a776b9 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-sched-energy.dtsi @@ -0,0 +1,121 @@ @@ -62822,7 +62822,7 @@ index 000000000000..373a776b9207 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-tve1030g-avb.dts b/arch/arm64/boot/dts/rockchip/rk3399-tve1030g-avb.dts new file mode 100755 -index 000000000000..eeca9cf54373 +index 000000000..eeca9cf54 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-tve1030g-avb.dts @@ -0,0 +1,170 @@ @@ -62998,7 +62998,7 @@ index 000000000000..eeca9cf54373 + diff --git a/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dts b/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dts new file mode 100755 -index 000000000000..28f81ee8f7f5 +index 000000000..28f81ee8f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dts @@ -0,0 +1,42 @@ @@ -63046,7 +63046,7 @@ index 000000000000..28f81ee8f7f5 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi new file mode 100755 -index 000000000000..fb700431e356 +index 000000000..fb700431e --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi @@ -0,0 +1,1039 @@ @@ -64091,7 +64091,7 @@ index 000000000000..fb700431e356 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts b/arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts new file mode 100755 -index 000000000000..ac9d28db5b76 +index 000000000..ac9d28db5 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts @@ -0,0 +1,1179 @@ @@ -65276,7 +65276,7 @@ index 000000000000..ac9d28db5b76 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-videostrong-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-videostrong-linux.dts new file mode 100755 -index 000000000000..10ba2048483d +index 000000000..10ba20484 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-videostrong-linux.dts @@ -0,0 +1,293 @@ @@ -65575,7 +65575,7 @@ index 000000000000..10ba2048483d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-vop-clk-set.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-vop-clk-set.dtsi new file mode 100755 -index 000000000000..5ed8dac6cf7d +index 000000000..5ed8dac6c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-vop-clk-set.dtsi @@ -0,0 +1,181 @@ @@ -65761,7 +65761,7 @@ index 000000000000..5ed8dac6cf7d +#endif + diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi -index c5f3d4f8f4d2..7f4a812f4337 100644 +index 3180f576e..b6217e336 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -9,8 +9,13 @@ @@ -65957,8 +65957,8 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 + pd_vdu@RK3399_PD_VDU { reg = ; clocks = <&cru ACLK_VDU>, - <&cru HCLK_VDU>; -@@ -1028,94 +1029,94 @@ power-domain@RK3399_PD_VDU { + <&cru HCLK_VDU>, +@@ -1030,94 +1031,94 @@ power-domain@RK3399_PD_VDU { }; /* These power domains are grouped by VD_GPU */ @@ -66069,7 +66069,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 reg = ; clocks = <&cru ACLK_VOP1>, <&cru HCLK_VOP1>; -@@ -1134,6 +1135,33 @@ pmu_io_domains: io-domains { +@@ -1136,6 +1137,33 @@ pmu_io_domains: io-domains { compatible = "rockchip,rk3399-pmu-io-voltage-domain"; status = "disabled"; }; @@ -66103,7 +66103,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; spi3: spi@ff350000 { -@@ -1211,7 +1239,7 @@ pwm0: pwm@ff420000 { +@@ -1213,7 +1241,7 @@ pwm0: pwm@ff420000 { compatible = "rockchip,rk3399-pwm", "rockchip,rk3288-pwm"; reg = <0x0 0xff420000 0x0 0x10>; #pwm-cells = <3>; @@ -66112,7 +66112,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 pinctrl-0 = <&pwm0_pin>; clocks = <&pmucru PCLK_RKPWM_PMU>; clock-names = "pwm"; -@@ -1222,7 +1250,7 @@ pwm1: pwm@ff420010 { +@@ -1224,7 +1252,7 @@ pwm1: pwm@ff420010 { compatible = "rockchip,rk3399-pwm", "rockchip,rk3288-pwm"; reg = <0x0 0xff420010 0x0 0x10>; #pwm-cells = <3>; @@ -66121,7 +66121,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 pinctrl-0 = <&pwm1_pin>; clocks = <&pmucru PCLK_RKPWM_PMU>; clock-names = "pwm"; -@@ -1233,7 +1261,7 @@ pwm2: pwm@ff420020 { +@@ -1235,7 +1263,7 @@ pwm2: pwm@ff420020 { compatible = "rockchip,rk3399-pwm", "rockchip,rk3288-pwm"; reg = <0x0 0xff420020 0x0 0x10>; #pwm-cells = <3>; @@ -66130,7 +66130,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 pinctrl-0 = <&pwm2_pin>; clocks = <&pmucru PCLK_RKPWM_PMU>; clock-names = "pwm"; -@@ -1244,13 +1272,32 @@ pwm3: pwm@ff420030 { +@@ -1246,13 +1274,32 @@ pwm3: pwm@ff420030 { compatible = "rockchip,rk3399-pwm", "rockchip,rk3288-pwm"; reg = <0x0 0xff420030 0x0 0x10>; #pwm-cells = <3>; @@ -66164,7 +66164,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 vpu: video-codec@ff650000 { compatible = "rockchip,rk3399-vpu"; reg = <0x0 0xff650000 0x0 0x800>; -@@ -1296,6 +1343,20 @@ vdec_mmu: iommu@ff660480 { +@@ -1298,6 +1345,20 @@ vdec_mmu: iommu@ff660480 { #iommu-cells = <0>; }; @@ -66185,7 +66185,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 iep_mmu: iommu@ff670800 { compatible = "rockchip,iommu"; reg = <0x0 0xff670800 0x0 0x40>; -@@ -1327,6 +1388,10 @@ efuse0: efuse@ff690000 { +@@ -1329,6 +1390,10 @@ efuse0: efuse@ff690000 { clock-names = "pclk_efuse"; /* Data cells */ @@ -66196,7 +66196,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 cpu_id: cpu-id@7 { reg = <0x07 0x10>; }; -@@ -1348,6 +1413,10 @@ logic_leakage: logic-leakage@1b { +@@ -1350,6 +1415,10 @@ logic_leakage: logic-leakage@1b { wafer_info: wafer-info@1c { reg = <0x1c 0x1>; }; @@ -66207,7 +66207,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; pmucru: pmu-clock-controller@ff750000 { -@@ -1485,6 +1554,42 @@ pcie_phy: pcie-phy { +@@ -1487,6 +1556,42 @@ pcie_phy: pcie-phy { reset-names = "phy"; status = "disabled"; }; @@ -66250,7 +66250,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; tcphy0: phy@ff7c0000 { -@@ -1611,6 +1716,16 @@ i2s2: i2s@ff8a0000 { +@@ -1613,6 +1718,16 @@ i2s2: i2s@ff8a0000 { status = "disabled"; }; @@ -66267,7 +66267,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 vopl: vop@ff8f0000 { compatible = "rockchip,rk3399-vop-lit"; reg = <0x0 0xff8f0000 0x0 0x3efc>; -@@ -1656,6 +1771,17 @@ vopl_out_dp: endpoint@4 { +@@ -1658,6 +1773,17 @@ vopl_out_dp: endpoint@4 { }; }; @@ -66285,7 +66285,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 vopl_mmu: iommu@ff8f3f00 { compatible = "rockchip,iommu"; reg = <0x0 0xff8f3f00 0x0 0x100>; -@@ -1713,6 +1839,17 @@ vopb_out_dp: endpoint@4 { +@@ -1715,6 +1841,17 @@ vopb_out_dp: endpoint@4 { }; }; @@ -66303,7 +66303,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 vopb_mmu: iommu@ff903f00 { compatible = "rockchip,iommu"; reg = <0x0 0xff903f00 0x0 0x100>; -@@ -1915,7 +2052,95 @@ gpu: gpu@ff9a0000 { +@@ -1917,7 +2054,95 @@ gpu: gpu@ff9a0000 { clocks = <&cru ACLK_GPU>; #cooling-cells = <2>; power-domains = <&power RK3399_PD_GPU>; @@ -66399,7 +66399,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; pinctrl: pinctrl { -@@ -2179,6 +2404,13 @@ i2c3_xfer: i2c3-xfer { +@@ -2181,6 +2406,13 @@ i2c3_xfer: i2c3-xfer { <4 RK_PC1 1 &pcfg_pull_none>, <4 RK_PC0 1 &pcfg_pull_none>; }; @@ -66413,7 +66413,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; i2c4 { -@@ -2342,7 +2574,7 @@ sdmmc_wp: sdmmc-wp { +@@ -2344,7 +2576,7 @@ sdmmc_wp: sdmmc-wp { }; }; @@ -66422,7 +66422,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 ap_pwroff: ap-pwroff { rockchip,pins = <1 RK_PA5 1 &pcfg_pull_none>; }; -@@ -2644,6 +2876,11 @@ pwm3a_pin: pwm3a-pin { +@@ -2646,6 +2878,11 @@ pwm3a_pin: pwm3a-pin { rockchip,pins = <0 RK_PA6 1 &pcfg_pull_none>; }; @@ -66434,7 +66434,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; pwm3b { -@@ -2651,6 +2888,11 @@ pwm3b_pin: pwm3b-pin { +@@ -2653,6 +2890,11 @@ pwm3b_pin: pwm3b-pin { rockchip,pins = <1 RK_PB6 1 &pcfg_pull_none>; }; @@ -66446,7 +66446,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; hdmi { -@@ -2679,4 +2921,27 @@ pcie_clkreqnb_cpm: pci-clkreqnb-cpm { +@@ -2681,4 +2923,27 @@ pcie_clkreqnb_cpm: pci-clkreqnb-cpm { }; }; @@ -66476,7 +66476,7 @@ index c5f3d4f8f4d2..7f4a812f4337 100644 }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399k-opp.dtsi b/arch/arm64/boot/dts/rockchip/rk3399k-opp.dtsi new file mode 100755 -index 000000000000..59f200e0b9cb +index 000000000..59f200e0b --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399k-opp.dtsi @@ -0,0 +1,24 @@ @@ -66506,7 +66506,7 @@ index 000000000000..59f200e0b9cb +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-evb-lp4-v11-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-lp4-v11-linux.dts new file mode 100755 -index 000000000000..f975f47b76d6 +index 000000000..f975f47b7 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-lp4-v11-linux.dts @@ -0,0 +1,1293 @@ @@ -67805,7 +67805,7 @@ index 000000000000..f975f47b76d6 +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v10-linux.dts new file mode 100755 -index 000000000000..08ac2a477852 +index 000000000..08ac2a477 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v10-linux.dts @@ -0,0 +1,1203 @@ @@ -69014,7 +69014,7 @@ index 000000000000..08ac2a477852 +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v10.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v10.dts new file mode 100755 -index 000000000000..398f962114cf +index 000000000..398f96211 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v10.dts @@ -0,0 +1,1061 @@ @@ -70081,7 +70081,7 @@ index 000000000000..398f962114cf +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v11-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v11-linux.dts new file mode 100755 -index 000000000000..c3faaa1ba4d3 +index 000000000..c3faaa1ba --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v11-linux.dts @@ -0,0 +1,1223 @@ @@ -71310,7 +71310,7 @@ index 000000000000..c3faaa1ba4d3 +/* DON'T PUT ANYTHING BELOW HERE. PUT IT ABOVE PINCTRL */ diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v11.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v11.dts new file mode 100755 -index 000000000000..7d118a783353 +index 000000000..7d118a783 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v11.dts @@ -0,0 +1,1045 @@ @@ -72361,7 +72361,7 @@ index 000000000000..7d118a783353 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v14-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v14-linux.dts new file mode 100755 -index 000000000000..4f8546eb80bf +index 000000000..4f8546eb8 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-evb-v14-linux.dts @@ -0,0 +1,247 @@ @@ -72614,7 +72614,7 @@ index 000000000000..4f8546eb80bf +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-npu-evb-v10.dts b/arch/arm64/boot/dts/rockchip/rk3399pro-npu-evb-v10.dts new file mode 100755 -index 000000000000..96a3fb56cfe5 +index 000000000..96a3fb56c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-npu-evb-v10.dts @@ -0,0 +1,140 @@ @@ -72760,7 +72760,7 @@ index 000000000000..96a3fb56cfe5 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-npu.dtsi b/arch/arm64/boot/dts/rockchip/rk3399pro-npu.dtsi new file mode 100755 -index 000000000000..3f176b3bc94f +index 000000000..3f176b3bc --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-npu.dtsi @@ -0,0 +1,826 @@ @@ -73592,7 +73592,7 @@ index 000000000000..3f176b3bc94f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dts b/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dts new file mode 100755 -index 000000000000..1bd285bfc695 +index 000000000..1bd285bfc --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dts @@ -0,0 +1,15 @@ @@ -73613,7 +73613,7 @@ index 000000000000..1bd285bfc695 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi new file mode 100755 -index 000000000000..41ac0af11188 +index 000000000..41ac0af11 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi @@ -0,0 +1,528 @@ @@ -74147,7 +74147,7 @@ index 000000000000..41ac0af11188 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-box.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-box.dtsi new file mode 100755 -index 000000000000..f0feae6730e3 +index 000000000..f0feae673 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-box.dtsi @@ -0,0 +1,436 @@ @@ -74589,7 +74589,7 @@ index 000000000000..f0feae6730e3 + diff --git a/arch/arm64/boot/dts/rockchip/rk3566-eink.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-eink.dtsi new file mode 100755 -index 000000000000..09791eb16abf +index 000000000..09791eb16 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-eink.dtsi @@ -0,0 +1,100 @@ @@ -74695,7 +74695,7 @@ index 000000000000..09791eb16abf + diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb-mipitest-v10.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb-mipitest-v10.dts new file mode 100755 -index 000000000000..3f215884a070 +index 000000000..3f215884a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb-mipitest-v10.dts @@ -0,0 +1,7 @@ @@ -74708,7 +74708,7 @@ index 000000000000..3f215884a070 +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb-mipitest-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-evb-mipitest-v10.dtsi new file mode 100755 -index 000000000000..227bc4e39d99 +index 000000000..227bc4e39 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb-mipitest-v10.dtsi @@ -0,0 +1,507 @@ @@ -75221,7 +75221,7 @@ index 000000000000..227bc4e39d99 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-evb.dtsi new file mode 100755 -index 000000000000..d1aa123cd347 +index 000000000..d1aa123cd --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb.dtsi @@ -0,0 +1,7 @@ @@ -75234,7 +75234,7 @@ index 000000000000..d1aa123cd347 +#include "rk3568-evb.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10-linux.dts new file mode 100755 -index 000000000000..a22cc8cec6af +index 000000000..a22cc8cec --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10-linux.dts @@ -0,0 +1,13 @@ @@ -75253,7 +75253,7 @@ index 000000000000..a22cc8cec6af +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10-lvds.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10-lvds.dts new file mode 100755 -index 000000000000..98a384041b8b +index 000000000..98a384041 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10-lvds.dts @@ -0,0 +1,99 @@ @@ -75358,7 +75358,7 @@ index 000000000000..98a384041b8b +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10.dts new file mode 100755 -index 000000000000..f602ed98d7ce +index 000000000..f602ed98d --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10.dts @@ -0,0 +1,7 @@ @@ -75371,7 +75371,7 @@ index 000000000000..f602ed98d7ce +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10.dtsi new file mode 100755 -index 000000000000..385933be9f45 +index 000000000..385933be9 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb1-ddr4-v10.dtsi @@ -0,0 +1,489 @@ @@ -75866,7 +75866,7 @@ index 000000000000..385933be9f45 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-eink.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-eink.dts new file mode 100755 -index 000000000000..83546eef6529 +index 000000000..83546eef6 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-eink.dts @@ -0,0 +1,345 @@ @@ -76217,7 +76217,7 @@ index 000000000000..83546eef6529 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-i2s-mic-array.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-i2s-mic-array.dts new file mode 100755 -index 000000000000..5ba1318bcee1 +index 000000000..5ba1318bc --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-i2s-mic-array.dts @@ -0,0 +1,102 @@ @@ -76325,7 +76325,7 @@ index 000000000000..5ba1318bcee1 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-linux.dts new file mode 100755 -index 000000000000..957a99b168bb +index 000000000..957a99b16 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-linux.dts @@ -0,0 +1,8 @@ @@ -76339,7 +76339,7 @@ index 000000000000..957a99b168bb +#include "rk3568-linux.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-pdm-mic-array.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-pdm-mic-array.dts new file mode 100755 -index 000000000000..55e9679194cb +index 000000000..55e967919 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-pdm-mic-array.dts @@ -0,0 +1,111 @@ @@ -76456,7 +76456,7 @@ index 000000000000..55e9679194cb + diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dts new file mode 100755 -index 000000000000..3b36bdba12b6 +index 000000000..3b36bdba1 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dts @@ -0,0 +1,8 @@ @@ -76470,7 +76470,7 @@ index 000000000000..3b36bdba12b6 +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dtsi new file mode 100755 -index 000000000000..4a6bec70f33e +index 000000000..4a6bec70f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10.dtsi @@ -0,0 +1,599 @@ @@ -77075,7 +77075,7 @@ index 000000000000..4a6bec70f33e +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10-linux.dts new file mode 100755 -index 000000000000..e292b0dd1846 +index 000000000..e292b0dd1 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10-linux.dts @@ -0,0 +1,8 @@ @@ -77089,7 +77089,7 @@ index 000000000000..e292b0dd1846 +#include "rk3568-linux.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10.dts new file mode 100755 -index 000000000000..09f5260fb375 +index 000000000..09f5260fb --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10.dts @@ -0,0 +1,8 @@ @@ -77103,7 +77103,7 @@ index 000000000000..09f5260fb375 +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10.dtsi new file mode 100755 -index 000000000000..f936cc186cfb +index 000000000..f936cc186 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb3-ddr3-v10.dtsi @@ -0,0 +1,499 @@ @@ -77608,7 +77608,7 @@ index 000000000000..f936cc186cfb +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb5-lp4x-v10.dts b/arch/arm64/boot/dts/rockchip/rk3566-evb5-lp4x-v10.dts new file mode 100755 -index 000000000000..600fc3c39586 +index 000000000..600fc3c39 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb5-lp4x-v10.dts @@ -0,0 +1,7 @@ @@ -77621,7 +77621,7 @@ index 000000000000..600fc3c39586 +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3566-evb5-lp4x-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-evb5-lp4x-v10.dtsi new file mode 100755 -index 000000000000..83586659530d +index 000000000..835866595 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-evb5-lp4x-v10.dtsi @@ -0,0 +1,317 @@ @@ -77944,7 +77944,7 @@ index 000000000000..83586659530d +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink-w103.dts b/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink-w103.dts new file mode 100755 -index 000000000000..3f559fca27f8 +index 000000000..3f559fca2 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink-w103.dts @@ -0,0 +1,1115 @@ @@ -79065,7 +79065,7 @@ index 000000000000..3f559fca27f8 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink-w6.dts b/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink-w6.dts new file mode 100755 -index 000000000000..2e6d3160aa16 +index 000000000..2e6d3160a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink-w6.dts @@ -0,0 +1,968 @@ @@ -80039,7 +80039,7 @@ index 000000000000..2e6d3160aa16 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink.dts b/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink.dts new file mode 100755 -index 000000000000..50412b44bb71 +index 000000000..50412b44b --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-rk817-eink.dts @@ -0,0 +1,957 @@ @@ -81002,7 +81002,7 @@ index 000000000000..50412b44bb71 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-k108.dts b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-k108.dts new file mode 100755 -index 000000000000..f6f4534aad50 +index 000000000..f6f4534aa --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-k108.dts @@ -0,0 +1,1307 @@ @@ -82315,7 +82315,7 @@ index 000000000000..f6f4534aad50 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-rkg11.dts b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-rkg11.dts new file mode 100755 -index 000000000000..8102da0270fa +index 000000000..8102da027 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-rkg11.dts @@ -0,0 +1,1180 @@ @@ -83501,7 +83501,7 @@ index 000000000000..8102da0270fa +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-v10.dts b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-v10.dts new file mode 100755 -index 000000000000..1d4a0484473a +index 000000000..1d4a04844 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet-v10.dts @@ -0,0 +1,1208 @@ @@ -84715,7 +84715,7 @@ index 000000000000..1d4a0484473a +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet.dts b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet.dts new file mode 100755 -index 000000000000..40022eb6c646 +index 000000000..40022eb6c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-rk817-tablet.dts @@ -0,0 +1,1213 @@ @@ -85934,7 +85934,7 @@ index 000000000000..40022eb6c646 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566.dtsi b/arch/arm64/boot/dts/rockchip/rk3566.dtsi new file mode 100755 -index 000000000000..01b6499b678d +index 000000000..01b6499b6 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566.dtsi @@ -0,0 +1,53 @@ @@ -85993,7 +85993,7 @@ index 000000000000..01b6499b678d +/delete-node/ &sata0; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-android.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-android.dtsi new file mode 100755 -index 000000000000..01cd37c04e1a +index 000000000..01cd37c04 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-android.dtsi @@ -0,0 +1,74 @@ @@ -86073,7 +86073,7 @@ index 000000000000..01cd37c04e1a +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-dram-default-timing.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-dram-default-timing.dtsi new file mode 100755 -index 000000000000..43f978809c02 +index 000000000..43f978809 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-dram-default-timing.dtsi @@ -0,0 +1,81 @@ @@ -86160,7 +86160,7 @@ index 000000000000..43f978809c02 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi new file mode 100755 -index 000000000000..2ca4a18314d2 +index 000000000..2ca4a1831 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi @@ -0,0 +1,1807 @@ @@ -87973,7 +87973,7 @@ index 000000000000..2ca4a18314d2 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux-spi-nor.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux-spi-nor.dts new file mode 100755 -index 000000000000..259b483af0f4 +index 000000000..259b483af --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux-spi-nor.dts @@ -0,0 +1,18 @@ @@ -87997,7 +87997,7 @@ index 000000000000..259b483af0f4 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts new file mode 100755 -index 000000000000..55c255998473 +index 000000000..55c255998 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts @@ -0,0 +1,8 @@ @@ -88011,7 +88011,7 @@ index 000000000000..55c255998473 +#include "rk3568-linux.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts new file mode 100755 -index 000000000000..00c28f39269b +index 000000000..00c28f392 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dts @@ -0,0 +1,8 @@ @@ -88025,7 +88025,7 @@ index 000000000000..00c28f39269b +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi new file mode 100755 -index 000000000000..64881d20183f +index 000000000..64881d201 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi @@ -0,0 +1,490 @@ @@ -88521,7 +88521,7 @@ index 000000000000..64881d20183f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10-bt1120-to-hdmi.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10-bt1120-to-hdmi.dts new file mode 100755 -index 000000000000..7a5a7feb52a7 +index 000000000..7a5a7feb5 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10-bt1120-to-hdmi.dts @@ -0,0 +1,79 @@ @@ -88606,7 +88606,7 @@ index 000000000000..7a5a7feb52a7 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10.dts new file mode 100755 -index 000000000000..23f5f036c4b2 +index 000000000..23f5f036c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10.dts @@ -0,0 +1,8 @@ @@ -88620,7 +88620,7 @@ index 000000000000..23f5f036c4b2 +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10.dtsi new file mode 100755 -index 000000000000..c2d0b697a9bd +index 000000000..c2d0b697a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10.dtsi @@ -0,0 +1,493 @@ @@ -89119,7 +89119,7 @@ index 000000000000..c2d0b697a9bd +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb4-lp3-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb4-lp3-v10.dts new file mode 100755 -index 000000000000..5884da41f121 +index 000000000..5884da41f --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb4-lp3-v10.dts @@ -0,0 +1,12 @@ @@ -89137,7 +89137,7 @@ index 000000000000..5884da41f121 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb5-ddr4-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb5-ddr4-v10.dts new file mode 100755 -index 000000000000..e9eb333079a2 +index 000000000..e9eb33307 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb5-ddr4-v10.dts @@ -0,0 +1,8 @@ @@ -89151,7 +89151,7 @@ index 000000000000..e9eb333079a2 +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb5-ddr4-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb5-ddr4-v10.dtsi new file mode 100755 -index 000000000000..e8a00fc85483 +index 000000000..e8a00fc85 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb5-ddr4-v10.dtsi @@ -0,0 +1,539 @@ @@ -89696,7 +89696,7 @@ index 000000000000..e8a00fc85483 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-linux.dts new file mode 100755 -index 000000000000..a11975fc7d53 +index 000000000..a11975fc7 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-linux.dts @@ -0,0 +1,8 @@ @@ -89710,7 +89710,7 @@ index 000000000000..a11975fc7d53 +#include "rk3568-linux.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dts new file mode 100755 -index 000000000000..0c5ea5eb32ba +index 000000000..0c5ea5eb3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dts @@ -0,0 +1,127 @@ @@ -89843,7 +89843,7 @@ index 000000000000..0c5ea5eb32ba +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts new file mode 100755 -index 000000000000..597fa0b0b089 +index 000000000..597fa0b0b --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts @@ -0,0 +1,96 @@ @@ -89945,7 +89945,7 @@ index 000000000000..597fa0b0b089 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk630-bt656-to-cvbs.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk630-bt656-to-cvbs.dts new file mode 100755 -index 000000000000..24c4debec4f3 +index 000000000..24c4debec --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk630-bt656-to-cvbs.dts @@ -0,0 +1,70 @@ @@ -90021,7 +90021,7 @@ index 000000000000..24c4debec4f3 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10.dts new file mode 100755 -index 000000000000..6e34fa48abc4 +index 000000000..6e34fa48a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10.dts @@ -0,0 +1,8 @@ @@ -90035,7 +90035,7 @@ index 000000000000..6e34fa48abc4 +#include "rk3568-android.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10.dtsi new file mode 100755 -index 000000000000..2f3b5d74e1cf +index 000000000..2f3b5d74e --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10.dtsi @@ -0,0 +1,490 @@ @@ -90531,7 +90531,7 @@ index 000000000000..2f3b5d74e1cf +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb7-ddr4-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb7-ddr4-v10.dts new file mode 100755 -index 000000000000..ecb96832c292 +index 000000000..ecb96832c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb7-ddr4-v10.dts @@ -0,0 +1,12 @@ @@ -90549,7 +90549,7 @@ index 000000000000..ecb96832c292 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-iotest-ddr3-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3568-iotest-ddr3-v10-linux.dts new file mode 100755 -index 000000000000..d832a40d37e9 +index 000000000..d832a40d3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-iotest-ddr3-v10-linux.dts @@ -0,0 +1,69 @@ @@ -90624,7 +90624,7 @@ index 000000000000..d832a40d37e9 +/delete-node/ &display_subsystem; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-iotest-ddr3-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-iotest-ddr3-v10.dts new file mode 100755 -index 000000000000..489967f1318f +index 000000000..489967f13 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-iotest-ddr3-v10.dts @@ -0,0 +1,47 @@ @@ -90677,7 +90677,7 @@ index 000000000000..489967f1318f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-linux.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-linux.dtsi new file mode 100755 -index 000000000000..838606964e15 +index 000000000..838606964 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-linux.dtsi @@ -0,0 +1,60 @@ @@ -90743,7 +90743,7 @@ index 000000000000..838606964e15 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10-linux-spi-nand.dts b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10-linux-spi-nand.dts new file mode 100755 -index 000000000000..50bd024528df +index 000000000..50bd02452 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10-linux-spi-nand.dts @@ -0,0 +1,31 @@ @@ -90780,7 +90780,7 @@ index 000000000000..50bd024528df +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10-linux.dts new file mode 100755 -index 000000000000..3317db6ee671 +index 000000000..3317db6ee --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10-linux.dts @@ -0,0 +1,27 @@ @@ -90813,7 +90813,7 @@ index 000000000000..3317db6ee671 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10.dts b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10.dts new file mode 100755 -index 000000000000..053d20259e93 +index 000000000..053d20259 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10.dts @@ -0,0 +1,27 @@ @@ -90846,7 +90846,7 @@ index 000000000000..053d20259e93 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10.dtsi new file mode 100755 -index 000000000000..40a2096bc58b +index 000000000..40a2096bc --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10.dtsi @@ -0,0 +1,442 @@ @@ -91294,7 +91294,7 @@ index 000000000000..40a2096bc58b +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12-linux-spi-nand.dts b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12-linux-spi-nand.dts new file mode 100755 -index 000000000000..de8c1a1e734f +index 000000000..de8c1a1e7 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12-linux-spi-nand.dts @@ -0,0 +1,20 @@ @@ -91320,7 +91320,7 @@ index 000000000000..de8c1a1e734f + diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12-linux.dts b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12-linux.dts new file mode 100755 -index 000000000000..b605c3d57d26 +index 000000000..b605c3d57 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12-linux.dts @@ -0,0 +1,16 @@ @@ -91342,7 +91342,7 @@ index 000000000000..b605c3d57d26 + diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12.dtsi new file mode 100755 -index 000000000000..6bb50368a73b +index 000000000..6bb50368a --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v12.dtsi @@ -0,0 +1,39 @@ @@ -91387,7 +91387,7 @@ index 000000000000..6bb50368a73b +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr-linux.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-nvr-linux.dtsi new file mode 100755 -index 000000000000..f9908b61cb41 +index 000000000..f9908b61c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr-linux.dtsi @@ -0,0 +1,55 @@ @@ -91448,7 +91448,7 @@ index 000000000000..f9908b61cb41 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-nvr.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-nvr.dtsi new file mode 100755 -index 000000000000..e1ec294b2c82 +index 000000000..e1ec294b2 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-nvr.dtsi @@ -0,0 +1,510 @@ @@ -91964,7 +91964,7 @@ index 000000000000..e1ec294b2c82 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-pinctrl.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-pinctrl.dtsi new file mode 100755 -index 000000000000..30d8cedfbdc7 +index 000000000..30d8cedfb --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-pinctrl.dtsi @@ -0,0 +1,3119 @@ @@ -95089,7 +95089,7 @@ index 000000000000..30d8cedfbdc7 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-base.dts b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-base.dts new file mode 100755 -index 000000000000..0ef442123d05 +index 000000000..0ef442123 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-base.dts @@ -0,0 +1,14 @@ @@ -95109,7 +95109,7 @@ index 000000000000..0ef442123d05 + diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-edp.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-edp.dtsi new file mode 100755 -index 000000000000..459fc3b6d6a0 +index 000000000..459fc3b6d --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-edp.dtsi @@ -0,0 +1,141 @@ @@ -95256,7 +95256,7 @@ index 000000000000..459fc3b6d6a0 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx0-beiqicloud.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx0-beiqicloud.dtsi new file mode 100755 -index 000000000000..25889a206778 +index 000000000..25889a206 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx0-beiqicloud.dtsi @@ -0,0 +1,395 @@ @@ -95657,7 +95657,7 @@ index 000000000000..25889a206778 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx0.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx0.dtsi new file mode 100755 -index 000000000000..bd32a4246df3 +index 000000000..bd32a4246 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx0.dtsi @@ -0,0 +1,91 @@ @@ -95754,7 +95754,7 @@ index 000000000000..bd32a4246df3 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx1.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx1.dtsi new file mode 100755 -index 000000000000..70fc8ffc3e41 +index 000000000..70fc8ffc3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-mipi-tx1.dtsi @@ -0,0 +1,97 @@ @@ -95857,7 +95857,7 @@ index 000000000000..70fc8ffc3e41 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-android.dts b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-android.dts new file mode 100755 -index 000000000000..ccfd369d0cd3 +index 000000000..ccfd369d0 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-android.dts @@ -0,0 +1,13 @@ @@ -95876,7 +95876,7 @@ index 000000000000..ccfd369d0cd3 + diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux-factory.dts b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux-factory.dts new file mode 100755 -index 000000000000..3107e3a9937a +index 000000000..3107e3a99 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux-factory.dts @@ -0,0 +1,155 @@ @@ -96037,7 +96037,7 @@ index 000000000000..3107e3a9937a + diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux.dts b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux.dts new file mode 100755 -index 000000000000..67e95ebf496b +index 000000000..67e95ebf4 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux.dts @@ -0,0 +1,21 @@ @@ -96064,7 +96064,7 @@ index 000000000000..67e95ebf496b +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0.dtsi new file mode 100755 -index 000000000000..b6ec191b0107 +index 000000000..b6ec191b0 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0.dtsi @@ -0,0 +1,868 @@ @@ -96938,7 +96938,7 @@ index 000000000000..b6ec191b0107 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x10-linux.dts b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x10-linux.dts new file mode 100755 -index 000000000000..8dd494ce3a1f +index 000000000..8dd494ce3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x10-linux.dts @@ -0,0 +1,13 @@ @@ -96957,7 +96957,7 @@ index 000000000000..8dd494ce3a1f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x10.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x10.dtsi new file mode 100755 -index 000000000000..7c1919d7d258 +index 000000000..7c1919d7d --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x10.dtsi @@ -0,0 +1,816 @@ @@ -97779,7 +97779,7 @@ index 000000000000..7c1919d7d258 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi new file mode 100755 -index 000000000000..8be2d36f38c0 +index 000000000..8be2d36f3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi @@ -0,0 +1,1891 @@ @@ -99676,7 +99676,7 @@ index 000000000000..8be2d36f38c0 +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568.dtsi b/arch/arm64/boot/dts/rockchip/rk3568.dtsi new file mode 100755 -index 000000000000..372617fee467 +index 000000000..372617fee --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3568.dtsi @@ -0,0 +1,3449 @@ @@ -103131,7 +103131,7 @@ index 000000000000..372617fee467 +#include "rk3568-pinctrl.dtsi" diff --git a/arch/arm64/boot/dts/rockchip/rockchip-pinconf.dtsi b/arch/arm64/boot/dts/rockchip/rockchip-pinconf.dtsi new file mode 100755 -index 000000000000..fc0145333257 +index 000000000..fc0145333 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rockchip-pinconf.dtsi @@ -0,0 +1,382 @@ @@ -103519,7 +103519,7 @@ index 000000000000..fc0145333257 + diff --git a/arch/arm64/include/asm/system_info.h b/arch/arm64/include/asm/system_info.h new file mode 100755 -index 000000000000..a82fe791b2f6 +index 000000000..a82fe791b --- /dev/null +++ b/arch/arm64/include/asm/system_info.h @@ -0,0 +1,14 @@ @@ -103538,7 +103538,7 @@ index 000000000000..a82fe791b2f6 + +#endif /* __ASM_ARM_SYSTEM_INFO_H */ diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c -index 4c0e72781f31..7221da6cf9ef 100644 +index 4c0e72781..7221da6cf 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -25,6 +25,12 @@ @@ -103555,7 +103555,7 @@ index 4c0e72781f31..7221da6cf9ef 100644 * In case the boot CPU is hotpluggable, we record its initial state and * current state separately. Certain system registers may contain different diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c -index 3696dbcbfa80..ead9c33ebe91 100644 +index 3696dbcbf..ead9c33eb 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -191,6 +191,8 @@ void machine_restart(char *cmd) @@ -103568,7 +103568,7 @@ index 3696dbcbfa80..ead9c33ebe91 100644 * UpdateCapsule() depends on the system being reset via * ResetSystem(). diff --git a/drivers/Kconfig b/drivers/Kconfig -index 216c52363bd2..7abae88c80d0 100644 +index 216c52363..7abae88c8 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig @@ -246,4 +246,9 @@ source "drivers/hck/Kconfig" @@ -103582,7 +103582,7 @@ index 216c52363bd2..7abae88c80d0 100644 +source "drivers/rk_nand/Kconfig" endmenu diff --git a/drivers/Makefile b/drivers/Makefile -index d0ff4fdb0dfb..a1b4ece467b2 100644 +index d0ff4fdb0..a1b4ece46 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -196,3 +196,6 @@ obj-$(CONFIG_MOST) += most/ @@ -103593,10 +103593,10 @@ index d0ff4fdb0dfb..a1b4ece467b2 100644 +obj-$(CONFIG_TZDRIVER) += tzdriver/ +obj-$(CONFIG_RK_NAND) += rk_nand/ diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c -index 9a7ea4c18366..92e61f980460 100644 +index d8fe3b62b..5ee7c86c0 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c -@@ -2400,12 +2400,6 @@ static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info) +@@ -2401,12 +2401,6 @@ static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info) } dev_list = nla_nest_start_noflag(reply, NBD_ATTR_DEVICE_LIST); @@ -103609,8 +103609,37 @@ index 9a7ea4c18366..92e61f980460 100644 if (index == -1) { ret = idr_for_each(&nbd_index_idr, &status_cb, reply); if (ret) { +diff --git a/drivers/char/mem.c b/drivers/char/mem.c +index 7d483c332..9b839d619 100644 +--- a/drivers/char/mem.c ++++ b/drivers/char/mem.c +@@ -1066,6 +1066,12 @@ static int devmem_init_inode(void) + return 0; + } + ++static int do_wait_for_random_bytes(void * data) ++{ ++ wait_for_random_bytes(); ++ return 0; ++} ++ + static int __init chr_dev_init(void) + { + int minor; +@@ -1094,6 +1100,11 @@ static int __init chr_dev_init(void) + NULL, devlist[minor].name); + } + ++ struct task_struct *thread; ++ thread = kthread_run(do_wait_for_random_bytes,NULL,"wait_for_random_bytes_thread"); ++ if (IS_ERR(thread)){ ++ printk("wait_for_random_bytes_thread thread create fail"); ++ } + return tty_init(); + } + diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig -index 4ae49eae4586..b64457abdec3 100644 +index df739665f..1422352d7 100644 --- a/drivers/clk/Kconfig +++ b/drivers/clk/Kconfig @@ -38,6 +38,13 @@ menuconfig COMMON_CLK @@ -103628,10 +103657,10 @@ index 4ae49eae4586..b64457abdec3 100644 tristate "Clock driver for WM831x/2x PMICs" depends on MFD_WM831X diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c -index 3575afe16a57..d2f0c049b837 100644 +index a0927c7f8..a0c8b190d 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c -@@ -1324,7 +1324,7 @@ static int __init clk_disable_unused(void) +@@ -1417,7 +1417,7 @@ static int __init clk_disable_unused(void) return 0; } @@ -103641,7 +103670,7 @@ index 3575afe16a57..d2f0c049b837 100644 static int clk_core_determine_round_nolock(struct clk_core *core, struct clk_rate_request *req) diff --git a/drivers/clk/rockchip/Kconfig b/drivers/clk/rockchip/Kconfig -index 47cd6c5de837..f92ce8b4c030 100644 +index 47cd6c5de..f92ce8b4c 100644 --- a/drivers/clk/rockchip/Kconfig +++ b/drivers/clk/rockchip/Kconfig @@ -2,7 +2,7 @@ @@ -103878,7 +103907,7 @@ index 47cd6c5de837..f92ce8b4c030 100644 + endif diff --git a/drivers/clk/rockchip/Makefile b/drivers/clk/rockchip/Makefile -index a99e4d9bbae1..03ddb4baaa5a 100644 +index a99e4d9bb..03ddb4baa 100644 --- a/drivers/clk/rockchip/Makefile +++ b/drivers/clk/rockchip/Makefile @@ -4,19 +4,27 @@ @@ -103921,7 +103950,7 @@ index a99e4d9bbae1..03ddb4baaa5a 100644 +obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o +obj-$(CONFIG_CLK_RK3588) += clk-rk3588.o diff --git a/drivers/clk/rockchip/clk-cpu.c b/drivers/clk/rockchip/clk-cpu.c -index 0dc478a19451..365d4ec3057a 100644 +index 0dc478a19..365d4ec30 100644 --- a/drivers/clk/rockchip/clk-cpu.c +++ b/drivers/clk/rockchip/clk-cpu.c @@ -51,6 +51,7 @@ @@ -104351,7 +104380,7 @@ index 0dc478a19451..365d4ec3057a 100644 +} diff --git a/drivers/clk/rockchip/clk-dclk-divider.c b/drivers/clk/rockchip/clk-dclk-divider.c new file mode 100755 -index 000000000000..88cf7ab82a57 +index 000000000..88cf7ab82 --- /dev/null +++ b/drivers/clk/rockchip/clk-dclk-divider.c @@ -0,0 +1,168 @@ @@ -104524,7 +104553,7 @@ index 000000000000..88cf7ab82a57 + return ERR_PTR(-ENOMEM); +} diff --git a/drivers/clk/rockchip/clk-ddr.c b/drivers/clk/rockchip/clk-ddr.c -index 86718c54e56b..46df75f1a29c 100644 +index 86718c54e..46df75f1a 100644 --- a/drivers/clk/rockchip/clk-ddr.c +++ b/drivers/clk/rockchip/clk-ddr.c @@ -8,8 +8,14 @@ @@ -104708,7 +104737,7 @@ index 86718c54e56b..46df75f1a29c 100644 ddrclk->mux_offset = mux_offset; ddrclk->mux_shift = mux_shift; diff --git a/drivers/clk/rockchip/clk-half-divider.c b/drivers/clk/rockchip/clk-half-divider.c -index ccd5c270c213..b978af08d84f 100644 +index ccd5c270c..b978af08d 100644 --- a/drivers/clk/rockchip/clk-half-divider.c +++ b/drivers/clk/rockchip/clk-half-divider.c @@ -14,9 +14,9 @@ static bool _is_best_half_div(unsigned long rate, unsigned long now, @@ -104810,7 +104839,7 @@ index ccd5c270c213..b978af08d84f 100644 div->lock = lock; diff --git a/drivers/clk/rockchip/clk-link.c b/drivers/clk/rockchip/clk-link.c new file mode 100644 -index 000000000000..78ff9b53c165 +index 000000000..78ff9b53c --- /dev/null +++ b/drivers/clk/rockchip/clk-link.c @@ -0,0 +1,244 @@ @@ -105060,7 +105089,7 @@ index 000000000000..78ff9b53c165 +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-out.c b/drivers/clk/rockchip/clk-out.c new file mode 100644 -index 000000000000..97177a4626b9 +index 000000000..97177a462 --- /dev/null +++ b/drivers/clk/rockchip/clk-out.c @@ -0,0 +1,104 @@ @@ -105169,7 +105198,7 @@ index 000000000000..97177a4626b9 +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(of, rockchip_clk_out_match); diff --git a/drivers/clk/rockchip/clk-pll.c b/drivers/clk/rockchip/clk-pll.c -index d0bd513ff3c3..89ecdd0f7ad6 100644 +index d0bd513ff..89ecdd0f7 100644 --- a/drivers/clk/rockchip/clk-pll.c +++ b/drivers/clk/rockchip/clk-pll.c @@ -15,6 +15,9 @@ @@ -106652,7 +106681,7 @@ index d0bd513ff3c3..89ecdd0f7ad6 100644 +#endif /* CONFIG_ROCKCHIP_CLK_BOOST */ diff --git a/drivers/clk/rockchip/clk-pvtm.c b/drivers/clk/rockchip/clk-pvtm.c new file mode 100755 -index 000000000000..c748589dd922 +index 000000000..c748589dd --- /dev/null +++ b/drivers/clk/rockchip/clk-pvtm.c @@ -0,0 +1,311 @@ @@ -106968,7 +106997,7 @@ index 000000000000..c748589dd922 +MODULE_DESCRIPTION("Rockchip Clock Pvtm Driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/clk/rockchip/clk-px30.c b/drivers/clk/rockchip/clk-px30.c -index 6fb9c98b7d24..3294ce8eaf32 100644 +index 6fb9c98b7..3294ce8ea 100644 --- a/drivers/clk/rockchip/clk-px30.c +++ b/drivers/clk/rockchip/clk-px30.c @@ -6,8 +6,11 @@ @@ -107490,7 +107519,7 @@ index 6fb9c98b7d24..3294ce8eaf32 100644 +#endif /* MODULE */ diff --git a/drivers/clk/rockchip/clk-rk1808.c b/drivers/clk/rockchip/clk-rk1808.c new file mode 100755 -index 000000000000..e177a3dd634c +index 000000000..e177a3dd6 --- /dev/null +++ b/drivers/clk/rockchip/clk-rk1808.c @@ -0,0 +1,1249 @@ @@ -108744,7 +108773,7 @@ index 000000000000..e177a3dd634c +MODULE_DESCRIPTION("Rockchip RK1808 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3036.c b/drivers/clk/rockchip/clk-rk3036.c -index 6a46f85ad837..ed05eb6c51f3 100644 +index 6a46f85ad..ed05eb6c5 100644 --- a/drivers/clk/rockchip/clk-rk3036.c +++ b/drivers/clk/rockchip/clk-rk3036.c @@ -9,8 +9,10 @@ @@ -109058,7 +109087,7 @@ index 6a46f85ad837..ed05eb6c51f3 100644 +MODULE_DESCRIPTION("Rockchip RK3036 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3128.c b/drivers/clk/rockchip/clk-rk3128.c -index 4b1122e98e16..1b1111e88089 100644 +index ddfe1c402..1b1111e88 100644 --- a/drivers/clk/rockchip/clk-rk3128.c +++ b/drivers/clk/rockchip/clk-rk3128.c @@ -6,8 +6,11 @@ @@ -109415,7 +109444,7 @@ index 4b1122e98e16..1b1111e88089 100644 +MODULE_DESCRIPTION("Rockchip RK3128 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c -index 730020fcc7fe..510a70d4dc99 100644 +index 730020fcc..510a70d4d 100644 --- a/drivers/clk/rockchip/clk-rk3188.c +++ b/drivers/clk/rockchip/clk-rk3188.c @@ -5,10 +5,12 @@ @@ -109722,7 +109751,7 @@ index 730020fcc7fe..510a70d4dc99 100644 +MODULE_DESCRIPTION("Rockchip RK3188 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c -index 47d6482dda9d..18c94343b6b6 100644 +index 47d6482dd..18c94343b 100644 --- a/drivers/clk/rockchip/clk-rk3228.c +++ b/drivers/clk/rockchip/clk-rk3228.c @@ -7,8 +7,10 @@ @@ -110138,7 +110167,7 @@ index 47d6482dda9d..18c94343b6b6 100644 +MODULE_DESCRIPTION("Rockchip RK3228 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c -index 93c794695c46..f9c4678fcd73 100644 +index 93c794695..f9c4678fc 100644 --- a/drivers/clk/rockchip/clk-rk3288.c +++ b/drivers/clk/rockchip/clk-rk3288.c @@ -6,11 +6,14 @@ @@ -110623,7 +110652,7 @@ index 93c794695c46..f9c4678fcd73 100644 +MODULE_DESCRIPTION("Rockchip RK3288 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3308.c b/drivers/clk/rockchip/clk-rk3308.c -index 5bf15f2a44b7..6a8e38f11808 100644 +index 5bf15f2a4..6a8e38f11 100644 --- a/drivers/clk/rockchip/clk-rk3308.c +++ b/drivers/clk/rockchip/clk-rk3308.c @@ -8,6 +8,9 @@ @@ -110920,7 +110949,7 @@ index 5bf15f2a44b7..6a8e38f11808 100644 +MODULE_DESCRIPTION("Rockchip RK3308 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3328.c b/drivers/clk/rockchip/clk-rk3328.c -index 2429b7c2a8b3..8ec63aaae4f7 100644 +index 2429b7c2a..8ec63aaae 100644 --- a/drivers/clk/rockchip/clk-rk3328.c +++ b/drivers/clk/rockchip/clk-rk3328.c @@ -6,8 +6,10 @@ @@ -111379,7 +111408,7 @@ index 2429b7c2a8b3..8ec63aaae4f7 100644 +MODULE_DESCRIPTION("Rockchip RK3328 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3368.c b/drivers/clk/rockchip/clk-rk3368.c -index 55443349439b..c56ea321e904 100644 +index 554433494..c56ea321e 100644 --- a/drivers/clk/rockchip/clk-rk3368.c +++ b/drivers/clk/rockchip/clk-rk3368.c @@ -5,8 +5,10 @@ @@ -111737,7 +111766,7 @@ index 55443349439b..c56ea321e904 100644 +MODULE_DESCRIPTION("Rockchip RK3368 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c -index a9cacbcc1c2a..6c4e0d248272 100644 +index a9cacbcc1..6c4e0d248 100644 --- a/drivers/clk/rockchip/clk-rk3399.c +++ b/drivers/clk/rockchip/clk-rk3399.c @@ -105,25 +105,95 @@ static struct rockchip_pll_rate_table rk3399_pll_rates[] = { @@ -112987,7 +113016,7 @@ index a9cacbcc1c2a..6c4e0d248272 100644 +#endif /* MODULE */ diff --git a/drivers/clk/rockchip/clk-rk3528.c b/drivers/clk/rockchip/clk-rk3528.c new file mode 100644 -index 000000000000..1b14cd57be0a +index 000000000..1b14cd57b --- /dev/null +++ b/drivers/clk/rockchip/clk-rk3528.c @@ -0,0 +1,1174 @@ @@ -114167,7 +114196,7 @@ index 000000000000..1b14cd57be0a + diff --git a/drivers/clk/rockchip/clk-rk3562.c b/drivers/clk/rockchip/clk-rk3562.c new file mode 100644 -index 000000000000..3c6f78fecfa0 +index 000000000..3c6f78fec --- /dev/null +++ b/drivers/clk/rockchip/clk-rk3562.c @@ -0,0 +1,1134 @@ @@ -115307,7 +115336,7 @@ index 000000000000..3c6f78fecfa0 +#endif /* MODULE */ diff --git a/drivers/clk/rockchip/clk-rk3568.c b/drivers/clk/rockchip/clk-rk3568.c new file mode 100755 -index 000000000000..0f5ed13a4c9f +index 000000000..0f5ed13a4 --- /dev/null +++ b/drivers/clk/rockchip/clk-rk3568.c @@ -0,0 +1,1769 @@ @@ -117082,7 +117111,7 @@ index 000000000000..0f5ed13a4c9f +#endif /* MODULE */ diff --git a/drivers/clk/rockchip/clk-rk3588.c b/drivers/clk/rockchip/clk-rk3588.c new file mode 100644 -index 000000000000..adcc1682eab4 +index 000000000..adcc1682e --- /dev/null +++ b/drivers/clk/rockchip/clk-rk3588.c @@ -0,0 +1,2532 @@ @@ -119620,7 +119649,7 @@ index 000000000000..adcc1682eab4 +#endif /* MODULE */ diff --git a/drivers/clk/rockchip/clk-rv1106.c b/drivers/clk/rockchip/clk-rv1106.c new file mode 100644 -index 000000000000..0833bf2adb8b +index 000000000..0833bf2ad --- /dev/null +++ b/drivers/clk/rockchip/clk-rv1106.c @@ -0,0 +1,1280 @@ @@ -120905,7 +120934,7 @@ index 000000000000..0833bf2adb8b +MODULE_LICENSE("GPL"); +#endif /* MODULE */ diff --git a/drivers/clk/rockchip/clk-rv1108.c b/drivers/clk/rockchip/clk-rv1108.c -index 5947d3192866..0a93b93338ba 100644 +index 5947d3192..0a93b9333 100644 --- a/drivers/clk/rockchip/clk-rv1108.c +++ b/drivers/clk/rockchip/clk-rv1108.c @@ -7,8 +7,10 @@ @@ -121153,7 +121182,7 @@ index 5947d3192866..0a93b93338ba 100644 +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk-rv1126.c b/drivers/clk/rockchip/clk-rv1126.c new file mode 100755 -index 000000000000..d3fc9380c359 +index 000000000..d3fc9380c --- /dev/null +++ b/drivers/clk/rockchip/clk-rv1126.c @@ -0,0 +1,1568 @@ @@ -122726,7 +122755,7 @@ index 000000000000..d3fc9380c359 +MODULE_DESCRIPTION("Rockchip RV1126 Clock Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c -index b443169dd408..ab6f1d865eea 100644 +index b443169dd..ab6f1d865 100644 --- a/drivers/clk/rockchip/clk.c +++ b/drivers/clk/rockchip/clk.c @@ -24,6 +24,10 @@ @@ -123140,7 +123169,7 @@ index b443169dd408..ab6f1d865eea 100644 +EXPORT_SYMBOL_GPL(rockchip_clk_disable_unused); +#endif /* MODULE */ diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h -index 2271a84124b0..3d2b8d96aefb 100644 +index 2271a8412..3d2b8d96a 100644 --- a/drivers/clk/rockchip/clk.h +++ b/drivers/clk/rockchip/clk.h @@ -37,12 +37,25 @@ struct clk; @@ -123866,7 +123895,7 @@ index 2271a84124b0..3d2b8d96aefb 100644 #endif diff --git a/drivers/clk/rockchip/regmap/Kconfig b/drivers/clk/rockchip/regmap/Kconfig new file mode 100755 -index 000000000000..65f691bc4141 +index 000000000..65f691bc4 --- /dev/null +++ b/drivers/clk/rockchip/regmap/Kconfig @@ -0,0 +1,16 @@ @@ -123888,7 +123917,7 @@ index 000000000000..65f691bc4141 + select COMMON_CLK_ROCKCHIP_REGMAP diff --git a/drivers/clk/rockchip/regmap/Makefile b/drivers/clk/rockchip/regmap/Makefile new file mode 100755 -index 000000000000..18d075d093d9 +index 000000000..18d075d09 --- /dev/null +++ b/drivers/clk/rockchip/regmap/Makefile @@ -0,0 +1,13 @@ @@ -123907,7 +123936,7 @@ index 000000000000..18d075d093d9 +obj-$(CONFIG_CLK_RK628) += clk-rk628.o diff --git a/drivers/clk/rockchip/regmap/clk-regmap-composite.c b/drivers/clk/rockchip/regmap/clk-regmap-composite.c new file mode 100755 -index 000000000000..43d2b9a45aca +index 000000000..43d2b9a45 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-regmap-composite.c @@ -0,0 +1,400 @@ @@ -124313,7 +124342,7 @@ index 000000000000..43d2b9a45aca +EXPORT_SYMBOL_GPL(devm_clk_regmap_register_composite); diff --git a/drivers/clk/rockchip/regmap/clk-regmap-divider.c b/drivers/clk/rockchip/regmap/clk-regmap-divider.c new file mode 100755 -index 000000000000..d57f2c7f8350 +index 000000000..d57f2c7f8 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-regmap-divider.c @@ -0,0 +1,117 @@ @@ -124436,7 +124465,7 @@ index 000000000000..d57f2c7f8350 +EXPORT_SYMBOL_GPL(devm_clk_regmap_register_divider); diff --git a/drivers/clk/rockchip/regmap/clk-regmap-fractional-divider.c b/drivers/clk/rockchip/regmap/clk-regmap-fractional-divider.c new file mode 100755 -index 000000000000..1acbc16e7aae +index 000000000..1acbc16e7 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-regmap-fractional-divider.c @@ -0,0 +1,167 @@ @@ -124609,7 +124638,7 @@ index 000000000000..1acbc16e7aae +EXPORT_SYMBOL_GPL(devm_clk_regmap_register_fractional_divider); diff --git a/drivers/clk/rockchip/regmap/clk-regmap-gate.c b/drivers/clk/rockchip/regmap/clk-regmap-gate.c new file mode 100755 -index 000000000000..36549b912fa2 +index 000000000..36549b912 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-regmap-gate.c @@ -0,0 +1,82 @@ @@ -124697,7 +124726,7 @@ index 000000000000..36549b912fa2 +EXPORT_SYMBOL_GPL(devm_clk_regmap_register_gate); diff --git a/drivers/clk/rockchip/regmap/clk-regmap-mux.c b/drivers/clk/rockchip/regmap/clk-regmap-mux.c new file mode 100755 -index 000000000000..eb37b5f9503c +index 000000000..eb37b5f95 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-regmap-mux.c @@ -0,0 +1,81 @@ @@ -124784,7 +124813,7 @@ index 000000000000..eb37b5f9503c +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/rockchip/regmap/clk-regmap-pll.c b/drivers/clk/rockchip/regmap/clk-regmap-pll.c new file mode 100755 -index 000000000000..24ad7eda9d94 +index 000000000..24ad7eda9 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-regmap-pll.c @@ -0,0 +1,363 @@ @@ -125153,7 +125182,7 @@ index 000000000000..24ad7eda9d94 +EXPORT_SYMBOL_GPL(devm_clk_regmap_register_pll); diff --git a/drivers/clk/rockchip/regmap/clk-regmap.h b/drivers/clk/rockchip/regmap/clk-regmap.h new file mode 100755 -index 000000000000..4626e1982beb +index 000000000..4626e1982 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-regmap.h @@ -0,0 +1,308 @@ @@ -125467,7 +125496,7 @@ index 000000000000..4626e1982beb +#endif diff --git a/drivers/clk/rockchip/regmap/clk-rk618.c b/drivers/clk/rockchip/regmap/clk-rk618.c new file mode 100755 -index 000000000000..c780f502b354 +index 000000000..c780f502b --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-rk618.c @@ -0,0 +1,408 @@ @@ -125881,7 +125910,7 @@ index 000000000000..c780f502b354 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/clk/rockchip/regmap/clk-rk628.c b/drivers/clk/rockchip/regmap/clk-rk628.c new file mode 100755 -index 000000000000..7f501db660e0 +index 000000000..7f501db66 --- /dev/null +++ b/drivers/clk/rockchip/regmap/clk-rk628.c @@ -0,0 +1,609 @@ @@ -126495,7 +126524,7 @@ index 000000000000..7f501db660e0 +MODULE_DESCRIPTION("Rockchip RK628 CRU driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig -index a0c6e88bebe0..9d9cb5757913 100644 +index a0c6e88be..9d9cb5757 100644 --- a/drivers/clocksource/Kconfig +++ b/drivers/clocksource/Kconfig @@ -85,7 +85,9 @@ config IXP4XX_TIMER @@ -126510,7 +126539,7 @@ index a0c6e88bebe0..9d9cb5757913 100644 select TIMER_OF select CLKSRC_MMIO diff --git a/drivers/clocksource/timer-rockchip.c b/drivers/clocksource/timer-rockchip.c -index 1f95d0aca08f..2f4e970d7433 100644 +index 1f95d0aca..2f4e970d7 100644 --- a/drivers/clocksource/timer-rockchip.c +++ b/drivers/clocksource/timer-rockchip.c @@ -8,11 +8,13 @@ @@ -126604,7 +126633,7 @@ index 1f95d0aca08f..2f4e970d7433 100644 +MODULE_LICENSE("GPL"); +#endif diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm -index 1f73fa75b1a0..0faef5fc6df3 100644 +index 1f73fa75b..0faef5fc6 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm @@ -158,6 +158,16 @@ config ARM_RASPBERRYPI_CPUFREQ @@ -126625,7 +126654,7 @@ index 1f73fa75b1a0..0faef5fc6df3 100644 bool help diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile -index f1b7e3dd6e5d..2e0e827afd21 100644 +index f1b7e3dd6..2e0e827af 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -64,6 +64,7 @@ obj-$(CONFIG_PXA3xx) += pxa3xx-cpufreq.o @@ -126637,7 +126666,7 @@ index f1b7e3dd6e5d..2e0e827afd21 100644 obj-$(CONFIG_ARM_S3C2412_CPUFREQ) += s3c2412-cpufreq.o obj-$(CONFIG_ARM_S3C2416_CPUFREQ) += s3c2416-cpufreq.o diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c -index aea285651fba..1840409d520d 100644 +index e1dcdb0ea..7f8d1b71b 100644 --- a/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c @@ -66,21 +66,6 @@ static const struct of_device_id whitelist[] __initconst = { @@ -126692,7 +126721,7 @@ index aea285651fba..1840409d520d 100644 { .compatible = "st,stih407", }, { .compatible = "st,stih410", }, diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c -index e363ae04aac6..f1327e7fe361 100644 +index e363ae04a..f1327e7fe 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -23,6 +23,9 @@ @@ -126982,10 +127011,10 @@ index e363ae04aac6..f1327e7fe361 100644 list_del(&priv->node); } diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c -index 58342390966b..ae35ef771900 100644 +index 5b4bca71f..13cbf441c 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c -@@ -688,8 +688,12 @@ static ssize_t show_##file_name \ +@@ -690,8 +690,12 @@ static ssize_t show_##file_name \ return sprintf(buf, "%u\n", policy->object); \ } @@ -126999,7 +127028,7 @@ index 58342390966b..ae35ef771900 100644 show_one(cpuinfo_transition_latency, cpuinfo.transition_latency); show_one(scaling_min_freq, min); show_one(scaling_max_freq, max); -@@ -2535,6 +2539,7 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy, +@@ -2537,6 +2541,7 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy, return ret; } @@ -127008,7 +127037,7 @@ index 58342390966b..ae35ef771900 100644 /** * cpufreq_update_policy - Re-evaluate an existing cpufreq policy. diff --git a/drivers/cpufreq/cpufreq_userspace.c b/drivers/cpufreq/cpufreq_userspace.c -index 50a4d7846580..1f001d281718 100644 +index 50a4d7846..1f001d281 100644 --- a/drivers/cpufreq/cpufreq_userspace.c +++ b/drivers/cpufreq/cpufreq_userspace.c @@ -78,20 +78,18 @@ static int cpufreq_userspace_policy_start(struct cpufreq_policy *policy) @@ -127036,7 +127065,7 @@ index 50a4d7846580..1f001d281718 100644 diff --git a/drivers/cpufreq/rockchip-cpufreq.c b/drivers/cpufreq/rockchip-cpufreq.c new file mode 100755 -index 000000000000..27c6d92edfb7 +index 000000000..27c6d92ed --- /dev/null +++ b/drivers/cpufreq/rockchip-cpufreq.c @@ -0,0 +1,1025 @@ @@ -128067,7 +128096,7 @@ index 000000000000..27c6d92edfb7 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/cpufreq/rockchip-cpufreq.h b/drivers/cpufreq/rockchip-cpufreq.h new file mode 100755 -index 000000000000..3b3dbcf73449 +index 000000000..3b3dbcf73 --- /dev/null +++ b/drivers/cpufreq/rockchip-cpufreq.h @@ -0,0 +1,24 @@ @@ -128096,7 +128125,7 @@ index 000000000000..3b3dbcf73449 + +#endif diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c -index 4070e573bf43..557f59ac47a3 100644 +index 4070e573b..557f59ac4 100644 --- a/drivers/cpuidle/driver.c +++ b/drivers/cpuidle/driver.c @@ -381,3 +381,4 @@ void cpuidle_driver_state_disabled(struct cpuidle_driver *drv, int idx, @@ -128105,7 +128134,7 @@ index 4070e573bf43..557f59ac47a3 100644 } +EXPORT_SYMBOL_GPL(cpuidle_driver_state_disabled); diff --git a/drivers/cpuidle/governor.c b/drivers/cpuidle/governor.c -index 29acaf48e575..0e51ed25665e 100644 +index 29acaf48e..0e51ed256 100644 --- a/drivers/cpuidle/governor.c +++ b/drivers/cpuidle/governor.c @@ -102,6 +102,7 @@ int cpuidle_register_governor(struct cpuidle_governor *gov) @@ -128122,7 +128151,7 @@ index 29acaf48e575..0e51ed25665e 100644 } +EXPORT_SYMBOL_GPL(cpuidle_governor_latency_req); diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig -index 37dc40d1fcfb..ab9c00a1b1c3 100644 +index 37dc40d1f..ab9c00a1b 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -131,15 +131,20 @@ config ARM_TEGRA20_DEVFREQ @@ -128151,7 +128180,7 @@ index 37dc40d1fcfb..ab9c00a1b1c3 100644 from hardware. diff --git a/drivers/devfreq/Makefile b/drivers/devfreq/Makefile -index 3ca1ad0ecb97..abea7adbc7da 100644 +index 3ca1ad0ec..abea7adbc 100644 --- a/drivers/devfreq/Makefile +++ b/drivers/devfreq/Makefile @@ -11,7 +11,8 @@ obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o @@ -128165,10 +128194,10 @@ index 3ca1ad0ecb97..abea7adbc7da 100644 obj-$(CONFIG_ARM_TEGRA20_DEVFREQ) += tegra20-devfreq.o diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c -index c6f460550f5e..db0fe99c8d61 100644 +index 93df6cef4..8182968b9 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c -@@ -1761,6 +1761,40 @@ static ssize_t timer_store(struct device *dev, struct device_attribute *attr, +@@ -1803,6 +1803,40 @@ static ssize_t timer_store(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR_RW(timer); @@ -128209,7 +128238,7 @@ index c6f460550f5e..db0fe99c8d61 100644 static struct attribute *devfreq_attrs[] = { &dev_attr_name.attr, &dev_attr_governor.attr, -@@ -1773,6 +1807,7 @@ static struct attribute *devfreq_attrs[] = { +@@ -1815,6 +1849,7 @@ static struct attribute *devfreq_attrs[] = { &dev_attr_max_freq.attr, &dev_attr_trans_stat.attr, &dev_attr_timer.attr, @@ -128218,7 +128247,7 @@ index c6f460550f5e..db0fe99c8d61 100644 }; ATTRIBUTE_GROUPS(devfreq); diff --git a/drivers/devfreq/event/Kconfig b/drivers/devfreq/event/Kconfig -index 878825372f6f..4526c69c602e 100644 +index 878825372..4526c69c6 100644 --- a/drivers/devfreq/event/Kconfig +++ b/drivers/devfreq/event/Kconfig @@ -39,4 +39,11 @@ config DEVFREQ_EVENT_ROCKCHIP_DFI @@ -128234,7 +128263,7 @@ index 878825372f6f..4526c69c602e 100644 + endif # PM_DEVFREQ_EVENT diff --git a/drivers/devfreq/event/Makefile b/drivers/devfreq/event/Makefile -index 3c847e5d5a35..03d67f06c22e 100644 +index 3c847e5d5..03d67f06c 100644 --- a/drivers/devfreq/event/Makefile +++ b/drivers/devfreq/event/Makefile @@ -4,3 +4,4 @@ @@ -128243,7 +128272,7 @@ index 3c847e5d5a35..03d67f06c22e 100644 obj-$(CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI) += rockchip-dfi.o +obj-$(CONFIG_DEVFREQ_EVENT_ROCKCHIP_NOCP) += rockchip-nocp.o diff --git a/drivers/devfreq/event/rockchip-dfi.c b/drivers/devfreq/event/rockchip-dfi.c -index 9a88faaf8b27..9fd6a82f79d6 100644 +index 4dafdf231..0d92c3bf1 100644 --- a/drivers/devfreq/event/rockchip-dfi.c +++ b/drivers/devfreq/event/rockchip-dfi.c @@ -20,23 +20,70 @@ @@ -128908,7 +128937,7 @@ index 9a88faaf8b27..9fd6a82f79d6 100644 diff --git a/drivers/devfreq/event/rockchip-nocp.c b/drivers/devfreq/event/rockchip-nocp.c new file mode 100755 -index 000000000000..957b84ee3290 +index 000000000..957b84ee3 --- /dev/null +++ b/drivers/devfreq/event/rockchip-nocp.c @@ -0,0 +1,166 @@ @@ -129080,7 +129109,7 @@ index 000000000000..957b84ee3290 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/devfreq/rk3399_dmc.c b/drivers/devfreq/rk3399_dmc.c deleted file mode 100644 -index 7e52375d9818..000000000000 +index 7e52375d9..000000000 --- a/drivers/devfreq/rk3399_dmc.c +++ /dev/null @@ -1,518 +0,0 @@ @@ -129604,7 +129633,7 @@ index 7e52375d9818..000000000000 -MODULE_DESCRIPTION("RK3399 dmcfreq driver with devfreq framework"); diff --git a/drivers/devfreq/rockchip_bus.c b/drivers/devfreq/rockchip_bus.c new file mode 100755 -index 000000000000..7032b4815c5a +index 000000000..7032b4815 --- /dev/null +++ b/drivers/devfreq/rockchip_bus.c @@ -0,0 +1,500 @@ @@ -130110,7 +130139,7 @@ index 000000000000..7032b4815c5a +MODULE_DESCRIPTION("rockchip busfreq driver with devfreq framework"); diff --git a/drivers/devfreq/rockchip_dmc.c b/drivers/devfreq/rockchip_dmc.c new file mode 100755 -index 000000000000..e3d39bd8cea0 +index 000000000..e3d39bd8c --- /dev/null +++ b/drivers/devfreq/rockchip_dmc.c @@ -0,0 +1,3558 @@ @@ -133674,7 +133703,7 @@ index 000000000000..e3d39bd8cea0 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/devfreq/rockchip_dmc_common.c b/drivers/devfreq/rockchip_dmc_common.c new file mode 100755 -index 000000000000..cacc7d02f6fc +index 000000000..cacc7d02f --- /dev/null +++ b/drivers/devfreq/rockchip_dmc_common.c @@ -0,0 +1,168 @@ @@ -133848,7 +133877,7 @@ index 000000000000..cacc7d02f6fc +MODULE_LICENSE("GPL v2"); diff --git a/drivers/devfreq/rockchip_dmc_dbg.c b/drivers/devfreq/rockchip_dmc_dbg.c new file mode 100755 -index 000000000000..80b25e9046d1 +index 000000000..80b25e904 --- /dev/null +++ b/drivers/devfreq/rockchip_dmc_dbg.c @@ -0,0 +1,1061 @@ @@ -134915,7 +134944,7 @@ index 000000000000..80b25e9046d1 +MODULE_DESCRIPTION("rockchip dmc debug driver with devfreq framework"); diff --git a/drivers/devfreq/rockchip_dmc_timing.h b/drivers/devfreq/rockchip_dmc_timing.h new file mode 100755 -index 000000000000..8f2e2c02bb90 +index 000000000..8f2e2c02b --- /dev/null +++ b/drivers/devfreq/rockchip_dmc_timing.h @@ -0,0 +1,1307 @@ @@ -136227,7 +136256,7 @@ index 000000000000..8f2e2c02bb90 +#endif /* __ROCKCHIP_DMC_TIMING_H__ */ + diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig -index 594b77d8923c..c5de024009a9 100644 +index 594b77d89..c5de02400 100644 --- a/drivers/dma-buf/Kconfig +++ b/drivers/dma-buf/Kconfig @@ -21,7 +21,6 @@ config SW_SYNC @@ -136239,7 +136268,7 @@ index 594b77d8923c..c5de024009a9 100644 A sync object driver that uses a 32bit counter to coordinate synchronization. Useful when there is no hardware primitive backing diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c -index 89c10136b26f..3ef87860877a 100644 +index 89c10136b..3ef878608 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -32,8 +32,6 @@ @@ -136446,7 +136475,7 @@ index 89c10136b26f..3ef87860877a 100644 static int dma_buf_debug_show(struct seq_file *s, void *unused) { diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c -index 7475e09b0680..d64fc03929be 100644 +index 7475e09b0..d64fc0392 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -312,22 +312,25 @@ void __dma_fence_might_wait(void) @@ -136559,7 +136588,7 @@ index 7475e09b0680..d64fc03929be 100644 dma_fence_end_signalling(tmp); diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c -index bbbfa28b2f6c..873f789df20c 100644 +index bbbfa28b2..873f789df 100644 --- a/drivers/dma-buf/dma-heap.c +++ b/drivers/dma-buf/dma-heap.c @@ -31,6 +31,7 @@ @@ -136886,7 +136915,7 @@ index bbbfa28b2f6c..873f789df20c 100644 } subsys_initcall(dma_heap_init); diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig -index a5eef06c4226..ff52efa83f39 100644 +index a5eef06c4..ff52efa83 100644 --- a/drivers/dma-buf/heaps/Kconfig +++ b/drivers/dma-buf/heaps/Kconfig @@ -1,12 +1,22 @@ @@ -136916,7 +136945,7 @@ index a5eef06c4226..ff52efa83f39 100644 help Choose this option to enable dma-buf CMA heap. This heap is backed diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile -index 6e54cdec3da0..4d4cd94a3a4a 100644 +index 6e54cdec3..4d4cd94a3 100644 --- a/drivers/dma-buf/heaps/Makefile +++ b/drivers/dma-buf/heaps/Makefile @@ -1,4 +1,5 @@ @@ -136927,7 +136956,7 @@ index 6e54cdec3da0..4d4cd94a3a4a 100644 obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o obj-$(CONFIG_DMABUF_HEAPS_CMA) += cma_heap.o diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c -index e55384dc115b..4931578df815 100644 +index e55384dc1..4931578df 100644 --- a/drivers/dma-buf/heaps/cma_heap.c +++ b/drivers/dma-buf/heaps/cma_heap.c @@ -2,76 +2,304 @@ @@ -137342,7 +137371,7 @@ index e55384dc115b..4931578df815 100644 static const struct dma_heap_ops cma_heap_ops = { diff --git a/drivers/dma-buf/heaps/deferred-free-helper.c b/drivers/dma-buf/heaps/deferred-free-helper.c new file mode 100755 -index 000000000000..e19c8b68dfeb +index 000000000..e19c8b68d --- /dev/null +++ b/drivers/dma-buf/heaps/deferred-free-helper.c @@ -0,0 +1,138 @@ @@ -137486,7 +137515,7 @@ index 000000000000..e19c8b68dfeb + diff --git a/drivers/dma-buf/heaps/deferred-free-helper.h b/drivers/dma-buf/heaps/deferred-free-helper.h new file mode 100755 -index 000000000000..11940328ce3f +index 000000000..11940328c --- /dev/null +++ b/drivers/dma-buf/heaps/deferred-free-helper.h @@ -0,0 +1,55 @@ @@ -137547,7 +137576,7 @@ index 000000000000..11940328ce3f +#endif diff --git a/drivers/dma-buf/heaps/heap-helpers.c b/drivers/dma-buf/heaps/heap-helpers.c deleted file mode 100644 -index 35aa65bbf0a7..000000000000 +index 35aa65bbf..000000000 --- a/drivers/dma-buf/heaps/heap-helpers.c +++ /dev/null @@ -1,271 +0,0 @@ @@ -137824,7 +137853,7 @@ index 35aa65bbf0a7..000000000000 -}; diff --git a/drivers/dma-buf/heaps/heap-helpers.h b/drivers/dma-buf/heaps/heap-helpers.h deleted file mode 100644 -index 805d2df88024..000000000000 +index 805d2df88..000000000 --- a/drivers/dma-buf/heaps/heap-helpers.h +++ /dev/null @@ -1,53 +0,0 @@ @@ -137883,7 +137912,7 @@ index 805d2df88024..000000000000 -#endif /* _HEAP_HELPERS_H */ diff --git a/drivers/dma-buf/heaps/page_pool.c b/drivers/dma-buf/heaps/page_pool.c new file mode 100755 -index 000000000000..7c34a1ba48bb +index 000000000..7c34a1ba4 --- /dev/null +++ b/drivers/dma-buf/heaps/page_pool.c @@ -0,0 +1,247 @@ @@ -138136,7 +138165,7 @@ index 000000000000..7c34a1ba48bb +MODULE_LICENSE("GPL v2"); diff --git a/drivers/dma-buf/heaps/page_pool.h b/drivers/dma-buf/heaps/page_pool.h new file mode 100755 -index 000000000000..6b083b04f195 +index 000000000..6b083b04f --- /dev/null +++ b/drivers/dma-buf/heaps/page_pool.h @@ -0,0 +1,55 @@ @@ -138196,7 +138225,7 @@ index 000000000000..6b083b04f195 + +#endif /* _DMABUF_PAGE_POOL_H */ diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c -index 0bf688e3c023..15796bc4c033 100644 +index 0bf688e3c..15796bc4c 100644 --- a/drivers/dma-buf/heaps/system_heap.c +++ b/drivers/dma-buf/heaps/system_heap.c @@ -3,7 +3,11 @@ @@ -138837,7 +138866,7 @@ index 0bf688e3c023..15796bc4c033 100644 module_init(system_heap_create); MODULE_LICENSE("GPL v2"); diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c -index 348b3a9170fa..3daa6c76b8dd 100644 +index 7f5ed1aa7..e403cde8a 100644 --- a/drivers/dma-buf/sw_sync.c +++ b/drivers/dma-buf/sw_sync.c @@ -7,6 +7,8 @@ @@ -138864,7 +138893,7 @@ index 348b3a9170fa..3daa6c76b8dd 100644 + +MODULE_LICENSE("GPL v2"); diff --git a/drivers/dma-buf/sync_debug.c b/drivers/dma-buf/sync_debug.c -index 101394f16930..a2f906741ce0 100644 +index 237bce21d..13125226f 100644 --- a/drivers/dma-buf/sync_debug.c +++ b/drivers/dma-buf/sync_debug.c @@ -8,6 +8,7 @@ @@ -138881,7 +138910,7 @@ index 101394f16930..a2f906741ce0 100644 late_initcall(sync_debugfs_init); +#endif diff --git a/drivers/dma-buf/sync_debug.h b/drivers/dma-buf/sync_debug.h -index 6176e52ba2d7..ee84997da6b4 100644 +index 6176e52ba..ee84997da 100644 --- a/drivers/dma-buf/sync_debug.h +++ b/drivers/dma-buf/sync_debug.h @@ -62,11 +62,18 @@ struct sync_pt { @@ -138904,7 +138933,7 @@ index 6176e52ba2d7..ee84997da6b4 100644 #endif /* _LINUX_SYNC_H */ diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig -index c08968c5ddf8..d9dbfda3c5f2 100644 +index 807c5320d..77efc54c5 100644 --- a/drivers/firmware/Kconfig +++ b/drivers/firmware/Kconfig @@ -9,7 +9,7 @@ menu "Firmware Drivers" @@ -138916,7 +138945,7 @@ index c08968c5ddf8..d9dbfda3c5f2 100644 help ARM System Control and Management Interface (SCMI) protocol is a set of operating system-independent software interfaces that are -@@ -251,6 +251,13 @@ config QCOM_SCM_DOWNLOAD_MODE_DEFAULT +@@ -252,6 +252,13 @@ config QCOM_SCM_DOWNLOAD_MODE_DEFAULT Say Y here to enable "download mode" by default. @@ -138931,7 +138960,7 @@ index c08968c5ddf8..d9dbfda3c5f2 100644 tristate "TI System Control Interface (TISCI) Message Protocol" depends on TI_MESSAGE_MANAGER diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile -index 5e013b6a3692..850970fbacbc 100644 +index 5e013b6a3..850970fba 100644 --- a/drivers/firmware/Makefile +++ b/drivers/firmware/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_ISCSI_IBFT_FIND) += iscsi_ibft_find.o @@ -138944,7 +138973,7 @@ index 5e013b6a3692..850970fbacbc 100644 obj-$(CONFIG_TI_SCI_PROTOCOL) += ti_sci.o diff --git a/drivers/firmware/rockchip_sip.c b/drivers/firmware/rockchip_sip.c new file mode 100755 -index 000000000000..e483899d79fe +index 000000000..e483899d7 --- /dev/null +++ b/drivers/firmware/rockchip_sip.c @@ -0,0 +1,715 @@ @@ -139664,7 +139693,7 @@ index 000000000000..e483899d79fe +MODULE_DESCRIPTION("Rockchip SIP Call"); +MODULE_LICENSE("GPL"); diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig -index 39f3e1366409..940774657951 100644 +index 39f3e1366..940774657 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -495,6 +495,14 @@ config GPIO_REG @@ -139683,7 +139712,7 @@ index 39f3e1366409..940774657951 100644 tristate "SAMA5D2 PIOBU GPIO support" depends on MFD_SYSCON diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile -index 09dada80ac34..ce6cafb6d3de 100644 +index 09dada80a..ce6cafb6d 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -125,6 +125,7 @@ obj-$(CONFIG_GPIO_RCAR) += gpio-rcar.o @@ -139696,7 +139725,7 @@ index 09dada80ac34..ce6cafb6d3de 100644 obj-$(CONFIG_GPIO_SCH311X) += gpio-sch311x.o diff --git a/drivers/gpio/gpio-rockchip.c b/drivers/gpio/gpio-rockchip.c new file mode 100755 -index 000000000000..1d1e9a64cceb +index 000000000..1d1e9a64c --- /dev/null +++ b/drivers/gpio/gpio-rockchip.c @@ -0,0 +1,746 @@ @@ -140447,7 +140476,7 @@ index 000000000000..1d1e9a64cceb +MODULE_LICENSE("GPL v2"); +MODULE_DEVICE_TABLE(of, rockchip_gpio_match); diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c -index 2e63274a4c2c..ab666917b1ab 100644 +index 2e63274a4..ab666917b 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -1046,3 +1046,14 @@ void of_gpiochip_remove(struct gpio_chip *chip) @@ -140466,7 +140495,7 @@ index 2e63274a4c2c..ab666917b1ab 100644 + gdev->dev.fwnode = of_fwnode_handle(gdev->dev.of_node); +} diff --git a/drivers/gpio/gpiolib-of.h b/drivers/gpio/gpiolib-of.h -index ed26664f1537..8af2bc899aab 100644 +index ed26664f1..8af2bc899 100644 --- a/drivers/gpio/gpiolib-of.h +++ b/drivers/gpio/gpiolib-of.h @@ -15,6 +15,7 @@ int of_gpiochip_add(struct gpio_chip *gc); @@ -140489,7 +140518,7 @@ index ed26664f1537..8af2bc899aab 100644 extern struct notifier_block gpio_of_notifier; diff --git a/drivers/gpu/Makefile b/drivers/gpu/Makefile -index 835c88318cec..b66e520ebbdd 100644 +index 835c88318..b66e520eb 100644 --- a/drivers/gpu/Makefile +++ b/drivers/gpu/Makefile @@ -3,6 +3,6 @@ @@ -140502,7 +140531,7 @@ index 835c88318cec..b66e520ebbdd 100644 obj-$(CONFIG_TRACE_GPU_MEM) += trace/ diff --git a/drivers/gpu/arm/Kbuild b/drivers/gpu/arm/Kbuild new file mode 100755 -index 000000000000..f747fc889b5b +index 000000000..f747fc889 --- /dev/null +++ b/drivers/gpu/arm/Kbuild @@ -0,0 +1,25 @@ @@ -140533,7 +140562,7 @@ index 000000000000..f747fc889b5b +obj-$(CONFIG_MALI_BIFROST) += bifrost/ diff --git a/drivers/gpu/arm/Kconfig b/drivers/gpu/arm/Kconfig new file mode 100755 -index 000000000000..398a8e50a4cd +index 000000000..398a8e50a --- /dev/null +++ b/drivers/gpu/arm/Kconfig @@ -0,0 +1,25 @@ @@ -140564,7 +140593,7 @@ index 000000000000..398a8e50a4cd +source "drivers/gpu/arm/bifrost/Kconfig" diff --git a/drivers/gpu/arm/bifrost/Kbuild b/drivers/gpu/arm/bifrost/Kbuild new file mode 100755 -index 000000000000..9cadda188fbc +index 000000000..9cadda188 --- /dev/null +++ b/drivers/gpu/arm/bifrost/Kbuild @@ -0,0 +1,243 @@ @@ -140813,7 +140842,7 @@ index 000000000000..9cadda188fbc +endif diff --git a/drivers/gpu/arm/bifrost/Kconfig b/drivers/gpu/arm/bifrost/Kconfig new file mode 100755 -index 000000000000..ca3da57cffd3 +index 000000000..ca3da57cf --- /dev/null +++ b/drivers/gpu/arm/bifrost/Kconfig @@ -0,0 +1,389 @@ @@ -141208,7 +141237,7 @@ index 000000000000..ca3da57cffd3 +endif diff --git a/drivers/gpu/arm/bifrost/Makefile b/drivers/gpu/arm/bifrost/Makefile new file mode 100755 -index 000000000000..39df298ff01c +index 000000000..39df298ff --- /dev/null +++ b/drivers/gpu/arm/bifrost/Makefile @@ -0,0 +1,279 @@ @@ -141493,7 +141522,7 @@ index 000000000000..39df298ff01c + $(MAKE) -C $(KDIR) M=$(CURDIR) $(MAKE_ARGS) clean diff --git a/drivers/gpu/arm/bifrost/arbiter/Kbuild b/drivers/gpu/arm/bifrost/arbiter/Kbuild new file mode 100755 -index 000000000000..2e6b111441ca +index 000000000..2e6b11144 --- /dev/null +++ b/drivers/gpu/arm/bifrost/arbiter/Kbuild @@ -0,0 +1,23 @@ @@ -141522,7 +141551,7 @@ index 000000000000..2e6b111441ca + arbiter/mali_kbase_arbiter_pm.o diff --git a/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbif.c b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbif.c new file mode 100755 -index 000000000000..b5d3cd685ba5 +index 000000000..b5d3cd685 --- /dev/null +++ b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbif.c @@ -0,0 +1,357 @@ @@ -141885,7 +141914,7 @@ index 000000000000..b5d3cd685ba5 +} diff --git a/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbif.h b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbif.h new file mode 100755 -index 000000000000..701ffd42f6f7 +index 000000000..701ffd42f --- /dev/null +++ b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbif.h @@ -0,0 +1,121 @@ @@ -142012,7 +142041,7 @@ index 000000000000..701ffd42f6f7 +#endif /* _MALI_KBASE_ARBIF_H_ */ diff --git a/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_defs.h b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_defs.h new file mode 100755 -index 000000000000..1c4901b3b4d9 +index 000000000..1c4901b3b --- /dev/null +++ b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_defs.h @@ -0,0 +1,76 @@ @@ -142094,7 +142123,7 @@ index 000000000000..1c4901b3b4d9 +#endif /* _MALI_KBASE_ARBITER_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_pm.c b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_pm.c new file mode 100755 -index 000000000000..667552c561fb +index 000000000..667552c56 --- /dev/null +++ b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_pm.c @@ -0,0 +1,1138 @@ @@ -143238,7 +143267,7 @@ index 000000000000..667552c561fb +}; diff --git a/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_pm.h b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_pm.h new file mode 100755 -index 000000000000..f863f88601e6 +index 000000000..f863f8860 --- /dev/null +++ b/drivers/gpu/arm/bifrost/arbiter/mali_kbase_arbiter_pm.h @@ -0,0 +1,196 @@ @@ -143440,7 +143469,7 @@ index 000000000000..f863f88601e6 +#endif /*_MALI_KBASE_ARBITER_PM_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/Kbuild b/drivers/gpu/arm/bifrost/backend/gpu/Kbuild new file mode 100755 -index 000000000000..efebc8a544d1 +index 000000000..efebc8a54 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/Kbuild @@ -0,0 +1,58 @@ @@ -143504,7 +143533,7 @@ index 000000000000..efebc8a544d1 + diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_backend_config.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_backend_config.h new file mode 100755 -index 000000000000..6924fdb8a608 +index 000000000..6924fdb8a --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_backend_config.h @@ -0,0 +1,30 @@ @@ -143540,7 +143569,7 @@ index 000000000000..6924fdb8a608 + diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_cache_policy_backend.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_cache_policy_backend.c new file mode 100755 -index 000000000000..7c0abbaf860f +index 000000000..7c0abbaf8 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_cache_policy_backend.c @@ -0,0 +1,92 @@ @@ -143638,7 +143667,7 @@ index 000000000000..7c0abbaf860f +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_cache_policy_backend.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_cache_policy_backend.h new file mode 100755 -index 000000000000..758e3be08c16 +index 000000000..758e3be08 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_cache_policy_backend.h @@ -0,0 +1,65 @@ @@ -143709,7 +143738,7 @@ index 000000000000..758e3be08c16 +#endif /* _KBASE_CACHE_POLICY_BACKEND_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_clk_rate_trace_mgr.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_clk_rate_trace_mgr.c new file mode 100755 -index 000000000000..ddd03ca23de6 +index 000000000..ddd03ca23 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_clk_rate_trace_mgr.c @@ -0,0 +1,326 @@ @@ -144041,7 +144070,7 @@ index 000000000000..ddd03ca23de6 +KBASE_EXPORT_TEST_API(kbase_clk_rate_trace_manager_notify_all); diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_clk_rate_trace_mgr.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_clk_rate_trace_mgr.h new file mode 100755 -index 000000000000..35b3b8d06d96 +index 000000000..35b3b8d06 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_clk_rate_trace_mgr.h @@ -0,0 +1,154 @@ @@ -144201,7 +144230,7 @@ index 000000000000..35b3b8d06d96 + diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_debug_job_fault_backend.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_debug_job_fault_backend.c new file mode 100755 -index 000000000000..e121b417f80d +index 000000000..e121b417f --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_debug_job_fault_backend.c @@ -0,0 +1,163 @@ @@ -144370,7 +144399,7 @@ index 000000000000..e121b417f80d +#endif diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.c new file mode 100755 -index 000000000000..02fb00da365c +index 000000000..02fb00da3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.c @@ -0,0 +1,895 @@ @@ -145271,7 +145300,7 @@ index 000000000000..02fb00da365c +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.h new file mode 100755 -index 000000000000..123c58cb030f +index 000000000..123c58cb0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_devfreq.h @@ -0,0 +1,63 @@ @@ -145340,7 +145369,7 @@ index 000000000000..123c58cb030f +#endif /* _BASE_DEVFREQ_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_gpuprops_backend.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_gpuprops_backend.c new file mode 100755 -index 000000000000..10e92ec94d3a +index 000000000..10e92ec94 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_gpuprops_backend.c @@ -0,0 +1,200 @@ @@ -145546,7 +145575,7 @@ index 000000000000..10e92ec94d3a +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_backend.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_backend.c new file mode 100755 -index 000000000000..53578ded58b9 +index 000000000..53578ded5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_backend.c @@ -0,0 +1,481 @@ @@ -146033,7 +146062,7 @@ index 000000000000..53578ded58b9 +#endif diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_defs.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_defs.h new file mode 100755 -index 000000000000..bd2eb8a12047 +index 000000000..bd2eb8a12 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_defs.h @@ -0,0 +1,60 @@ @@ -146099,7 +146128,7 @@ index 000000000000..bd2eb8a12047 +#endif /* _KBASE_INSTR_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_internal.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_internal.h new file mode 100755 -index 000000000000..332cc6944d94 +index 000000000..332cc6944 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_instr_internal.h @@ -0,0 +1,41 @@ @@ -146146,7 +146175,7 @@ index 000000000000..332cc6944d94 +#endif /* _KBASE_INSTR_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_irq_internal.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_irq_internal.h new file mode 100755 -index 000000000000..66cda8c0b647 +index 000000000..66cda8c0b --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_irq_internal.h @@ -0,0 +1,47 @@ @@ -146199,7 +146228,7 @@ index 000000000000..66cda8c0b647 +#endif /* _KBASE_IRQ_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_irq_linux.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_irq_linux.c new file mode 100755 -index 000000000000..eb63b2c56c3d +index 000000000..eb63b2c56 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_irq_linux.c @@ -0,0 +1,503 @@ @@ -146708,7 +146737,7 @@ index 000000000000..eb63b2c56c3d +#endif /* IS_ENABLED(CONFIG_MALI_REAL_HW) */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_as.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_as.c new file mode 100755 -index 000000000000..258dc6dac6c5 +index 000000000..258dc6dac --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_as.c @@ -0,0 +1,241 @@ @@ -146955,7 +146984,7 @@ index 000000000000..258dc6dac6c5 +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_defs.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_defs.h new file mode 100755 -index 000000000000..136aa526d41e +index 000000000..136aa526d --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_defs.h @@ -0,0 +1,135 @@ @@ -147096,7 +147125,7 @@ index 000000000000..136aa526d41e +#endif /* _KBASE_HWACCESS_GPU_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_hw.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_hw.c new file mode 100755 -index 000000000000..c7257117e98a +index 000000000..c7257117e --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_hw.c @@ -0,0 +1,1513 @@ @@ -148615,7 +148644,7 @@ index 000000000000..c7257117e98a +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_internal.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_internal.h new file mode 100755 -index 000000000000..bfd55a6e2160 +index 000000000..bfd55a6e2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_internal.h @@ -0,0 +1,148 @@ @@ -148769,7 +148798,7 @@ index 000000000000..bfd55a6e2160 +#endif /* _KBASE_JM_HWACCESS_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_rb.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_rb.c new file mode 100755 -index 000000000000..7db2b353b67a +index 000000000..7db2b353b --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_rb.c @@ -0,0 +1,1873 @@ @@ -150648,7 +150677,7 @@ index 000000000000..7db2b353b67a +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_rb.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_rb.h new file mode 100755 -index 000000000000..32be0bf44655 +index 000000000..32be0bf44 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_jm_rb.h @@ -0,0 +1,77 @@ @@ -150731,7 +150760,7 @@ index 000000000000..32be0bf44655 +#endif /* _KBASE_HWACCESS_GPU_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_js_backend.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_js_backend.c new file mode 100755 -index 000000000000..cbc88f91a400 +index 000000000..cbc88f91a --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_js_backend.c @@ -0,0 +1,377 @@ @@ -151114,7 +151143,7 @@ index 000000000000..cbc88f91a400 +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_js_internal.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_js_internal.h new file mode 100755 -index 000000000000..4f7c371a1f1a +index 000000000..4f7c371a1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_js_internal.h @@ -0,0 +1,72 @@ @@ -151192,7 +151221,7 @@ index 000000000000..4f7c371a1f1a +#endif /* _KBASE_JS_BACKEND_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_l2_mmu_config.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_l2_mmu_config.c new file mode 100755 -index 000000000000..9ce50758c240 +index 000000000..9ce50758c --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_l2_mmu_config.c @@ -0,0 +1,131 @@ @@ -151329,7 +151358,7 @@ index 000000000000..9ce50758c240 +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_l2_mmu_config.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_l2_mmu_config.h new file mode 100755 -index 000000000000..07014ad360d8 +index 000000000..07014ad36 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_l2_mmu_config.h @@ -0,0 +1,36 @@ @@ -151371,7 +151400,7 @@ index 000000000000..07014ad360d8 +#endif /* _KBASE_L2_MMU_CONFIG_H */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.c new file mode 100644 -index 000000000000..6db7031764ea +index 000000000..6db703176 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.c @@ -0,0 +1,2229 @@ @@ -153606,7 +153635,7 @@ index 000000000000..6db7031764ea +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.h new file mode 100644 -index 000000000000..84842291c0f7 +index 000000000..84842291c --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.h @@ -0,0 +1,224 @@ @@ -153836,7 +153865,7 @@ index 000000000000..84842291c0f7 +#endif diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_error_generator.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_error_generator.c new file mode 100644 -index 000000000000..f310cc74cb24 +index 000000000..f310cc74c --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_error_generator.c @@ -0,0 +1,183 @@ @@ -154025,7 +154054,7 @@ index 000000000000..f310cc74cb24 +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.c new file mode 100644 -index 000000000000..e90e4df2f494 +index 000000000..e90e4df2f --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.c @@ -0,0 +1,244 @@ @@ -154275,7 +154304,7 @@ index 000000000000..e90e4df2f494 +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.h new file mode 100644 -index 000000000000..8f09afe3d1cc +index 000000000..8f09afe3d --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.h @@ -0,0 +1,151 @@ @@ -154432,7 +154461,7 @@ index 000000000000..8f09afe3d1cc +#endif /* _KBASE_MODEL_LINUX_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_always_on.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_always_on.c new file mode 100755 -index 000000000000..bbf629065877 +index 000000000..bbf629065 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_always_on.c @@ -0,0 +1,73 @@ @@ -154511,7 +154540,7 @@ index 000000000000..bbf629065877 +KBASE_EXPORT_TEST_API(kbase_pm_always_on_policy_ops); diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_always_on.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_always_on.h new file mode 100755 -index 000000000000..98d35dabec88 +index 000000000..98d35dabe --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_always_on.h @@ -0,0 +1,78 @@ @@ -154595,7 +154624,7 @@ index 000000000000..98d35dabec88 + diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_backend.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_backend.c new file mode 100755 -index 000000000000..5c71fdf154b9 +index 000000000..5c71fdf15 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_backend.c @@ -0,0 +1,1238 @@ @@ -155839,7 +155868,7 @@ index 000000000000..5c71fdf154b9 +#endif diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca.c new file mode 100755 -index 000000000000..e2b0a919282e +index 000000000..e2b0a9192 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca.c @@ -0,0 +1,150 @@ @@ -155995,7 +156024,7 @@ index 000000000000..e2b0a919282e +} diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca.h new file mode 100755 -index 000000000000..90dcaf5b67db +index 000000000..90dcaf5b6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca.h @@ -0,0 +1,88 @@ @@ -156089,7 +156118,7 @@ index 000000000000..90dcaf5b67db +#endif /* _KBASE_PM_CA_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca_devfreq.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca_devfreq.h new file mode 100755 -index 000000000000..d1e4b5327f8f +index 000000000..d1e4b5327 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_ca_devfreq.h @@ -0,0 +1,59 @@ @@ -156154,7 +156183,7 @@ index 000000000000..d1e4b5327f8f + diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_coarse_demand.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_coarse_demand.c new file mode 100755 -index 000000000000..f40b753850df +index 000000000..f40b75385 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_coarse_demand.c @@ -0,0 +1,67 @@ @@ -156227,7 +156256,7 @@ index 000000000000..f40b753850df +KBASE_EXPORT_TEST_API(kbase_pm_coarse_demand_policy_ops); diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_coarse_demand.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_coarse_demand.h new file mode 100755 -index 000000000000..a947e8f55643 +index 000000000..a947e8f55 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_coarse_demand.h @@ -0,0 +1,64 @@ @@ -156297,7 +156326,7 @@ index 000000000000..a947e8f55643 +#endif /* MALI_KBASE_PM_COARSE_DEMAND_H */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_defs.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_defs.h new file mode 100755 -index 000000000000..75d99a30efc0 +index 000000000..75d99a30e --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_defs.h @@ -0,0 +1,649 @@ @@ -156952,7 +156981,7 @@ index 000000000000..75d99a30efc0 +#endif /* _KBASE_PM_HWACCESS_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_driver.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_driver.c new file mode 100755 -index 000000000000..5be8acd75d0a +index 000000000..5be8acd75 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_driver.c @@ -0,0 +1,3417 @@ @@ -160375,7 +160404,7 @@ index 000000000000..5be8acd75d0a +KBASE_EXPORT_TEST_API(kbase_pm_release_gpu_cycle_counter); diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_internal.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_internal.h new file mode 100755 -index 000000000000..e66ce57d3120 +index 000000000..e66ce57d3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_internal.h @@ -0,0 +1,1021 @@ @@ -161402,7 +161431,7 @@ index 000000000000..e66ce57d3120 +#endif /* _KBASE_BACKEND_PM_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_l2_states.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_l2_states.h new file mode 100755 -index 000000000000..ef72f6083afd +index 000000000..ef72f6083 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_l2_states.h @@ -0,0 +1,50 @@ @@ -161458,7 +161487,7 @@ index 000000000000..ef72f6083afd +KBASEP_L2_STATE(RESET_WAIT) diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_mcu_states.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_mcu_states.h new file mode 100755 -index 000000000000..3b448e397e72 +index 000000000..3b448e397 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_mcu_states.h @@ -0,0 +1,108 @@ @@ -161572,7 +161601,7 @@ index 000000000000..3b448e397e72 +#endif /* IS_ENABLED(CONFIG_MALI_CORESIGHT) */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_metrics.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_metrics.c new file mode 100755 -index 000000000000..865f526f61f2 +index 000000000..865f526f6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_metrics.c @@ -0,0 +1,529 @@ @@ -162107,7 +162136,7 @@ index 000000000000..865f526f61f2 +#endif /* !MALI_USE_CSF */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_policy.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_policy.c new file mode 100755 -index 000000000000..4788f04132c1 +index 000000000..4788f0413 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_policy.c @@ -0,0 +1,426 @@ @@ -162539,7 +162568,7 @@ index 000000000000..4788f04132c1 +KBASE_EXPORT_TEST_API(kbase_pm_set_policy); diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_policy.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_policy.h new file mode 100755 -index 000000000000..e8113659b92e +index 000000000..e8113659b --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_policy.h @@ -0,0 +1,105 @@ @@ -162650,7 +162679,7 @@ index 000000000000..e8113659b92e +#endif /* _KBASE_PM_POLICY_H_ */ diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_shader_states.h b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_shader_states.h new file mode 100755 -index 000000000000..8622ef78d363 +index 000000000..8622ef78d --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_pm_shader_states.h @@ -0,0 +1,79 @@ @@ -162735,7 +162764,7 @@ index 000000000000..8622ef78d363 +KBASEP_SHADER_STATE(RESET_WAIT) diff --git a/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_time.c b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_time.c new file mode 100755 -index 000000000000..1b33461796e2 +index 000000000..1b3346179 --- /dev/null +++ b/drivers/gpu/arm/bifrost/backend/gpu/mali_kbase_time.c @@ -0,0 +1,279 @@ @@ -163020,7 +163049,7 @@ index 000000000000..1b33461796e2 +} diff --git a/drivers/gpu/arm/bifrost/build.bp b/drivers/gpu/arm/bifrost/build.bp new file mode 100755 -index 000000000000..0a61a12d902a +index 000000000..0a61a12d9 --- /dev/null +++ b/drivers/gpu/arm/bifrost/build.bp @@ -0,0 +1,280 @@ @@ -163306,7 +163335,7 @@ index 000000000000..0a61a12d902a +} diff --git a/drivers/gpu/arm/bifrost/context/Kbuild b/drivers/gpu/arm/bifrost/context/Kbuild new file mode 100644 -index 000000000000..156b46a12870 +index 000000000..156b46a12 --- /dev/null +++ b/drivers/gpu/arm/bifrost/context/Kbuild @@ -0,0 +1,27 @@ @@ -163339,7 +163368,7 @@ index 000000000000..156b46a12870 +endif diff --git a/drivers/gpu/arm/bifrost/context/backend/mali_kbase_context_csf.c b/drivers/gpu/arm/bifrost/context/backend/mali_kbase_context_csf.c new file mode 100755 -index 000000000000..07d277b947d2 +index 000000000..07d277b94 --- /dev/null +++ b/drivers/gpu/arm/bifrost/context/backend/mali_kbase_context_csf.c @@ -0,0 +1,207 @@ @@ -163552,7 +163581,7 @@ index 000000000000..07d277b947d2 +KBASE_EXPORT_SYMBOL(kbase_destroy_context); diff --git a/drivers/gpu/arm/bifrost/context/backend/mali_kbase_context_jm.c b/drivers/gpu/arm/bifrost/context/backend/mali_kbase_context_jm.c new file mode 100755 -index 000000000000..995a08e36f43 +index 000000000..995a08e36 --- /dev/null +++ b/drivers/gpu/arm/bifrost/context/backend/mali_kbase_context_jm.c @@ -0,0 +1,271 @@ @@ -163829,7 +163858,7 @@ index 000000000000..995a08e36f43 +KBASE_EXPORT_SYMBOL(kbase_destroy_context); diff --git a/drivers/gpu/arm/bifrost/context/mali_kbase_context.c b/drivers/gpu/arm/bifrost/context/mali_kbase_context.c new file mode 100755 -index 000000000000..88be6c2e7587 +index 000000000..88be6c2e7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/context/mali_kbase_context.c @@ -0,0 +1,392 @@ @@ -164227,7 +164256,7 @@ index 000000000000..88be6c2e7587 +} diff --git a/drivers/gpu/arm/bifrost/context/mali_kbase_context.h b/drivers/gpu/arm/bifrost/context/mali_kbase_context.h new file mode 100755 -index 000000000000..7c90e2708fa3 +index 000000000..7c90e2708 --- /dev/null +++ b/drivers/gpu/arm/bifrost/context/mali_kbase_context.h @@ -0,0 +1,141 @@ @@ -164374,7 +164403,7 @@ index 000000000000..7c90e2708fa3 +#endif /* _KBASE_CONTEXT_H_ */ diff --git a/drivers/gpu/arm/bifrost/context/mali_kbase_context_internal.h b/drivers/gpu/arm/bifrost/context/mali_kbase_context_internal.h new file mode 100755 -index 000000000000..1cde7394c705 +index 000000000..1cde7394c --- /dev/null +++ b/drivers/gpu/arm/bifrost/context/mali_kbase_context_internal.h @@ -0,0 +1,54 @@ @@ -164434,7 +164463,7 @@ index 000000000000..1cde7394c705 +void kbase_context_remove_from_dev_list(struct kbase_context *kctx); diff --git a/drivers/gpu/arm/bifrost/csf/Kbuild b/drivers/gpu/arm/bifrost/csf/Kbuild new file mode 100755 -index 000000000000..44217dba10c0 +index 000000000..44217dba1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/Kbuild @@ -0,0 +1,58 @@ @@ -164498,7 +164527,7 @@ index 000000000000..44217dba10c0 +endif diff --git a/drivers/gpu/arm/bifrost/csf/ipa_control/Kbuild b/drivers/gpu/arm/bifrost/csf/ipa_control/Kbuild new file mode 100644 -index 000000000000..dc30281e4781 +index 000000000..dc30281e4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/ipa_control/Kbuild @@ -0,0 +1,22 @@ @@ -164526,7 +164555,7 @@ index 000000000000..dc30281e4781 + csf/ipa_control/mali_kbase_csf_ipa_control.o diff --git a/drivers/gpu/arm/bifrost/csf/ipa_control/mali_kbase_csf_ipa_control.c b/drivers/gpu/arm/bifrost/csf/ipa_control/mali_kbase_csf_ipa_control.c new file mode 100644 -index 000000000000..c81d0a5a7236 +index 000000000..c81d0a5a7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/ipa_control/mali_kbase_csf_ipa_control.c @@ -0,0 +1,1063 @@ @@ -165595,7 +165624,7 @@ index 000000000000..c81d0a5a7236 + diff --git a/drivers/gpu/arm/bifrost/csf/ipa_control/mali_kbase_csf_ipa_control.h b/drivers/gpu/arm/bifrost/csf/ipa_control/mali_kbase_csf_ipa_control.h new file mode 100644 -index 000000000000..69ff8973bac4 +index 000000000..69ff8973b --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/ipa_control/mali_kbase_csf_ipa_control.h @@ -0,0 +1,271 @@ @@ -165872,7 +165901,7 @@ index 000000000000..69ff8973bac4 +#endif /* _KBASE_CSF_IPA_CONTROL_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf.c new file mode 100755 -index 000000000000..7a939fc3382d +index 000000000..7a939fc33 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf.c @@ -0,0 +1,3289 @@ @@ -169167,7 +169196,7 @@ index 000000000000..7a939fc3382d +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf.h new file mode 100755 -index 000000000000..dd947dcbab1c +index 000000000..dd947dcba --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf.h @@ -0,0 +1,506 @@ @@ -169679,7 +169708,7 @@ index 000000000000..dd947dcbab1c +#endif /* _KBASE_CSF_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_cpu_queue_debugfs.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_cpu_queue_debugfs.c new file mode 100644 -index 000000000000..516a33ff7465 +index 000000000..516a33ff7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_cpu_queue_debugfs.c @@ -0,0 +1,191 @@ @@ -169876,7 +169905,7 @@ index 000000000000..516a33ff7465 +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_cpu_queue_debugfs.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_cpu_queue_debugfs.h new file mode 100644 -index 000000000000..435a993955fe +index 000000000..435a99395 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_cpu_queue_debugfs.h @@ -0,0 +1,90 @@ @@ -169972,7 +170001,7 @@ index 000000000000..435a993955fe +#endif /* _KBASE_CSF_CPU_QUEUE_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_csg_debugfs.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_csg_debugfs.c new file mode 100755 -index 000000000000..e96044ae6239 +index 000000000..e96044ae6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_csg_debugfs.c @@ -0,0 +1,767 @@ @@ -170745,7 +170774,7 @@ index 000000000000..e96044ae6239 +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_csg_debugfs.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_csg_debugfs.h new file mode 100755 -index 000000000000..16a548bf8acb +index 000000000..16a548bf8 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_csg_debugfs.h @@ -0,0 +1,54 @@ @@ -170805,7 +170834,7 @@ index 000000000000..16a548bf8acb +#endif /* _KBASE_CSF_CSG_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_defs.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_defs.h new file mode 100755 -index 000000000000..6fa0e27d657f +index 000000000..6fa0e27d6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_defs.h @@ -0,0 +1,1666 @@ @@ -172477,7 +172506,7 @@ index 000000000000..6fa0e27d657f +#endif /* _KBASE_CSF_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_event.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_event.c new file mode 100644 -index 000000000000..49e52938499f +index 000000000..49e529384 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_event.c @@ -0,0 +1,265 @@ @@ -172748,7 +172777,7 @@ index 000000000000..49e52938499f +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_event.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_event.h new file mode 100644 -index 000000000000..52122a9ef4d1 +index 000000000..52122a9ef --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_event.h @@ -0,0 +1,171 @@ @@ -172925,7 +172954,7 @@ index 000000000000..52122a9ef4d1 +#endif /* _KBASE_CSF_EVENT_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware.c new file mode 100755 -index 000000000000..42bff1e91584 +index 000000000..42bff1e91 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware.c @@ -0,0 +1,3144 @@ @@ -176075,7 +176104,7 @@ index 000000000000..42bff1e91584 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware.h new file mode 100755 -index 000000000000..714a14001189 +index 000000000..714a14001 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware.h @@ -0,0 +1,916 @@ @@ -176997,7 +177026,7 @@ index 000000000000..714a14001189 +#endif diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c new file mode 100755 -index 000000000000..c895b080143a +index 000000000..c895b0801 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.c @@ -0,0 +1,354 @@ @@ -177357,7 +177386,7 @@ index 000000000000..c895b080143a +#endif /* CONFIG_SYSFS */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.h new file mode 100755 -index 000000000000..b227cf158925 +index 000000000..b227cf158 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_cfg.h @@ -0,0 +1,72 @@ @@ -177435,7 +177464,7 @@ index 000000000000..b227cf158925 +#endif /* _KBASE_CSF_FIRMWARE_CFG_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_core_dump.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_core_dump.c new file mode 100644 -index 000000000000..f0a10d197eec +index 000000000..f0a10d197 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_core_dump.c @@ -0,0 +1,807 @@ @@ -178248,7 +178277,7 @@ index 000000000000..f0a10d197eec +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_core_dump.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_core_dump.h new file mode 100644 -index 000000000000..0537dca4f37f +index 000000000..0537dca4f --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_core_dump.h @@ -0,0 +1,65 @@ @@ -178319,7 +178348,7 @@ index 000000000000..0537dca4f37f +#endif /* _KBASE_CSF_FIRMWARE_CORE_DUMP_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_log.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_log.c new file mode 100644 -index 000000000000..6e0d3c2f5071 +index 000000000..6e0d3c2f5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_log.c @@ -0,0 +1,451 @@ @@ -178776,7 +178805,7 @@ index 000000000000..6e0d3c2f5071 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_log.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_log.h new file mode 100644 -index 000000000000..1008320464a9 +index 000000000..100832046 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_log.h @@ -0,0 +1,77 @@ @@ -178859,7 +178888,7 @@ index 000000000000..1008320464a9 +#endif /* _KBASE_CSF_FIRMWARE_LOG_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_no_mali.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_no_mali.c new file mode 100755 -index 000000000000..833947facce3 +index 000000000..833947fac --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_firmware_no_mali.c @@ -0,0 +1,1661 @@ @@ -180526,7 +180555,7 @@ index 000000000000..833947facce3 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_heap_context_alloc.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_heap_context_alloc.c new file mode 100755 -index 000000000000..7c14b8eb554c +index 000000000..7c14b8eb5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_heap_context_alloc.c @@ -0,0 +1,236 @@ @@ -180768,7 +180797,7 @@ index 000000000000..7c14b8eb554c +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_heap_context_alloc.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_heap_context_alloc.h new file mode 100755 -index 000000000000..9aab7abfb649 +index 000000000..9aab7abfb --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_heap_context_alloc.h @@ -0,0 +1,75 @@ @@ -180849,7 +180878,7 @@ index 000000000000..9aab7abfb649 +#endif /* _KBASE_CSF_HEAP_CONTEXT_ALLOC_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu.c new file mode 100755 -index 000000000000..da8dde239972 +index 000000000..da8dde239 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu.c @@ -0,0 +1,2595 @@ @@ -183450,7 +183479,7 @@ index 000000000000..da8dde239972 +KBASE_EXPORT_TEST_API(kbase_csf_kcpu_queue_new); diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu.h new file mode 100755 -index 000000000000..5cad8b200c93 +index 000000000..5cad8b200 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu.h @@ -0,0 +1,384 @@ @@ -183840,7 +183869,7 @@ index 000000000000..5cad8b200c93 +#endif /* _KBASE_CSF_KCPU_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu_debugfs.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu_debugfs.c new file mode 100755 -index 000000000000..fa877778ca79 +index 000000000..fa877778c --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu_debugfs.c @@ -0,0 +1,193 @@ @@ -184039,7 +184068,7 @@ index 000000000000..fa877778ca79 +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu_debugfs.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu_debugfs.h new file mode 100755 -index 000000000000..08f2fda034a2 +index 000000000..08f2fda03 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_kcpu_debugfs.h @@ -0,0 +1,37 @@ @@ -184082,7 +184111,7 @@ index 000000000000..08f2fda034a2 +#endif /* _KBASE_CSF_KCPU_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_mcu_shared_reg.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_mcu_shared_reg.c new file mode 100644 -index 000000000000..4056a9d933d7 +index 000000000..4056a9d93 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_mcu_shared_reg.c @@ -0,0 +1,817 @@ @@ -184905,7 +184934,7 @@ index 000000000000..4056a9d933d7 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_mcu_shared_reg.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_mcu_shared_reg.h new file mode 100644 -index 000000000000..61943cbbf083 +index 000000000..61943cbbf --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_mcu_shared_reg.h @@ -0,0 +1,139 @@ @@ -185050,7 +185079,7 @@ index 000000000000..61943cbbf083 +#endif /* _KBASE_CSF_MCU_SHARED_REG_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_protected_memory.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_protected_memory.c new file mode 100755 -index 000000000000..bf1835b5be25 +index 000000000..bf1835b5b --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_protected_memory.c @@ -0,0 +1,163 @@ @@ -185219,7 +185248,7 @@ index 000000000000..bf1835b5be25 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_protected_memory.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_protected_memory.h new file mode 100755 -index 000000000000..8c1aa919fbb0 +index 000000000..8c1aa919f --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_protected_memory.h @@ -0,0 +1,75 @@ @@ -185300,7 +185329,7 @@ index 000000000000..8c1aa919fbb0 +#endif diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_registers.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_registers.h new file mode 100644 -index 000000000000..b5bf7bbbc056 +index 000000000..b5bf7bbbc --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_registers.h @@ -0,0 +1,1678 @@ @@ -186984,7 +187013,7 @@ index 000000000000..b5bf7bbbc056 +#endif /* _KBASE_CSF_REGISTERS_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_reset_gpu.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_reset_gpu.c new file mode 100755 -index 000000000000..fe3b91a4845d +index 000000000..fe3b91a48 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_reset_gpu.c @@ -0,0 +1,637 @@ @@ -187627,7 +187656,7 @@ index 000000000000..fe3b91a4845d +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_scheduler.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_scheduler.c new file mode 100755 -index 000000000000..edaa6d17e304 +index 000000000..edaa6d17e --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_scheduler.c @@ -0,0 +1,6889 @@ @@ -194522,7 +194551,7 @@ index 000000000000..edaa6d17e304 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_scheduler.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_scheduler.h new file mode 100755 -index 000000000000..d22d7c8b9dce +index 000000000..d22d7c8b9 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_scheduler.h @@ -0,0 +1,681 @@ @@ -195209,7 +195238,7 @@ index 000000000000..d22d7c8b9dce +#endif /* _KBASE_CSF_SCHEDULER_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_sync_debugfs.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_sync_debugfs.c new file mode 100644 -index 000000000000..a5e0ab5eaf17 +index 000000000..a5e0ab5ea --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_sync_debugfs.c @@ -0,0 +1,788 @@ @@ -196003,7 +196032,7 @@ index 000000000000..a5e0ab5eaf17 +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_sync_debugfs.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_sync_debugfs.h new file mode 100644 -index 000000000000..177e15d85341 +index 000000000..177e15d85 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_sync_debugfs.h @@ -0,0 +1,37 @@ @@ -196046,7 +196075,7 @@ index 000000000000..177e15d85341 +#endif /* _KBASE_CSF_SYNC_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap.c new file mode 100755 -index 000000000000..8072a8bd2c32 +index 000000000..8072a8bd2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap.c @@ -0,0 +1,1372 @@ @@ -197424,7 +197453,7 @@ index 000000000000..8072a8bd2c32 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap.h new file mode 100755 -index 000000000000..1b5cb560894f +index 000000000..1b5cb5608 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap.h @@ -0,0 +1,142 @@ @@ -197572,7 +197601,7 @@ index 000000000000..1b5cb560894f +#endif diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_debugfs.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_debugfs.c new file mode 100755 -index 000000000000..96e0f2829854 +index 000000000..96e0f2829 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_debugfs.c @@ -0,0 +1,162 @@ @@ -197740,7 +197769,7 @@ index 000000000000..96e0f2829854 + diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_debugfs.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_debugfs.h new file mode 100755 -index 000000000000..4a1b413eff6d +index 000000000..4a1b413ef --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_debugfs.h @@ -0,0 +1,44 @@ @@ -197790,7 +197819,7 @@ index 000000000000..4a1b413eff6d +#endif /* _KBASE_CSF_TILER_HEAP_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_def.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_def.h new file mode 100755 -index 000000000000..96f2b03d2d31 +index 000000000..96f2b03d2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_def.h @@ -0,0 +1,140 @@ @@ -197936,7 +197965,7 @@ index 000000000000..96f2b03d2d31 +#endif /* !_KBASE_CSF_TILER_HEAP_DEF_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_reclaim.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_reclaim.c new file mode 100644 -index 000000000000..6357e3518d87 +index 000000000..6357e3518 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_reclaim.c @@ -0,0 +1,359 @@ @@ -198301,7 +198330,7 @@ index 000000000000..6357e3518d87 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_reclaim.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_reclaim.h new file mode 100644 -index 000000000000..b6e580e48df6 +index 000000000..b6e580e48 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tiler_heap_reclaim.h @@ -0,0 +1,80 @@ @@ -198387,7 +198416,7 @@ index 000000000000..b6e580e48df6 +#endif diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_timeout.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_timeout.c new file mode 100755 -index 000000000000..ea6c11624157 +index 000000000..ea6c11624 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_timeout.c @@ -0,0 +1,177 @@ @@ -198570,7 +198599,7 @@ index 000000000000..ea6c11624157 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_timeout.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_timeout.h new file mode 100755 -index 000000000000..b406eaad2d51 +index 000000000..b406eaad2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_timeout.h @@ -0,0 +1,66 @@ @@ -198642,7 +198671,7 @@ index 000000000000..b406eaad2d51 +#endif /* _KBASE_CSF_TIMEOUT_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tl_reader.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tl_reader.c new file mode 100755 -index 000000000000..6859d65295c4 +index 000000000..6859d6529 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tl_reader.c @@ -0,0 +1,441 @@ @@ -199089,7 +199118,7 @@ index 000000000000..6859d65295c4 +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tl_reader.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tl_reader.h new file mode 100755 -index 000000000000..12b285fd2929 +index 000000000..12b285fd2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_tl_reader.h @@ -0,0 +1,146 @@ @@ -199241,7 +199270,7 @@ index 000000000000..12b285fd2929 +#endif /* _KBASE_CSFFW_TL_READER_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_trace_buffer.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_trace_buffer.c new file mode 100755 -index 000000000000..46872f937dbf +index 000000000..46872f937 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_trace_buffer.c @@ -0,0 +1,555 @@ @@ -199802,7 +199831,7 @@ index 000000000000..46872f937dbf +} diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_trace_buffer.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_trace_buffer.h new file mode 100755 -index 000000000000..0389d093a904 +index 000000000..0389d093a --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_csf_trace_buffer.h @@ -0,0 +1,187 @@ @@ -199995,7 +200024,7 @@ index 000000000000..0389d093a904 +#endif /* _KBASE_CSF_TRACE_BUFFER_H_ */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_debug_csf_fault.c b/drivers/gpu/arm/bifrost/csf/mali_kbase_debug_csf_fault.c new file mode 100644 -index 000000000000..185779c16815 +index 000000000..185779c16 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_debug_csf_fault.c @@ -0,0 +1,271 @@ @@ -200272,7 +200301,7 @@ index 000000000000..185779c16815 +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/csf/mali_kbase_debug_csf_fault.h b/drivers/gpu/arm/bifrost/csf/mali_kbase_debug_csf_fault.h new file mode 100644 -index 000000000000..6e9b1a9d51de +index 000000000..6e9b1a9d5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/csf/mali_kbase_debug_csf_fault.h @@ -0,0 +1,137 @@ @@ -200415,7 +200444,7 @@ index 000000000000..6e9b1a9d51de +#endif /*_KBASE_DEBUG_CSF_FAULT_H*/ diff --git a/drivers/gpu/arm/bifrost/debug/Kbuild b/drivers/gpu/arm/bifrost/debug/Kbuild new file mode 100644 -index 000000000000..ebf3ddb763a2 +index 000000000..ebf3ddb76 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/Kbuild @@ -0,0 +1,28 @@ @@ -200449,7 +200478,7 @@ index 000000000000..ebf3ddb763a2 +endif diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_coresight_csf.c b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_coresight_csf.c new file mode 100644 -index 000000000000..ff5f947e2da5 +index 000000000..ff5f947e2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_coresight_csf.c @@ -0,0 +1,851 @@ @@ -201306,7 +201335,7 @@ index 000000000000..ff5f947e2da5 +} diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_coresight_internal_csf.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_coresight_internal_csf.h new file mode 100644 -index 000000000000..06d62dc70182 +index 000000000..06d62dc70 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_coresight_internal_csf.h @@ -0,0 +1,182 @@ @@ -201494,7 +201523,7 @@ index 000000000000..06d62dc70182 +#endif /* _KBASE_DEBUG_CORESIGHT_INTERNAL_CSF_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_codes_csf.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_codes_csf.h new file mode 100755 -index 000000000000..41b2b00f18c8 +index 000000000..41b2b00f1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_codes_csf.h @@ -0,0 +1,322 @@ @@ -201822,7 +201851,7 @@ index 000000000000..41b2b00f18c8 + /* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_codes_jm.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_codes_jm.h new file mode 100755 -index 000000000000..6ba98b7c4a6c +index 000000000..6ba98b7c4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_codes_jm.h @@ -0,0 +1,206 @@ @@ -202034,7 +202063,7 @@ index 000000000000..6ba98b7c4a6c +/* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_csf.c b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_csf.c new file mode 100755 -index 000000000000..cff6f8959c35 +index 000000000..cff6f8959 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_csf.c @@ -0,0 +1,199 @@ @@ -202239,7 +202268,7 @@ index 000000000000..cff6f8959c35 +#endif /* KBASE_KTRACE_TARGET_RBUF */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_csf.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_csf.h new file mode 100755 -index 000000000000..e3d03730734d +index 000000000..e3d037307 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_csf.h @@ -0,0 +1,203 @@ @@ -202448,7 +202477,7 @@ index 000000000000..e3d03730734d +#endif /* _KBASE_DEBUG_KTRACE_CSF_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_defs_csf.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_defs_csf.h new file mode 100755 -index 000000000000..1896e10ed4ab +index 000000000..1896e10ed --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_defs_csf.h @@ -0,0 +1,116 @@ @@ -202570,7 +202599,7 @@ index 000000000000..1896e10ed4ab +#endif /* _KBASE_DEBUG_KTRACE_DEFS_CSF_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_defs_jm.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_defs_jm.h new file mode 100755 -index 000000000000..efa8ab05b1cd +index 000000000..efa8ab05b --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_defs_jm.h @@ -0,0 +1,112 @@ @@ -202688,7 +202717,7 @@ index 000000000000..efa8ab05b1cd +#endif /* _KBASE_DEBUG_KTRACE_DEFS_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_jm.c b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_jm.c new file mode 100755 -index 000000000000..6597a15e5000 +index 000000000..6597a15e5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_jm.c @@ -0,0 +1,121 @@ @@ -202815,7 +202844,7 @@ index 000000000000..6597a15e5000 +#endif /* KBASE_KTRACE_TARGET_RBUF */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_jm.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_jm.h new file mode 100755 -index 000000000000..41be7a120dcc +index 000000000..41be7a120 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_ktrace_jm.h @@ -0,0 +1,309 @@ @@ -203130,7 +203159,7 @@ index 000000000000..41be7a120dcc +#endif /* _KBASE_DEBUG_KTRACE_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_linux_ktrace_csf.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_linux_ktrace_csf.h new file mode 100755 -index 000000000000..ddcac906c492 +index 000000000..ddcac906c --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_linux_ktrace_csf.h @@ -0,0 +1,267 @@ @@ -203403,7 +203432,7 @@ index 000000000000..ddcac906c492 +#endif /* !defined(_KBASE_DEBUG_LINUX_KTRACE_CSF_H_) || defined(TRACE_HEADER_MULTI_READ) */ diff --git a/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_linux_ktrace_jm.h b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_linux_ktrace_jm.h new file mode 100755 -index 000000000000..8fa4e2a7c10b +index 000000000..8fa4e2a7c --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/backend/mali_kbase_debug_linux_ktrace_jm.h @@ -0,0 +1,174 @@ @@ -203583,7 +203612,7 @@ index 000000000000..8fa4e2a7c10b +#endif /* !defined(_KBASE_DEBUG_LINUX_KTRACE_JM_H_) || defined(TRACE_HEADER_MULTI_READ)*/ diff --git a/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace.c b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace.c new file mode 100755 -index 000000000000..f521b47120fb +index 000000000..f521b4712 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace.c @@ -0,0 +1,361 @@ @@ -203950,7 +203979,7 @@ index 000000000000..f521b47120fb +#endif /* KBASE_KTRACE_TARGET_RBUF */ diff --git a/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace.h b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace.h new file mode 100755 -index 000000000000..11f0b5c42c89 +index 000000000..11f0b5c42 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace.h @@ -0,0 +1,238 @@ @@ -204194,7 +204223,7 @@ index 000000000000..11f0b5c42c89 +#endif /* _KBASE_DEBUG_KTRACE_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_codes.h b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_codes.h new file mode 100755 -index 000000000000..6103c3ee04a8 +index 000000000..6103c3ee0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_codes.h @@ -0,0 +1,181 @@ @@ -204381,7 +204410,7 @@ index 000000000000..6103c3ee04a8 +/* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ diff --git a/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_defs.h b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_defs.h new file mode 100755 -index 000000000000..a0fc9e51d274 +index 000000000..a0fc9e51d --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_defs.h @@ -0,0 +1,187 @@ @@ -204574,7 +204603,7 @@ index 000000000000..a0fc9e51d274 +#endif /* _KBASE_DEBUG_KTRACE_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_internal.h b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_internal.h new file mode 100755 -index 000000000000..ba93f29fe5e6 +index 000000000..ba93f29fe --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_ktrace_internal.h @@ -0,0 +1,90 @@ @@ -204670,7 +204699,7 @@ index 000000000000..ba93f29fe5e6 +#endif /* _KBASE_DEBUG_KTRACE_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_linux_ktrace.h b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_linux_ktrace.h new file mode 100755 -index 000000000000..6d96647161b4 +index 000000000..6d9664716 --- /dev/null +++ b/drivers/gpu/arm/bifrost/debug/mali_kbase_debug_linux_ktrace.h @@ -0,0 +1,123 @@ @@ -204799,7 +204828,7 @@ index 000000000000..6d96647161b4 +#endif /* !defined(_KBASE_DEBUG_LINUX_KTRACE_H_) || defined(TRACE_HEADER_MULTI_READ) */ diff --git a/drivers/gpu/arm/bifrost/device/Kbuild b/drivers/gpu/arm/bifrost/device/Kbuild new file mode 100644 -index 000000000000..723ffd215696 +index 000000000..723ffd215 --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/Kbuild @@ -0,0 +1,33 @@ @@ -204838,7 +204867,7 @@ index 000000000000..723ffd215696 +endif diff --git a/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_csf.c b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_csf.c new file mode 100755 -index 000000000000..f7054f5b0090 +index 000000000..f7054f5b0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_csf.c @@ -0,0 +1,525 @@ @@ -205369,7 +205398,7 @@ index 000000000000..f7054f5b0090 +KBASE_EXPORT_TEST_API(kbase_device_firmware_init_once); diff --git a/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_hw_csf.c b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_hw_csf.c new file mode 100755 -index 000000000000..2abd62aaa8b1 +index 000000000..2abd62aaa --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_hw_csf.c @@ -0,0 +1,252 @@ @@ -205627,7 +205656,7 @@ index 000000000000..2abd62aaa8b1 +#endif /* !IS_ENABLED(CONFIG_MALI_BIFROST_NO_MALI) */ diff --git a/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_hw_jm.c b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_hw_jm.c new file mode 100755 -index 000000000000..38223af213d1 +index 000000000..38223af21 --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_hw_jm.c @@ -0,0 +1,143 @@ @@ -205776,7 +205805,7 @@ index 000000000000..38223af213d1 +#endif /* IS_ENABLED(CONFIG_MALI_REAL_HW) */ diff --git a/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_jm.c b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_jm.c new file mode 100755 -index 000000000000..2d3672383630 +index 000000000..2d3672383 --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/backend/mali_kbase_device_jm.c @@ -0,0 +1,344 @@ @@ -206126,7 +206155,7 @@ index 000000000000..2d3672383630 +} diff --git a/drivers/gpu/arm/bifrost/device/mali_kbase_device.c b/drivers/gpu/arm/bifrost/device/mali_kbase_device.c new file mode 100755 -index 000000000000..b2b0cfd6cc97 +index 000000000..b2b0cfd6c --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/mali_kbase_device.c @@ -0,0 +1,611 @@ @@ -206743,7 +206772,7 @@ index 000000000000..b2b0cfd6cc97 +} diff --git a/drivers/gpu/arm/bifrost/device/mali_kbase_device.h b/drivers/gpu/arm/bifrost/device/mali_kbase_device.h new file mode 100755 -index 000000000000..f025011009d5 +index 000000000..f02501100 --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/mali_kbase_device.h @@ -0,0 +1,227 @@ @@ -206976,7 +207005,7 @@ index 000000000000..f025011009d5 +void kbase_gpu_interrupt(struct kbase_device *kbdev, u32 val); diff --git a/drivers/gpu/arm/bifrost/device/mali_kbase_device_hw.c b/drivers/gpu/arm/bifrost/device/mali_kbase_device_hw.c new file mode 100755 -index 000000000000..d55495045892 +index 000000000..d55495045 --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/mali_kbase_device_hw.c @@ -0,0 +1,291 @@ @@ -207273,7 +207302,7 @@ index 000000000000..d55495045892 +} diff --git a/drivers/gpu/arm/bifrost/device/mali_kbase_device_internal.h b/drivers/gpu/arm/bifrost/device/mali_kbase_device_internal.h new file mode 100755 -index 000000000000..6f77592dfff2 +index 000000000..6f77592df --- /dev/null +++ b/drivers/gpu/arm/bifrost/device/mali_kbase_device_internal.h @@ -0,0 +1,101 @@ @@ -207380,7 +207409,7 @@ index 000000000000..6f77592dfff2 +#endif /* MALI_USE_CSF && !IS_ENABLED(CONFIG_MALI_BIFROST_NO_MALI) */ diff --git a/drivers/gpu/arm/bifrost/gpu/Kbuild b/drivers/gpu/arm/bifrost/gpu/Kbuild new file mode 100644 -index 000000000000..f3a48caf6b2c +index 000000000..f3a48caf6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/Kbuild @@ -0,0 +1,27 @@ @@ -207413,7 +207442,7 @@ index 000000000000..f3a48caf6b2c +endif diff --git a/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_fault_csf.c b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_fault_csf.c new file mode 100755 -index 000000000000..60ba9beab91c +index 000000000..60ba9beab --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_fault_csf.c @@ -0,0 +1,179 @@ @@ -207598,7 +207627,7 @@ index 000000000000..60ba9beab91c +} diff --git a/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_fault_jm.c b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_fault_jm.c new file mode 100755 -index 000000000000..7f3743ca6432 +index 000000000..7f3743ca6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_fault_jm.c @@ -0,0 +1,176 @@ @@ -207780,7 +207809,7 @@ index 000000000000..7f3743ca6432 +} diff --git a/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_csf.h b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_csf.h new file mode 100755 -index 000000000000..e7457ddb5534 +index 000000000..e7457ddb5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_csf.h @@ -0,0 +1,381 @@ @@ -208167,7 +208196,7 @@ index 000000000000..e7457ddb5534 +#endif /* _KBASE_GPU_REGMAP_CSF_H_ */ diff --git a/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_jm.h b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_jm.h new file mode 100755 -index 000000000000..f86f493c7f7e +index 000000000..f86f493c7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_jm.h @@ -0,0 +1,276 @@ @@ -208449,7 +208478,7 @@ index 000000000000..f86f493c7f7e +#endif /* _KBASE_GPU_REGMAP_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu.c b/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu.c new file mode 100755 -index 000000000000..8a84ef54100a +index 000000000..8a84ef541 --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu.c @@ -0,0 +1,41 @@ @@ -208496,7 +208525,7 @@ index 000000000000..8a84ef54100a +} diff --git a/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu_fault.h b/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu_fault.h new file mode 100755 -index 000000000000..6a937a5ed16d +index 000000000..6a937a5ed --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu_fault.h @@ -0,0 +1,48 @@ @@ -208550,7 +208579,7 @@ index 000000000000..6a937a5ed16d +#endif /* _KBASE_GPU_FAULT_H_ */ diff --git a/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu_regmap.h b/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu_regmap.h new file mode 100755 -index 000000000000..6cef2bdd11e0 +index 000000000..6cef2bdd1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/gpu/mali_kbase_gpu_regmap.h @@ -0,0 +1,637 @@ @@ -209193,7 +209222,7 @@ index 000000000000..6cef2bdd11e0 +#endif /* _KBASE_GPU_REGMAP_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/Kbuild b/drivers/gpu/arm/bifrost/hwcnt/Kbuild new file mode 100644 -index 000000000000..c1a381b24593 +index 000000000..c1a381b24 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/Kbuild @@ -0,0 +1,37 @@ @@ -209236,7 +209265,7 @@ index 000000000000..c1a381b24593 +endif diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend.h b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend.h new file mode 100644 -index 000000000000..6cfa6f5ee6f4 +index 000000000..6cfa6f5ee --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend.h @@ -0,0 +1,225 @@ @@ -209467,7 +209496,7 @@ index 000000000000..6cfa6f5ee6f4 +#endif /* _KBASE_HWCNT_BACKEND_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf.c b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf.c new file mode 100644 -index 000000000000..4a429a6cd1ae +index 000000000..4a429a6cd --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf.c @@ -0,0 +1,1896 @@ @@ -211369,7 +211398,7 @@ index 000000000000..4a429a6cd1ae +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf.h b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf.h new file mode 100644 -index 000000000000..9c5a5c996ebd +index 000000000..9c5a5c996 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf.h @@ -0,0 +1,153 @@ @@ -211528,7 +211557,7 @@ index 000000000000..9c5a5c996ebd +#endif /* _KBASE_HWCNT_BACKEND_CSF_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if.h b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if.h new file mode 100644 -index 000000000000..382a3adaa127 +index 000000000..382a3adaa --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if.h @@ -0,0 +1,302 @@ @@ -211836,7 +211865,7 @@ index 000000000000..382a3adaa127 +#endif /* #define _KBASE_HWCNT_BACKEND_CSF_IF_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if_fw.c b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if_fw.c new file mode 100644 -index 000000000000..b11f3a4e50e2 +index 000000000..b11f3a4e5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if_fw.c @@ -0,0 +1,787 @@ @@ -212629,7 +212658,7 @@ index 000000000000..b11f3a4e50e2 +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if_fw.h b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if_fw.h new file mode 100644 -index 000000000000..71d1506694f4 +index 000000000..71d150669 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_csf_if_fw.h @@ -0,0 +1,49 @@ @@ -212684,7 +212713,7 @@ index 000000000000..71d1506694f4 +#endif /* _KBASE_HWCNT_BACKEND_CSF_IF_FW_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm.c b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm.c new file mode 100644 -index 000000000000..669701c29152 +index 000000000..669701c29 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm.c @@ -0,0 +1,860 @@ @@ -213550,7 +213579,7 @@ index 000000000000..669701c29152 +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm.h b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm.h new file mode 100644 -index 000000000000..4a6293c25473 +index 000000000..4a6293c25 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm.h @@ -0,0 +1,58 @@ @@ -213614,7 +213643,7 @@ index 000000000000..4a6293c25473 +#endif /* _KBASE_HWCNT_BACKEND_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm_watchdog.c b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm_watchdog.c new file mode 100644 -index 000000000000..564700b2d978 +index 000000000..564700b2d --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm_watchdog.c @@ -0,0 +1,829 @@ @@ -214449,7 +214478,7 @@ index 000000000000..564700b2d978 +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm_watchdog.h b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm_watchdog.h new file mode 100644 -index 000000000000..02a7952cced2 +index 000000000..02a7952cc --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/backend/mali_kbase_hwcnt_backend_jm_watchdog.h @@ -0,0 +1,65 @@ @@ -214520,7 +214549,7 @@ index 000000000000..02a7952cced2 +#endif /* _KBASE_HWCNT_BACKEND_JM_WATCHDOG_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt.c b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt.c new file mode 100644 -index 000000000000..34deb5d9e3fc +index 000000000..34deb5d9e --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt.c @@ -0,0 +1,775 @@ @@ -215301,7 +215330,7 @@ index 000000000000..34deb5d9e3fc +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_accumulator.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_accumulator.h new file mode 100644 -index 000000000000..069e02068902 +index 000000000..069e02068 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_accumulator.h @@ -0,0 +1,139 @@ @@ -215446,7 +215475,7 @@ index 000000000000..069e02068902 +#endif /* _KBASE_HWCNT_ACCUMULATOR_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_context.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_context.h new file mode 100644 -index 000000000000..89732a908789 +index 000000000..89732a908 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_context.h @@ -0,0 +1,148 @@ @@ -215600,7 +215629,7 @@ index 000000000000..89732a908789 +#endif /* _KBASE_HWCNT_CONTEXT_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu.c b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu.c new file mode 100644 -index 000000000000..74916dab060d +index 000000000..74916dab0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu.c @@ -0,0 +1,738 @@ @@ -216344,7 +216373,7 @@ index 000000000000..74916dab060d +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu.h new file mode 100644 -index 000000000000..a49c31e52f98 +index 000000000..a49c31e52 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu.h @@ -0,0 +1,407 @@ @@ -216757,7 +216786,7 @@ index 000000000000..a49c31e52f98 +#endif /* _KBASE_HWCNT_GPU_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu_narrow.c b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu_narrow.c new file mode 100644 -index 000000000000..0cf2f94cfb87 +index 000000000..0cf2f94cf --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu_narrow.c @@ -0,0 +1,298 @@ @@ -217061,7 +217090,7 @@ index 000000000000..0cf2f94cfb87 +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu_narrow.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu_narrow.h new file mode 100644 -index 000000000000..afd236d71a7c +index 000000000..afd236d71 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_gpu_narrow.h @@ -0,0 +1,330 @@ @@ -217397,7 +217426,7 @@ index 000000000000..afd236d71a7c +#endif /* _KBASE_HWCNT_GPU_NARROW_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_types.c b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_types.c new file mode 100644 -index 000000000000..763eb315d9a2 +index 000000000..763eb315d --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_types.c @@ -0,0 +1,511 @@ @@ -217914,7 +217943,7 @@ index 000000000000..763eb315d9a2 +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_types.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_types.h new file mode 100644 -index 000000000000..5c5ada401768 +index 000000000..5c5ada401 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_types.h @@ -0,0 +1,1231 @@ @@ -219151,7 +219180,7 @@ index 000000000000..5c5ada401768 +#endif /* _KBASE_HWCNT_TYPES_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_virtualizer.c b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_virtualizer.c new file mode 100644 -index 000000000000..d618764d3b32 +index 000000000..d618764d3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_virtualizer.c @@ -0,0 +1,744 @@ @@ -219901,7 +219930,7 @@ index 000000000000..d618764d3b32 +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_virtualizer.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_virtualizer.h new file mode 100644 -index 000000000000..485ba74960f6 +index 000000000..485ba7496 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_virtualizer.h @@ -0,0 +1,151 @@ @@ -220058,7 +220087,7 @@ index 000000000000..485ba74960f6 +#endif /* _KBASE_HWCNT_VIRTUALIZER_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if.h new file mode 100644 -index 000000000000..501c0087b7e6 +index 000000000..501c0087b --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if.h @@ -0,0 +1,89 @@ @@ -220153,7 +220182,7 @@ index 000000000000..501c0087b7e6 +#endif /* _KBASE_HWCNT_WATCHDOG_IF_H_ */ diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if_timer.c b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if_timer.c new file mode 100644 -index 000000000000..4caa832cd587 +index 000000000..4caa832cd --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if_timer.c @@ -0,0 +1,157 @@ @@ -220316,7 +220345,7 @@ index 000000000000..4caa832cd587 +} diff --git a/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if_timer.h b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if_timer.h new file mode 100644 -index 000000000000..a545ad3e39e3 +index 000000000..a545ad3e3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/hwcnt/mali_kbase_hwcnt_watchdog_if_timer.h @@ -0,0 +1,48 @@ @@ -220370,7 +220399,7 @@ index 000000000000..a545ad3e39e3 +#endif /* _KBASE_HWCNT_WATCHDOG_IF_TIMER_H_ */ diff --git a/drivers/gpu/arm/bifrost/ipa/Kbuild b/drivers/gpu/arm/bifrost/ipa/Kbuild new file mode 100755 -index 000000000000..0be664c47b54 +index 000000000..0be664c47 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/Kbuild @@ -0,0 +1,35 @@ @@ -220411,7 +220440,7 @@ index 000000000000..0be664c47b54 +endif diff --git a/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_csf.c b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_csf.c new file mode 100644 -index 000000000000..60b061ef623d +index 000000000..60b061ef6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_csf.c @@ -0,0 +1,457 @@ @@ -220874,7 +220903,7 @@ index 000000000000..60b061ef623d +} diff --git a/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_csf.h b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_csf.h new file mode 100644 -index 000000000000..37d2efc59fcc +index 000000000..37d2efc59 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_csf.h @@ -0,0 +1,159 @@ @@ -221039,7 +221068,7 @@ index 000000000000..37d2efc59fcc +#endif /* _KBASE_IPA_COUNTER_COMMON_CSF_H_ */ diff --git a/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_jm.c b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_jm.c new file mode 100644 -index 000000000000..34515a934b33 +index 000000000..34515a934 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_jm.c @@ -0,0 +1,355 @@ @@ -221400,7 +221429,7 @@ index 000000000000..34515a934b33 +} diff --git a/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_jm.h b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_jm.h new file mode 100644 -index 000000000000..6089610847b4 +index 000000000..608961084 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_common_jm.h @@ -0,0 +1,234 @@ @@ -221640,7 +221669,7 @@ index 000000000000..6089610847b4 +#endif /* _KBASE_IPA_COUNTER_COMMON_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_csf.c b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_csf.c new file mode 100644 -index 000000000000..21b4e52884c5 +index 000000000..21b4e5288 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_csf.c @@ -0,0 +1,280 @@ @@ -221926,7 +221955,7 @@ index 000000000000..21b4e52884c5 +} diff --git a/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_jm.c b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_jm.c new file mode 100644 -index 000000000000..2092db042dec +index 000000000..2092db042 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/backend/mali_kbase_ipa_counter_jm.c @@ -0,0 +1,561 @@ @@ -222493,7 +222522,7 @@ index 000000000000..2092db042dec +} diff --git a/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa.c b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa.c new file mode 100755 -index 000000000000..b2e6bc459f22 +index 000000000..b2e6bc459 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa.c @@ -0,0 +1,778 @@ @@ -223277,7 +223306,7 @@ index 000000000000..b2e6bc459f22 +} diff --git a/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa.h b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa.h new file mode 100755 -index 000000000000..c875ffb4990e +index 000000000..c875ffb49 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa.h @@ -0,0 +1,304 @@ @@ -223587,7 +223616,7 @@ index 000000000000..c875ffb4990e +#endif diff --git a/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_debugfs.c b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_debugfs.c new file mode 100755 -index 000000000000..a0963bbb2068 +index 000000000..a0963bbb2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_debugfs.c @@ -0,0 +1,324 @@ @@ -223917,7 +223946,7 @@ index 000000000000..a0963bbb2068 +} diff --git a/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_debugfs.h b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_debugfs.h new file mode 100755 -index 000000000000..f690367757c9 +index 000000000..f69036775 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_debugfs.h @@ -0,0 +1,70 @@ @@ -223993,7 +224022,7 @@ index 000000000000..f690367757c9 +#endif /* _KBASE_IPA_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_simple.c b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_simple.c new file mode 100755 -index 000000000000..8557fe8723cf +index 000000000..8557fe872 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_simple.c @@ -0,0 +1,370 @@ @@ -224369,7 +224398,7 @@ index 000000000000..8557fe8723cf +KBASE_EXPORT_TEST_API(kbase_simple_ipa_model_ops); diff --git a/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_simple.h b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_simple.h new file mode 100755 -index 000000000000..dd17786a51d9 +index 000000000..dd17786a5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/ipa/mali_kbase_ipa_simple.h @@ -0,0 +1,44 @@ @@ -224419,7 +224448,7 @@ index 000000000000..dd17786a51d9 +#endif /* _KBASE_IPA_SIMPLE_H_ */ diff --git a/drivers/gpu/arm/bifrost/jm/mali_kbase_jm_defs.h b/drivers/gpu/arm/bifrost/jm/mali_kbase_jm_defs.h new file mode 100755 -index 000000000000..debc3ad25fd7 +index 000000000..debc3ad25 --- /dev/null +++ b/drivers/gpu/arm/bifrost/jm/mali_kbase_jm_defs.h @@ -0,0 +1,878 @@ @@ -225303,7 +225332,7 @@ index 000000000000..debc3ad25fd7 +#endif /* _KBASE_JM_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/jm/mali_kbase_jm_js.h b/drivers/gpu/arm/bifrost/jm/mali_kbase_jm_js.h new file mode 100755 -index 000000000000..53819caaf616 +index 000000000..53819caaf --- /dev/null +++ b/drivers/gpu/arm/bifrost/jm/mali_kbase_jm_js.h @@ -0,0 +1,1044 @@ @@ -226353,7 +226382,7 @@ index 000000000000..53819caaf616 +#endif /* _KBASE_JM_JS_H_ */ diff --git a/drivers/gpu/arm/bifrost/jm/mali_kbase_js_defs.h b/drivers/gpu/arm/bifrost/jm/mali_kbase_js_defs.h new file mode 100755 -index 000000000000..465cf7ec05bd +index 000000000..465cf7ec0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/jm/mali_kbase_js_defs.h @@ -0,0 +1,447 @@ @@ -226806,7 +226835,7 @@ index 000000000000..465cf7ec05bd +#endif /* _KBASE_JS_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_base_hwconfig_features.h b/drivers/gpu/arm/bifrost/mali_base_hwconfig_features.h new file mode 100755 -index 000000000000..11aedef80109 +index 000000000..11aedef80 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_base_hwconfig_features.h @@ -0,0 +1,185 @@ @@ -226997,7 +227026,7 @@ index 000000000000..11aedef80109 +#endif /* _BASE_HWCONFIG_FEATURES_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_base_hwconfig_issues.h b/drivers/gpu/arm/bifrost/mali_base_hwconfig_issues.h new file mode 100755 -index 000000000000..0fbdec0bb0b6 +index 000000000..0fbdec0bb --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_base_hwconfig_issues.h @@ -0,0 +1,835 @@ @@ -227838,7 +227867,7 @@ index 000000000000..0fbdec0bb0b6 +#endif /* _BASE_HWCONFIG_ISSUES_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase.h b/drivers/gpu/arm/bifrost/mali_kbase.h new file mode 100755 -index 000000000000..542e8f63fb5b +index 000000000..542e8f63f --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase.h @@ -0,0 +1,752 @@ @@ -228596,7 +228625,7 @@ index 000000000000..542e8f63fb5b +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_as_fault_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_as_fault_debugfs.c new file mode 100755 -index 000000000000..10dbeee02e40 +index 000000000..10dbeee02 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_as_fault_debugfs.c @@ -0,0 +1,109 @@ @@ -228711,7 +228740,7 @@ index 000000000000..10dbeee02e40 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_as_fault_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_as_fault_debugfs.h new file mode 100755 -index 000000000000..59bbcf6f4ff7 +index 000000000..59bbcf6f4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_as_fault_debugfs.h @@ -0,0 +1,48 @@ @@ -228765,7 +228794,7 @@ index 000000000000..59bbcf6f4ff7 +#endif /*_KBASE_AS_FAULT_DEBUG_FS_H*/ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_bits.h b/drivers/gpu/arm/bifrost/mali_kbase_bits.h new file mode 100755 -index 000000000000..a085fd86c488 +index 000000000..a085fd86c --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_bits.h @@ -0,0 +1,31 @@ @@ -228802,7 +228831,7 @@ index 000000000000..a085fd86c488 +#endif /* _KBASE_BITS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_cache_policy.c b/drivers/gpu/arm/bifrost/mali_kbase_cache_policy.c new file mode 100755 -index 000000000000..af51ed8c2dec +index 000000000..af51ed8c2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_cache_policy.c @@ -0,0 +1,65 @@ @@ -228873,7 +228902,7 @@ index 000000000000..af51ed8c2dec +KBASE_EXPORT_TEST_API(kbase_sync_single_for_cpu); diff --git a/drivers/gpu/arm/bifrost/mali_kbase_cache_policy.h b/drivers/gpu/arm/bifrost/mali_kbase_cache_policy.h new file mode 100755 -index 000000000000..598d245383fd +index 000000000..598d24538 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_cache_policy.h @@ -0,0 +1,47 @@ @@ -228926,7 +228955,7 @@ index 000000000000..598d245383fd +#endif /* _KBASE_CACHE_POLICY_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_caps.h b/drivers/gpu/arm/bifrost/mali_kbase_caps.h new file mode 100755 -index 000000000000..6aa31f3d3a79 +index 000000000..6aa31f3d3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_caps.h @@ -0,0 +1,70 @@ @@ -229002,7 +229031,7 @@ index 000000000000..6aa31f3d3a79 +#endif /* __KBASE_CAPS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_ccswe.c b/drivers/gpu/arm/bifrost/mali_kbase_ccswe.c new file mode 100755 -index 000000000000..6a1e7e4c5ff5 +index 000000000..6a1e7e4c5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_ccswe.c @@ -0,0 +1,100 @@ @@ -229108,7 +229137,7 @@ index 000000000000..6a1e7e4c5ff5 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_ccswe.h b/drivers/gpu/arm/bifrost/mali_kbase_ccswe.h new file mode 100755 -index 000000000000..f7fcf7780b35 +index 000000000..f7fcf7780 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_ccswe.h @@ -0,0 +1,95 @@ @@ -229209,7 +229238,7 @@ index 000000000000..f7fcf7780b35 +#endif /* _KBASE_CCSWE_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_config.c b/drivers/gpu/arm/bifrost/mali_kbase_config.c new file mode 100755 -index 000000000000..37dbca129f86 +index 000000000..37dbca129 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_config.c @@ -0,0 +1,104 @@ @@ -229319,7 +229348,7 @@ index 000000000000..37dbca129f86 +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_config.h b/drivers/gpu/arm/bifrost/mali_kbase_config.h new file mode 100755 -index 000000000000..ecfdb2876618 +index 000000000..ecfdb2876 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_config.h @@ -0,0 +1,583 @@ @@ -229908,7 +229937,7 @@ index 000000000000..ecfdb2876618 +#endif /* _KBASE_CONFIG_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_config_defaults.h b/drivers/gpu/arm/bifrost/mali_kbase_config_defaults.h new file mode 100755 -index 000000000000..14493a77e1ea +index 000000000..14493a77e --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_config_defaults.h @@ -0,0 +1,278 @@ @@ -230192,7 +230221,7 @@ index 000000000000..14493a77e1ea +#endif /* _KBASE_CONFIG_DEFAULTS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_core_linux.c b/drivers/gpu/arm/bifrost/mali_kbase_core_linux.c new file mode 100755 -index 000000000000..12d6cc8963a3 +index 000000000..12d6cc896 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_core_linux.c @@ -0,0 +1,5904 @@ @@ -236102,7 +236131,7 @@ index 000000000000..12d6cc8963a3 +#endif /* CONFIG_MALI_BIFROST_GATOR_SUPPORT */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_cs_experimental.h b/drivers/gpu/arm/bifrost/mali_kbase_cs_experimental.h new file mode 100755 -index 000000000000..7e885ca46ce9 +index 000000000..7e885ca46 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_cs_experimental.h @@ -0,0 +1,40 @@ @@ -236148,7 +236177,7 @@ index 000000000000..7e885ca46ce9 + diff --git a/drivers/gpu/arm/bifrost/mali_kbase_ctx_sched.c b/drivers/gpu/arm/bifrost/mali_kbase_ctx_sched.c new file mode 100755 -index 000000000000..dc6feb95a391 +index 000000000..dc6feb95a --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_ctx_sched.c @@ -0,0 +1,433 @@ @@ -236587,7 +236616,7 @@ index 000000000000..dc6feb95a391 +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_ctx_sched.h b/drivers/gpu/arm/bifrost/mali_kbase_ctx_sched.h new file mode 100755 -index 000000000000..5a8d17547b7b +index 000000000..5a8d17547 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_ctx_sched.h @@ -0,0 +1,247 @@ @@ -236840,7 +236869,7 @@ index 000000000000..5a8d17547b7b +#endif /* _KBASE_CTX_SCHED_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug.c b/drivers/gpu/arm/bifrost/mali_kbase_debug.c new file mode 100755 -index 000000000000..6d3b1093b442 +index 000000000..6d3b1093b --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug.c @@ -0,0 +1,41 @@ @@ -236887,7 +236916,7 @@ index 000000000000..6d3b1093b442 + diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug.h b/drivers/gpu/arm/bifrost/mali_kbase_debug.h new file mode 100755 -index 000000000000..9d6ff73aa4e0 +index 000000000..9d6ff73aa --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug.h @@ -0,0 +1,166 @@ @@ -237059,7 +237088,7 @@ index 000000000000..9d6ff73aa4e0 +#endif /* _KBASE_DEBUG_H */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_job_fault.c b/drivers/gpu/arm/bifrost/mali_kbase_debug_job_fault.c new file mode 100755 -index 000000000000..d6518b476115 +index 000000000..d6518b476 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_job_fault.c @@ -0,0 +1,573 @@ @@ -237638,7 +237667,7 @@ index 000000000000..d6518b476115 +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_job_fault.h b/drivers/gpu/arm/bifrost/mali_kbase_debug_job_fault.h new file mode 100755 -index 000000000000..059d9c4553bb +index 000000000..059d9c455 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_job_fault.h @@ -0,0 +1,121 @@ @@ -237765,7 +237794,7 @@ index 000000000000..059d9c4553bb +#endif /*_KBASE_DEBUG_JOB_FAULT_H*/ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_allocs.c b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_allocs.c new file mode 100644 -index 000000000000..418bb19086bb +index 000000000..418bb1908 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_allocs.c @@ -0,0 +1,138 @@ @@ -237909,7 +237938,7 @@ index 000000000000..418bb19086bb +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_allocs.h b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_allocs.h new file mode 100644 -index 000000000000..8cf69c2cbaf9 +index 000000000..8cf69c2cb --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_allocs.h @@ -0,0 +1,39 @@ @@ -237954,7 +237983,7 @@ index 000000000000..8cf69c2cbaf9 +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_view.c b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_view.c new file mode 100755 -index 000000000000..ce87a0070b72 +index 000000000..ce87a0070 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_view.c @@ -0,0 +1,410 @@ @@ -238370,7 +238399,7 @@ index 000000000000..ce87a0070b72 +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_view.h b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_view.h new file mode 100755 -index 000000000000..cb8050d9b32c +index 000000000..cb8050d9b --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_view.h @@ -0,0 +1,39 @@ @@ -238415,7 +238444,7 @@ index 000000000000..cb8050d9b32c +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_zones.c b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_zones.c new file mode 100644 -index 000000000000..1f8db32aa16f +index 000000000..1f8db32aa --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_zones.c @@ -0,0 +1,116 @@ @@ -238537,7 +238566,7 @@ index 000000000000..1f8db32aa16f +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_zones.h b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_zones.h new file mode 100644 -index 000000000000..acf349b608d5 +index 000000000..acf349b60 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debug_mem_zones.h @@ -0,0 +1,39 @@ @@ -238582,7 +238611,7 @@ index 000000000000..acf349b608d5 +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debugfs_helper.c b/drivers/gpu/arm/bifrost/mali_kbase_debugfs_helper.c new file mode 100755 -index 000000000000..c846491e78fb +index 000000000..c846491e7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debugfs_helper.c @@ -0,0 +1,248 @@ @@ -238836,7 +238865,7 @@ index 000000000000..c846491e78fb +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_debugfs_helper.h b/drivers/gpu/arm/bifrost/mali_kbase_debugfs_helper.h new file mode 100755 -index 000000000000..cbb24d6e0acf +index 000000000..cbb24d6e0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_debugfs_helper.h @@ -0,0 +1,162 @@ @@ -239004,7 +239033,7 @@ index 000000000000..cbb24d6e0acf + diff --git a/drivers/gpu/arm/bifrost/mali_kbase_defs.h b/drivers/gpu/arm/bifrost/mali_kbase_defs.h new file mode 100755 -index 000000000000..809e73000c4d +index 000000000..809e73000 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_defs.h @@ -0,0 +1,2105 @@ @@ -241115,7 +241144,7 @@ index 000000000000..809e73000c4d +#endif /* _KBASE_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_disjoint_events.c b/drivers/gpu/arm/bifrost/mali_kbase_disjoint_events.c new file mode 100755 -index 000000000000..7d6e475585ae +index 000000000..7d6e47558 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_disjoint_events.c @@ -0,0 +1,80 @@ @@ -241201,7 +241230,7 @@ index 000000000000..7d6e475585ae +KBASE_EXPORT_TEST_API(kbase_disjoint_event_get); diff --git a/drivers/gpu/arm/bifrost/mali_kbase_dummy_job_wa.c b/drivers/gpu/arm/bifrost/mali_kbase_dummy_job_wa.c new file mode 100755 -index 000000000000..0e0dab912145 +index 000000000..0e0dab912 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_dummy_job_wa.c @@ -0,0 +1,452 @@ @@ -241659,7 +241688,7 @@ index 000000000000..0e0dab912145 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_dummy_job_wa.h b/drivers/gpu/arm/bifrost/mali_kbase_dummy_job_wa.h new file mode 100755 -index 000000000000..8713ba1eaa6f +index 000000000..8713ba1ea --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_dummy_job_wa.h @@ -0,0 +1,73 @@ @@ -241738,7 +241767,7 @@ index 000000000000..8713ba1eaa6f +#endif /* _KBASE_DUMMY_JOB_WORKAROUND_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_dvfs_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_dvfs_debugfs.c new file mode 100644 -index 000000000000..e4cb71632aee +index 000000000..e4cb71632 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_dvfs_debugfs.c @@ -0,0 +1,94 @@ @@ -241838,7 +241867,7 @@ index 000000000000..e4cb71632aee +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_dvfs_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_dvfs_debugfs.h new file mode 100644 -index 000000000000..8334db7cc1ed +index 000000000..8334db7cc --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_dvfs_debugfs.h @@ -0,0 +1,35 @@ @@ -241879,7 +241908,7 @@ index 000000000000..8334db7cc1ed +#endif /* _KBASE_DVFS_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_event.c b/drivers/gpu/arm/bifrost/mali_kbase_event.c new file mode 100755 -index 000000000000..910c51170ae8 +index 000000000..910c51170 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_event.c @@ -0,0 +1,272 @@ @@ -242157,7 +242186,7 @@ index 000000000000..910c51170ae8 +KBASE_EXPORT_TEST_API(kbase_event_cleanup); diff --git a/drivers/gpu/arm/bifrost/mali_kbase_fence.c b/drivers/gpu/arm/bifrost/mali_kbase_fence.c new file mode 100755 -index 000000000000..b16b27659e61 +index 000000000..b16b27659 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_fence.c @@ -0,0 +1,61 @@ @@ -242224,7 +242253,7 @@ index 000000000000..b16b27659e61 + diff --git a/drivers/gpu/arm/bifrost/mali_kbase_fence.h b/drivers/gpu/arm/bifrost/mali_kbase_fence.h new file mode 100755 -index 000000000000..f4507ac4309b +index 000000000..f4507ac43 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_fence.h @@ -0,0 +1,259 @@ @@ -242489,7 +242518,7 @@ index 000000000000..f4507ac4309b +#endif /* _KBASE_FENCE_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_fence_defs.h b/drivers/gpu/arm/bifrost/mali_kbase_fence_defs.h new file mode 100755 -index 000000000000..7a150bdf2947 +index 000000000..7a150bdf2 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_fence_defs.h @@ -0,0 +1,63 @@ @@ -242558,7 +242587,7 @@ index 000000000000..7a150bdf2947 +#endif /* _KBASE_FENCE_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_fence_ops.c b/drivers/gpu/arm/bifrost/mali_kbase_fence_ops.c new file mode 100755 -index 000000000000..25b4c9c03b53 +index 000000000..25b4c9c03 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_fence_ops.c @@ -0,0 +1,111 @@ @@ -242675,7 +242704,7 @@ index 000000000000..25b4c9c03b53 +KBASE_EXPORT_TEST_API(kbase_fence_ops); diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gator.h b/drivers/gpu/arm/bifrost/mali_kbase_gator.h new file mode 100755 -index 000000000000..dd7df874640a +index 000000000..dd7df8746 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gator.h @@ -0,0 +1,52 @@ @@ -242733,7 +242762,7 @@ index 000000000000..dd7df874640a +#endif /* _KBASE_GATOR_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gpu_memory_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_gpu_memory_debugfs.c new file mode 100755 -index 000000000000..bf5f259a0bb6 +index 000000000..bf5f259a0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gpu_memory_debugfs.c @@ -0,0 +1,112 @@ @@ -242851,7 +242880,7 @@ index 000000000000..bf5f259a0bb6 +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gpu_memory_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_gpu_memory_debugfs.h new file mode 100755 -index 000000000000..6d5423f379d4 +index 000000000..6d5423f37 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gpu_memory_debugfs.h @@ -0,0 +1,50 @@ @@ -242907,7 +242936,7 @@ index 000000000000..6d5423f379d4 +#endif /*_KBASE_GPU_MEMORY_DEBUGFS_H*/ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gpuprops.c b/drivers/gpu/arm/bifrost/mali_kbase_gpuprops.c new file mode 100755 -index 000000000000..7a7d17ea5f26 +index 000000000..7a7d17ea5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gpuprops.c @@ -0,0 +1,888 @@ @@ -243801,7 +243830,7 @@ index 000000000000..7a7d17ea5f26 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gpuprops.h b/drivers/gpu/arm/bifrost/mali_kbase_gpuprops.h new file mode 100755 -index 000000000000..f0a97312c0dd +index 000000000..f0a97312c --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gpuprops.h @@ -0,0 +1,154 @@ @@ -243961,7 +243990,7 @@ index 000000000000..f0a97312c0dd +#endif /* _KBASE_GPUPROPS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gpuprops_types.h b/drivers/gpu/arm/bifrost/mali_kbase_gpuprops_types.h new file mode 100755 -index 000000000000..45cb603fab82 +index 000000000..45cb603fa --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gpuprops_types.h @@ -0,0 +1,170 @@ @@ -244137,7 +244166,7 @@ index 000000000000..45cb603fab82 +#endif /* _KBASE_GPUPROPS_TYPES_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gwt.c b/drivers/gpu/arm/bifrost/mali_kbase_gwt.c new file mode 100755 -index 000000000000..0eba889e5b19 +index 000000000..0eba889e5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gwt.c @@ -0,0 +1,275 @@ @@ -244418,7 +244447,7 @@ index 000000000000..0eba889e5b19 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_gwt.h b/drivers/gpu/arm/bifrost/mali_kbase_gwt.h new file mode 100755 -index 000000000000..9fdd68d62fb8 +index 000000000..9fdd68d62 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_gwt.h @@ -0,0 +1,54 @@ @@ -244478,7 +244507,7 @@ index 000000000000..9fdd68d62fb8 +#endif /* _KBASE_GWT_H */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hw.c b/drivers/gpu/arm/bifrost/mali_kbase_hw.c new file mode 100755 -index 000000000000..b07327a55c0a +index 000000000..b07327a55 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hw.c @@ -0,0 +1,437 @@ @@ -244921,7 +244950,7 @@ index 000000000000..b07327a55c0a +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hw.h b/drivers/gpu/arm/bifrost/mali_kbase_hw.h new file mode 100755 -index 000000000000..ddcddaaa429d +index 000000000..ddcddaaa4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hw.h @@ -0,0 +1,71 @@ @@ -244998,7 +245027,7 @@ index 000000000000..ddcddaaa429d +#endif /* _KBASE_HW_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_backend.h b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_backend.h new file mode 100755 -index 000000000000..0da4eb258a24 +index 000000000..0da4eb258 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_backend.h @@ -0,0 +1,43 @@ @@ -245047,7 +245076,7 @@ index 000000000000..0da4eb258a24 +#endif /* _KBASE_HWACCESS_BACKEND_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_defs.h b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_defs.h new file mode 100755 -index 000000000000..62a6ec51b17f +index 000000000..62a6ec51b --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_defs.h @@ -0,0 +1,50 @@ @@ -245103,7 +245132,7 @@ index 000000000000..62a6ec51b17f +#endif /* _KBASE_HWACCESS_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_gpuprops.h b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_gpuprops.h new file mode 100755 -index 000000000000..f537b7f0ac90 +index 000000000..f537b7f0a --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_gpuprops.h @@ -0,0 +1,88 @@ @@ -245197,7 +245226,7 @@ index 000000000000..f537b7f0ac90 +#endif /* _KBASE_HWACCESS_GPUPROPS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_instr.h b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_instr.h new file mode 100755 -index 000000000000..37663101a346 +index 000000000..37663101a --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_instr.h @@ -0,0 +1,170 @@ @@ -245373,7 +245402,7 @@ index 000000000000..37663101a346 +#endif /* _KBASE_HWACCESS_INSTR_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_jm.h b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_jm.h new file mode 100755 -index 000000000000..ca77c192deea +index 000000000..ca77c192d --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_jm.h @@ -0,0 +1,318 @@ @@ -245697,7 +245726,7 @@ index 000000000000..ca77c192deea +#endif /* _KBASE_HWACCESS_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_pm.h b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_pm.h new file mode 100755 -index 000000000000..effb2ffeb349 +index 000000000..effb2ffeb --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_pm.h @@ -0,0 +1,229 @@ @@ -245932,7 +245961,7 @@ index 000000000000..effb2ffeb349 +#endif /* _KBASE_HWACCESS_PM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_time.h b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_time.h new file mode 100755 -index 000000000000..ac2a26d28d89 +index 000000000..ac2a26d28 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_hwaccess_time.h @@ -0,0 +1,126 @@ @@ -246064,7 +246093,7 @@ index 000000000000..ac2a26d28d89 +#endif /* _KBASE_BACKEND_TIME_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_jd.c b/drivers/gpu/arm/bifrost/mali_kbase_jd.c new file mode 100755 -index 000000000000..f44426a736ca +index 000000000..f44426a73 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_jd.c @@ -0,0 +1,1660 @@ @@ -247730,7 +247759,7 @@ index 000000000000..f44426a736ca +KBASE_EXPORT_TEST_API(kbase_jd_exit); diff --git a/drivers/gpu/arm/bifrost/mali_kbase_jd_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_jd_debugfs.c new file mode 100755 -index 000000000000..6196c0985c7e +index 000000000..6196c0985 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_jd_debugfs.c @@ -0,0 +1,199 @@ @@ -247935,7 +247964,7 @@ index 000000000000..6196c0985c7e +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_jd_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_jd_debugfs.h new file mode 100755 -index 000000000000..8e6140c43538 +index 000000000..8e6140c43 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_jd_debugfs.h @@ -0,0 +1,43 @@ @@ -247984,7 +248013,7 @@ index 000000000000..8e6140c43538 +#endif /*_KBASE_JD_DEBUGFS_H*/ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_jm.c b/drivers/gpu/arm/bifrost/mali_kbase_jm.c new file mode 100755 -index 000000000000..1ac5cd3eafff +index 000000000..1ac5cd3ea --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_jm.c @@ -0,0 +1,153 @@ @@ -248143,7 +248172,7 @@ index 000000000000..1ac5cd3eafff +#endif /* !MALI_USE_CSF */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_jm.h b/drivers/gpu/arm/bifrost/mali_kbase_jm.h new file mode 100755 -index 000000000000..eeafcb6b1a77 +index 000000000..eeafcb6b1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_jm.h @@ -0,0 +1,117 @@ @@ -248266,7 +248295,7 @@ index 000000000000..eeafcb6b1a77 +#endif /* _KBASE_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_js.c b/drivers/gpu/arm/bifrost/mali_kbase_js.c new file mode 100755 -index 000000000000..8ce09212a57e +index 000000000..8ce09212a --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_js.c @@ -0,0 +1,4007 @@ @@ -252279,7 +252308,7 @@ index 000000000000..8ce09212a57e +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_js.h b/drivers/gpu/arm/bifrost/mali_kbase_js.h new file mode 100755 -index 000000000000..96974c8c6439 +index 000000000..96974c8c6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_js.h @@ -0,0 +1,36 @@ @@ -252321,7 +252350,7 @@ index 000000000000..96974c8c6439 +#endif /* _KBASE_JS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_js_ctx_attr.c b/drivers/gpu/arm/bifrost/mali_kbase_js_ctx_attr.c new file mode 100755 -index 000000000000..04ea06b2f381 +index 000000000..04ea06b2f --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_js_ctx_attr.c @@ -0,0 +1,298 @@ @@ -252625,7 +252654,7 @@ index 000000000000..04ea06b2f381 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_js_ctx_attr.h b/drivers/gpu/arm/bifrost/mali_kbase_js_ctx_attr.h new file mode 100755 -index 000000000000..2dc640d5ab82 +index 000000000..2dc640d5a --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_js_ctx_attr.h @@ -0,0 +1,147 @@ @@ -252778,7 +252807,7 @@ index 000000000000..2dc640d5ab82 +#endif /* _KBASE_JS_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c new file mode 100755 -index 000000000000..14a730dc5a12 +index 000000000..14a730dc5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c @@ -0,0 +1,896 @@ @@ -253680,7 +253709,7 @@ index 000000000000..14a730dc5a12 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.h b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.h new file mode 100755 -index 000000000000..9451d4cd943d +index 000000000..9451d4cd9 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.h @@ -0,0 +1,273 @@ @@ -253959,7 +253988,7 @@ index 000000000000..9451d4cd943d +#endif /* _KBASE_KINSTR_JM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_kinstr_prfcnt.c b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_prfcnt.c new file mode 100644 -index 000000000000..823f9156e19e +index 000000000..823f9156e --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_prfcnt.c @@ -0,0 +1,2021 @@ @@ -255986,7 +256015,7 @@ index 000000000000..823f9156e19e +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_kinstr_prfcnt.h b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_prfcnt.h new file mode 100644 -index 000000000000..bbe33796e62f +index 000000000..bbe33796e --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_kinstr_prfcnt.h @@ -0,0 +1,189 @@ @@ -256181,7 +256210,7 @@ index 000000000000..bbe33796e62f +#endif /* _KBASE_KINSTR_PRFCNT_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_linux.h b/drivers/gpu/arm/bifrost/mali_kbase_linux.h new file mode 100755 -index 000000000000..e5c6f7a0b217 +index 000000000..e5c6f7a0b --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_linux.h @@ -0,0 +1,44 @@ @@ -256231,7 +256260,7 @@ index 000000000000..e5c6f7a0b217 +#endif /* _KBASE_LINUX_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem.c b/drivers/gpu/arm/bifrost/mali_kbase_mem.c new file mode 100755 -index 000000000000..1c94e9c57b7f +index 000000000..1c94e9c57 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem.c @@ -0,0 +1,5541 @@ @@ -261778,7 +261807,7 @@ index 000000000000..1c94e9c57b7f +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem.h b/drivers/gpu/arm/bifrost/mali_kbase_mem.h new file mode 100755 -index 000000000000..490ad3c9c2e2 +index 000000000..490ad3c9c --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem.h @@ -0,0 +1,2570 @@ @@ -264354,7 +264383,7 @@ index 000000000000..490ad3c9c2e2 +#endif /* _KBASE_MEM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_linux.c b/drivers/gpu/arm/bifrost/mali_kbase_mem_linux.c new file mode 100755 -index 000000000000..f1251a4ed575 +index 000000000..f1251a4ed --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_linux.c @@ -0,0 +1,3831 @@ @@ -268191,7 +268220,7 @@ index 000000000000..f1251a4ed575 +#endif /* MALI_USE_CSF */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_linux.h b/drivers/gpu/arm/bifrost/mali_kbase_mem_linux.h new file mode 100755 -index 000000000000..6dda44b9f128 +index 000000000..6dda44b9f --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_linux.h @@ -0,0 +1,533 @@ @@ -268730,7 +268759,7 @@ index 000000000000..6dda44b9f128 +#endif /* _KBASE_MEM_LINUX_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_lowlevel.h b/drivers/gpu/arm/bifrost/mali_kbase_mem_lowlevel.h new file mode 100755 -index 000000000000..5a1bb16cca01 +index 000000000..5a1bb16cc --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_lowlevel.h @@ -0,0 +1,179 @@ @@ -268915,7 +268944,7 @@ index 000000000000..5a1bb16cca01 +#endif /* _KBASE_LOWLEVEL_H */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_migrate.c b/drivers/gpu/arm/bifrost/mali_kbase_mem_migrate.c new file mode 100644 -index 000000000000..737f7da5595d +index 000000000..737f7da55 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_migrate.c @@ -0,0 +1,641 @@ @@ -269562,7 +269591,7 @@ index 000000000000..737f7da5595d +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_migrate.h b/drivers/gpu/arm/bifrost/mali_kbase_mem_migrate.h new file mode 100644 -index 000000000000..76bbc999e110 +index 000000000..76bbc999e --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_migrate.h @@ -0,0 +1,108 @@ @@ -269676,7 +269705,7 @@ index 000000000000..76bbc999e110 +void kbase_mem_migrate_term(struct kbase_device *kbdev); diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_pool.c b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool.c new file mode 100755 -index 000000000000..fa8f34d86c24 +index 000000000..fa8f34d86 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool.c @@ -0,0 +1,1029 @@ @@ -270711,7 +270740,7 @@ index 000000000000..fa8f34d86c24 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_debugfs.c new file mode 100755 -index 000000000000..3b1b2bae15c8 +index 000000000..3b1b2bae1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_debugfs.c @@ -0,0 +1,184 @@ @@ -270901,7 +270930,7 @@ index 000000000000..3b1b2bae15c8 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_debugfs.h new file mode 100755 -index 000000000000..207b58536a58 +index 000000000..207b58536 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_debugfs.h @@ -0,0 +1,122 @@ @@ -271029,7 +271058,7 @@ index 000000000000..207b58536a58 + diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_group.c b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_group.c new file mode 100755 -index 000000000000..49c4b041e13a +index 000000000..49c4b041e --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_group.c @@ -0,0 +1,107 @@ @@ -271142,7 +271171,7 @@ index 000000000000..49c4b041e13a +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_group.h b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_group.h new file mode 100755 -index 000000000000..fe8ce775258f +index 000000000..fe8ce7752 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_pool_group.h @@ -0,0 +1,114 @@ @@ -271262,7 +271291,7 @@ index 000000000000..fe8ce775258f +#endif /* _KBASE_MEM_POOL_GROUP_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs.c new file mode 100755 -index 000000000000..9317023b71bb +index 000000000..9317023b7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs.c @@ -0,0 +1,131 @@ @@ -271399,7 +271428,7 @@ index 000000000000..9317023b71bb +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs.h new file mode 100755 -index 000000000000..c30fca6652dc +index 000000000..c30fca665 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs.h @@ -0,0 +1,64 @@ @@ -271469,7 +271498,7 @@ index 000000000000..c30fca6652dc + diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mipe_gen_header.h b/drivers/gpu/arm/bifrost/mali_kbase_mipe_gen_header.h new file mode 100755 -index 000000000000..951079d11ab6 +index 000000000..951079d11 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mipe_gen_header.h @@ -0,0 +1,229 @@ @@ -271704,7 +271733,7 @@ index 000000000000..951079d11ab6 +/* clang-format on */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_mipe_proto.h b/drivers/gpu/arm/bifrost/mali_kbase_mipe_proto.h new file mode 100755 -index 000000000000..c35ee61ce5aa +index 000000000..c35ee61ce --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_mipe_proto.h @@ -0,0 +1,126 @@ @@ -271836,7 +271865,7 @@ index 000000000000..c35ee61ce5aa +/* clang-format on */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_native_mgm.c b/drivers/gpu/arm/bifrost/mali_kbase_native_mgm.c new file mode 100755 -index 000000000000..10a7f506b1a4 +index 000000000..10a7f506b --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_native_mgm.c @@ -0,0 +1,177 @@ @@ -272019,7 +272048,7 @@ index 000000000000..10a7f506b1a4 +}; diff --git a/drivers/gpu/arm/bifrost/mali_kbase_native_mgm.h b/drivers/gpu/arm/bifrost/mali_kbase_native_mgm.h new file mode 100755 -index 000000000000..1eae2fcf98b6 +index 000000000..1eae2fcf9 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_native_mgm.h @@ -0,0 +1,38 @@ @@ -272063,7 +272092,7 @@ index 000000000000..1eae2fcf98b6 +#endif /* _KBASE_NATIVE_MGM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_pbha.c b/drivers/gpu/arm/bifrost/mali_kbase_pbha.c new file mode 100644 -index 000000000000..b65f9e7b5162 +index 000000000..b65f9e7b5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_pbha.c @@ -0,0 +1,306 @@ @@ -272375,7 +272404,7 @@ index 000000000000..b65f9e7b5162 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_pbha.h b/drivers/gpu/arm/bifrost/mali_kbase_pbha.h new file mode 100644 -index 000000000000..79632194cabe +index 000000000..79632194c --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_pbha.h @@ -0,0 +1,77 @@ @@ -272458,7 +272487,7 @@ index 000000000000..79632194cabe +#endif /* _KBASE_PBHA_H */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_pbha_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_pbha_debugfs.c new file mode 100644 -index 000000000000..1cc29c700e5a +index 000000000..1cc29c700 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_pbha_debugfs.c @@ -0,0 +1,227 @@ @@ -272691,7 +272720,7 @@ index 000000000000..1cc29c700e5a +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_pbha_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_pbha_debugfs.h new file mode 100644 -index 000000000000..508ecdff9162 +index 000000000..508ecdff9 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_pbha_debugfs.h @@ -0,0 +1,34 @@ @@ -272731,7 +272760,7 @@ index 000000000000..508ecdff9162 +#endif /* _KBASE_PBHA_DEBUGFS_H */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_platform_fake.c b/drivers/gpu/arm/bifrost/mali_kbase_platform_fake.c new file mode 100755 -index 000000000000..265c676f13fa +index 000000000..265c676f1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_platform_fake.c @@ -0,0 +1,119 @@ @@ -272856,7 +272885,7 @@ index 000000000000..265c676f13fa +#endif /* CONFIG_OF */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_pm.c b/drivers/gpu/arm/bifrost/mali_kbase_pm.c new file mode 100755 -index 000000000000..62a132816a42 +index 000000000..62a132816 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_pm.c @@ -0,0 +1,311 @@ @@ -273173,7 +273202,7 @@ index 000000000000..62a132816a42 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_pm.h b/drivers/gpu/arm/bifrost/mali_kbase_pm.h new file mode 100755 -index 000000000000..4bb90a4f6542 +index 000000000..4bb90a4f6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_pm.h @@ -0,0 +1,257 @@ @@ -273436,7 +273465,7 @@ index 000000000000..4bb90a4f6542 +#endif /* _KBASE_PM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_refcount_defs.h b/drivers/gpu/arm/bifrost/mali_kbase_refcount_defs.h new file mode 100644 -index 000000000000..c517a2d2ab83 +index 000000000..c517a2d2a --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_refcount_defs.h @@ -0,0 +1,57 @@ @@ -273499,7 +273528,7 @@ index 000000000000..c517a2d2ab83 +#endif /* _KBASE_REFCOUNT_DEFS_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_regs_history_debugfs.c b/drivers/gpu/arm/bifrost/mali_kbase_regs_history_debugfs.c new file mode 100755 -index 000000000000..147082c15fed +index 000000000..147082c15 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_regs_history_debugfs.c @@ -0,0 +1,239 @@ @@ -273744,7 +273773,7 @@ index 000000000000..147082c15fed +#endif /* defined(CONFIG_DEBUG_FS) && !IS_ENABLED(CONFIG_MALI_BIFROST_NO_MALI) */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_regs_history_debugfs.h b/drivers/gpu/arm/bifrost/mali_kbase_regs_history_debugfs.h new file mode 100755 -index 000000000000..ae327dd799a4 +index 000000000..ae327dd79 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_regs_history_debugfs.h @@ -0,0 +1,84 @@ @@ -273834,7 +273863,7 @@ index 000000000000..ae327dd799a4 +#endif /*_KBASE_REGS_HISTORY_DEBUGFS_H*/ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_reset_gpu.h b/drivers/gpu/arm/bifrost/mali_kbase_reset_gpu.h new file mode 100755 -index 000000000000..48ea9954b17c +index 000000000..48ea9954b --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_reset_gpu.h @@ -0,0 +1,277 @@ @@ -274117,7 +274146,7 @@ index 000000000000..48ea9954b17c +#endif diff --git a/drivers/gpu/arm/bifrost/mali_kbase_smc.c b/drivers/gpu/arm/bifrost/mali_kbase_smc.c new file mode 100755 -index 000000000000..abbe8d56d082 +index 000000000..abbe8d56d --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_smc.c @@ -0,0 +1,90 @@ @@ -274213,7 +274242,7 @@ index 000000000000..abbe8d56d082 + diff --git a/drivers/gpu/arm/bifrost/mali_kbase_smc.h b/drivers/gpu/arm/bifrost/mali_kbase_smc.h new file mode 100755 -index 000000000000..40a348388598 +index 000000000..40a348388 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_smc.h @@ -0,0 +1,69 @@ @@ -274288,7 +274317,7 @@ index 000000000000..40a348388598 +#endif /* _KBASE_SMC_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_softjobs.c b/drivers/gpu/arm/bifrost/mali_kbase_softjobs.c new file mode 100755 -index 000000000000..a9312a0c433e +index 000000000..a9312a0c4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_softjobs.c @@ -0,0 +1,1770 @@ @@ -276064,7 +276093,7 @@ index 000000000000..a9312a0c433e +#endif /* !MALI_USE_CSF */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_strings.c b/drivers/gpu/arm/bifrost/mali_kbase_strings.c new file mode 100755 -index 000000000000..84784be6f244 +index 000000000..84784be6f --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_strings.c @@ -0,0 +1,28 @@ @@ -276098,7 +276127,7 @@ index 000000000000..84784be6f244 +const char kbase_timeline_name[] = KBASE_TIMELINE_NAME; diff --git a/drivers/gpu/arm/bifrost/mali_kbase_strings.h b/drivers/gpu/arm/bifrost/mali_kbase_strings.h new file mode 100755 -index 000000000000..c3f94f9267d5 +index 000000000..c3f94f926 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_strings.h @@ -0,0 +1,23 @@ @@ -276127,7 +276156,7 @@ index 000000000000..c3f94f9267d5 +extern const char kbase_timeline_name[]; diff --git a/drivers/gpu/arm/bifrost/mali_kbase_sync.h b/drivers/gpu/arm/bifrost/mali_kbase_sync.h new file mode 100755 -index 000000000000..3d2053bee08e +index 000000000..3d2053bee --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_sync.h @@ -0,0 +1,216 @@ @@ -276349,7 +276378,7 @@ index 000000000000..3d2053bee08e +#endif /* MALI_KBASE_SYNC_H */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_sync_common.c b/drivers/gpu/arm/bifrost/mali_kbase_sync_common.c new file mode 100755 -index 000000000000..5ee7fc3ce72b +index 000000000..5ee7fc3ce --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_sync_common.c @@ -0,0 +1,50 @@ @@ -276405,7 +276434,7 @@ index 000000000000..5ee7fc3ce72b +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_sync_file.c b/drivers/gpu/arm/bifrost/mali_kbase_sync_file.c new file mode 100755 -index 000000000000..9360324cfee6 +index 000000000..9360324cf --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_sync_file.c @@ -0,0 +1,409 @@ @@ -276820,7 +276849,7 @@ index 000000000000..9360324cfee6 +#endif /* !MALI_USE_CSF*/ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_trace_gpu_mem.c b/drivers/gpu/arm/bifrost/mali_kbase_trace_gpu_mem.c new file mode 100755 -index 000000000000..7df7d79b6bc5 +index 000000000..7df7d79b6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_trace_gpu_mem.c @@ -0,0 +1,225 @@ @@ -277051,7 +277080,7 @@ index 000000000000..7df7d79b6bc5 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_trace_gpu_mem.h b/drivers/gpu/arm/bifrost/mali_kbase_trace_gpu_mem.h new file mode 100755 -index 000000000000..fd871fcb352a +index 000000000..fd871fcb3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_trace_gpu_mem.h @@ -0,0 +1,100 @@ @@ -277157,7 +277186,7 @@ index 000000000000..fd871fcb352a +#endif /* _KBASE_TRACE_GPU_MEM_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_utility.h b/drivers/gpu/arm/bifrost/mali_kbase_utility.h new file mode 100755 -index 000000000000..2dad49b59f52 +index 000000000..2dad49b59 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_utility.h @@ -0,0 +1,52 @@ @@ -277215,7 +277244,7 @@ index 000000000000..2dad49b59f52 +#endif /* _KBASE_UTILITY_H */ diff --git a/drivers/gpu/arm/bifrost/mali_kbase_vinstr.c b/drivers/gpu/arm/bifrost/mali_kbase_vinstr.c new file mode 100755 -index 000000000000..d770913e9da5 +index 000000000..d770913e9 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_vinstr.c @@ -0,0 +1,1132 @@ @@ -278353,7 +278382,7 @@ index 000000000000..d770913e9da5 +} diff --git a/drivers/gpu/arm/bifrost/mali_kbase_vinstr.h b/drivers/gpu/arm/bifrost/mali_kbase_vinstr.h new file mode 100755 -index 000000000000..6747ec70a406 +index 000000000..6747ec70a --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_kbase_vinstr.h @@ -0,0 +1,90 @@ @@ -278449,7 +278478,7 @@ index 000000000000..6747ec70a406 +#endif /* _KBASE_VINSTR_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_linux_trace.h b/drivers/gpu/arm/bifrost/mali_linux_trace.h new file mode 100755 -index 000000000000..52f17390c853 +index 000000000..52f17390c --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_linux_trace.h @@ -0,0 +1,547 @@ @@ -279002,7 +279031,7 @@ index 000000000000..52f17390c853 +#include diff --git a/drivers/gpu/arm/bifrost/mali_malisw.h b/drivers/gpu/arm/bifrost/mali_malisw.h new file mode 100755 -index 000000000000..d9db189e8684 +index 000000000..d9db189e8 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_malisw.h @@ -0,0 +1,108 @@ @@ -279116,7 +279145,7 @@ index 000000000000..d9db189e8684 +#endif /* _MALISW_H_ */ diff --git a/drivers/gpu/arm/bifrost/mali_power_gpu_frequency_trace.c b/drivers/gpu/arm/bifrost/mali_power_gpu_frequency_trace.c new file mode 100755 -index 000000000000..1db3abe2f9f6 +index 000000000..1db3abe2f --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_power_gpu_frequency_trace.c @@ -0,0 +1,26 @@ @@ -279148,7 +279177,7 @@ index 000000000000..1db3abe2f9f6 +#endif diff --git a/drivers/gpu/arm/bifrost/mali_power_gpu_frequency_trace.h b/drivers/gpu/arm/bifrost/mali_power_gpu_frequency_trace.h new file mode 100755 -index 000000000000..f156650a40a3 +index 000000000..f156650a4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mali_power_gpu_frequency_trace.h @@ -0,0 +1,68 @@ @@ -279222,7 +279251,7 @@ index 000000000000..f156650a40a3 +#include diff --git a/drivers/gpu/arm/bifrost/mmu/Kbuild b/drivers/gpu/arm/bifrost/mmu/Kbuild new file mode 100644 -index 000000000000..416432397b5c +index 000000000..416432397 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/Kbuild @@ -0,0 +1,30 @@ @@ -279258,7 +279287,7 @@ index 000000000000..416432397b5c +endif diff --git a/drivers/gpu/arm/bifrost/mmu/backend/mali_kbase_mmu_csf.c b/drivers/gpu/arm/bifrost/mmu/backend/mali_kbase_mmu_csf.c new file mode 100755 -index 000000000000..4cac7876f5f7 +index 000000000..4cac7876f --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/backend/mali_kbase_mmu_csf.c @@ -0,0 +1,572 @@ @@ -279836,7 +279865,7 @@ index 000000000000..4cac7876f5f7 +} diff --git a/drivers/gpu/arm/bifrost/mmu/backend/mali_kbase_mmu_jm.c b/drivers/gpu/arm/bifrost/mmu/backend/mali_kbase_mmu_jm.c new file mode 100755 -index 000000000000..d716ce0068fd +index 000000000..d716ce006 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/backend/mali_kbase_mmu_jm.c @@ -0,0 +1,442 @@ @@ -280284,7 +280313,7 @@ index 000000000000..d716ce0068fd +} diff --git a/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu.c b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu.c new file mode 100755 -index 000000000000..d6d3fcdee6e7 +index 000000000..d6d3fcdee --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu.c @@ -0,0 +1,3889 @@ @@ -284179,7 +284208,7 @@ index 000000000000..d6d3fcdee6e7 +} diff --git a/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu.h b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu.h new file mode 100755 -index 000000000000..699b1f340482 +index 000000000..699b1f340 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu.h @@ -0,0 +1,341 @@ @@ -284526,7 +284555,7 @@ index 000000000000..699b1f340482 +#endif /* _KBASE_MMU_H_ */ diff --git a/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_hw.h b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_hw.h new file mode 100755 -index 000000000000..50d2ea5d07c8 +index 000000000..50d2ea5d0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_hw.h @@ -0,0 +1,214 @@ @@ -284746,7 +284775,7 @@ index 000000000000..50d2ea5d07c8 +#endif /* _KBASE_MMU_HW_H_ */ diff --git a/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_hw_direct.c b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_hw_direct.c new file mode 100755 -index 000000000000..3f6da35d80f2 +index 000000000..3f6da35d8 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_hw_direct.c @@ -0,0 +1,699 @@ @@ -285451,7 +285480,7 @@ index 000000000000..3f6da35d80f2 +} diff --git a/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_internal.h b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_internal.h new file mode 100755 -index 000000000000..9d7ce48568e4 +index 000000000..9d7ce4856 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_internal.h @@ -0,0 +1,72 @@ @@ -285529,7 +285558,7 @@ index 000000000000..9d7ce48568e4 +#endif /* _KBASE_MMU_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c new file mode 100755 -index 000000000000..f2c627482c18 +index 000000000..f2c627482 --- /dev/null +++ b/drivers/gpu/arm/bifrost/mmu/mali_kbase_mmu_mode_aarch64.c @@ -0,0 +1,219 @@ @@ -285754,7 +285783,7 @@ index 000000000000..f2c627482c18 +} diff --git a/drivers/gpu/arm/bifrost/platform/Kconfig b/drivers/gpu/arm/bifrost/platform/Kconfig new file mode 100755 -index 000000000000..3e1bd235b842 +index 000000000..3e1bd235b --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/Kconfig @@ -0,0 +1,26 @@ @@ -285786,7 +285815,7 @@ index 000000000000..3e1bd235b842 +# diff --git a/drivers/gpu/arm/bifrost/platform/devicetree/Kbuild b/drivers/gpu/arm/bifrost/platform/devicetree/Kbuild new file mode 100755 -index 000000000000..60a52d80fa8e +index 000000000..60a52d80f --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/devicetree/Kbuild @@ -0,0 +1,24 @@ @@ -285816,7 +285845,7 @@ index 000000000000..60a52d80fa8e + platform/$(MALI_PLATFORM_DIR)/mali_kbase_clk_rate_trace.o diff --git a/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_clk_rate_trace.c b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_clk_rate_trace.c new file mode 100755 -index 000000000000..4bcd5854d3a3 +index 000000000..4bcd5854d --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_clk_rate_trace.c @@ -0,0 +1,105 @@ @@ -285927,7 +285956,7 @@ index 000000000000..4bcd5854d3a3 +}; diff --git a/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_config_devicetree.c b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_config_devicetree.c new file mode 100755 -index 000000000000..a0b4a434e2a7 +index 000000000..a0b4a434e --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_config_devicetree.c @@ -0,0 +1,53 @@ @@ -285986,7 +286015,7 @@ index 000000000000..a0b4a434e2a7 +#endif /* CONFIG_MALI_BIFROST_DVFS */ diff --git a/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_config_platform.h b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..584a7217d300 +index 000000000..584a7217d --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_config_platform.h @@ -0,0 +1,47 @@ @@ -286039,7 +286068,7 @@ index 000000000000..584a7217d300 +#define AUTO_SUSPEND_DELAY (100) diff --git a/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_runtime_pm.c b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_runtime_pm.c new file mode 100755 -index 000000000000..2687bee96ec9 +index 000000000..2687bee96 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/devicetree/mali_kbase_runtime_pm.c @@ -0,0 +1,298 @@ @@ -286343,7 +286372,7 @@ index 000000000000..2687bee96ec9 +}; diff --git a/drivers/gpu/arm/bifrost/platform/meson/Kbuild b/drivers/gpu/arm/bifrost/platform/meson/Kbuild new file mode 100644 -index 000000000000..9b3de96bace8 +index 000000000..9b3de96ba --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/meson/Kbuild @@ -0,0 +1,23 @@ @@ -286372,7 +286401,7 @@ index 000000000000..9b3de96bace8 + platform/$(MALI_PLATFORM_DIR)/mali_kbase_runtime_pm.o diff --git a/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_config_meson.c b/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_config_meson.c new file mode 100644 -index 000000000000..7b896b602e96 +index 000000000..7b896b602 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_config_meson.c @@ -0,0 +1,53 @@ @@ -286431,7 +286460,7 @@ index 000000000000..7b896b602e96 +#endif /* CONFIG_MALI_BIFROST_DVFS */ diff --git a/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_config_platform.h b/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_config_platform.h new file mode 100644 -index 000000000000..06279e2f62ca +index 000000000..06279e2f6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_config_platform.h @@ -0,0 +1,45 @@ @@ -286482,7 +286511,7 @@ index 000000000000..06279e2f62ca +#define AUTO_SUSPEND_DELAY (100) diff --git a/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_runtime_pm.c b/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_runtime_pm.c new file mode 100644 -index 000000000000..910d4b4fd3e1 +index 000000000..910d4b4fd --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/meson/mali_kbase_runtime_pm.c @@ -0,0 +1,265 @@ @@ -286753,7 +286782,7 @@ index 000000000000..910d4b4fd3e1 +}; diff --git a/drivers/gpu/arm/bifrost/platform/rk/Kbuild b/drivers/gpu/arm/bifrost/platform/rk/Kbuild new file mode 100755 -index 000000000000..a1e78cfc4ae7 +index 000000000..a1e78cfc4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/rk/Kbuild @@ -0,0 +1,16 @@ @@ -286775,7 +286804,7 @@ index 000000000000..a1e78cfc4ae7 + platform/$(MALI_PLATFORM_DIR)/mali_kbase_config_rk.o diff --git a/drivers/gpu/arm/bifrost/platform/rk/custom_log.h b/drivers/gpu/arm/bifrost/platform/rk/custom_log.h new file mode 100755 -index 000000000000..5de70ee13d25 +index 000000000..5de70ee13 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/rk/custom_log.h @@ -0,0 +1,192 @@ @@ -286973,7 +287002,7 @@ index 000000000000..5de70ee13d25 +#endif /* __CUSTOM_LOG_H__ */ diff --git a/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_platform.h b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..a2c93fa69e67 +index 000000000..a2c93fa69 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_platform.h @@ -0,0 +1,93 @@ @@ -287072,7 +287101,7 @@ index 000000000000..a2c93fa69e67 +int kbase_platform_rk_enable_regulator(struct kbase_device *kbdev); diff --git a/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c new file mode 100755 -index 000000000000..c32526a86275 +index 000000000..c32526a86 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c @@ -0,0 +1,692 @@ @@ -287770,7 +287799,7 @@ index 000000000000..c32526a86275 +}; diff --git a/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_rk.h b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_rk.h new file mode 100755 -index 000000000000..0a42559df2bf +index 000000000..0a42559df --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/rk/mali_kbase_rk.h @@ -0,0 +1,67 @@ @@ -287843,7 +287872,7 @@ index 000000000000..0a42559df2bf + diff --git a/drivers/gpu/arm/bifrost/platform/vexpress/Kbuild b/drivers/gpu/arm/bifrost/platform/vexpress/Kbuild new file mode 100755 -index 000000000000..e1398fde3976 +index 000000000..e1398fde3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress/Kbuild @@ -0,0 +1,23 @@ @@ -287872,7 +287901,7 @@ index 000000000000..e1398fde3976 + mali_kbase_platform_fake.o diff --git a/drivers/gpu/arm/bifrost/platform/vexpress/mali_kbase_config_platform.h b/drivers/gpu/arm/bifrost/platform/vexpress/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..28f453161358 +index 000000000..28f453161 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress/mali_kbase_config_platform.h @@ -0,0 +1,38 @@ @@ -287916,7 +287945,7 @@ index 000000000000..28f453161358 +extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/drivers/gpu/arm/bifrost/platform/vexpress/mali_kbase_config_vexpress.c b/drivers/gpu/arm/bifrost/platform/vexpress/mali_kbase_config_vexpress.c new file mode 100755 -index 000000000000..8add708d0f8a +index 000000000..8add708d0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress/mali_kbase_config_vexpress.c @@ -0,0 +1,79 @@ @@ -288001,7 +288030,7 @@ index 000000000000..8add708d0f8a +#endif /* CONFIG_MALI_BIFROST_DVFS */ diff --git a/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/Kbuild b/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/Kbuild new file mode 100755 -index 000000000000..e1398fde3976 +index 000000000..e1398fde3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/Kbuild @@ -0,0 +1,23 @@ @@ -288030,7 +288059,7 @@ index 000000000000..e1398fde3976 + mali_kbase_platform_fake.o diff --git a/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h b/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..28f453161358 +index 000000000..28f453161 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h @@ -0,0 +1,38 @@ @@ -288074,7 +288103,7 @@ index 000000000000..28f453161358 +extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/mali_kbase_config_vexpress.c b/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/mali_kbase_config_vexpress.c new file mode 100755 -index 000000000000..835b7587cfbf +index 000000000..835b7587c --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress_1xv7_a57/mali_kbase_config_vexpress.c @@ -0,0 +1,77 @@ @@ -288157,7 +288186,7 @@ index 000000000000..835b7587cfbf +#endif /* CONFIG_MALI_BIFROST_DVFS */ diff --git a/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/Kbuild b/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/Kbuild new file mode 100755 -index 000000000000..10f7dc8cf22c +index 000000000..10f7dc8cf --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/Kbuild @@ -0,0 +1,24 @@ @@ -288187,7 +288216,7 @@ index 000000000000..10f7dc8cf22c + mali_kbase_platform_fake.o diff --git a/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h b/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..28f453161358 +index 000000000..28f453161 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h @@ -0,0 +1,38 @@ @@ -288231,7 +288260,7 @@ index 000000000000..28f453161358 +extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_vexpress.c b/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_vexpress.c new file mode 100755 -index 000000000000..8be30fb25bba +index 000000000..8be30fb25 --- /dev/null +++ b/drivers/gpu/arm/bifrost/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_vexpress.c @@ -0,0 +1,77 @@ @@ -288314,7 +288343,7 @@ index 000000000000..8be30fb25bba +#endif /* CONFIG_MALI_BIFROST_DVFS */ diff --git a/drivers/gpu/arm/bifrost/protected_mode_switcher.h b/drivers/gpu/arm/bifrost/protected_mode_switcher.h new file mode 100755 -index 000000000000..9dd9253c7e95 +index 000000000..9dd9253c7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/protected_mode_switcher.h @@ -0,0 +1,56 @@ @@ -288376,7 +288405,7 @@ index 000000000000..9dd9253c7e95 +#endif /* _PROTECTED_MODE_SWITCH_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/Kbuild b/drivers/gpu/arm/bifrost/tests/Kbuild new file mode 100755 -index 000000000000..38e4dd4d712a +index 000000000..38e4dd4d7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/Kbuild @@ -0,0 +1,31 @@ @@ -288413,7 +288442,7 @@ index 000000000000..38e4dd4d712a + diff --git a/drivers/gpu/arm/bifrost/tests/Kconfig b/drivers/gpu/arm/bifrost/tests/Kconfig new file mode 100755 -index 000000000000..e9fe22771416 +index 000000000..e9fe22771 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/Kconfig @@ -0,0 +1,69 @@ @@ -288488,7 +288517,7 @@ index 000000000000..e9fe22771416 + depends on MALI_BIFROST && !MALI_BIFROST_DEBUG && MALI_KUTF diff --git a/drivers/gpu/arm/bifrost/tests/build.bp b/drivers/gpu/arm/bifrost/tests/build.bp new file mode 100644 -index 000000000000..5581ba934cd3 +index 000000000..5581ba934 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/build.bp @@ -0,0 +1,46 @@ @@ -288540,7 +288569,7 @@ index 000000000000..5581ba934cd3 +} diff --git a/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_helpers.h b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_helpers.h new file mode 100755 -index 000000000000..3f68efa4257d +index 000000000..3f68efa42 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_helpers.h @@ -0,0 +1,109 @@ @@ -288655,7 +288684,7 @@ index 000000000000..3f68efa4257d +#endif /* _KERNEL_UTF_HELPERS_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_helpers_user.h b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_helpers_user.h new file mode 100755 -index 000000000000..e147cbb90154 +index 000000000..e147cbb90 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_helpers_user.h @@ -0,0 +1,184 @@ @@ -288845,7 +288874,7 @@ index 000000000000..e147cbb90154 +#endif /* _KERNEL_UTF_HELPERS_USER_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_mem.h b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_mem.h new file mode 100755 -index 000000000000..5d4d96ef39b1 +index 000000000..5d4d96ef3 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_mem.h @@ -0,0 +1,72 @@ @@ -288923,7 +288952,7 @@ index 000000000000..5d4d96ef39b1 +#endif /* _KERNEL_UTF_MEM_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_resultset.h b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_resultset.h new file mode 100755 -index 000000000000..2fb1a47a59b4 +index 000000000..2fb1a47a5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_resultset.h @@ -0,0 +1,180 @@ @@ -289109,7 +289138,7 @@ index 000000000000..2fb1a47a59b4 +#endif /* _KERNEL_UTF_RESULTSET_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_suite.h b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_suite.h new file mode 100755 -index 000000000000..9e459c556013 +index 000000000..9e459c556 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_suite.h @@ -0,0 +1,571 @@ @@ -289686,7 +289715,7 @@ index 000000000000..9e459c556013 +#endif /* _KERNEL_UTF_SUITE_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_utils.h b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_utils.h new file mode 100755 -index 000000000000..f6e758b80d98 +index 000000000..f6e758b80 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/include/kutf/kutf_utils.h @@ -0,0 +1,60 @@ @@ -289752,7 +289781,7 @@ index 000000000000..f6e758b80d98 +#endif /* _KERNEL_UTF_UTILS_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/kutf/Kbuild b/drivers/gpu/arm/bifrost/tests/kutf/Kbuild new file mode 100755 -index 000000000000..c4790bc66c23 +index 000000000..c4790bc66 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/Kbuild @@ -0,0 +1,31 @@ @@ -289789,7 +289818,7 @@ index 000000000000..c4790bc66c23 +endif diff --git a/drivers/gpu/arm/bifrost/tests/kutf/build.bp b/drivers/gpu/arm/bifrost/tests/kutf/build.bp new file mode 100755 -index 000000000000..89edae9c5e6f +index 000000000..89edae9c5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/build.bp @@ -0,0 +1,42 @@ @@ -289837,7 +289866,7 @@ index 000000000000..89edae9c5e6f +} diff --git a/drivers/gpu/arm/bifrost/tests/kutf/kutf_helpers.c b/drivers/gpu/arm/bifrost/tests/kutf/kutf_helpers.c new file mode 100755 -index 000000000000..42736195e071 +index 000000000..42736195e --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/kutf_helpers.c @@ -0,0 +1,141 @@ @@ -289984,7 +290013,7 @@ index 000000000000..42736195e071 +EXPORT_SYMBOL(kutf_helper_stop_ignoring_dmesg); diff --git a/drivers/gpu/arm/bifrost/tests/kutf/kutf_helpers_user.c b/drivers/gpu/arm/bifrost/tests/kutf/kutf_helpers_user.c new file mode 100755 -index 000000000000..c4e294325262 +index 000000000..c4e294325 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/kutf_helpers_user.c @@ -0,0 +1,474 @@ @@ -290464,7 +290493,7 @@ index 000000000000..c4e294325262 +EXPORT_SYMBOL(kutf_helper_output_named_val); diff --git a/drivers/gpu/arm/bifrost/tests/kutf/kutf_mem.c b/drivers/gpu/arm/bifrost/tests/kutf/kutf_mem.c new file mode 100755 -index 000000000000..716970abb8c4 +index 000000000..716970abb --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/kutf_mem.c @@ -0,0 +1,107 @@ @@ -290577,7 +290606,7 @@ index 000000000000..716970abb8c4 +EXPORT_SYMBOL(kutf_mempool_alloc); diff --git a/drivers/gpu/arm/bifrost/tests/kutf/kutf_resultset.c b/drivers/gpu/arm/bifrost/tests/kutf/kutf_resultset.c new file mode 100755 -index 000000000000..3a7ade2831b3 +index 000000000..3a7ade283 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/kutf_resultset.c @@ -0,0 +1,163 @@ @@ -290746,7 +290775,7 @@ index 000000000000..3a7ade2831b3 +} diff --git a/drivers/gpu/arm/bifrost/tests/kutf/kutf_suite.c b/drivers/gpu/arm/bifrost/tests/kutf/kutf_suite.c new file mode 100755 -index 000000000000..4468066f1b27 +index 000000000..4468066f1 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/kutf_suite.c @@ -0,0 +1,1216 @@ @@ -291968,7 +291997,7 @@ index 000000000000..4468066f1b27 +module_exit(exit_kutf_core); diff --git a/drivers/gpu/arm/bifrost/tests/kutf/kutf_utils.c b/drivers/gpu/arm/bifrost/tests/kutf/kutf_utils.c new file mode 100755 -index 000000000000..21f5fadcc5f6 +index 000000000..21f5fadcc --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/kutf/kutf_utils.c @@ -0,0 +1,75 @@ @@ -292049,7 +292078,7 @@ index 000000000000..21f5fadcc5f6 +EXPORT_SYMBOL(kutf_dsprintf); diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/Kbuild b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/Kbuild new file mode 100755 -index 000000000000..027bc27c9d3c +index 000000000..027bc27c9 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/Kbuild @@ -0,0 +1,25 @@ @@ -292080,7 +292109,7 @@ index 000000000000..027bc27c9d3c +endif diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/build.bp b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/build.bp new file mode 100755 -index 000000000000..225ad69c5042 +index 000000000..225ad69c5 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/build.bp @@ -0,0 +1,43 @@ @@ -292129,7 +292158,7 @@ index 000000000000..225ad69c5042 +} diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/mali_kutf_clk_rate_trace_test.c b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/mali_kutf_clk_rate_trace_test.c new file mode 100755 -index 000000000000..a6f54b61d4ad +index 000000000..a6f54b61d --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/kernel/mali_kutf_clk_rate_trace_test.c @@ -0,0 +1,965 @@ @@ -293100,7 +293129,7 @@ index 000000000000..a6f54b61d4ad +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/mali_kutf_clk_rate_trace_test.h b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/mali_kutf_clk_rate_trace_test.h new file mode 100755 -index 000000000000..a716b9f70135 +index 000000000..a716b9f70 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_clk_rate_trace/mali_kutf_clk_rate_trace_test.h @@ -0,0 +1,154 @@ @@ -293260,7 +293289,7 @@ index 000000000000..a716b9f70135 +#endif /* _KUTF_CLK_RATE_TRACE_TEST_H_ */ diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/Kbuild b/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/Kbuild new file mode 100755 -index 000000000000..213d6d5ea317 +index 000000000..213d6d5ea --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/Kbuild @@ -0,0 +1,25 @@ @@ -293291,7 +293320,7 @@ index 000000000000..213d6d5ea317 +endif diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/build.bp b/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/build.bp new file mode 100755 -index 000000000000..155875b9d5cc +index 000000000..155875b9d --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/build.bp @@ -0,0 +1,42 @@ @@ -293339,7 +293368,7 @@ index 000000000000..155875b9d5cc +} diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/mali_kutf_irq_test_main.c b/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/mali_kutf_irq_test_main.c new file mode 100755 -index 000000000000..f2a014d9b5ca +index 000000000..f2a014d9b --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_irq_test/mali_kutf_irq_test_main.c @@ -0,0 +1,283 @@ @@ -293628,7 +293657,7 @@ index 000000000000..f2a014d9b5ca +MODULE_VERSION("1.0"); diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/Kbuild b/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/Kbuild new file mode 100644 -index 000000000000..e9bff98b88b6 +index 000000000..e9bff98b8 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/Kbuild @@ -0,0 +1,25 @@ @@ -293659,7 +293688,7 @@ index 000000000000..e9bff98b88b6 +endif diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/build.bp b/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/build.bp new file mode 100644 -index 000000000000..8b995f8a0a07 +index 000000000..8b995f8a0 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/build.bp @@ -0,0 +1,41 @@ @@ -293706,7 +293735,7 @@ index 000000000000..8b995f8a0a07 +} diff --git a/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/mali_kutf_mgm_integration_test_main.c b/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/mali_kutf_mgm_integration_test_main.c new file mode 100644 -index 000000000000..5a42bd675c2a +index 000000000..5a42bd675 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tests/mali_kutf_mgm_integration_test/mali_kutf_mgm_integration_test_main.c @@ -0,0 +1,210 @@ @@ -293922,7 +293951,7 @@ index 000000000000..5a42bd675c2a +MODULE_VERSION("1.0"); diff --git a/drivers/gpu/arm/bifrost/thirdparty/Kbuild b/drivers/gpu/arm/bifrost/thirdparty/Kbuild new file mode 100644 -index 000000000000..558be077d483 +index 000000000..558be077d --- /dev/null +++ b/drivers/gpu/arm/bifrost/thirdparty/Kbuild @@ -0,0 +1,21 @@ @@ -293949,7 +293978,7 @@ index 000000000000..558be077d483 +bifrost_kbase-y += thirdparty/mali_kbase_mmap.o diff --git a/drivers/gpu/arm/bifrost/thirdparty/mali_kbase_mmap.c b/drivers/gpu/arm/bifrost/thirdparty/mali_kbase_mmap.c new file mode 100755 -index 000000000000..1e636b9a7759 +index 000000000..1e636b9a7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/thirdparty/mali_kbase_mmap.c @@ -0,0 +1,420 @@ @@ -294375,7 +294404,7 @@ index 000000000000..1e636b9a7759 +} diff --git a/drivers/gpu/arm/bifrost/tl/Kbuild b/drivers/gpu/arm/bifrost/tl/Kbuild new file mode 100644 -index 000000000000..1c684d489d6f +index 000000000..1c684d489 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/Kbuild @@ -0,0 +1,32 @@ @@ -294413,7 +294442,7 @@ index 000000000000..1c684d489d6f +endif diff --git a/drivers/gpu/arm/bifrost/tl/backend/mali_kbase_timeline_csf.c b/drivers/gpu/arm/bifrost/tl/backend/mali_kbase_timeline_csf.c new file mode 100755 -index 000000000000..a6062f170ff9 +index 000000000..a6062f170 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/backend/mali_kbase_timeline_csf.c @@ -0,0 +1,190 @@ @@ -294609,7 +294638,7 @@ index 000000000000..a6062f170ff9 +} diff --git a/drivers/gpu/arm/bifrost/tl/backend/mali_kbase_timeline_jm.c b/drivers/gpu/arm/bifrost/tl/backend/mali_kbase_timeline_jm.c new file mode 100755 -index 000000000000..9ba89f59f03b +index 000000000..9ba89f59f --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/backend/mali_kbase_timeline_jm.c @@ -0,0 +1,96 @@ @@ -294711,7 +294740,7 @@ index 000000000000..9ba89f59f03b +} diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline.c b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline.c new file mode 100755 -index 000000000000..9ed59633c41b +index 000000000..9ed59633c --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline.c @@ -0,0 +1,412 @@ @@ -295129,7 +295158,7 @@ index 000000000000..9ed59633c41b +#endif /* MALI_UNIT_TEST */ diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline.h b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline.h new file mode 100755 -index 000000000000..62be6c64c850 +index 000000000..62be6c64c --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline.h @@ -0,0 +1,128 @@ @@ -295263,7 +295292,7 @@ index 000000000000..62be6c64c850 +#endif /* _KBASE_TIMELINE_H */ diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline_io.c b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline_io.c new file mode 100755 -index 000000000000..ae570064e7d0 +index 000000000..ae570064e --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline_io.c @@ -0,0 +1,465 @@ @@ -295734,7 +295763,7 @@ index 000000000000..ae570064e7d0 +} diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline_priv.h b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline_priv.h new file mode 100755 -index 000000000000..de30bccc7cca +index 000000000..de30bccc7 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_timeline_priv.h @@ -0,0 +1,103 @@ @@ -295843,7 +295872,7 @@ index 000000000000..de30bccc7cca +#endif /* _KBASE_TIMELINE_PRIV_H */ diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_tl_serialize.h b/drivers/gpu/arm/bifrost/tl/mali_kbase_tl_serialize.h new file mode 100755 -index 000000000000..b6aaadedc6b9 +index 000000000..b6aaadedc --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_tl_serialize.h @@ -0,0 +1,123 @@ @@ -295972,7 +296001,7 @@ index 000000000000..b6aaadedc6b9 +#endif /* _KBASE_TL_SERIALIZE_H */ diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_tlstream.c b/drivers/gpu/arm/bifrost/tl/mali_kbase_tlstream.c new file mode 100755 -index 000000000000..47059deb4da2 +index 000000000..47059deb4 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_tlstream.c @@ -0,0 +1,313 @@ @@ -296291,7 +296320,7 @@ index 000000000000..47059deb4da2 +} diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_tlstream.h b/drivers/gpu/arm/bifrost/tl/mali_kbase_tlstream.h new file mode 100755 -index 000000000000..c1428495b11c +index 000000000..c1428495b --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_tlstream.h @@ -0,0 +1,168 @@ @@ -296465,7 +296494,7 @@ index 000000000000..c1428495b11c +#endif /* _KBASE_TLSTREAM_H */ diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_tracepoints.c b/drivers/gpu/arm/bifrost/tl/mali_kbase_tracepoints.c new file mode 100755 -index 000000000000..f62c75583566 +index 000000000..f62c75583 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_tracepoints.c @@ -0,0 +1,4223 @@ @@ -300694,7 +300723,7 @@ index 000000000000..f62c75583566 +/* clang-format on */ diff --git a/drivers/gpu/arm/bifrost/tl/mali_kbase_tracepoints.h b/drivers/gpu/arm/bifrost/tl/mali_kbase_tracepoints.h new file mode 100755 -index 000000000000..06e4ca4a6bc2 +index 000000000..06e4ca4a6 --- /dev/null +++ b/drivers/gpu/arm/bifrost/tl/mali_kbase_tracepoints.h @@ -0,0 +1,4382 @@ @@ -305082,14 +305111,14 @@ index 000000000000..06e4ca4a6bc2 +#endif diff --git a/drivers/gpu/arm/mali400/.gitignore b/drivers/gpu/arm/mali400/.gitignore new file mode 100755 -index 000000000000..d91c8078a009 +index 000000000..d91c8078a --- /dev/null +++ b/drivers/gpu/arm/mali400/.gitignore @@ -0,0 +1 @@ +./mali/__malidrv_build_info.c diff --git a/drivers/gpu/arm/mali400/Kbuild b/drivers/gpu/arm/mali400/Kbuild new file mode 100755 -index 000000000000..dbb7ad3e5d85 +index 000000000..dbb7ad3e5 --- /dev/null +++ b/drivers/gpu/arm/mali400/Kbuild @@ -0,0 +1,2 @@ @@ -305097,14 +305126,14 @@ index 000000000000..dbb7ad3e5d85 +obj-y += mali/ diff --git a/drivers/gpu/arm/mali400/mali/.gitignore b/drivers/gpu/arm/mali400/mali/.gitignore new file mode 100755 -index 000000000000..6b1a3ed27a7f +index 000000000..6b1a3ed27 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/.gitignore @@ -0,0 +1 @@ +__malidrv_build_info.c diff --git a/drivers/gpu/arm/mali400/mali/Kbuild b/drivers/gpu/arm/mali400/mali/Kbuild new file mode 100755 -index 000000000000..7390ab758f22 +index 000000000..7390ab758 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/Kbuild @@ -0,0 +1,254 @@ @@ -305364,7 +305393,7 @@ index 000000000000..7390ab758f22 + @echo 'const char *__malidrv_build_info(void) { return "malidrv: $(VERSION_STRINGS)";}' > $(src)/__malidrv_build_info.c diff --git a/drivers/gpu/arm/mali400/mali/Kconfig b/drivers/gpu/arm/mali400/mali/Kconfig new file mode 100755 -index 000000000000..082919d91825 +index 000000000..082919d91 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/Kconfig @@ -0,0 +1,119 @@ @@ -305489,7 +305518,7 @@ index 000000000000..082919d91825 + If unsure, say N. diff --git a/drivers/gpu/arm/mali400/mali/Makefile b/drivers/gpu/arm/mali400/mali/Makefile new file mode 100755 -index 000000000000..0b91321a5af1 +index 000000000..0b91321a5 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/Makefile @@ -0,0 +1,206 @@ @@ -305701,7 +305730,7 @@ index 000000000000..0b91321a5af1 +export CONFIG KBUILD_EXTRA_SYMBOLS diff --git a/drivers/gpu/arm/mali400/mali/common/mali_broadcast.c b/drivers/gpu/arm/mali400/mali/common/mali_broadcast.c new file mode 100755 -index 000000000000..79a418c36ccb +index 000000000..79a418c36 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_broadcast.c @@ -0,0 +1,142 @@ @@ -305849,7 +305878,7 @@ index 000000000000..79a418c36ccb +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_broadcast.h b/drivers/gpu/arm/mali400/mali/common/mali_broadcast.h new file mode 100755 -index 000000000000..0475b7171d8d +index 000000000..0475b7171 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_broadcast.h @@ -0,0 +1,57 @@ @@ -305912,7 +305941,7 @@ index 000000000000..0475b7171d8d +#endif /* __MALI_BROADCAST_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_control_timer.c b/drivers/gpu/arm/mali400/mali/common/mali_control_timer.c new file mode 100755 -index 000000000000..5bed27a8c5c9 +index 000000000..5bed27a8c --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_control_timer.c @@ -0,0 +1,139 @@ @@ -306057,7 +306086,7 @@ index 000000000000..5bed27a8c5c9 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_control_timer.h b/drivers/gpu/arm/mali400/mali/common/mali_control_timer.h new file mode 100755 -index 000000000000..c9e6e058ea8e +index 000000000..c9e6e058e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_control_timer.h @@ -0,0 +1,30 @@ @@ -306093,7 +306122,7 @@ index 000000000000..c9e6e058ea8e + diff --git a/drivers/gpu/arm/mali400/mali/common/mali_dlbu.c b/drivers/gpu/arm/mali400/mali/common/mali_dlbu.c new file mode 100755 -index 000000000000..99b7f360768b +index 000000000..99b7f3607 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_dlbu.c @@ -0,0 +1,213 @@ @@ -306312,7 +306341,7 @@ index 000000000000..99b7f360768b +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_dlbu.h b/drivers/gpu/arm/mali400/mali/common/mali_dlbu.h new file mode 100755 -index 000000000000..a7ecf41471d8 +index 000000000..a7ecf4147 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_dlbu.h @@ -0,0 +1,45 @@ @@ -306363,7 +306392,7 @@ index 000000000000..a7ecf41471d8 +#endif /* __MALI_DLBU_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_dvfs_policy.c b/drivers/gpu/arm/mali400/mali/common/mali_dvfs_policy.c new file mode 100755 -index 000000000000..55b21a410754 +index 000000000..55b21a410 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_dvfs_policy.c @@ -0,0 +1,308 @@ @@ -306677,7 +306706,7 @@ index 000000000000..55b21a410754 + diff --git a/drivers/gpu/arm/mali400/mali/common/mali_dvfs_policy.h b/drivers/gpu/arm/mali400/mali/common/mali_dvfs_policy.h new file mode 100755 -index 000000000000..662348c4e6ac +index 000000000..662348c4e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_dvfs_policy.h @@ -0,0 +1,34 @@ @@ -306717,7 +306746,7 @@ index 000000000000..662348c4e6ac +#endif/* __MALI_DVFS_POLICY_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_executor.c b/drivers/gpu/arm/mali400/mali/common/mali_executor.c new file mode 100755 -index 000000000000..0cf1ec0b0d02 +index 000000000..0cf1ec0b0 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_executor.c @@ -0,0 +1,2707 @@ @@ -309430,7 +309459,7 @@ index 000000000000..0cf1ec0b0d02 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_executor.h b/drivers/gpu/arm/mali400/mali/common/mali_executor.h new file mode 100755 -index 000000000000..4224d6a6cdc4 +index 000000000..4224d6a6c --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_executor.h @@ -0,0 +1,102 @@ @@ -309538,7 +309567,7 @@ index 000000000000..4224d6a6cdc4 +#endif /* __MALI_EXECUTOR_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_gp.c b/drivers/gpu/arm/mali400/mali/common/mali_gp.c new file mode 100755 -index 000000000000..7d3d4aff7c3f +index 000000000..7d3d4aff7 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_gp.c @@ -0,0 +1,357 @@ @@ -309901,7 +309930,7 @@ index 000000000000..7d3d4aff7c3f +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_gp.h b/drivers/gpu/arm/mali400/mali/common/mali_gp.h new file mode 100755 -index 000000000000..3156310f21c7 +index 000000000..3156310f2 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_gp.h @@ -0,0 +1,127 @@ @@ -310034,7 +310063,7 @@ index 000000000000..3156310f21c7 +#endif /* __MALI_GP_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_gp_job.c b/drivers/gpu/arm/mali400/mali/common/mali_gp_job.c new file mode 100755 -index 000000000000..5d4d9f2530d3 +index 000000000..5d4d9f253 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_gp_job.c @@ -0,0 +1,306 @@ @@ -310346,7 +310375,7 @@ index 000000000000..5d4d9f2530d3 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_gp_job.h b/drivers/gpu/arm/mali400/mali/common/mali_gp_job.h new file mode 100755 -index 000000000000..b84333f9f810 +index 000000000..b84333f9f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_gp_job.h @@ -0,0 +1,324 @@ @@ -310676,7 +310705,7 @@ index 000000000000..b84333f9f810 +#endif /* __MALI_GP_JOB_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_group.c b/drivers/gpu/arm/mali400/mali/common/mali_group.c new file mode 100755 -index 000000000000..47979a2f1a35 +index 000000000..47979a2f1 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_group.c @@ -0,0 +1,1875 @@ @@ -312557,7 +312586,7 @@ index 000000000000..47979a2f1a35 +#endif /* #if defined(CONFIG_MALI400_PROFILING) */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_group.h b/drivers/gpu/arm/mali400/mali/common/mali_group.h new file mode 100755 -index 000000000000..32481e4a6748 +index 000000000..32481e4a6 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_group.h @@ -0,0 +1,460 @@ @@ -313023,7 +313052,7 @@ index 000000000000..32481e4a6748 +#endif /* __MALI_GROUP_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_hw_core.c b/drivers/gpu/arm/mali400/mali/common/mali_hw_core.c new file mode 100755 -index 000000000000..a813816e998d +index 000000000..a813816e9 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_hw_core.c @@ -0,0 +1,47 @@ @@ -313076,7 +313105,7 @@ index 000000000000..a813816e998d +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_hw_core.h b/drivers/gpu/arm/mali400/mali/common/mali_hw_core.h new file mode 100755 -index 000000000000..38d96e240a20 +index 000000000..38d96e240 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_hw_core.h @@ -0,0 +1,111 @@ @@ -313193,7 +313222,7 @@ index 000000000000..38d96e240a20 +#endif /* __MALI_HW_CORE_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_kernel_common.h b/drivers/gpu/arm/mali400/mali/common/mali_kernel_common.h new file mode 100755 -index 000000000000..6a8f0f0116a4 +index 000000000..6a8f0f011 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_kernel_common.h @@ -0,0 +1,181 @@ @@ -313380,7 +313409,7 @@ index 000000000000..6a8f0f0116a4 +#endif /* __MALI_KERNEL_COMMON_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_kernel_core.c b/drivers/gpu/arm/mali400/mali/common/mali_kernel_core.c new file mode 100755 -index 000000000000..87f97b710257 +index 000000000..87f97b710 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_kernel_core.c @@ -0,0 +1,1349 @@ @@ -314735,7 +314764,7 @@ index 000000000000..87f97b710257 +#endif diff --git a/drivers/gpu/arm/mali400/mali/common/mali_kernel_core.h b/drivers/gpu/arm/mali400/mali/common/mali_kernel_core.h new file mode 100755 -index 000000000000..c471fc955107 +index 000000000..c471fc955 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_kernel_core.h @@ -0,0 +1,57 @@ @@ -314798,7 +314827,7 @@ index 000000000000..c471fc955107 +#endif /* __MALI_KERNEL_CORE_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_kernel_utilization.c b/drivers/gpu/arm/mali400/mali/common/mali_kernel_utilization.c new file mode 100755 -index 000000000000..d1b8dc3b0b0e +index 000000000..d1b8dc3b0 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_kernel_utilization.c @@ -0,0 +1,440 @@ @@ -315244,7 +315273,7 @@ index 000000000000..d1b8dc3b0b0e +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_kernel_utilization.h b/drivers/gpu/arm/mali400/mali/common/mali_kernel_utilization.h new file mode 100755 -index 000000000000..06f585dcb238 +index 000000000..06f585dcb --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_kernel_utilization.h @@ -0,0 +1,72 @@ @@ -315322,7 +315351,7 @@ index 000000000000..06f585dcb238 +#endif /* __MALI_KERNEL_UTILIZATION_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_kernel_vsync.c b/drivers/gpu/arm/mali400/mali/common/mali_kernel_vsync.c new file mode 100755 -index 000000000000..dd44e5e7fa03 +index 000000000..dd44e5e7f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_kernel_vsync.c @@ -0,0 +1,45 @@ @@ -315373,7 +315402,7 @@ index 000000000000..dd44e5e7fa03 + diff --git a/drivers/gpu/arm/mali400/mali/common/mali_l2_cache.c b/drivers/gpu/arm/mali400/mali/common/mali_l2_cache.c new file mode 100755 -index 000000000000..fe33f561b2aa +index 000000000..fe33f561b --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_l2_cache.c @@ -0,0 +1,534 @@ @@ -315913,7 +315942,7 @@ index 000000000000..fe33f561b2aa +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_l2_cache.h b/drivers/gpu/arm/mali400/mali/common/mali_l2_cache.h new file mode 100755 -index 000000000000..c48a8844075f +index 000000000..c48a88440 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_l2_cache.h @@ -0,0 +1,124 @@ @@ -316043,7 +316072,7 @@ index 000000000000..c48a8844075f +#endif /* __MALI_KERNEL_L2_CACHE_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_mem_validation.c b/drivers/gpu/arm/mali400/mali/common/mali_mem_validation.c new file mode 100755 -index 000000000000..eb95998f1469 +index 000000000..eb95998f1 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_mem_validation.c @@ -0,0 +1,68 @@ @@ -316117,7 +316146,7 @@ index 000000000000..eb95998f1469 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_mem_validation.h b/drivers/gpu/arm/mali400/mali/common/mali_mem_validation.h new file mode 100755 -index 000000000000..05013f46f901 +index 000000000..05013f46f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_mem_validation.h @@ -0,0 +1,19 @@ @@ -316142,7 +316171,7 @@ index 000000000000..05013f46f901 +#endif /* __MALI_MEM_VALIDATION_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_mmu.c b/drivers/gpu/arm/mali400/mali/common/mali_mmu.c new file mode 100755 -index 000000000000..b82486fa66c0 +index 000000000..b82486fa6 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_mmu.c @@ -0,0 +1,433 @@ @@ -316581,7 +316610,7 @@ index 000000000000..b82486fa66c0 +#endif diff --git a/drivers/gpu/arm/mali400/mali/common/mali_mmu.h b/drivers/gpu/arm/mali400/mali/common/mali_mmu.h new file mode 100755 -index 000000000000..6ed48585f3d2 +index 000000000..6ed48585f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_mmu.h @@ -0,0 +1,124 @@ @@ -316711,7 +316740,7 @@ index 000000000000..6ed48585f3d2 +#endif /* __MALI_MMU_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_mmu_page_directory.c b/drivers/gpu/arm/mali400/mali/common/mali_mmu_page_directory.c new file mode 100755 -index 000000000000..9ad3e8970b7d +index 000000000..9ad3e8970 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_mmu_page_directory.c @@ -0,0 +1,495 @@ @@ -317212,7 +317241,7 @@ index 000000000000..9ad3e8970b7d +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_mmu_page_directory.h b/drivers/gpu/arm/mali400/mali/common/mali_mmu_page_directory.h new file mode 100755 -index 000000000000..3fdf07210259 +index 000000000..3fdf07210 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_mmu_page_directory.h @@ -0,0 +1,110 @@ @@ -317328,7 +317357,7 @@ index 000000000000..3fdf07210259 +#endif /* __MALI_MMU_PAGE_DIRECTORY_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_osk.h b/drivers/gpu/arm/mali400/mali/common/mali_osk.h new file mode 100755 -index 000000000000..9ade362d6b28 +index 000000000..9ade362d6 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_osk.h @@ -0,0 +1,1389 @@ @@ -318723,7 +318752,7 @@ index 000000000000..9ade362d6b28 +#endif /* __MALI_OSK_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_osk_bitops.h b/drivers/gpu/arm/mali400/mali/common/mali_osk_bitops.h new file mode 100755 -index 000000000000..bb1831753a40 +index 000000000..bb1831753 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_osk_bitops.h @@ -0,0 +1,162 @@ @@ -318891,7 +318920,7 @@ index 000000000000..bb1831753a40 +#endif /* __MALI_OSK_BITOPS_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_osk_list.h b/drivers/gpu/arm/mali400/mali/common/mali_osk_list.h new file mode 100755 -index 000000000000..9af2d7d4d621 +index 000000000..9af2d7d4d --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_osk_list.h @@ -0,0 +1,273 @@ @@ -319170,7 +319199,7 @@ index 000000000000..9af2d7d4d621 +#endif /* __MALI_OSK_LIST_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_osk_mali.h b/drivers/gpu/arm/mali400/mali/common/mali_osk_mali.h new file mode 100755 -index 000000000000..a4c1618e9252 +index 000000000..a4c1618e9 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_osk_mali.h @@ -0,0 +1,155 @@ @@ -319331,7 +319360,7 @@ index 000000000000..a4c1618e9252 +#endif /* __MALI_OSK_MALI_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_osk_profiling.h b/drivers/gpu/arm/mali400/mali/common/mali_osk_profiling.h new file mode 100755 -index 000000000000..6e4583db1c80 +index 000000000..6e4583db1 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_osk_profiling.h @@ -0,0 +1,146 @@ @@ -319483,7 +319512,7 @@ index 000000000000..6e4583db1c80 + diff --git a/drivers/gpu/arm/mali400/mali/common/mali_osk_types.h b/drivers/gpu/arm/mali400/mali/common/mali_osk_types.h new file mode 100755 -index 000000000000..b6fa94ce16b3 +index 000000000..b6fa94ce1 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_osk_types.h @@ -0,0 +1,471 @@ @@ -319960,7 +319989,7 @@ index 000000000000..b6fa94ce16b3 +#endif /* __MALI_OSK_TYPES_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pm.c b/drivers/gpu/arm/mali400/mali/common/mali_pm.c new file mode 100755 -index 000000000000..3989a33aeaef +index 000000000..3989a33ae --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pm.c @@ -0,0 +1,1362 @@ @@ -321328,7 +321357,7 @@ index 000000000000..3989a33aeaef +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pm.h b/drivers/gpu/arm/mali400/mali/common/mali_pm.h new file mode 100755 -index 000000000000..dac69958e034 +index 000000000..dac69958e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pm.h @@ -0,0 +1,91 @@ @@ -321425,7 +321454,7 @@ index 000000000000..dac69958e034 +#endif /* __MALI_PM_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pm_domain.c b/drivers/gpu/arm/mali400/mali/common/mali_pm_domain.c new file mode 100755 -index 000000000000..8290f7d88f6a +index 000000000..8290f7d88 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pm_domain.c @@ -0,0 +1,209 @@ @@ -321640,7 +321669,7 @@ index 000000000000..8290f7d88f6a +#endif diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pm_domain.h b/drivers/gpu/arm/mali400/mali/common/mali_pm_domain.h new file mode 100755 -index 000000000000..5776abe39f3d +index 000000000..5776abe39 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pm_domain.h @@ -0,0 +1,104 @@ @@ -321750,7 +321779,7 @@ index 000000000000..5776abe39f3d +#endif /* __MALI_PM_DOMAIN_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pm_metrics.c b/drivers/gpu/arm/mali400/mali/common/mali_pm_metrics.c new file mode 100755 -index 000000000000..cf74823230f7 +index 000000000..cf7482323 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pm_metrics.c @@ -0,0 +1,255 @@ @@ -322011,7 +322040,7 @@ index 000000000000..cf74823230f7 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pm_metrics.h b/drivers/gpu/arm/mali400/mali/common/mali_pm_metrics.h new file mode 100755 -index 000000000000..2b136b0de4e3 +index 000000000..2b136b0de --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pm_metrics.h @@ -0,0 +1,74 @@ @@ -322091,7 +322120,7 @@ index 000000000000..2b136b0de4e3 +#endif /* __MALI_PM_METRICS_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pmu.c b/drivers/gpu/arm/mali400/mali/common/mali_pmu.c new file mode 100755 -index 000000000000..6f0af59f6fd4 +index 000000000..6f0af59f6 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pmu.c @@ -0,0 +1,270 @@ @@ -322367,7 +322396,7 @@ index 000000000000..6f0af59f6fd4 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pmu.h b/drivers/gpu/arm/mali400/mali/common/mali_pmu.h new file mode 100755 -index 000000000000..5b856240fdac +index 000000000..5b856240f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pmu.h @@ -0,0 +1,123 @@ @@ -322496,7 +322525,7 @@ index 000000000000..5b856240fdac +#endif /* __MALI_PMU_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pp.c b/drivers/gpu/arm/mali400/mali/common/mali_pp.c new file mode 100755 -index 000000000000..2dd8b8766f8e +index 000000000..2dd8b8766 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pp.c @@ -0,0 +1,502 @@ @@ -323004,7 +323033,7 @@ index 000000000000..2dd8b8766f8e +#endif diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pp.h b/drivers/gpu/arm/mali400/mali/common/mali_pp.h new file mode 100755 -index 000000000000..f98b29866ffa +index 000000000..f98b29866 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pp.h @@ -0,0 +1,138 @@ @@ -323148,7 +323177,7 @@ index 000000000000..f98b29866ffa +#endif /* __MALI_PP_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pp_job.c b/drivers/gpu/arm/mali400/mali/common/mali_pp_job.c new file mode 100755 -index 000000000000..b0216d4c1ac8 +index 000000000..b0216d4c1 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pp_job.c @@ -0,0 +1,316 @@ @@ -323470,7 +323499,7 @@ index 000000000000..b0216d4c1ac8 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_pp_job.h b/drivers/gpu/arm/mali400/mali/common/mali_pp_job.h new file mode 100755 -index 000000000000..d0331f398ff9 +index 000000000..d0331f398 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_pp_job.h @@ -0,0 +1,594 @@ @@ -324070,7 +324099,7 @@ index 000000000000..d0331f398ff9 +#endif /* __MALI_PP_JOB_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_scheduler.c b/drivers/gpu/arm/mali400/mali/common/mali_scheduler.c new file mode 100755 -index 000000000000..b5e6cfddbb0e +index 000000000..b5e6cfddb --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_scheduler.c @@ -0,0 +1,1548 @@ @@ -325624,7 +325653,7 @@ index 000000000000..b5e6cfddbb0e +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_scheduler.h b/drivers/gpu/arm/mali400/mali/common/mali_scheduler.h new file mode 100755 -index 000000000000..de81a421ea9a +index 000000000..de81a421e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_scheduler.h @@ -0,0 +1,131 @@ @@ -325761,7 +325790,7 @@ index 000000000000..de81a421ea9a +#endif /* __MALI_SCHEDULER_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_scheduler_types.h b/drivers/gpu/arm/mali400/mali/common/mali_scheduler_types.h new file mode 100755 -index 000000000000..ba1d71d01d46 +index 000000000..ba1d71d01 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_scheduler_types.h @@ -0,0 +1,29 @@ @@ -325796,7 +325825,7 @@ index 000000000000..ba1d71d01d46 +#endif /* __MALI_SCHEDULER_TYPES_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_session.c b/drivers/gpu/arm/mali400/mali/common/mali_session.c new file mode 100755 -index 000000000000..7504fb108779 +index 000000000..7504fb108 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_session.c @@ -0,0 +1,155 @@ @@ -325957,7 +325986,7 @@ index 000000000000..7504fb108779 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_session.h b/drivers/gpu/arm/mali400/mali/common/mali_session.h new file mode 100755 -index 000000000000..da8b9927ee60 +index 000000000..da8b9927e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_session.h @@ -0,0 +1,136 @@ @@ -326099,7 +326128,7 @@ index 000000000000..da8b9927ee60 +#endif /* __MALI_SESSION_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_soft_job.c b/drivers/gpu/arm/mali400/mali/common/mali_soft_job.c new file mode 100755 -index 000000000000..35cd830bc83a +index 000000000..35cd830bc --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_soft_job.c @@ -0,0 +1,438 @@ @@ -326543,7 +326572,7 @@ index 000000000000..35cd830bc83a +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_soft_job.h b/drivers/gpu/arm/mali400/mali/common/mali_soft_job.h new file mode 100755 -index 000000000000..018ef4c527d9 +index 000000000..018ef4c52 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_soft_job.h @@ -0,0 +1,190 @@ @@ -326739,7 +326768,7 @@ index 000000000000..018ef4c527d9 +#endif /* __MALI_SOFT_JOB_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_spinlock_reentrant.c b/drivers/gpu/arm/mali400/mali/common/mali_spinlock_reentrant.c new file mode 100755 -index 000000000000..f829e99f02ab +index 000000000..f829e99f0 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_spinlock_reentrant.c @@ -0,0 +1,77 @@ @@ -326822,7 +326851,7 @@ index 000000000000..f829e99f02ab +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_spinlock_reentrant.h b/drivers/gpu/arm/mali400/mali/common/mali_spinlock_reentrant.h new file mode 100755 -index 000000000000..4d788ec1bbe4 +index 000000000..4d788ec1b --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_spinlock_reentrant.h @@ -0,0 +1,70 @@ @@ -326898,7 +326927,7 @@ index 000000000000..4d788ec1bbe4 +#endif /* __MALI_SPINLOCK_REENTRANT_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_timeline.c b/drivers/gpu/arm/mali400/mali/common/mali_timeline.c new file mode 100755 -index 000000000000..ffffee9306ce +index 000000000..ffffee930 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_timeline.c @@ -0,0 +1,1964 @@ @@ -328868,7 +328897,7 @@ index 000000000000..ffffee9306ce +#endif diff --git a/drivers/gpu/arm/mali400/mali/common/mali_timeline.h b/drivers/gpu/arm/mali400/mali/common/mali_timeline.h new file mode 100755 -index 000000000000..3e8bfc8fb733 +index 000000000..3e8bfc8fb --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_timeline.h @@ -0,0 +1,587 @@ @@ -329461,7 +329490,7 @@ index 000000000000..3e8bfc8fb733 +#endif /* __MALI_TIMELINE_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_timeline_fence_wait.c b/drivers/gpu/arm/mali400/mali/common/mali_timeline_fence_wait.c new file mode 100755 -index 000000000000..1ab13f50997f +index 000000000..1ab13f509 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_timeline_fence_wait.c @@ -0,0 +1,218 @@ @@ -329685,7 +329714,7 @@ index 000000000000..1ab13f50997f +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_timeline_fence_wait.h b/drivers/gpu/arm/mali400/mali/common/mali_timeline_fence_wait.h new file mode 100755 -index 000000000000..9da12baeef1a +index 000000000..9da12baee --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_timeline_fence_wait.h @@ -0,0 +1,67 @@ @@ -329758,7 +329787,7 @@ index 000000000000..9da12baeef1a +#endif /* __MALI_TIMELINE_FENCE_WAIT_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_timeline_sync_fence.c b/drivers/gpu/arm/mali400/mali/common/mali_timeline_sync_fence.c new file mode 100755 -index 000000000000..bb7f6a04e8bd +index 000000000..bb7f6a04e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_timeline_sync_fence.c @@ -0,0 +1,179 @@ @@ -329943,7 +329972,7 @@ index 000000000000..bb7f6a04e8bd +#endif /* defined(CONFIG_SYNC) || defined(CONFIG_SYNC_FILE) */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_timeline_sync_fence.h b/drivers/gpu/arm/mali400/mali/common/mali_timeline_sync_fence.h new file mode 100755 -index 000000000000..65e368ae7c9e +index 000000000..65e368ae7 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_timeline_sync_fence.h @@ -0,0 +1,51 @@ @@ -330000,7 +330029,7 @@ index 000000000000..65e368ae7c9e +#endif /* __MALI_TIMELINE_SYNC_FENCE_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_ukk.h b/drivers/gpu/arm/mali400/mali/common/mali_ukk.h new file mode 100755 -index 000000000000..55a05c50436a +index 000000000..55a05c504 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_ukk.h @@ -0,0 +1,551 @@ @@ -330557,7 +330586,7 @@ index 000000000000..55a05c50436a +#endif /* __MALI_UKK_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/common/mali_user_settings_db.c b/drivers/gpu/arm/mali400/mali/common/mali_user_settings_db.c new file mode 100755 -index 000000000000..1911eff87a72 +index 000000000..1911eff87 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_user_settings_db.c @@ -0,0 +1,147 @@ @@ -330710,7 +330739,7 @@ index 000000000000..1911eff87a72 +} diff --git a/drivers/gpu/arm/mali400/mali/common/mali_user_settings_db.h b/drivers/gpu/arm/mali400/mali/common/mali_user_settings_db.h new file mode 100755 -index 000000000000..da9c0630e371 +index 000000000..da9c0630e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/common/mali_user_settings_db.h @@ -0,0 +1,39 @@ @@ -330755,7 +330784,7 @@ index 000000000000..da9c0630e371 +#endif /* __MALI_KERNEL_USER_SETTING__ */ diff --git a/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard.h b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard.h new file mode 100755 -index 000000000000..7df55c951d6f +index 000000000..7df55c951 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard.h @@ -0,0 +1,526 @@ @@ -331287,7 +331316,7 @@ index 000000000000..7df55c951d6f +#endif diff --git a/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_ioctl.h b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_ioctl.h new file mode 100755 -index 000000000000..686708eaef75 +index 000000000..686708eae --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_ioctl.h @@ -0,0 +1,97 @@ @@ -331390,7 +331419,7 @@ index 000000000000..686708eaef75 +#endif /* __MALI_UTGARD_IOCTL_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_profiling_events.h b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_profiling_events.h new file mode 100755 -index 000000000000..17d31de931d0 +index 000000000..17d31de93 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_profiling_events.h @@ -0,0 +1,190 @@ @@ -331586,7 +331615,7 @@ index 000000000000..17d31de931d0 +#endif /*_MALI_UTGARD_PROFILING_EVENTS_H_*/ diff --git a/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_profiling_gator_api.h b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_profiling_gator_api.h new file mode 100755 -index 000000000000..c1927d1450dc +index 000000000..c1927d145 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_profiling_gator_api.h @@ -0,0 +1,305 @@ @@ -331897,7 +331926,7 @@ index 000000000000..c1927d1450dc +#endif /* __MALI_UTGARD_PROFILING_GATOR_API_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_uk_types.h b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_uk_types.h new file mode 100755 -index 000000000000..34656f09b2ab +index 000000000..34656f09b --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/include/linux/mali/mali_utgard_uk_types.h @@ -0,0 +1,1108 @@ @@ -333011,7 +333040,7 @@ index 000000000000..34656f09b2ab +#endif /* __MALI_UTGARD_UK_TYPES_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/license/gpl/mali_kernel_license.h b/drivers/gpu/arm/mali400/mali/linux/license/gpl/mali_kernel_license.h new file mode 100755 -index 000000000000..6fafc6777e48 +index 000000000..6fafc6777 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/license/gpl/mali_kernel_license.h @@ -0,0 +1,30 @@ @@ -333047,7 +333076,7 @@ index 000000000000..6fafc6777e48 +#endif /* __MALI_KERNEL_LICENSE_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_devfreq.c b/drivers/gpu/arm/mali400/mali/linux/mali_devfreq.c new file mode 100755 -index 000000000000..7438cb4951e2 +index 000000000..7438cb495 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_devfreq.c @@ -0,0 +1,362 @@ @@ -333415,7 +333444,7 @@ index 000000000000..7438cb4951e2 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_devfreq.h b/drivers/gpu/arm/mali400/mali/linux/mali_devfreq.h new file mode 100755 -index 000000000000..ba7c017d88dc +index 000000000..ba7c017d8 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_devfreq.h @@ -0,0 +1,17 @@ @@ -333438,7 +333467,7 @@ index 000000000000..ba7c017d88dc +#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_device_pause_resume.c b/drivers/gpu/arm/mali400/mali/linux/mali_device_pause_resume.c new file mode 100755 -index 000000000000..95c3ea12d645 +index 000000000..95c3ea12d --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_device_pause_resume.c @@ -0,0 +1,36 @@ @@ -333480,7 +333509,7 @@ index 000000000000..95c3ea12d645 +EXPORT_SYMBOL(mali_dev_resume); diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_dma_fence.c b/drivers/gpu/arm/mali400/mali/linux/mali_dma_fence.c new file mode 100755 -index 000000000000..e026e11e4bc5 +index 000000000..e026e11e4 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_dma_fence.c @@ -0,0 +1,439 @@ @@ -333925,7 +333954,7 @@ index 000000000000..e026e11e4bc5 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_dma_fence.h b/drivers/gpu/arm/mali400/mali/linux/mali_dma_fence.h new file mode 100755 -index 000000000000..d44f6d1a8926 +index 000000000..d44f6d1a8 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_dma_fence.h @@ -0,0 +1,124 @@ @@ -334055,7 +334084,7 @@ index 000000000000..d44f6d1a8926 +#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_internal_sync.c b/drivers/gpu/arm/mali400/mali/linux/mali_internal_sync.c new file mode 100755 -index 000000000000..e13cbad3e513 +index 000000000..e13cbad3e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_internal_sync.c @@ -0,0 +1,783 @@ @@ -334844,7 +334873,7 @@ index 000000000000..e13cbad3e513 +#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_internal_sync.h b/drivers/gpu/arm/mali400/mali/linux/mali_internal_sync.h new file mode 100755 -index 000000000000..dbb29222ba98 +index 000000000..dbb29222b --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_internal_sync.h @@ -0,0 +1,191 @@ @@ -335041,7 +335070,7 @@ index 000000000000..dbb29222ba98 +#endif /* _MALI_INTERNAL_SYNC_H */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.c b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.c new file mode 100755 -index 000000000000..534db255ed02 +index 000000000..534db255e --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.c @@ -0,0 +1,1177 @@ @@ -336224,7 +336253,7 @@ index 000000000000..534db255ed02 +MODULE_VERSION(SVN_REV_STRING); diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.h b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.h new file mode 100755 -index 000000000000..be754cb15646 +index 000000000..be754cb15 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.h @@ -0,0 +1,36 @@ @@ -336266,7 +336295,7 @@ index 000000000000..be754cb15646 +#endif /* __MALI_KERNEL_LINUX_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_kernel_sysfs.c b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_sysfs.c new file mode 100755 -index 000000000000..7bda438fef50 +index 000000000..7bda438fe --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_sysfs.c @@ -0,0 +1,1410 @@ @@ -337682,7 +337711,7 @@ index 000000000000..7bda438fef50 +#endif /* MALI_LICENSE_IS_GPL */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_kernel_sysfs.h b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_sysfs.h new file mode 100755 -index 000000000000..91580a87c1e1 +index 000000000..91580a87c --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_kernel_sysfs.h @@ -0,0 +1,29 @@ @@ -337717,7 +337746,7 @@ index 000000000000..91580a87c1e1 +#endif /* __MALI_KERNEL_LINUX_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_linux_trace.h b/drivers/gpu/arm/mali400/mali/linux/mali_linux_trace.h new file mode 100755 -index 000000000000..222260823c81 +index 000000000..222260823 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_linux_trace.h @@ -0,0 +1,161 @@ @@ -337884,7 +337913,7 @@ index 000000000000..222260823c81 + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory.c new file mode 100755 -index 000000000000..dfc769e6cc40 +index 000000000..dfc769e6c --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory.c @@ -0,0 +1,531 @@ @@ -338421,7 +338450,7 @@ index 000000000000..dfc769e6cc40 + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory.h new file mode 100755 -index 000000000000..efebbef235d8 +index 000000000..efebbef23 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory.h @@ -0,0 +1,143 @@ @@ -338570,7 +338599,7 @@ index 000000000000..efebbef235d8 +#endif /* __MALI_MEMORY_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_block_alloc.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_block_alloc.c new file mode 100755 -index 000000000000..bccef3576914 +index 000000000..bccef3576 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_block_alloc.c @@ -0,0 +1,362 @@ @@ -338938,7 +338967,7 @@ index 000000000000..bccef3576914 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_block_alloc.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_block_alloc.h new file mode 100755 -index 000000000000..70fd9ec25f50 +index 000000000..70fd9ec25 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_block_alloc.h @@ -0,0 +1,58 @@ @@ -339002,793 +339031,793 @@ index 000000000000..70fd9ec25f50 +#endif /* __MALI_BLOCK_ALLOCATOR_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c new file mode 100755 -index 000000000000..54e342a1f7ce +index 000000000..c2e643421 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c @@ -0,0 +1,776 @@ -+/* -+ * Copyright (C) 2013-2017 ARM Limited. All rights reserved. -+ * -+ * This program is free software and is provided to you under the terms of the GNU General Public License version 2 -+ * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. -+ * -+ * A copy of the licence is included with the program, and can also be obtained from Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#ifdef CONFIG_ARM -+#include -+#endif -+#include -+ -+#include "mali_memory.h" -+#include "mali_kernel_common.h" -+#include "mali_uk_types.h" -+#include "mali_osk.h" -+#include "mali_kernel_linux.h" -+#include "mali_memory_cow.h" -+#include "mali_memory_block_alloc.h" -+#include "mali_memory_swap_alloc.h" -+ -+/** -+* allocate pages for COW backend and flush cache -+*/ -+static struct page *mali_mem_cow_alloc_page(void) -+ -+{ -+ mali_mem_os_mem os_mem; -+ struct mali_page_node *node; -+ struct page *new_page; -+ -+ int ret = 0; -+ /* allocate pages from os mem */ -+ ret = mali_mem_os_alloc_pages(&os_mem, _MALI_OSK_MALI_PAGE_SIZE); -+ -+ if (ret) { -+ return NULL; -+ } -+ -+ MALI_DEBUG_ASSERT(1 == os_mem.count); -+ -+ node = _MALI_OSK_CONTAINER_OF(os_mem.pages.next, struct mali_page_node, list); -+ new_page = node->page; -+ node->page = NULL; -+ list_del(&node->list); -+ kfree(node); -+ -+ return new_page; -+} -+ -+ -+static struct list_head *_mali_memory_cow_get_node_list(mali_mem_backend *target_bk, -+ u32 target_offset, -+ u32 target_size) -+{ -+ MALI_DEBUG_ASSERT(MALI_MEM_OS == target_bk->type || MALI_MEM_COW == target_bk->type || -+ MALI_MEM_BLOCK == target_bk->type || MALI_MEM_SWAP == target_bk->type); -+ -+ if (MALI_MEM_OS == target_bk->type) { -+ MALI_DEBUG_ASSERT(&target_bk->os_mem); -+ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->os_mem.count); -+ return &target_bk->os_mem.pages; -+ } else if (MALI_MEM_COW == target_bk->type) { -+ MALI_DEBUG_ASSERT(&target_bk->cow_mem); -+ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->cow_mem.count); -+ return &target_bk->cow_mem.pages; -+ } else if (MALI_MEM_BLOCK == target_bk->type) { -+ MALI_DEBUG_ASSERT(&target_bk->block_mem); -+ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->block_mem.count); -+ return &target_bk->block_mem.pfns; -+ } else if (MALI_MEM_SWAP == target_bk->type) { -+ MALI_DEBUG_ASSERT(&target_bk->swap_mem); -+ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->swap_mem.count); -+ return &target_bk->swap_mem.pages; -+ } -+ -+ return NULL; -+} -+ -+/** -+* Do COW for os memory - support do COW for memory from bank memory -+* The range_start/size can be zero, which means it will call cow_modify_range -+* latter. -+* This function allocate new pages for COW backend from os mem for a modified range -+* It will keep the page which not in the modified range and Add ref to it -+* -+* @target_bk - target allocation's backend(the allocation need to do COW) -+* @target_offset - the offset in target allocation to do COW(for support COW a memory allocated from memory_bank, 4K align) -+* @target_size - size of target allocation to do COW (for support memory bank) -+* @backend -COW backend -+* @range_start - offset of modified range (4K align) -+* @range_size - size of modified range -+*/ -+_mali_osk_errcode_t mali_memory_cow_os_memory(mali_mem_backend *target_bk, -+ u32 target_offset, -+ u32 target_size, -+ mali_mem_backend *backend, -+ u32 range_start, -+ u32 range_size) -+{ -+ mali_mem_cow *cow = &backend->cow_mem; -+ struct mali_page_node *m_page, *m_tmp, *page_node; -+ int target_page = 0; -+ struct page *new_page; -+ struct list_head *pages = NULL; -+ -+ pages = _mali_memory_cow_get_node_list(target_bk, target_offset, target_size); -+ -+ if (NULL == pages) { -+ MALI_DEBUG_PRINT_ERROR(("No memory page need to cow ! \n")); -+ return _MALI_OSK_ERR_FAULT; -+ } -+ -+ MALI_DEBUG_ASSERT(0 == cow->count); -+ -+ INIT_LIST_HEAD(&cow->pages); -+ mutex_lock(&target_bk->mutex); -+ list_for_each_entry_safe(m_page, m_tmp, pages, list) { -+ /* add page from (target_offset,target_offset+size) to cow backend */ -+ if ((target_page >= target_offset / _MALI_OSK_MALI_PAGE_SIZE) && -+ (target_page < ((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE))) { -+ -+ /* allocate a new page node, alway use OS memory for COW */ -+ page_node = _mali_page_node_allocate(MALI_PAGE_NODE_OS); -+ -+ if (NULL == page_node) { -+ mutex_unlock(&target_bk->mutex); -+ goto error; -+ } -+ -+ INIT_LIST_HEAD(&page_node->list); -+ -+ /* check if in the modified range*/ -+ if ((cow->count >= range_start / _MALI_OSK_MALI_PAGE_SIZE) && -+ (cow->count < (range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE)) { -+ /* need to allocate a new page */ -+ /* To simplify the case, All COW memory is allocated from os memory ?*/ -+ new_page = mali_mem_cow_alloc_page(); -+ -+ if (NULL == new_page) { -+ kfree(page_node); -+ mutex_unlock(&target_bk->mutex); -+ goto error; -+ } -+ -+ _mali_page_node_add_page(page_node, new_page); -+ } else { -+ /*Add Block memory case*/ -+ if (m_page->type != MALI_PAGE_NODE_BLOCK) { -+ _mali_page_node_add_page(page_node, m_page->page); -+ } else { -+ page_node->type = MALI_PAGE_NODE_BLOCK; -+ _mali_page_node_add_block_item(page_node, m_page->blk_it); -+ } -+ -+ /* add ref to this page */ -+ _mali_page_node_ref(m_page); -+ } -+ -+ /* add it to COW backend page list */ -+ list_add_tail(&page_node->list, &cow->pages); -+ cow->count++; -+ } -+ target_page++; -+ } -+ mutex_unlock(&target_bk->mutex); -+ return _MALI_OSK_ERR_OK; -+error: -+ mali_mem_cow_release(backend, MALI_FALSE); -+ return _MALI_OSK_ERR_FAULT; -+} -+ -+_mali_osk_errcode_t mali_memory_cow_swap_memory(mali_mem_backend *target_bk, -+ u32 target_offset, -+ u32 target_size, -+ mali_mem_backend *backend, -+ u32 range_start, -+ u32 range_size) -+{ -+ mali_mem_cow *cow = &backend->cow_mem; -+ struct mali_page_node *m_page, *m_tmp, *page_node; -+ int target_page = 0; -+ struct mali_swap_item *swap_item; -+ struct list_head *pages = NULL; -+ -+ pages = _mali_memory_cow_get_node_list(target_bk, target_offset, target_size); -+ if (NULL == pages) { -+ MALI_DEBUG_PRINT_ERROR(("No swap memory page need to cow ! \n")); -+ return _MALI_OSK_ERR_FAULT; -+ } -+ -+ MALI_DEBUG_ASSERT(0 == cow->count); -+ -+ INIT_LIST_HEAD(&cow->pages); -+ mutex_lock(&target_bk->mutex); -+ -+ backend->flags |= MALI_MEM_BACKEND_FLAG_UNSWAPPED_IN; -+ -+ list_for_each_entry_safe(m_page, m_tmp, pages, list) { -+ /* add page from (target_offset,target_offset+size) to cow backend */ -+ if ((target_page >= target_offset / _MALI_OSK_MALI_PAGE_SIZE) && -+ (target_page < ((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE))) { -+ -+ /* allocate a new page node, use swap memory for COW memory swap cowed flag. */ -+ page_node = _mali_page_node_allocate(MALI_PAGE_NODE_SWAP); -+ -+ if (NULL == page_node) { -+ mutex_unlock(&target_bk->mutex); -+ goto error; -+ } -+ -+ /* check if in the modified range*/ -+ if ((cow->count >= range_start / _MALI_OSK_MALI_PAGE_SIZE) && -+ (cow->count < (range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE)) { -+ /* need to allocate a new page */ -+ /* To simplify the case, All COW memory is allocated from os memory ?*/ -+ swap_item = mali_mem_swap_alloc_swap_item(); -+ -+ if (NULL == swap_item) { -+ kfree(page_node); -+ mutex_unlock(&target_bk->mutex); -+ goto error; -+ } -+ -+ swap_item->idx = mali_mem_swap_idx_alloc(); -+ -+ if (_MALI_OSK_BITMAP_INVALIDATE_INDEX == swap_item->idx) { -+ MALI_DEBUG_PRINT(1, ("Failed to allocate swap index in swap CoW.\n")); -+ kfree(page_node); -+ kfree(swap_item); -+ mutex_unlock(&target_bk->mutex); -+ goto error; -+ } -+ -+ _mali_page_node_add_swap_item(page_node, swap_item); -+ } else { -+ _mali_page_node_add_swap_item(page_node, m_page->swap_it); -+ -+ /* add ref to this page */ -+ _mali_page_node_ref(m_page); -+ } -+ -+ list_add_tail(&page_node->list, &cow->pages); -+ cow->count++; -+ } -+ target_page++; -+ } -+ mutex_unlock(&target_bk->mutex); -+ -+ return _MALI_OSK_ERR_OK; -+error: -+ mali_mem_swap_release(backend, MALI_FALSE); -+ return _MALI_OSK_ERR_FAULT; -+ -+} -+ -+ -+_mali_osk_errcode_t _mali_mem_put_page_node(mali_page_node *node) -+{ -+ if (node->type == MALI_PAGE_NODE_OS) { -+ return mali_mem_os_put_page(node->page); -+ } else if (node->type == MALI_PAGE_NODE_BLOCK) { -+ return mali_mem_block_unref_node(node); -+ } else if (node->type == MALI_PAGE_NODE_SWAP) { -+ return _mali_mem_swap_put_page_node(node); -+ } else -+ MALI_DEBUG_ASSERT(0); -+ return _MALI_OSK_ERR_FAULT; -+} -+ -+ -+/** -+* Modify a range of a exist COW backend -+* @backend -COW backend -+* @range_start - offset of modified range (4K align) -+* @range_size - size of modified range(in byte) -+*/ -+_mali_osk_errcode_t mali_memory_cow_modify_range(mali_mem_backend *backend, -+ u32 range_start, -+ u32 range_size) -+{ -+ mali_mem_allocation *alloc = NULL; -+ struct mali_session_data *session; -+ mali_mem_cow *cow = &backend->cow_mem; -+ struct mali_page_node *m_page, *m_tmp; -+ LIST_HEAD(pages); -+ struct page *new_page; -+ u32 count = 0; -+ s32 change_pages_nr = 0; -+ _mali_osk_errcode_t ret = _MALI_OSK_ERR_OK; -+ -+ if (range_start % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); -+ if (range_size % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); -+ -+ alloc = backend->mali_allocation; -+ MALI_DEBUG_ASSERT_POINTER(alloc); -+ -+ session = alloc->session; -+ MALI_DEBUG_ASSERT_POINTER(session); -+ -+ MALI_DEBUG_ASSERT(MALI_MEM_COW == backend->type); -+ MALI_DEBUG_ASSERT(((range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE) <= cow->count); -+ -+ mutex_lock(&backend->mutex); -+ -+ /* free pages*/ -+ list_for_each_entry_safe(m_page, m_tmp, &cow->pages, list) { -+ -+ /* check if in the modified range*/ -+ if ((count >= range_start / _MALI_OSK_MALI_PAGE_SIZE) && -+ (count < (range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE)) { -+ if (MALI_PAGE_NODE_SWAP != m_page->type) { -+ new_page = mali_mem_cow_alloc_page(); -+ -+ if (NULL == new_page) { -+ goto error; -+ } -+ if (1 != _mali_page_node_get_ref_count(m_page)) -+ change_pages_nr++; -+ /* unref old page*/ -+ _mali_osk_mutex_wait(session->cow_lock); -+ if (_mali_mem_put_page_node(m_page)) { -+ __free_page(new_page); -+ _mali_osk_mutex_signal(session->cow_lock); -+ goto error; -+ } -+ _mali_osk_mutex_signal(session->cow_lock); -+ /* add new page*/ -+ /* always use OS for COW*/ -+ m_page->type = MALI_PAGE_NODE_OS; -+ _mali_page_node_add_page(m_page, new_page); -+ } else { -+ struct mali_swap_item *swap_item; -+ -+ swap_item = mali_mem_swap_alloc_swap_item(); -+ -+ if (NULL == swap_item) { -+ goto error; -+ } -+ -+ swap_item->idx = mali_mem_swap_idx_alloc(); -+ -+ if (_MALI_OSK_BITMAP_INVALIDATE_INDEX == swap_item->idx) { -+ MALI_DEBUG_PRINT(1, ("Failed to allocate swap index in swap CoW modify range.\n")); -+ kfree(swap_item); -+ goto error; -+ } -+ -+ if (1 != _mali_page_node_get_ref_count(m_page)) { -+ change_pages_nr++; -+ } -+ -+ if (_mali_mem_put_page_node(m_page)) { -+ mali_mem_swap_free_swap_item(swap_item); -+ goto error; -+ } -+ -+ _mali_page_node_add_swap_item(m_page, swap_item); -+ } -+ } -+ count++; -+ } -+ cow->change_pages_nr = change_pages_nr; -+ -+ MALI_DEBUG_ASSERT(MALI_MEM_COW == alloc->type); -+ -+ /* ZAP cpu mapping(modified range), and do cpu mapping here if need */ -+ if (NULL != alloc->cpu_mapping.vma) { -+ MALI_DEBUG_ASSERT(0 != alloc->backend_handle); -+ MALI_DEBUG_ASSERT(NULL != alloc->cpu_mapping.vma); -+ MALI_DEBUG_ASSERT(alloc->cpu_mapping.vma->vm_end - alloc->cpu_mapping.vma->vm_start >= range_size); -+ -+ if (MALI_MEM_BACKEND_FLAG_SWAP_COWED != (backend->flags & MALI_MEM_BACKEND_FLAG_SWAP_COWED)) { -+ zap_vma_ptes(alloc->cpu_mapping.vma, alloc->cpu_mapping.vma->vm_start + range_start, range_size); -+ -+ ret = mali_mem_cow_cpu_map_pages_locked(backend, alloc->cpu_mapping.vma, alloc->cpu_mapping.vma->vm_start + range_start, range_size / _MALI_OSK_MALI_PAGE_SIZE); -+ -+ if (unlikely(ret != _MALI_OSK_ERR_OK)) { -+ MALI_DEBUG_PRINT(2, ("mali_memory_cow_modify_range: cpu mapping failed !\n")); -+ ret = _MALI_OSK_ERR_FAULT; -+ } -+ } else { -+ /* used to trigger page fault for swappable cowed memory. */ -+ alloc->cpu_mapping.vma->vm_flags |= VM_PFNMAP; -+ alloc->cpu_mapping.vma->vm_flags |= VM_MIXEDMAP; -+ -+ zap_vma_ptes(alloc->cpu_mapping.vma, alloc->cpu_mapping.vma->vm_start + range_start, range_size); -+ /* delete this flag to let swappble is ummapped regard to stauct page not page frame. */ -+ alloc->cpu_mapping.vma->vm_flags &= ~VM_PFNMAP; -+ alloc->cpu_mapping.vma->vm_flags &= ~VM_MIXEDMAP; -+ } -+ } -+ -+error: -+ mutex_unlock(&backend->mutex); -+ return ret; -+ -+} -+ -+ -+/** -+* Allocate pages for COW backend -+* @alloc -allocation for COW allocation -+* @target_bk - target allocation's backend(the allocation need to do COW) -+* @target_offset - the offset in target allocation to do COW(for support COW a memory allocated from memory_bank, 4K align) -+* @target_size - size of target allocation to do COW (for support memory bank)(in byte) -+* @backend -COW backend -+* @range_start - offset of modified range (4K align) -+* @range_size - size of modified range(in byte) -+*/ -+_mali_osk_errcode_t mali_memory_do_cow(mali_mem_backend *target_bk, -+ u32 target_offset, -+ u32 target_size, -+ mali_mem_backend *backend, -+ u32 range_start, -+ u32 range_size) -+{ -+ struct mali_session_data *session = backend->mali_allocation->session; -+ -+ MALI_CHECK_NON_NULL(session, _MALI_OSK_ERR_INVALID_ARGS); -+ -+ /* size & offset must be a multiple of the system page size */ -+ if (target_size % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); -+ if (range_size % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); -+ if (target_offset % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); -+ if (range_start % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); -+ -+ /* check backend type */ -+ MALI_DEBUG_ASSERT(MALI_MEM_COW == backend->type); -+ -+ switch (target_bk->type) { -+ case MALI_MEM_OS: -+ case MALI_MEM_BLOCK: -+ return mali_memory_cow_os_memory(target_bk, target_offset, target_size, backend, range_start, range_size); -+ break; -+ case MALI_MEM_COW: -+ if (backend->flags & MALI_MEM_BACKEND_FLAG_SWAP_COWED) { -+ return mali_memory_cow_swap_memory(target_bk, target_offset, target_size, backend, range_start, range_size); -+ } else { -+ return mali_memory_cow_os_memory(target_bk, target_offset, target_size, backend, range_start, range_size); -+ } -+ break; -+ case MALI_MEM_SWAP: -+ return mali_memory_cow_swap_memory(target_bk, target_offset, target_size, backend, range_start, range_size); -+ break; -+ case MALI_MEM_EXTERNAL: -+ /*NOT support yet*/ -+ MALI_DEBUG_PRINT_ERROR(("External physical memory not supported ! \n")); -+ return _MALI_OSK_ERR_UNSUPPORTED; -+ break; -+ case MALI_MEM_DMA_BUF: -+ /*NOT support yet*/ -+ MALI_DEBUG_PRINT_ERROR(("DMA buffer not supported ! \n")); -+ return _MALI_OSK_ERR_UNSUPPORTED; -+ break; -+ case MALI_MEM_UMP: -+ /*NOT support yet*/ -+ MALI_DEBUG_PRINT_ERROR(("UMP buffer not supported ! \n")); -+ return _MALI_OSK_ERR_UNSUPPORTED; -+ break; -+ default: -+ /*Not support yet*/ -+ MALI_DEBUG_PRINT_ERROR(("Invalid memory type not supported ! \n")); -+ return _MALI_OSK_ERR_UNSUPPORTED; -+ break; -+ } -+ return _MALI_OSK_ERR_OK; -+} -+ -+ -+/** -+* Map COW backend memory to mali -+* Support OS/BLOCK for mali_page_node -+*/ -+int mali_mem_cow_mali_map(mali_mem_backend *mem_bkend, u32 range_start, u32 range_size) -+{ -+ mali_mem_allocation *cow_alloc; -+ struct mali_page_node *m_page; -+ struct mali_session_data *session; -+ struct mali_page_directory *pagedir; -+ u32 virt, start; -+ -+ cow_alloc = mem_bkend->mali_allocation; -+ virt = cow_alloc->mali_vma_node.vm_node.start; -+ start = virt; -+ -+ MALI_DEBUG_ASSERT_POINTER(mem_bkend); -+ MALI_DEBUG_ASSERT(MALI_MEM_COW == mem_bkend->type); -+ MALI_DEBUG_ASSERT_POINTER(cow_alloc); -+ -+ session = cow_alloc->session; -+ pagedir = session->page_directory; -+ MALI_CHECK_NON_NULL(session, _MALI_OSK_ERR_INVALID_ARGS); -+ list_for_each_entry(m_page, &mem_bkend->cow_mem.pages, list) { -+ if ((virt - start >= range_start) && (virt - start < range_start + range_size)) { -+ dma_addr_t phys = _mali_page_node_get_dma_addr(m_page); -+#if defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) -+ MALI_DEBUG_ASSERT(0 == (phys >> 32)); -+#endif -+ mali_mmu_pagedir_update(pagedir, virt, (mali_dma_addr)phys, -+ MALI_MMU_PAGE_SIZE, MALI_MMU_FLAGS_DEFAULT); -+ } -+ virt += MALI_MMU_PAGE_SIZE; -+ } -+ return 0; -+} -+ -+/** -+* Map COW backend to cpu -+* support OS/BLOCK memory -+*/ -+int mali_mem_cow_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma) -+{ -+ mali_mem_cow *cow = &mem_bkend->cow_mem; -+ struct mali_page_node *m_page; -+ int ret; -+ unsigned long addr = vma->vm_start; -+ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_COW); -+ -+ list_for_each_entry(m_page, &cow->pages, list) { -+ /* We should use vm_insert_page, but it does a dcache -+ * flush which makes it way slower than remap_pfn_range or vmf_insert_pfn. -+ ret = vm_insert_page(vma, addr, page); -+ */ -+ ret = vmf_insert_pfn(vma, addr, _mali_page_node_get_pfn(m_page)); -+ -+ if (unlikely(VM_FAULT_NOPAGE != ret)) { -+ return -EFAULT; -+ } -+ addr += _MALI_OSK_MALI_PAGE_SIZE; -+ } -+ -+ return 0; -+} -+ -+/** -+* Map some pages(COW backend) to CPU vma@vaddr -+*@ mem_bkend - COW backend -+*@ vma -+*@ vaddr -start CPU vaddr mapped to -+*@ num - max number of pages to map to CPU vaddr -+*/ -+_mali_osk_errcode_t mali_mem_cow_cpu_map_pages_locked(mali_mem_backend *mem_bkend, -+ struct vm_area_struct *vma, -+ unsigned long vaddr, -+ int num) -+{ -+ mali_mem_cow *cow = &mem_bkend->cow_mem; -+ struct mali_page_node *m_page; -+ int ret; -+ int offset; -+ int count ; -+ unsigned long vstart = vma->vm_start; -+ count = 0; -+ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_COW); -+ MALI_DEBUG_ASSERT(0 == vaddr % _MALI_OSK_MALI_PAGE_SIZE); -+ MALI_DEBUG_ASSERT(0 == vstart % _MALI_OSK_MALI_PAGE_SIZE); -+ offset = (vaddr - vstart) / _MALI_OSK_MALI_PAGE_SIZE; -+ -+ list_for_each_entry(m_page, &cow->pages, list) { -+ if ((count >= offset) && (count < offset + num)) { -+ ret = vmf_insert_pfn(vma, vaddr, _mali_page_node_get_pfn(m_page)); -+ -+ if (unlikely(VM_FAULT_NOPAGE != ret)) { -+ if (count == offset) { -+ return _MALI_OSK_ERR_FAULT; -+ } else { -+ /* ret is EBUSY when page isn't in modify range, but now it's OK*/ -+ return _MALI_OSK_ERR_OK; -+ } -+ } -+ vaddr += _MALI_OSK_MALI_PAGE_SIZE; -+ } -+ count++; -+ } -+ return _MALI_OSK_ERR_OK; -+} -+ -+/** -+* Release COW backend memory -+* free it directly(put_page--unref page), not put into pool -+*/ -+u32 mali_mem_cow_release(mali_mem_backend *mem_bkend, mali_bool is_mali_mapped) -+{ -+ mali_mem_allocation *alloc; -+ struct mali_session_data *session; -+ u32 free_pages_nr = 0; -+ MALI_DEBUG_ASSERT_POINTER(mem_bkend); -+ MALI_DEBUG_ASSERT(MALI_MEM_COW == mem_bkend->type); -+ alloc = mem_bkend->mali_allocation; -+ MALI_DEBUG_ASSERT_POINTER(alloc); -+ -+ session = alloc->session; -+ MALI_DEBUG_ASSERT_POINTER(session); -+ -+ if (MALI_MEM_BACKEND_FLAG_SWAP_COWED != (MALI_MEM_BACKEND_FLAG_SWAP_COWED & mem_bkend->flags)) { -+ /* Unmap the memory from the mali virtual address space. */ -+ if (MALI_TRUE == is_mali_mapped) -+ mali_mem_os_mali_unmap(alloc); -+ /* free cow backend list*/ -+ _mali_osk_mutex_wait(session->cow_lock); -+ free_pages_nr = mali_mem_os_free(&mem_bkend->cow_mem.pages, mem_bkend->cow_mem.count, MALI_TRUE); -+ _mali_osk_mutex_signal(session->cow_lock); -+ -+ free_pages_nr += mali_mem_block_free_list(&mem_bkend->cow_mem.pages); -+ -+ MALI_DEBUG_ASSERT(list_empty(&mem_bkend->cow_mem.pages)); -+ } else { -+ free_pages_nr = mali_mem_swap_release(mem_bkend, is_mali_mapped); -+ } -+ -+ -+ MALI_DEBUG_PRINT(4, ("COW Mem free : allocated size = 0x%x, free size = 0x%x\n", mem_bkend->cow_mem.count * _MALI_OSK_MALI_PAGE_SIZE, -+ free_pages_nr * _MALI_OSK_MALI_PAGE_SIZE)); -+ -+ mem_bkend->cow_mem.count = 0; -+ return free_pages_nr; -+} -+ -+ -+/* Dst node could os node or swap node. */ -+void _mali_mem_cow_copy_page(mali_page_node *src_node, mali_page_node *dst_node) -+{ -+ void *dst, *src; -+ struct page *dst_page; -+ dma_addr_t dma_addr; -+ -+ MALI_DEBUG_ASSERT(src_node != NULL); -+ MALI_DEBUG_ASSERT(dst_node != NULL); -+ MALI_DEBUG_ASSERT(dst_node->type == MALI_PAGE_NODE_OS -+ || dst_node->type == MALI_PAGE_NODE_SWAP); -+ -+ if (dst_node->type == MALI_PAGE_NODE_OS) { -+ dst_page = dst_node->page; -+ } else { -+ dst_page = dst_node->swap_it->page; -+ } -+ -+ dma_unmap_page(&mali_platform_device->dev, _mali_page_node_get_dma_addr(dst_node), -+ _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); -+ -+ /* map it , and copy the content*/ -+ dst = kmap_atomic(dst_page); -+ -+ if (src_node->type == MALI_PAGE_NODE_OS || -+ src_node->type == MALI_PAGE_NODE_SWAP) { -+ struct page *src_page; -+ -+ if (src_node->type == MALI_PAGE_NODE_OS) { -+ src_page = src_node->page; -+ } else { -+ src_page = src_node->swap_it->page; -+ } -+ -+ /* Clear and invaliate cache */ -+ /* In ARM architecture, speculative read may pull stale data into L1 cache -+ * for kernel linear mapping page table. DMA_BIDIRECTIONAL could -+ * invalidate the L1 cache so that following read get the latest data -+ */ -+ dma_unmap_page(&mali_platform_device->dev, _mali_page_node_get_dma_addr(src_node), -+ _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); -+ -+ src = kmap_atomic(src_page); -+ memcpy(dst, src , _MALI_OSK_MALI_PAGE_SIZE); -+ kunmap_atomic(src); -+ dma_addr = dma_map_page(&mali_platform_device->dev, src_page, -+ 0, _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); -+ -+ if (src_node->type == MALI_PAGE_NODE_SWAP) { -+ src_node->swap_it->dma_addr = dma_addr; -+ } -+ } else if (src_node->type == MALI_PAGE_NODE_BLOCK) { -+ /* -+ * use ioremap to map src for BLOCK memory -+ */ -+ src = ioremap(_mali_page_node_get_dma_addr(src_node), _MALI_OSK_MALI_PAGE_SIZE); -+ memcpy(dst, src , _MALI_OSK_MALI_PAGE_SIZE); -+ iounmap(src); -+ } -+ kunmap_atomic(dst); -+ dma_addr = dma_map_page(&mali_platform_device->dev, dst_page, -+ 0, _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); -+ -+ if (dst_node->type == MALI_PAGE_NODE_SWAP) { -+ dst_node->swap_it->dma_addr = dma_addr; -+ } -+} -+ -+ -+/* -+* allocate page on demand when CPU access it, -+* THis used in page fault handler -+*/ -+_mali_osk_errcode_t mali_mem_cow_allocate_on_demand(mali_mem_backend *mem_bkend, u32 offset_page) -+{ -+ struct page *new_page = NULL; -+ struct mali_page_node *new_node = NULL; -+ int i = 0; -+ struct mali_page_node *m_page, *found_node = NULL; -+ struct mali_session_data *session = NULL; -+ mali_mem_cow *cow = &mem_bkend->cow_mem; -+ MALI_DEBUG_ASSERT(MALI_MEM_COW == mem_bkend->type); -+ MALI_DEBUG_ASSERT(offset_page < mem_bkend->size / _MALI_OSK_MALI_PAGE_SIZE); -+ MALI_DEBUG_PRINT(4, ("mali_mem_cow_allocate_on_demand !, offset_page =0x%x\n", offset_page)); -+ -+ /* allocate new page here */ -+ new_page = mali_mem_cow_alloc_page(); -+ if (!new_page) -+ return _MALI_OSK_ERR_NOMEM; -+ -+ new_node = _mali_page_node_allocate(MALI_PAGE_NODE_OS); -+ if (!new_node) { -+ __free_page(new_page); -+ return _MALI_OSK_ERR_NOMEM; -+ } -+ -+ /* find the page in backend*/ -+ list_for_each_entry(m_page, &cow->pages, list) { -+ if (i == offset_page) { -+ found_node = m_page; -+ break; -+ } -+ i++; -+ } -+ MALI_DEBUG_ASSERT(found_node); -+ if (NULL == found_node) { -+ __free_page(new_page); -+ kfree(new_node); -+ return _MALI_OSK_ERR_ITEM_NOT_FOUND; -+ } -+ -+ _mali_page_node_add_page(new_node, new_page); -+ -+ /* Copy the src page's content to new page */ -+ _mali_mem_cow_copy_page(found_node, new_node); -+ -+ MALI_DEBUG_ASSERT_POINTER(mem_bkend->mali_allocation); -+ session = mem_bkend->mali_allocation->session; -+ MALI_DEBUG_ASSERT_POINTER(session); -+ if (1 != _mali_page_node_get_ref_count(found_node)) { -+ atomic_add(1, &session->mali_mem_allocated_pages); -+ if (atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE > session->max_mali_mem_allocated_size) { -+ session->max_mali_mem_allocated_size = atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE; -+ } -+ mem_bkend->cow_mem.change_pages_nr++; -+ } -+ -+ _mali_osk_mutex_wait(session->cow_lock); -+ if (_mali_mem_put_page_node(found_node)) { -+ __free_page(new_page); -+ kfree(new_node); -+ _mali_osk_mutex_signal(session->cow_lock); -+ return _MALI_OSK_ERR_NOMEM; -+ } -+ _mali_osk_mutex_signal(session->cow_lock); -+ -+ list_replace(&found_node->list, &new_node->list); -+ -+ kfree(found_node); -+ -+ /* map to GPU side*/ -+ _mali_osk_mutex_wait(session->memory_lock); -+ mali_mem_cow_mali_map(mem_bkend, offset_page * _MALI_OSK_MALI_PAGE_SIZE, _MALI_OSK_MALI_PAGE_SIZE); -+ _mali_osk_mutex_signal(session->memory_lock); -+ return _MALI_OSK_ERR_OK; -+} ++/* ++ * Copyright (C) 2013-2017 ARM Limited. All rights reserved. ++ * ++ * This program is free software and is provided to you under the terms of the GNU General Public License version 2 ++ * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. ++ * ++ * A copy of the licence is included with the program, and can also be obtained from Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#ifdef CONFIG_ARM ++#include ++#endif ++#include ++ ++#include "mali_memory.h" ++#include "mali_kernel_common.h" ++#include "mali_uk_types.h" ++#include "mali_osk.h" ++#include "mali_kernel_linux.h" ++#include "mali_memory_cow.h" ++#include "mali_memory_block_alloc.h" ++#include "mali_memory_swap_alloc.h" ++ ++/** ++* allocate pages for COW backend and flush cache ++*/ ++static struct page *mali_mem_cow_alloc_page(void) ++ ++{ ++ mali_mem_os_mem os_mem; ++ struct mali_page_node *node; ++ struct page *new_page; ++ ++ int ret = 0; ++ /* allocate pages from os mem */ ++ ret = mali_mem_os_alloc_pages(&os_mem, _MALI_OSK_MALI_PAGE_SIZE); ++ ++ if (ret) { ++ return NULL; ++ } ++ ++ MALI_DEBUG_ASSERT(1 == os_mem.count); ++ ++ node = _MALI_OSK_CONTAINER_OF(os_mem.pages.next, struct mali_page_node, list); ++ new_page = node->page; ++ node->page = NULL; ++ list_del(&node->list); ++ kfree(node); ++ ++ return new_page; ++} ++ ++ ++static struct list_head *_mali_memory_cow_get_node_list(mali_mem_backend *target_bk, ++ u32 target_offset, ++ u32 target_size) ++{ ++ MALI_DEBUG_ASSERT(MALI_MEM_OS == target_bk->type || MALI_MEM_COW == target_bk->type || ++ MALI_MEM_BLOCK == target_bk->type || MALI_MEM_SWAP == target_bk->type); ++ ++ if (MALI_MEM_OS == target_bk->type) { ++ MALI_DEBUG_ASSERT(&target_bk->os_mem); ++ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->os_mem.count); ++ return &target_bk->os_mem.pages; ++ } else if (MALI_MEM_COW == target_bk->type) { ++ MALI_DEBUG_ASSERT(&target_bk->cow_mem); ++ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->cow_mem.count); ++ return &target_bk->cow_mem.pages; ++ } else if (MALI_MEM_BLOCK == target_bk->type) { ++ MALI_DEBUG_ASSERT(&target_bk->block_mem); ++ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->block_mem.count); ++ return &target_bk->block_mem.pfns; ++ } else if (MALI_MEM_SWAP == target_bk->type) { ++ MALI_DEBUG_ASSERT(&target_bk->swap_mem); ++ MALI_DEBUG_ASSERT(((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE) <= target_bk->swap_mem.count); ++ return &target_bk->swap_mem.pages; ++ } ++ ++ return NULL; ++} ++ ++/** ++* Do COW for os memory - support do COW for memory from bank memory ++* The range_start/size can be zero, which means it will call cow_modify_range ++* latter. ++* This function allocate new pages for COW backend from os mem for a modified range ++* It will keep the page which not in the modified range and Add ref to it ++* ++* @target_bk - target allocation's backend(the allocation need to do COW) ++* @target_offset - the offset in target allocation to do COW(for support COW a memory allocated from memory_bank, 4K align) ++* @target_size - size of target allocation to do COW (for support memory bank) ++* @backend -COW backend ++* @range_start - offset of modified range (4K align) ++* @range_size - size of modified range ++*/ ++_mali_osk_errcode_t mali_memory_cow_os_memory(mali_mem_backend *target_bk, ++ u32 target_offset, ++ u32 target_size, ++ mali_mem_backend *backend, ++ u32 range_start, ++ u32 range_size) ++{ ++ mali_mem_cow *cow = &backend->cow_mem; ++ struct mali_page_node *m_page, *m_tmp, *page_node; ++ int target_page = 0; ++ struct page *new_page; ++ struct list_head *pages = NULL; ++ ++ pages = _mali_memory_cow_get_node_list(target_bk, target_offset, target_size); ++ ++ if (NULL == pages) { ++ MALI_DEBUG_PRINT_ERROR(("No memory page need to cow ! \n")); ++ return _MALI_OSK_ERR_FAULT; ++ } ++ ++ MALI_DEBUG_ASSERT(0 == cow->count); ++ ++ INIT_LIST_HEAD(&cow->pages); ++ mutex_lock(&target_bk->mutex); ++ list_for_each_entry_safe(m_page, m_tmp, pages, list) { ++ /* add page from (target_offset,target_offset+size) to cow backend */ ++ if ((target_page >= target_offset / _MALI_OSK_MALI_PAGE_SIZE) && ++ (target_page < ((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE))) { ++ ++ /* allocate a new page node, alway use OS memory for COW */ ++ page_node = _mali_page_node_allocate(MALI_PAGE_NODE_OS); ++ ++ if (NULL == page_node) { ++ mutex_unlock(&target_bk->mutex); ++ goto error; ++ } ++ ++ INIT_LIST_HEAD(&page_node->list); ++ ++ /* check if in the modified range*/ ++ if ((cow->count >= range_start / _MALI_OSK_MALI_PAGE_SIZE) && ++ (cow->count < (range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE)) { ++ /* need to allocate a new page */ ++ /* To simplify the case, All COW memory is allocated from os memory ?*/ ++ new_page = mali_mem_cow_alloc_page(); ++ ++ if (NULL == new_page) { ++ kfree(page_node); ++ mutex_unlock(&target_bk->mutex); ++ goto error; ++ } ++ ++ _mali_page_node_add_page(page_node, new_page); ++ } else { ++ /*Add Block memory case*/ ++ if (m_page->type != MALI_PAGE_NODE_BLOCK) { ++ _mali_page_node_add_page(page_node, m_page->page); ++ } else { ++ page_node->type = MALI_PAGE_NODE_BLOCK; ++ _mali_page_node_add_block_item(page_node, m_page->blk_it); ++ } ++ ++ /* add ref to this page */ ++ _mali_page_node_ref(m_page); ++ } ++ ++ /* add it to COW backend page list */ ++ list_add_tail(&page_node->list, &cow->pages); ++ cow->count++; ++ } ++ target_page++; ++ } ++ mutex_unlock(&target_bk->mutex); ++ return _MALI_OSK_ERR_OK; ++error: ++ mali_mem_cow_release(backend, MALI_FALSE); ++ return _MALI_OSK_ERR_FAULT; ++} ++ ++_mali_osk_errcode_t mali_memory_cow_swap_memory(mali_mem_backend *target_bk, ++ u32 target_offset, ++ u32 target_size, ++ mali_mem_backend *backend, ++ u32 range_start, ++ u32 range_size) ++{ ++ mali_mem_cow *cow = &backend->cow_mem; ++ struct mali_page_node *m_page, *m_tmp, *page_node; ++ int target_page = 0; ++ struct mali_swap_item *swap_item; ++ struct list_head *pages = NULL; ++ ++ pages = _mali_memory_cow_get_node_list(target_bk, target_offset, target_size); ++ if (NULL == pages) { ++ MALI_DEBUG_PRINT_ERROR(("No swap memory page need to cow ! \n")); ++ return _MALI_OSK_ERR_FAULT; ++ } ++ ++ MALI_DEBUG_ASSERT(0 == cow->count); ++ ++ INIT_LIST_HEAD(&cow->pages); ++ mutex_lock(&target_bk->mutex); ++ ++ backend->flags |= MALI_MEM_BACKEND_FLAG_UNSWAPPED_IN; ++ ++ list_for_each_entry_safe(m_page, m_tmp, pages, list) { ++ /* add page from (target_offset,target_offset+size) to cow backend */ ++ if ((target_page >= target_offset / _MALI_OSK_MALI_PAGE_SIZE) && ++ (target_page < ((target_size + target_offset) / _MALI_OSK_MALI_PAGE_SIZE))) { ++ ++ /* allocate a new page node, use swap memory for COW memory swap cowed flag. */ ++ page_node = _mali_page_node_allocate(MALI_PAGE_NODE_SWAP); ++ ++ if (NULL == page_node) { ++ mutex_unlock(&target_bk->mutex); ++ goto error; ++ } ++ ++ /* check if in the modified range*/ ++ if ((cow->count >= range_start / _MALI_OSK_MALI_PAGE_SIZE) && ++ (cow->count < (range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE)) { ++ /* need to allocate a new page */ ++ /* To simplify the case, All COW memory is allocated from os memory ?*/ ++ swap_item = mali_mem_swap_alloc_swap_item(); ++ ++ if (NULL == swap_item) { ++ kfree(page_node); ++ mutex_unlock(&target_bk->mutex); ++ goto error; ++ } ++ ++ swap_item->idx = mali_mem_swap_idx_alloc(); ++ ++ if (_MALI_OSK_BITMAP_INVALIDATE_INDEX == swap_item->idx) { ++ MALI_DEBUG_PRINT(1, ("Failed to allocate swap index in swap CoW.\n")); ++ kfree(page_node); ++ kfree(swap_item); ++ mutex_unlock(&target_bk->mutex); ++ goto error; ++ } ++ ++ _mali_page_node_add_swap_item(page_node, swap_item); ++ } else { ++ _mali_page_node_add_swap_item(page_node, m_page->swap_it); ++ ++ /* add ref to this page */ ++ _mali_page_node_ref(m_page); ++ } ++ ++ list_add_tail(&page_node->list, &cow->pages); ++ cow->count++; ++ } ++ target_page++; ++ } ++ mutex_unlock(&target_bk->mutex); ++ ++ return _MALI_OSK_ERR_OK; ++error: ++ mali_mem_swap_release(backend, MALI_FALSE); ++ return _MALI_OSK_ERR_FAULT; ++ ++} ++ ++ ++_mali_osk_errcode_t _mali_mem_put_page_node(mali_page_node *node) ++{ ++ if (node->type == MALI_PAGE_NODE_OS) { ++ return mali_mem_os_put_page(node->page); ++ } else if (node->type == MALI_PAGE_NODE_BLOCK) { ++ return mali_mem_block_unref_node(node); ++ } else if (node->type == MALI_PAGE_NODE_SWAP) { ++ return _mali_mem_swap_put_page_node(node); ++ } else ++ MALI_DEBUG_ASSERT(0); ++ return _MALI_OSK_ERR_FAULT; ++} ++ ++ ++/** ++* Modify a range of a exist COW backend ++* @backend -COW backend ++* @range_start - offset of modified range (4K align) ++* @range_size - size of modified range(in byte) ++*/ ++_mali_osk_errcode_t mali_memory_cow_modify_range(mali_mem_backend *backend, ++ u32 range_start, ++ u32 range_size) ++{ ++ mali_mem_allocation *alloc = NULL; ++ struct mali_session_data *session; ++ mali_mem_cow *cow = &backend->cow_mem; ++ struct mali_page_node *m_page, *m_tmp; ++ LIST_HEAD(pages); ++ struct page *new_page; ++ u32 count = 0; ++ s32 change_pages_nr = 0; ++ _mali_osk_errcode_t ret = _MALI_OSK_ERR_OK; ++ ++ if (range_start % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); ++ if (range_size % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); ++ ++ alloc = backend->mali_allocation; ++ MALI_DEBUG_ASSERT_POINTER(alloc); ++ ++ session = alloc->session; ++ MALI_DEBUG_ASSERT_POINTER(session); ++ ++ MALI_DEBUG_ASSERT(MALI_MEM_COW == backend->type); ++ MALI_DEBUG_ASSERT(((range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE) <= cow->count); ++ ++ mutex_lock(&backend->mutex); ++ ++ /* free pages*/ ++ list_for_each_entry_safe(m_page, m_tmp, &cow->pages, list) { ++ ++ /* check if in the modified range*/ ++ if ((count >= range_start / _MALI_OSK_MALI_PAGE_SIZE) && ++ (count < (range_start + range_size) / _MALI_OSK_MALI_PAGE_SIZE)) { ++ if (MALI_PAGE_NODE_SWAP != m_page->type) { ++ new_page = mali_mem_cow_alloc_page(); ++ ++ if (NULL == new_page) { ++ goto error; ++ } ++ if (1 != _mali_page_node_get_ref_count(m_page)) ++ change_pages_nr++; ++ /* unref old page*/ ++ _mali_osk_mutex_wait(session->cow_lock); ++ if (_mali_mem_put_page_node(m_page)) { ++ __free_page(new_page); ++ _mali_osk_mutex_signal(session->cow_lock); ++ goto error; ++ } ++ _mali_osk_mutex_signal(session->cow_lock); ++ /* add new page*/ ++ /* always use OS for COW*/ ++ m_page->type = MALI_PAGE_NODE_OS; ++ _mali_page_node_add_page(m_page, new_page); ++ } else { ++ struct mali_swap_item *swap_item; ++ ++ swap_item = mali_mem_swap_alloc_swap_item(); ++ ++ if (NULL == swap_item) { ++ goto error; ++ } ++ ++ swap_item->idx = mali_mem_swap_idx_alloc(); ++ ++ if (_MALI_OSK_BITMAP_INVALIDATE_INDEX == swap_item->idx) { ++ MALI_DEBUG_PRINT(1, ("Failed to allocate swap index in swap CoW modify range.\n")); ++ kfree(swap_item); ++ goto error; ++ } ++ ++ if (1 != _mali_page_node_get_ref_count(m_page)) { ++ change_pages_nr++; ++ } ++ ++ if (_mali_mem_put_page_node(m_page)) { ++ mali_mem_swap_free_swap_item(swap_item); ++ goto error; ++ } ++ ++ _mali_page_node_add_swap_item(m_page, swap_item); ++ } ++ } ++ count++; ++ } ++ cow->change_pages_nr = change_pages_nr; ++ ++ MALI_DEBUG_ASSERT(MALI_MEM_COW == alloc->type); ++ ++ /* ZAP cpu mapping(modified range), and do cpu mapping here if need */ ++ if (NULL != alloc->cpu_mapping.vma) { ++ MALI_DEBUG_ASSERT(0 != alloc->backend_handle); ++ MALI_DEBUG_ASSERT(NULL != alloc->cpu_mapping.vma); ++ MALI_DEBUG_ASSERT(alloc->cpu_mapping.vma->vm_end - alloc->cpu_mapping.vma->vm_start >= range_size); ++ ++ if (MALI_MEM_BACKEND_FLAG_SWAP_COWED != (backend->flags & MALI_MEM_BACKEND_FLAG_SWAP_COWED)) { ++ zap_vma_ptes(alloc->cpu_mapping.vma, alloc->cpu_mapping.vma->vm_start + range_start, range_size); ++ ++ ret = mali_mem_cow_cpu_map_pages_locked(backend, alloc->cpu_mapping.vma, alloc->cpu_mapping.vma->vm_start + range_start, range_size / _MALI_OSK_MALI_PAGE_SIZE); ++ ++ if (unlikely(ret != _MALI_OSK_ERR_OK)) { ++ MALI_DEBUG_PRINT(2, ("mali_memory_cow_modify_range: cpu mapping failed !\n")); ++ ret = _MALI_OSK_ERR_FAULT; ++ } ++ } else { ++ /* used to trigger page fault for swappable cowed memory. */ ++ alloc->cpu_mapping.vma->vm_flags |= VM_PFNMAP; ++ alloc->cpu_mapping.vma->vm_flags |= VM_MIXEDMAP; ++ ++ zap_vma_ptes(alloc->cpu_mapping.vma, alloc->cpu_mapping.vma->vm_start + range_start, range_size); ++ /* delete this flag to let swappble is ummapped regard to stauct page not page frame. */ ++ alloc->cpu_mapping.vma->vm_flags &= ~VM_PFNMAP; ++ alloc->cpu_mapping.vma->vm_flags &= ~VM_MIXEDMAP; ++ } ++ } ++ ++error: ++ mutex_unlock(&backend->mutex); ++ return ret; ++ ++} ++ ++ ++/** ++* Allocate pages for COW backend ++* @alloc -allocation for COW allocation ++* @target_bk - target allocation's backend(the allocation need to do COW) ++* @target_offset - the offset in target allocation to do COW(for support COW a memory allocated from memory_bank, 4K align) ++* @target_size - size of target allocation to do COW (for support memory bank)(in byte) ++* @backend -COW backend ++* @range_start - offset of modified range (4K align) ++* @range_size - size of modified range(in byte) ++*/ ++_mali_osk_errcode_t mali_memory_do_cow(mali_mem_backend *target_bk, ++ u32 target_offset, ++ u32 target_size, ++ mali_mem_backend *backend, ++ u32 range_start, ++ u32 range_size) ++{ ++ struct mali_session_data *session = backend->mali_allocation->session; ++ ++ MALI_CHECK_NON_NULL(session, _MALI_OSK_ERR_INVALID_ARGS); ++ ++ /* size & offset must be a multiple of the system page size */ ++ if (target_size % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); ++ if (range_size % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); ++ if (target_offset % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); ++ if (range_start % _MALI_OSK_MALI_PAGE_SIZE) MALI_ERROR(_MALI_OSK_ERR_INVALID_ARGS); ++ ++ /* check backend type */ ++ MALI_DEBUG_ASSERT(MALI_MEM_COW == backend->type); ++ ++ switch (target_bk->type) { ++ case MALI_MEM_OS: ++ case MALI_MEM_BLOCK: ++ return mali_memory_cow_os_memory(target_bk, target_offset, target_size, backend, range_start, range_size); ++ break; ++ case MALI_MEM_COW: ++ if (backend->flags & MALI_MEM_BACKEND_FLAG_SWAP_COWED) { ++ return mali_memory_cow_swap_memory(target_bk, target_offset, target_size, backend, range_start, range_size); ++ } else { ++ return mali_memory_cow_os_memory(target_bk, target_offset, target_size, backend, range_start, range_size); ++ } ++ break; ++ case MALI_MEM_SWAP: ++ return mali_memory_cow_swap_memory(target_bk, target_offset, target_size, backend, range_start, range_size); ++ break; ++ case MALI_MEM_EXTERNAL: ++ /*NOT support yet*/ ++ MALI_DEBUG_PRINT_ERROR(("External physical memory not supported ! \n")); ++ return _MALI_OSK_ERR_UNSUPPORTED; ++ break; ++ case MALI_MEM_DMA_BUF: ++ /*NOT support yet*/ ++ MALI_DEBUG_PRINT_ERROR(("DMA buffer not supported ! \n")); ++ return _MALI_OSK_ERR_UNSUPPORTED; ++ break; ++ case MALI_MEM_UMP: ++ /*NOT support yet*/ ++ MALI_DEBUG_PRINT_ERROR(("UMP buffer not supported ! \n")); ++ return _MALI_OSK_ERR_UNSUPPORTED; ++ break; ++ default: ++ /*Not support yet*/ ++ MALI_DEBUG_PRINT_ERROR(("Invalid memory type not supported ! \n")); ++ return _MALI_OSK_ERR_UNSUPPORTED; ++ break; ++ } ++ return _MALI_OSK_ERR_OK; ++} ++ ++ ++/** ++* Map COW backend memory to mali ++* Support OS/BLOCK for mali_page_node ++*/ ++int mali_mem_cow_mali_map(mali_mem_backend *mem_bkend, u32 range_start, u32 range_size) ++{ ++ mali_mem_allocation *cow_alloc; ++ struct mali_page_node *m_page; ++ struct mali_session_data *session; ++ struct mali_page_directory *pagedir; ++ u32 virt, start; ++ ++ cow_alloc = mem_bkend->mali_allocation; ++ virt = cow_alloc->mali_vma_node.vm_node.start; ++ start = virt; ++ ++ MALI_DEBUG_ASSERT_POINTER(mem_bkend); ++ MALI_DEBUG_ASSERT(MALI_MEM_COW == mem_bkend->type); ++ MALI_DEBUG_ASSERT_POINTER(cow_alloc); ++ ++ session = cow_alloc->session; ++ pagedir = session->page_directory; ++ MALI_CHECK_NON_NULL(session, _MALI_OSK_ERR_INVALID_ARGS); ++ list_for_each_entry(m_page, &mem_bkend->cow_mem.pages, list) { ++ if ((virt - start >= range_start) && (virt - start < range_start + range_size)) { ++ dma_addr_t phys = _mali_page_node_get_dma_addr(m_page); ++#if defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) ++ MALI_DEBUG_ASSERT(0 == (phys >> 32)); ++#endif ++ mali_mmu_pagedir_update(pagedir, virt, (mali_dma_addr)phys, ++ MALI_MMU_PAGE_SIZE, MALI_MMU_FLAGS_DEFAULT); ++ } ++ virt += MALI_MMU_PAGE_SIZE; ++ } ++ return 0; ++} ++ ++/** ++* Map COW backend to cpu ++* support OS/BLOCK memory ++*/ ++int mali_mem_cow_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma) ++{ ++ mali_mem_cow *cow = &mem_bkend->cow_mem; ++ struct mali_page_node *m_page; ++ int ret; ++ unsigned long addr = vma->vm_start; ++ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_COW); ++ ++ list_for_each_entry(m_page, &cow->pages, list) { ++ /* We should use vm_insert_page, but it does a dcache ++ * flush which makes it way slower than remap_pfn_range or vmf_insert_pfn. ++ ret = vm_insert_page(vma, addr, page); ++ */ ++ ret = vmf_insert_pfn(vma, addr, _mali_page_node_get_pfn(m_page)); ++ ++ if (unlikely(VM_FAULT_NOPAGE != ret)) { ++ return -EFAULT; ++ } ++ addr += _MALI_OSK_MALI_PAGE_SIZE; ++ } ++ ++ return 0; ++} ++ ++/** ++* Map some pages(COW backend) to CPU vma@vaddr ++*@ mem_bkend - COW backend ++*@ vma ++*@ vaddr -start CPU vaddr mapped to ++*@ num - max number of pages to map to CPU vaddr ++*/ ++_mali_osk_errcode_t mali_mem_cow_cpu_map_pages_locked(mali_mem_backend *mem_bkend, ++ struct vm_area_struct *vma, ++ unsigned long vaddr, ++ int num) ++{ ++ mali_mem_cow *cow = &mem_bkend->cow_mem; ++ struct mali_page_node *m_page; ++ int ret; ++ int offset; ++ int count ; ++ unsigned long vstart = vma->vm_start; ++ count = 0; ++ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_COW); ++ MALI_DEBUG_ASSERT(0 == vaddr % _MALI_OSK_MALI_PAGE_SIZE); ++ MALI_DEBUG_ASSERT(0 == vstart % _MALI_OSK_MALI_PAGE_SIZE); ++ offset = (vaddr - vstart) / _MALI_OSK_MALI_PAGE_SIZE; ++ ++ list_for_each_entry(m_page, &cow->pages, list) { ++ if ((count >= offset) && (count < offset + num)) { ++ ret = vmf_insert_pfn(vma, vaddr, _mali_page_node_get_pfn(m_page)); ++ ++ if (unlikely(VM_FAULT_NOPAGE != ret)) { ++ if (count == offset) { ++ return _MALI_OSK_ERR_FAULT; ++ } else { ++ /* ret is EBUSY when page isn't in modify range, but now it's OK*/ ++ return _MALI_OSK_ERR_OK; ++ } ++ } ++ vaddr += _MALI_OSK_MALI_PAGE_SIZE; ++ } ++ count++; ++ } ++ return _MALI_OSK_ERR_OK; ++} ++ ++/** ++* Release COW backend memory ++* free it directly(put_page--unref page), not put into pool ++*/ ++u32 mali_mem_cow_release(mali_mem_backend *mem_bkend, mali_bool is_mali_mapped) ++{ ++ mali_mem_allocation *alloc; ++ struct mali_session_data *session; ++ u32 free_pages_nr = 0; ++ MALI_DEBUG_ASSERT_POINTER(mem_bkend); ++ MALI_DEBUG_ASSERT(MALI_MEM_COW == mem_bkend->type); ++ alloc = mem_bkend->mali_allocation; ++ MALI_DEBUG_ASSERT_POINTER(alloc); ++ ++ session = alloc->session; ++ MALI_DEBUG_ASSERT_POINTER(session); ++ ++ if (MALI_MEM_BACKEND_FLAG_SWAP_COWED != (MALI_MEM_BACKEND_FLAG_SWAP_COWED & mem_bkend->flags)) { ++ /* Unmap the memory from the mali virtual address space. */ ++ if (MALI_TRUE == is_mali_mapped) ++ mali_mem_os_mali_unmap(alloc); ++ /* free cow backend list*/ ++ _mali_osk_mutex_wait(session->cow_lock); ++ free_pages_nr = mali_mem_os_free(&mem_bkend->cow_mem.pages, mem_bkend->cow_mem.count, MALI_TRUE); ++ _mali_osk_mutex_signal(session->cow_lock); ++ ++ free_pages_nr += mali_mem_block_free_list(&mem_bkend->cow_mem.pages); ++ ++ MALI_DEBUG_ASSERT(list_empty(&mem_bkend->cow_mem.pages)); ++ } else { ++ free_pages_nr = mali_mem_swap_release(mem_bkend, is_mali_mapped); ++ } ++ ++ ++ MALI_DEBUG_PRINT(4, ("COW Mem free : allocated size = 0x%x, free size = 0x%x\n", mem_bkend->cow_mem.count * _MALI_OSK_MALI_PAGE_SIZE, ++ free_pages_nr * _MALI_OSK_MALI_PAGE_SIZE)); ++ ++ mem_bkend->cow_mem.count = 0; ++ return free_pages_nr; ++} ++ ++ ++/* Dst node could os node or swap node. */ ++void _mali_mem_cow_copy_page(mali_page_node *src_node, mali_page_node *dst_node) ++{ ++ void *dst, *src; ++ struct page *dst_page; ++ dma_addr_t dma_addr; ++ ++ MALI_DEBUG_ASSERT(src_node != NULL); ++ MALI_DEBUG_ASSERT(dst_node != NULL); ++ MALI_DEBUG_ASSERT(dst_node->type == MALI_PAGE_NODE_OS ++ || dst_node->type == MALI_PAGE_NODE_SWAP); ++ ++ if (dst_node->type == MALI_PAGE_NODE_OS) { ++ dst_page = dst_node->page; ++ } else { ++ dst_page = dst_node->swap_it->page; ++ } ++ ++ dma_unmap_page(&mali_platform_device->dev, _mali_page_node_get_dma_addr(dst_node), ++ _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); ++ ++ /* map it , and copy the content*/ ++ dst = kmap_atomic(dst_page); ++ ++ if (src_node->type == MALI_PAGE_NODE_OS || ++ src_node->type == MALI_PAGE_NODE_SWAP) { ++ struct page *src_page; ++ ++ if (src_node->type == MALI_PAGE_NODE_OS) { ++ src_page = src_node->page; ++ } else { ++ src_page = src_node->swap_it->page; ++ } ++ ++ /* Clear and invaliate cache */ ++ /* In ARM architecture, speculative read may pull stale data into L1 cache ++ * for kernel linear mapping page table. DMA_BIDIRECTIONAL could ++ * invalidate the L1 cache so that following read get the latest data ++ */ ++ dma_unmap_page(&mali_platform_device->dev, _mali_page_node_get_dma_addr(src_node), ++ _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); ++ ++ src = kmap_atomic(src_page); ++ memcpy(dst, src , _MALI_OSK_MALI_PAGE_SIZE); ++ kunmap_atomic(src); ++ dma_addr = dma_map_page(&mali_platform_device->dev, src_page, ++ 0, _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); ++ ++ if (src_node->type == MALI_PAGE_NODE_SWAP) { ++ src_node->swap_it->dma_addr = dma_addr; ++ } ++ } else if (src_node->type == MALI_PAGE_NODE_BLOCK) { ++ /* ++ * use ioremap to map src for BLOCK memory ++ */ ++ src = ioremap(_mali_page_node_get_dma_addr(src_node), _MALI_OSK_MALI_PAGE_SIZE); ++ memcpy(dst, src , _MALI_OSK_MALI_PAGE_SIZE); ++ iounmap(src); ++ } ++ kunmap_atomic(dst); ++ dma_addr = dma_map_page(&mali_platform_device->dev, dst_page, ++ 0, _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL); ++ ++ if (dst_node->type == MALI_PAGE_NODE_SWAP) { ++ dst_node->swap_it->dma_addr = dma_addr; ++ } ++} ++ ++ ++/* ++* allocate page on demand when CPU access it, ++* THis used in page fault handler ++*/ ++_mali_osk_errcode_t mali_mem_cow_allocate_on_demand(mali_mem_backend *mem_bkend, u32 offset_page) ++{ ++ struct page *new_page = NULL; ++ struct mali_page_node *new_node = NULL; ++ int i = 0; ++ struct mali_page_node *m_page, *found_node = NULL; ++ struct mali_session_data *session = NULL; ++ mali_mem_cow *cow = &mem_bkend->cow_mem; ++ MALI_DEBUG_ASSERT(MALI_MEM_COW == mem_bkend->type); ++ MALI_DEBUG_ASSERT(offset_page < mem_bkend->size / _MALI_OSK_MALI_PAGE_SIZE); ++ MALI_DEBUG_PRINT(4, ("mali_mem_cow_allocate_on_demand !, offset_page =0x%x\n", offset_page)); ++ ++ /* allocate new page here */ ++ new_page = mali_mem_cow_alloc_page(); ++ if (!new_page) ++ return _MALI_OSK_ERR_NOMEM; ++ ++ new_node = _mali_page_node_allocate(MALI_PAGE_NODE_OS); ++ if (!new_node) { ++ __free_page(new_page); ++ return _MALI_OSK_ERR_NOMEM; ++ } ++ ++ /* find the page in backend*/ ++ list_for_each_entry(m_page, &cow->pages, list) { ++ if (i == offset_page) { ++ found_node = m_page; ++ break; ++ } ++ i++; ++ } ++ MALI_DEBUG_ASSERT(found_node); ++ if (NULL == found_node) { ++ __free_page(new_page); ++ kfree(new_node); ++ return _MALI_OSK_ERR_ITEM_NOT_FOUND; ++ } ++ ++ _mali_page_node_add_page(new_node, new_page); ++ ++ /* Copy the src page's content to new page */ ++ _mali_mem_cow_copy_page(found_node, new_node); ++ ++ MALI_DEBUG_ASSERT_POINTER(mem_bkend->mali_allocation); ++ session = mem_bkend->mali_allocation->session; ++ MALI_DEBUG_ASSERT_POINTER(session); ++ if (1 != _mali_page_node_get_ref_count(found_node)) { ++ atomic_add(1, &session->mali_mem_allocated_pages); ++ if (atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE > session->max_mali_mem_allocated_size) { ++ session->max_mali_mem_allocated_size = atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE; ++ } ++ mem_bkend->cow_mem.change_pages_nr++; ++ } ++ ++ _mali_osk_mutex_wait(session->cow_lock); ++ if (_mali_mem_put_page_node(found_node)) { ++ __free_page(new_page); ++ kfree(new_node); ++ _mali_osk_mutex_signal(session->cow_lock); ++ return _MALI_OSK_ERR_NOMEM; ++ } ++ _mali_osk_mutex_signal(session->cow_lock); ++ ++ list_replace(&found_node->list, &new_node->list); ++ ++ kfree(found_node); ++ ++ /* map to GPU side*/ ++ _mali_osk_mutex_wait(session->memory_lock); ++ mali_mem_cow_mali_map(mem_bkend, offset_page * _MALI_OSK_MALI_PAGE_SIZE, _MALI_OSK_MALI_PAGE_SIZE); ++ _mali_osk_mutex_signal(session->memory_lock); ++ return _MALI_OSK_ERR_OK; ++} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.h new file mode 100755 -index 000000000000..5f83a37fc8f8 +index 000000000..ea1a0bb56 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.h @@ -0,0 +1,48 @@ -+/* ++/* + * Copyright (C) 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -339796,53 +339825,53 @@ index 000000000000..5f83a37fc8f8 + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+ -+#ifndef __MALI_MEMORY_COW_H__ -+#define __MALI_MEMORY_COW_H__ -+ -+#include "mali_osk.h" -+#include "mali_session.h" -+#include "mali_memory_types.h" -+ -+int mali_mem_cow_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma); -+_mali_osk_errcode_t mali_mem_cow_cpu_map_pages_locked(mali_mem_backend *mem_bkend, -+ struct vm_area_struct *vma, -+ unsigned long vaddr, -+ int num); -+ -+_mali_osk_errcode_t mali_memory_do_cow(mali_mem_backend *target_bk, -+ u32 target_offset, -+ u32 target_size, -+ mali_mem_backend *backend, -+ u32 range_start, -+ u32 range_size); -+ -+_mali_osk_errcode_t mali_memory_cow_modify_range(mali_mem_backend *backend, -+ u32 range_start, -+ u32 range_size); -+ -+_mali_osk_errcode_t mali_memory_cow_os_memory(mali_mem_backend *target_bk, -+ u32 target_offset, -+ u32 target_size, -+ mali_mem_backend *backend, -+ u32 range_start, -+ u32 range_size); -+ -+void _mali_mem_cow_copy_page(mali_page_node *src_node, mali_page_node *dst_node); -+ -+int mali_mem_cow_mali_map(mali_mem_backend *mem_bkend, u32 range_start, u32 range_size); -+u32 mali_mem_cow_release(mali_mem_backend *mem_bkend, mali_bool is_mali_mapped); -+_mali_osk_errcode_t mali_mem_cow_allocate_on_demand(mali_mem_backend *mem_bkend, u32 offset_page); -+#endif -+ ++ */ ++ ++#ifndef __MALI_MEMORY_COW_H__ ++#define __MALI_MEMORY_COW_H__ ++ ++#include "mali_osk.h" ++#include "mali_session.h" ++#include "mali_memory_types.h" ++ ++int mali_mem_cow_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma); ++_mali_osk_errcode_t mali_mem_cow_cpu_map_pages_locked(mali_mem_backend *mem_bkend, ++ struct vm_area_struct *vma, ++ unsigned long vaddr, ++ int num); ++ ++_mali_osk_errcode_t mali_memory_do_cow(mali_mem_backend *target_bk, ++ u32 target_offset, ++ u32 target_size, ++ mali_mem_backend *backend, ++ u32 range_start, ++ u32 range_size); ++ ++_mali_osk_errcode_t mali_memory_cow_modify_range(mali_mem_backend *backend, ++ u32 range_start, ++ u32 range_size); ++ ++_mali_osk_errcode_t mali_memory_cow_os_memory(mali_mem_backend *target_bk, ++ u32 target_offset, ++ u32 target_size, ++ mali_mem_backend *backend, ++ u32 range_start, ++ u32 range_size); ++ ++void _mali_mem_cow_copy_page(mali_page_node *src_node, mali_page_node *dst_node); ++ ++int mali_mem_cow_mali_map(mali_mem_backend *mem_bkend, u32 range_start, u32 range_size); ++u32 mali_mem_cow_release(mali_mem_backend *mem_bkend, mali_bool is_mali_mapped); ++_mali_osk_errcode_t mali_mem_cow_allocate_on_demand(mali_mem_backend *mem_bkend, u32 offset_page); ++#endif ++ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_defer_bind.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_defer_bind.c new file mode 100755 -index 000000000000..a9db577cb851 +index 000000000..9924f58c2 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_defer_bind.c @@ -0,0 +1,262 @@ -+/* ++/* + * Copyright (C) 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -339850,267 +339879,267 @@ index 000000000000..a9db577cb851 + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#ifdef CONFIG_ARM -+#include -+#endif -+#include -+ -+#include "mali_memory.h" -+#include "mali_kernel_common.h" -+#include "mali_uk_types.h" -+#include "mali_osk.h" -+#include "mali_kernel_linux.h" -+#include "mali_memory_defer_bind.h" -+#include "mali_executor.h" -+#include "mali_osk.h" -+#include "mali_scheduler.h" -+#include "mali_gp_job.h" -+ -+mali_defer_bind_manager *mali_dmem_man = NULL; -+ -+static u32 mali_dmem_get_gp_varying_size(struct mali_gp_job *gp_job) -+{ -+ return gp_job->required_varying_memsize / _MALI_OSK_MALI_PAGE_SIZE; -+} -+ -+_mali_osk_errcode_t mali_mem_defer_bind_manager_init(void) -+{ -+ mali_dmem_man = _mali_osk_calloc(1, sizeof(struct mali_defer_bind_manager)); -+ if (!mali_dmem_man) -+ return _MALI_OSK_ERR_NOMEM; -+ -+ atomic_set(&mali_dmem_man->num_used_pages, 0); -+ atomic_set(&mali_dmem_man->num_dmem, 0); -+ -+ return _MALI_OSK_ERR_OK; -+} -+ -+ -+void mali_mem_defer_bind_manager_destory(void) -+{ -+ if (mali_dmem_man) { -+ MALI_DEBUG_ASSERT(0 == atomic_read(&mali_dmem_man->num_dmem)); -+ kfree(mali_dmem_man); -+ } -+ mali_dmem_man = NULL; -+} -+ -+ -+/*allocate pages from OS memory*/ -+_mali_osk_errcode_t mali_mem_defer_alloc_mem(u32 require, struct mali_session_data *session, mali_defer_mem_block *dblock) -+{ -+ int retval = 0; -+ u32 num_pages = require; -+ mali_mem_os_mem os_mem; -+ -+ retval = mali_mem_os_alloc_pages(&os_mem, num_pages * _MALI_OSK_MALI_PAGE_SIZE); -+ -+ /* add to free pages list */ -+ if (0 == retval) { -+ MALI_DEBUG_PRINT(4, ("mali_mem_defer_alloc_mem ,,*** pages allocate = 0x%x \n", num_pages)); -+ list_splice(&os_mem.pages, &dblock->free_pages); -+ atomic_add(os_mem.count, &dblock->num_free_pages); -+ atomic_add(os_mem.count, &session->mali_mem_allocated_pages); -+ if (atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE > session->max_mali_mem_allocated_size) { -+ session->max_mali_mem_allocated_size = atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE; -+ } -+ return _MALI_OSK_ERR_OK; -+ } else -+ return _MALI_OSK_ERR_FAULT; -+} -+ -+_mali_osk_errcode_t mali_mem_prepare_mem_for_job(struct mali_gp_job *next_gp_job, mali_defer_mem_block *dblock) -+{ -+ u32 require_page; -+ -+ if (!next_gp_job) -+ return _MALI_OSK_ERR_FAULT; -+ -+ require_page = mali_dmem_get_gp_varying_size(next_gp_job); -+ -+ MALI_DEBUG_PRINT(4, ("mali_mem_defer_prepare_mem_work, require alloc page 0x%x\n", -+ require_page)); -+ /* allocate more pages from OS */ -+ if (_MALI_OSK_ERR_OK != mali_mem_defer_alloc_mem(require_page, next_gp_job->session, dblock)) { -+ MALI_DEBUG_PRINT(1, ("ERROR##mali_mem_defer_prepare_mem_work, allocate page failed!!")); -+ return _MALI_OSK_ERR_NOMEM; -+ } -+ -+ next_gp_job->bind_flag = MALI_DEFER_BIND_MEMORY_PREPARED; -+ -+ return _MALI_OSK_ERR_OK; -+} -+ -+ -+/* do preparetion for allocation before defer bind */ -+_mali_osk_errcode_t mali_mem_defer_bind_allocation_prepare(mali_mem_allocation *alloc, struct list_head *list, u32 *required_varying_memsize) -+{ -+ mali_mem_backend *mem_bkend = NULL; -+ struct mali_backend_bind_list *bk_list = _mali_osk_calloc(1, sizeof(struct mali_backend_bind_list)); -+ if (NULL == bk_list) -+ return _MALI_OSK_ERR_FAULT; -+ -+ INIT_LIST_HEAD(&bk_list->node); -+ /* Get backend memory */ -+ mutex_lock(&mali_idr_mutex); -+ if (!(mem_bkend = idr_find(&mali_backend_idr, alloc->backend_handle))) { -+ MALI_DEBUG_PRINT(1, ("Can't find memory backend in defer bind!\n")); -+ mutex_unlock(&mali_idr_mutex); -+ _mali_osk_free(bk_list); -+ return _MALI_OSK_ERR_FAULT; -+ } -+ mutex_unlock(&mali_idr_mutex); -+ -+ /* If the mem backend has already been bound, no need to bind again.*/ -+ if (mem_bkend->os_mem.count > 0) { -+ _mali_osk_free(bk_list); -+ return _MALI_OSK_ERR_OK; -+ } -+ -+ MALI_DEBUG_PRINT(4, ("bind_allocation_prepare:: allocation =%x vaddr=0x%x!\n", alloc, alloc->mali_vma_node.vm_node.start)); -+ -+ INIT_LIST_HEAD(&mem_bkend->os_mem.pages); -+ -+ bk_list->bkend = mem_bkend; -+ bk_list->vaddr = alloc->mali_vma_node.vm_node.start; -+ bk_list->session = alloc->session; -+ bk_list->page_num = mem_bkend->size / _MALI_OSK_MALI_PAGE_SIZE; -+ *required_varying_memsize += mem_bkend->size; -+ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_OS); -+ -+ /* add to job to do list */ -+ list_add(&bk_list->node, list); -+ -+ return _MALI_OSK_ERR_OK; -+} -+ -+ -+ -+/* bind phyiscal memory to allocation -+This function will be called in IRQ handler*/ -+static _mali_osk_errcode_t mali_mem_defer_bind_allocation(struct mali_backend_bind_list *bk_node, -+ struct list_head *pages) -+{ -+ struct mali_session_data *session = bk_node->session; -+ mali_mem_backend *mem_bkend = bk_node->bkend; -+ MALI_DEBUG_PRINT(4, ("mali_mem_defer_bind_allocation, bind bkend = %x page num=0x%x vaddr=%x session=%x\n", mem_bkend, bk_node->page_num, bk_node->vaddr, session)); -+ -+ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_OS); -+ list_splice(pages, &mem_bkend->os_mem.pages); -+ mem_bkend->os_mem.count = bk_node->page_num; -+ -+ if (mem_bkend->type == MALI_MEM_OS) { -+ mali_mem_os_mali_map(&mem_bkend->os_mem, session, bk_node->vaddr, 0, -+ mem_bkend->os_mem.count, MALI_MMU_FLAGS_DEFAULT); -+ } -+ smp_wmb(); -+ bk_node->flag = MALI_DEFER_BIND_MEMORY_BINDED; -+ mem_bkend->flags &= ~MALI_MEM_BACKEND_FLAG_NOT_BINDED; -+ mem_bkend->flags |= MALI_MEM_BACKEND_FLAG_BINDED; -+ return _MALI_OSK_ERR_OK; -+} -+ -+ -+static struct list_head *mali_mem_defer_get_free_page_list(u32 count, struct list_head *pages, mali_defer_mem_block *dblock) -+{ -+ int i = 0; -+ struct mali_page_node *m_page, *m_tmp; -+ -+ if (atomic_read(&dblock->num_free_pages) < count) { -+ return NULL; -+ } else { -+ list_for_each_entry_safe(m_page, m_tmp, &dblock->free_pages, list) { -+ if (i < count) { -+ list_move_tail(&m_page->list, pages); -+ } else { -+ break; -+ } -+ i++; -+ } -+ MALI_DEBUG_ASSERT(i == count); -+ atomic_sub(count, &dblock->num_free_pages); -+ return pages; -+ } -+} -+ -+ -+/* called in job start IOCTL to bind physical memory for each allocations -+@ bk_list backend list to do defer bind -+@ pages page list to do this bind -+@ count number of pages -+*/ -+_mali_osk_errcode_t mali_mem_defer_bind(struct mali_gp_job *gp, -+ struct mali_defer_mem_block *dmem_block) -+{ -+ struct mali_defer_mem *dmem = NULL; -+ struct mali_backend_bind_list *bkn, *bkn_tmp; -+ LIST_HEAD(pages); -+ -+ if (gp->required_varying_memsize != (atomic_read(&dmem_block->num_free_pages) * _MALI_OSK_MALI_PAGE_SIZE)) { -+ MALI_DEBUG_PRINT_ERROR(("#BIND: The memsize of varying buffer not match to the pagesize of the dmem_block!!## \n")); -+ return _MALI_OSK_ERR_FAULT; -+ } -+ -+ MALI_DEBUG_PRINT(4, ("#BIND: GP job=%x## \n", gp)); -+ dmem = (mali_defer_mem *)_mali_osk_calloc(1, sizeof(struct mali_defer_mem)); -+ if (dmem) { -+ INIT_LIST_HEAD(&dmem->node); -+ gp->dmem = dmem; -+ } else { -+ return _MALI_OSK_ERR_NOMEM; -+ } -+ -+ atomic_add(1, &mali_dmem_man->num_dmem); -+ /* for each bk_list backend, do bind */ -+ list_for_each_entry_safe(bkn, bkn_tmp , &gp->vary_todo, node) { -+ INIT_LIST_HEAD(&pages); -+ if (likely(mali_mem_defer_get_free_page_list(bkn->page_num, &pages, dmem_block))) { -+ list_del(&bkn->node); -+ mali_mem_defer_bind_allocation(bkn, &pages); -+ _mali_osk_free(bkn); -+ } else { -+ /* not enough memory will not happen */ -+ MALI_DEBUG_PRINT_ERROR(("#BIND: NOT enough memory when binded !!## \n")); -+ _mali_osk_free(gp->dmem); -+ return _MALI_OSK_ERR_NOMEM; -+ } -+ } -+ -+ if (!list_empty(&gp->vary_todo)) { -+ MALI_DEBUG_PRINT_ERROR(("#BIND: The deferbind backend list isn't empty !!## \n")); -+ _mali_osk_free(gp->dmem); -+ return _MALI_OSK_ERR_FAULT; -+ } -+ -+ dmem->flag = MALI_DEFER_BIND_MEMORY_BINDED; -+ -+ return _MALI_OSK_ERR_OK; -+} -+ -+void mali_mem_defer_dmem_free(struct mali_gp_job *gp) -+{ -+ if (gp->dmem) { -+ atomic_dec(&mali_dmem_man->num_dmem); -+ _mali_osk_free(gp->dmem); -+ } -+} -+ ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#ifdef CONFIG_ARM ++#include ++#endif ++#include ++ ++#include "mali_memory.h" ++#include "mali_kernel_common.h" ++#include "mali_uk_types.h" ++#include "mali_osk.h" ++#include "mali_kernel_linux.h" ++#include "mali_memory_defer_bind.h" ++#include "mali_executor.h" ++#include "mali_osk.h" ++#include "mali_scheduler.h" ++#include "mali_gp_job.h" ++ ++mali_defer_bind_manager *mali_dmem_man = NULL; ++ ++static u32 mali_dmem_get_gp_varying_size(struct mali_gp_job *gp_job) ++{ ++ return gp_job->required_varying_memsize / _MALI_OSK_MALI_PAGE_SIZE; ++} ++ ++_mali_osk_errcode_t mali_mem_defer_bind_manager_init(void) ++{ ++ mali_dmem_man = _mali_osk_calloc(1, sizeof(struct mali_defer_bind_manager)); ++ if (!mali_dmem_man) ++ return _MALI_OSK_ERR_NOMEM; ++ ++ atomic_set(&mali_dmem_man->num_used_pages, 0); ++ atomic_set(&mali_dmem_man->num_dmem, 0); ++ ++ return _MALI_OSK_ERR_OK; ++} ++ ++ ++void mali_mem_defer_bind_manager_destory(void) ++{ ++ if (mali_dmem_man) { ++ MALI_DEBUG_ASSERT(0 == atomic_read(&mali_dmem_man->num_dmem)); ++ kfree(mali_dmem_man); ++ } ++ mali_dmem_man = NULL; ++} ++ ++ ++/*allocate pages from OS memory*/ ++_mali_osk_errcode_t mali_mem_defer_alloc_mem(u32 require, struct mali_session_data *session, mali_defer_mem_block *dblock) ++{ ++ int retval = 0; ++ u32 num_pages = require; ++ mali_mem_os_mem os_mem; ++ ++ retval = mali_mem_os_alloc_pages(&os_mem, num_pages * _MALI_OSK_MALI_PAGE_SIZE); ++ ++ /* add to free pages list */ ++ if (0 == retval) { ++ MALI_DEBUG_PRINT(4, ("mali_mem_defer_alloc_mem ,,*** pages allocate = 0x%x \n", num_pages)); ++ list_splice(&os_mem.pages, &dblock->free_pages); ++ atomic_add(os_mem.count, &dblock->num_free_pages); ++ atomic_add(os_mem.count, &session->mali_mem_allocated_pages); ++ if (atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE > session->max_mali_mem_allocated_size) { ++ session->max_mali_mem_allocated_size = atomic_read(&session->mali_mem_allocated_pages) * MALI_MMU_PAGE_SIZE; ++ } ++ return _MALI_OSK_ERR_OK; ++ } else ++ return _MALI_OSK_ERR_FAULT; ++} ++ ++_mali_osk_errcode_t mali_mem_prepare_mem_for_job(struct mali_gp_job *next_gp_job, mali_defer_mem_block *dblock) ++{ ++ u32 require_page; ++ ++ if (!next_gp_job) ++ return _MALI_OSK_ERR_FAULT; ++ ++ require_page = mali_dmem_get_gp_varying_size(next_gp_job); ++ ++ MALI_DEBUG_PRINT(4, ("mali_mem_defer_prepare_mem_work, require alloc page 0x%x\n", ++ require_page)); ++ /* allocate more pages from OS */ ++ if (_MALI_OSK_ERR_OK != mali_mem_defer_alloc_mem(require_page, next_gp_job->session, dblock)) { ++ MALI_DEBUG_PRINT(1, ("ERROR##mali_mem_defer_prepare_mem_work, allocate page failed!!")); ++ return _MALI_OSK_ERR_NOMEM; ++ } ++ ++ next_gp_job->bind_flag = MALI_DEFER_BIND_MEMORY_PREPARED; ++ ++ return _MALI_OSK_ERR_OK; ++} ++ ++ ++/* do preparetion for allocation before defer bind */ ++_mali_osk_errcode_t mali_mem_defer_bind_allocation_prepare(mali_mem_allocation *alloc, struct list_head *list, u32 *required_varying_memsize) ++{ ++ mali_mem_backend *mem_bkend = NULL; ++ struct mali_backend_bind_list *bk_list = _mali_osk_calloc(1, sizeof(struct mali_backend_bind_list)); ++ if (NULL == bk_list) ++ return _MALI_OSK_ERR_FAULT; ++ ++ INIT_LIST_HEAD(&bk_list->node); ++ /* Get backend memory */ ++ mutex_lock(&mali_idr_mutex); ++ if (!(mem_bkend = idr_find(&mali_backend_idr, alloc->backend_handle))) { ++ MALI_DEBUG_PRINT(1, ("Can't find memory backend in defer bind!\n")); ++ mutex_unlock(&mali_idr_mutex); ++ _mali_osk_free(bk_list); ++ return _MALI_OSK_ERR_FAULT; ++ } ++ mutex_unlock(&mali_idr_mutex); ++ ++ /* If the mem backend has already been bound, no need to bind again.*/ ++ if (mem_bkend->os_mem.count > 0) { ++ _mali_osk_free(bk_list); ++ return _MALI_OSK_ERR_OK; ++ } ++ ++ MALI_DEBUG_PRINT(4, ("bind_allocation_prepare:: allocation =%x vaddr=0x%x!\n", alloc, alloc->mali_vma_node.vm_node.start)); ++ ++ INIT_LIST_HEAD(&mem_bkend->os_mem.pages); ++ ++ bk_list->bkend = mem_bkend; ++ bk_list->vaddr = alloc->mali_vma_node.vm_node.start; ++ bk_list->session = alloc->session; ++ bk_list->page_num = mem_bkend->size / _MALI_OSK_MALI_PAGE_SIZE; ++ *required_varying_memsize += mem_bkend->size; ++ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_OS); ++ ++ /* add to job to do list */ ++ list_add(&bk_list->node, list); ++ ++ return _MALI_OSK_ERR_OK; ++} ++ ++ ++ ++/* bind phyiscal memory to allocation ++This function will be called in IRQ handler*/ ++static _mali_osk_errcode_t mali_mem_defer_bind_allocation(struct mali_backend_bind_list *bk_node, ++ struct list_head *pages) ++{ ++ struct mali_session_data *session = bk_node->session; ++ mali_mem_backend *mem_bkend = bk_node->bkend; ++ MALI_DEBUG_PRINT(4, ("mali_mem_defer_bind_allocation, bind bkend = %x page num=0x%x vaddr=%x session=%x\n", mem_bkend, bk_node->page_num, bk_node->vaddr, session)); ++ ++ MALI_DEBUG_ASSERT(mem_bkend->type == MALI_MEM_OS); ++ list_splice(pages, &mem_bkend->os_mem.pages); ++ mem_bkend->os_mem.count = bk_node->page_num; ++ ++ if (mem_bkend->type == MALI_MEM_OS) { ++ mali_mem_os_mali_map(&mem_bkend->os_mem, session, bk_node->vaddr, 0, ++ mem_bkend->os_mem.count, MALI_MMU_FLAGS_DEFAULT); ++ } ++ smp_wmb(); ++ bk_node->flag = MALI_DEFER_BIND_MEMORY_BINDED; ++ mem_bkend->flags &= ~MALI_MEM_BACKEND_FLAG_NOT_BINDED; ++ mem_bkend->flags |= MALI_MEM_BACKEND_FLAG_BINDED; ++ return _MALI_OSK_ERR_OK; ++} ++ ++ ++static struct list_head *mali_mem_defer_get_free_page_list(u32 count, struct list_head *pages, mali_defer_mem_block *dblock) ++{ ++ int i = 0; ++ struct mali_page_node *m_page, *m_tmp; ++ ++ if (atomic_read(&dblock->num_free_pages) < count) { ++ return NULL; ++ } else { ++ list_for_each_entry_safe(m_page, m_tmp, &dblock->free_pages, list) { ++ if (i < count) { ++ list_move_tail(&m_page->list, pages); ++ } else { ++ break; ++ } ++ i++; ++ } ++ MALI_DEBUG_ASSERT(i == count); ++ atomic_sub(count, &dblock->num_free_pages); ++ return pages; ++ } ++} ++ ++ ++/* called in job start IOCTL to bind physical memory for each allocations ++@ bk_list backend list to do defer bind ++@ pages page list to do this bind ++@ count number of pages ++*/ ++_mali_osk_errcode_t mali_mem_defer_bind(struct mali_gp_job *gp, ++ struct mali_defer_mem_block *dmem_block) ++{ ++ struct mali_defer_mem *dmem = NULL; ++ struct mali_backend_bind_list *bkn, *bkn_tmp; ++ LIST_HEAD(pages); ++ ++ if (gp->required_varying_memsize != (atomic_read(&dmem_block->num_free_pages) * _MALI_OSK_MALI_PAGE_SIZE)) { ++ MALI_DEBUG_PRINT_ERROR(("#BIND: The memsize of varying buffer not match to the pagesize of the dmem_block!!## \n")); ++ return _MALI_OSK_ERR_FAULT; ++ } ++ ++ MALI_DEBUG_PRINT(4, ("#BIND: GP job=%x## \n", gp)); ++ dmem = (mali_defer_mem *)_mali_osk_calloc(1, sizeof(struct mali_defer_mem)); ++ if (dmem) { ++ INIT_LIST_HEAD(&dmem->node); ++ gp->dmem = dmem; ++ } else { ++ return _MALI_OSK_ERR_NOMEM; ++ } ++ ++ atomic_add(1, &mali_dmem_man->num_dmem); ++ /* for each bk_list backend, do bind */ ++ list_for_each_entry_safe(bkn, bkn_tmp , &gp->vary_todo, node) { ++ INIT_LIST_HEAD(&pages); ++ if (likely(mali_mem_defer_get_free_page_list(bkn->page_num, &pages, dmem_block))) { ++ list_del(&bkn->node); ++ mali_mem_defer_bind_allocation(bkn, &pages); ++ _mali_osk_free(bkn); ++ } else { ++ /* not enough memory will not happen */ ++ MALI_DEBUG_PRINT_ERROR(("#BIND: NOT enough memory when binded !!## \n")); ++ _mali_osk_free(gp->dmem); ++ return _MALI_OSK_ERR_NOMEM; ++ } ++ } ++ ++ if (!list_empty(&gp->vary_todo)) { ++ MALI_DEBUG_PRINT_ERROR(("#BIND: The deferbind backend list isn't empty !!## \n")); ++ _mali_osk_free(gp->dmem); ++ return _MALI_OSK_ERR_FAULT; ++ } ++ ++ dmem->flag = MALI_DEFER_BIND_MEMORY_BINDED; ++ ++ return _MALI_OSK_ERR_OK; ++} ++ ++void mali_mem_defer_dmem_free(struct mali_gp_job *gp) ++{ ++ if (gp->dmem) { ++ atomic_dec(&mali_dmem_man->num_dmem); ++ _mali_osk_free(gp->dmem); ++ } ++} ++ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_defer_bind.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_defer_bind.h new file mode 100755 -index 000000000000..defa08d52a46 +index 000000000..75a709a71 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_defer_bind.h @@ -0,0 +1,64 @@ -+/* ++/* + * Copyright (C) 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -340118,65 +340147,65 @@ index 000000000000..defa08d52a46 + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+#ifndef __MALI_MEMORY_DEFER_BIND_H_ -+#define __MALI_MEMORY_DEFER_BIND_H_ -+ -+ -+#include "mali_osk.h" -+#include "mali_session.h" -+ -+#include -+#include -+#include -+#include -+#include -+ -+ -+#include "mali_memory_types.h" -+#include "mali_memory_os_alloc.h" -+#include "mali_uk_types.h" -+ -+struct mali_gp_job; -+ -+typedef struct mali_defer_mem { -+ struct list_head node; /*dlist node in bind manager */ -+ u32 flag; -+} mali_defer_mem; -+ -+ -+typedef struct mali_defer_mem_block { -+ struct list_head free_pages; /* page pool */ -+ atomic_t num_free_pages; -+} mali_defer_mem_block; -+ -+/* varying memory list need to bind */ -+typedef struct mali_backend_bind_list { -+ struct list_head node; -+ struct mali_mem_backend *bkend; -+ u32 vaddr; -+ u32 page_num; -+ struct mali_session_data *session; -+ u32 flag; -+} mali_backend_bind_lists; -+ -+ -+typedef struct mali_defer_bind_manager { -+ atomic_t num_used_pages; -+ atomic_t num_dmem; -+} mali_defer_bind_manager; -+ -+_mali_osk_errcode_t mali_mem_defer_bind_manager_init(void); -+void mali_mem_defer_bind_manager_destory(void); -+_mali_osk_errcode_t mali_mem_defer_bind(struct mali_gp_job *gp, struct mali_defer_mem_block *dmem_block); -+_mali_osk_errcode_t mali_mem_defer_bind_allocation_prepare(mali_mem_allocation *alloc, struct list_head *list, u32 *required_varying_memsize); -+_mali_osk_errcode_t mali_mem_prepare_mem_for_job(struct mali_gp_job *next_gp_job, mali_defer_mem_block *dblock); -+void mali_mem_defer_dmem_free(struct mali_gp_job *gp); -+ -+#endif ++ */ ++#ifndef __MALI_MEMORY_DEFER_BIND_H_ ++#define __MALI_MEMORY_DEFER_BIND_H_ ++ ++ ++#include "mali_osk.h" ++#include "mali_session.h" ++ ++#include ++#include ++#include ++#include ++#include ++ ++ ++#include "mali_memory_types.h" ++#include "mali_memory_os_alloc.h" ++#include "mali_uk_types.h" ++ ++struct mali_gp_job; ++ ++typedef struct mali_defer_mem { ++ struct list_head node; /*dlist node in bind manager */ ++ u32 flag; ++} mali_defer_mem; ++ ++ ++typedef struct mali_defer_mem_block { ++ struct list_head free_pages; /* page pool */ ++ atomic_t num_free_pages; ++} mali_defer_mem_block; ++ ++/* varying memory list need to bind */ ++typedef struct mali_backend_bind_list { ++ struct list_head node; ++ struct mali_mem_backend *bkend; ++ u32 vaddr; ++ u32 page_num; ++ struct mali_session_data *session; ++ u32 flag; ++} mali_backend_bind_lists; ++ ++ ++typedef struct mali_defer_bind_manager { ++ atomic_t num_used_pages; ++ atomic_t num_dmem; ++} mali_defer_bind_manager; ++ ++_mali_osk_errcode_t mali_mem_defer_bind_manager_init(void); ++void mali_mem_defer_bind_manager_destory(void); ++_mali_osk_errcode_t mali_mem_defer_bind(struct mali_gp_job *gp, struct mali_defer_mem_block *dmem_block); ++_mali_osk_errcode_t mali_mem_defer_bind_allocation_prepare(mali_mem_allocation *alloc, struct list_head *list, u32 *required_varying_memsize); ++_mali_osk_errcode_t mali_mem_prepare_mem_for_job(struct mali_gp_job *next_gp_job, mali_defer_mem_block *dblock); ++void mali_mem_defer_dmem_free(struct mali_gp_job *gp); ++ ++#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_dma_buf.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_dma_buf.c new file mode 100755 -index 000000000000..1f4565127a6b +index 000000000..1f4565127 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_dma_buf.c @@ -0,0 +1,369 @@ @@ -340551,7 +340580,7 @@ index 000000000000..1f4565127a6b +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_dma_buf.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_dma_buf.h new file mode 100755 -index 000000000000..a9b2870389ff +index 000000000..a9b287038 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_dma_buf.h @@ -0,0 +1,53 @@ @@ -340610,7 +340639,7 @@ index 000000000000..a9b2870389ff +#endif /* __MALI_MEMORY_DMA_BUF_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_external.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_external.c new file mode 100755 -index 000000000000..76018b7ab90b +index 000000000..76018b7ab --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_external.c @@ -0,0 +1,89 @@ @@ -340705,7 +340734,7 @@ index 000000000000..76018b7ab90b + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_external.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_external.h new file mode 100755 -index 000000000000..2db178d96233 +index 000000000..2db178d96 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_external.h @@ -0,0 +1,29 @@ @@ -340740,7 +340769,7 @@ index 000000000000..2db178d96233 +#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c new file mode 100755 -index 000000000000..6c0a2e9a8a14 +index 000000000..6c0a2e9a8 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c @@ -0,0 +1,992 @@ @@ -341738,11 +341767,11 @@ index 000000000000..6c0a2e9a8a14 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.h new file mode 100755 -index 000000000000..23d8cde753a1 +index 000000000..f9b541134 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.h @@ -0,0 +1,51 @@ -+/* ++/* + * Copyright (C) 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -341750,52 +341779,52 @@ index 000000000000..23d8cde753a1 + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+ -+#ifndef __MALI_MEMORY_MANAGER_H__ -+#define __MALI_MEMORY_MANAGER_H__ -+ -+#include "mali_osk.h" -+#include -+#include -+#include -+#include -+#include -+#include "mali_memory_types.h" -+#include "mali_memory_os_alloc.h" -+#include "mali_uk_types.h" -+ -+struct mali_allocation_manager { -+ rwlock_t vm_lock; -+ struct rb_root allocation_mgr_rb; -+ struct list_head head; -+ struct mutex list_mutex; -+ u32 mali_allocation_num; -+}; -+ -+extern struct idr mali_backend_idr; -+extern struct mutex mali_idr_mutex; -+ -+int mali_memory_manager_init(struct mali_allocation_manager *mgr); -+void mali_memory_manager_uninit(struct mali_allocation_manager *mgr); -+ -+void mali_mem_allocation_struct_destory(mali_mem_allocation *alloc); -+_mali_osk_errcode_t mali_mem_add_mem_size(struct mali_session_data *session, u32 mali_addr, u32 add_size); -+mali_mem_backend *mali_mem_backend_struct_search(struct mali_session_data *session, u32 mali_address); -+_mali_osk_errcode_t _mali_ukk_mem_allocate(_mali_uk_alloc_mem_s *args); -+_mali_osk_errcode_t _mali_ukk_mem_free(_mali_uk_free_mem_s *args); -+_mali_osk_errcode_t _mali_ukk_mem_bind(_mali_uk_bind_mem_s *args); -+_mali_osk_errcode_t _mali_ukk_mem_unbind(_mali_uk_unbind_mem_s *args); -+_mali_osk_errcode_t _mali_ukk_mem_cow(_mali_uk_cow_mem_s *args); -+_mali_osk_errcode_t _mali_ukk_mem_cow_modify_range(_mali_uk_cow_modify_range_s *args); -+_mali_osk_errcode_t _mali_ukk_mem_usage_get(_mali_uk_profiling_memory_usage_get_s *args); -+_mali_osk_errcode_t _mali_ukk_mem_resize(_mali_uk_mem_resize_s *args); -+ -+#endif -+ ++ */ ++ ++#ifndef __MALI_MEMORY_MANAGER_H__ ++#define __MALI_MEMORY_MANAGER_H__ ++ ++#include "mali_osk.h" ++#include ++#include ++#include ++#include ++#include ++#include "mali_memory_types.h" ++#include "mali_memory_os_alloc.h" ++#include "mali_uk_types.h" ++ ++struct mali_allocation_manager { ++ rwlock_t vm_lock; ++ struct rb_root allocation_mgr_rb; ++ struct list_head head; ++ struct mutex list_mutex; ++ u32 mali_allocation_num; ++}; ++ ++extern struct idr mali_backend_idr; ++extern struct mutex mali_idr_mutex; ++ ++int mali_memory_manager_init(struct mali_allocation_manager *mgr); ++void mali_memory_manager_uninit(struct mali_allocation_manager *mgr); ++ ++void mali_mem_allocation_struct_destory(mali_mem_allocation *alloc); ++_mali_osk_errcode_t mali_mem_add_mem_size(struct mali_session_data *session, u32 mali_addr, u32 add_size); ++mali_mem_backend *mali_mem_backend_struct_search(struct mali_session_data *session, u32 mali_address); ++_mali_osk_errcode_t _mali_ukk_mem_allocate(_mali_uk_alloc_mem_s *args); ++_mali_osk_errcode_t _mali_ukk_mem_free(_mali_uk_free_mem_s *args); ++_mali_osk_errcode_t _mali_ukk_mem_bind(_mali_uk_bind_mem_s *args); ++_mali_osk_errcode_t _mali_ukk_mem_unbind(_mali_uk_unbind_mem_s *args); ++_mali_osk_errcode_t _mali_ukk_mem_cow(_mali_uk_cow_mem_s *args); ++_mali_osk_errcode_t _mali_ukk_mem_cow_modify_range(_mali_uk_cow_modify_range_s *args); ++_mali_osk_errcode_t _mali_ukk_mem_usage_get(_mali_uk_profiling_memory_usage_get_s *args); ++_mali_osk_errcode_t _mali_ukk_mem_resize(_mali_uk_mem_resize_s *args); ++ ++#endif ++ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c new file mode 100755 -index 000000000000..9c8214ba3b8e +index 000000000..9c8214ba3 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c @@ -0,0 +1,810 @@ @@ -342611,7 +342640,7 @@ index 000000000000..9c8214ba3b8e +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.h new file mode 100755 -index 000000000000..8c9b35d0b230 +index 000000000..8c9b35d0b --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.h @@ -0,0 +1,54 @@ @@ -342671,7 +342700,7 @@ index 000000000000..8c9b35d0b230 +#endif /* __MALI_MEMORY_OS_ALLOC_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c new file mode 100755 -index 000000000000..63506bfbe9fe +index 000000000..63506bfbe --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c @@ -0,0 +1,170 @@ @@ -342847,7 +342876,7 @@ index 000000000000..63506bfbe9fe + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.h new file mode 100755 -index 000000000000..48691d4790fe +index 000000000..48691d479 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.h @@ -0,0 +1,30 @@ @@ -342883,7 +342912,7 @@ index 000000000000..48691d4790fe +#endif /* __MALI_MEMORY_SECURE_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.c new file mode 100755 -index 000000000000..d682785b9673 +index 000000000..d682785b9 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.c @@ -0,0 +1,943 @@ @@ -343832,11 +343861,11 @@ index 000000000000..d682785b9673 +#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.h new file mode 100755 -index 000000000000..5810960e204a +index 000000000..32f754aea --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.h @@ -0,0 +1,121 @@ -+/* ++/* + * Copyright (C) 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -343844,122 +343873,122 @@ index 000000000000..5810960e204a + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+ -+#ifndef __MALI_MEMORY_SWAP_ALLOC_H__ -+#define __MALI_MEMORY_SWAP_ALLOC_H__ -+ -+#include "mali_osk.h" -+#include "mali_session.h" -+ -+#include "mali_memory_types.h" -+#include "mali_pp_job.h" -+ -+/** -+ * Initialize memory swapping module. -+ */ -+_mali_osk_errcode_t mali_mem_swap_init(void); -+ -+void mali_mem_swap_term(void); -+ -+/** -+ * Return global share memory file to other modules. -+ */ -+struct file *mali_mem_swap_get_global_swap_file(void); -+ -+/** -+ * Unlock the given memory backend and pages in it could be swapped out by kernel. -+ */ -+void mali_mem_swap_unlock_single_mem_backend(mali_mem_backend *mem_bkend); -+ -+/** -+ * Remove the given memory backend from global swap list. -+ */ -+void mali_memory_swap_list_backend_delete(mali_mem_backend *mem_bkend); -+ -+/** -+ * Add the given memory backend to global swap list. -+ */ -+void mali_memory_swap_list_backend_add(mali_mem_backend *mem_bkend); -+ -+/** -+ * Allocate 1 index from bitmap used as page index in global swap file. -+ */ -+u32 mali_mem_swap_idx_alloc(void); -+ -+void mali_mem_swap_idx_free(u32 idx); -+ -+/** -+ * Allocate a new swap item without page index. -+ */ -+struct mali_swap_item *mali_mem_swap_alloc_swap_item(void); -+ -+/** -+ * Free a swap item, truncate the corresponding space in page cache and free index of page. -+ */ -+void mali_mem_swap_free_swap_item(mali_swap_item *swap_item); -+ -+/** -+ * Allocate a page node with swap item. -+ */ -+struct mali_page_node *_mali_mem_swap_page_node_allocate(void); -+ -+/** -+ * Reduce the reference count of given page node and if return 0, just free this page node. -+ */ -+_mali_osk_errcode_t _mali_mem_swap_put_page_node(struct mali_page_node *m_page); -+ -+void _mali_mem_swap_page_node_free(struct mali_page_node *m_page); -+ -+/** -+ * Free a swappable memory backend. -+ */ -+u32 mali_mem_swap_free(mali_mem_swap *swap_mem); -+ -+/** -+ * Ummap and free. -+ */ -+u32 mali_mem_swap_release(mali_mem_backend *mem_bkend, mali_bool is_mali_mapped); -+ -+/** -+ * Read in a page from global swap file with the pre-allcated page index. -+ */ -+mali_bool mali_mem_swap_in_page_node(struct mali_page_node *page_node); -+ -+int mali_mem_swap_alloc_pages(mali_mem_swap *swap_mem, u32 size, u32 *bkend_idx); -+ -+_mali_osk_errcode_t mali_mem_swap_mali_map(mali_mem_swap *swap_mem, struct mali_session_data *session, u32 vaddr, u32 props); -+ -+void mali_mem_swap_mali_unmap(mali_mem_allocation *alloc); -+ -+/** -+ * When pp job created, we need swap in all of memory backend needed by this pp job. -+ */ -+int mali_mem_swap_in_pages(struct mali_pp_job *job); -+ -+/** -+ * Put all of memory backends used this pp job to the global swap list. -+ */ -+int mali_mem_swap_out_pages(struct mali_pp_job *job); -+ -+/** -+ * This will be called in page fault to process CPU read&write. -+ */ -+int mali_mem_swap_allocate_page_on_demand(mali_mem_backend *mem_bkend, u32 offset, struct page **pagep) ; -+ -+/** -+ * Used to process cow on demand for swappable memory backend. -+ */ -+int mali_mem_swap_cow_page_on_demand(mali_mem_backend *mem_bkend, u32 offset, struct page **pagep); -+ -+#ifdef MALI_MEM_SWAP_TRACKING -+void mali_mem_swap_tracking(u32 *swap_pool_size, u32 *unlock_size); -+#endif -+#endif /* __MALI_MEMORY_SWAP_ALLOC_H__ */ -+ ++ */ ++ ++#ifndef __MALI_MEMORY_SWAP_ALLOC_H__ ++#define __MALI_MEMORY_SWAP_ALLOC_H__ ++ ++#include "mali_osk.h" ++#include "mali_session.h" ++ ++#include "mali_memory_types.h" ++#include "mali_pp_job.h" ++ ++/** ++ * Initialize memory swapping module. ++ */ ++_mali_osk_errcode_t mali_mem_swap_init(void); ++ ++void mali_mem_swap_term(void); ++ ++/** ++ * Return global share memory file to other modules. ++ */ ++struct file *mali_mem_swap_get_global_swap_file(void); ++ ++/** ++ * Unlock the given memory backend and pages in it could be swapped out by kernel. ++ */ ++void mali_mem_swap_unlock_single_mem_backend(mali_mem_backend *mem_bkend); ++ ++/** ++ * Remove the given memory backend from global swap list. ++ */ ++void mali_memory_swap_list_backend_delete(mali_mem_backend *mem_bkend); ++ ++/** ++ * Add the given memory backend to global swap list. ++ */ ++void mali_memory_swap_list_backend_add(mali_mem_backend *mem_bkend); ++ ++/** ++ * Allocate 1 index from bitmap used as page index in global swap file. ++ */ ++u32 mali_mem_swap_idx_alloc(void); ++ ++void mali_mem_swap_idx_free(u32 idx); ++ ++/** ++ * Allocate a new swap item without page index. ++ */ ++struct mali_swap_item *mali_mem_swap_alloc_swap_item(void); ++ ++/** ++ * Free a swap item, truncate the corresponding space in page cache and free index of page. ++ */ ++void mali_mem_swap_free_swap_item(mali_swap_item *swap_item); ++ ++/** ++ * Allocate a page node with swap item. ++ */ ++struct mali_page_node *_mali_mem_swap_page_node_allocate(void); ++ ++/** ++ * Reduce the reference count of given page node and if return 0, just free this page node. ++ */ ++_mali_osk_errcode_t _mali_mem_swap_put_page_node(struct mali_page_node *m_page); ++ ++void _mali_mem_swap_page_node_free(struct mali_page_node *m_page); ++ ++/** ++ * Free a swappable memory backend. ++ */ ++u32 mali_mem_swap_free(mali_mem_swap *swap_mem); ++ ++/** ++ * Ummap and free. ++ */ ++u32 mali_mem_swap_release(mali_mem_backend *mem_bkend, mali_bool is_mali_mapped); ++ ++/** ++ * Read in a page from global swap file with the pre-allcated page index. ++ */ ++mali_bool mali_mem_swap_in_page_node(struct mali_page_node *page_node); ++ ++int mali_mem_swap_alloc_pages(mali_mem_swap *swap_mem, u32 size, u32 *bkend_idx); ++ ++_mali_osk_errcode_t mali_mem_swap_mali_map(mali_mem_swap *swap_mem, struct mali_session_data *session, u32 vaddr, u32 props); ++ ++void mali_mem_swap_mali_unmap(mali_mem_allocation *alloc); ++ ++/** ++ * When pp job created, we need swap in all of memory backend needed by this pp job. ++ */ ++int mali_mem_swap_in_pages(struct mali_pp_job *job); ++ ++/** ++ * Put all of memory backends used this pp job to the global swap list. ++ */ ++int mali_mem_swap_out_pages(struct mali_pp_job *job); ++ ++/** ++ * This will be called in page fault to process CPU read&write. ++ */ ++int mali_mem_swap_allocate_page_on_demand(mali_mem_backend *mem_bkend, u32 offset, struct page **pagep) ; ++ ++/** ++ * Used to process cow on demand for swappable memory backend. ++ */ ++int mali_mem_swap_cow_page_on_demand(mali_mem_backend *mem_bkend, u32 offset, struct page **pagep); ++ ++#ifdef MALI_MEM_SWAP_TRACKING ++void mali_mem_swap_tracking(u32 *swap_pool_size, u32 *unlock_size); ++#endif ++#endif /* __MALI_MEMORY_SWAP_ALLOC_H__ */ ++ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_types.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_types.h new file mode 100755 -index 000000000000..33db40929642 +index 000000000..33db40929 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_types.h @@ -0,0 +1,219 @@ @@ -344184,7 +344213,7 @@ index 000000000000..33db40929642 +#endif /* __MALI_MEMORY_TYPES__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_ump.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_ump.c new file mode 100755 -index 000000000000..666d4b0fb1cd +index 000000000..666d4b0fb --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_ump.c @@ -0,0 +1,154 @@ @@ -344344,7 +344373,7 @@ index 000000000000..666d4b0fb1cd + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_ump.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_ump.h new file mode 100755 -index 000000000000..c314c8dcbf1c +index 000000000..c314c8dcb --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_ump.h @@ -0,0 +1,29 @@ @@ -344379,7 +344408,7 @@ index 000000000000..c314c8dcbf1c +#endif /* __MALI_MEMORY_DMA_BUF_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_util.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_util.c new file mode 100755 -index 000000000000..8e13e923c3fb +index 000000000..8e13e923c --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_util.c @@ -0,0 +1,158 @@ @@ -344543,11 +344572,11 @@ index 000000000000..8e13e923c3fb +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_util.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_util.h new file mode 100755 -index 000000000000..33ac99509740 +index 000000000..036248260 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_util.h @@ -0,0 +1,20 @@ -+/* ++/* + * Copyright (C) 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -344555,25 +344584,25 @@ index 000000000000..33ac99509740 + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+ -+#ifndef __MALI_MEMORY_UTIL_H__ -+#define __MALI_MEMORY_UTIL_H__ -+ -+u32 mali_allocation_unref(struct mali_mem_allocation **alloc); -+ -+void mali_allocation_ref(struct mali_mem_allocation *alloc); -+ -+void mali_free_session_allocations(struct mali_session_data *session); -+ -+#endif ++ */ ++ ++#ifndef __MALI_MEMORY_UTIL_H__ ++#define __MALI_MEMORY_UTIL_H__ ++ ++u32 mali_allocation_unref(struct mali_mem_allocation **alloc); ++ ++void mali_allocation_ref(struct mali_mem_allocation *alloc); ++ ++void mali_free_session_allocations(struct mali_session_data *session); ++ ++#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_virtual.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_virtual.c new file mode 100755 -index 000000000000..0b31e3a23432 +index 000000000..9ce4d6adf --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_virtual.c @@ -0,0 +1,127 @@ -+/* ++/* + * Copyright (C) 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -344581,132 +344610,132 @@ index 000000000000..0b31e3a23432 + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "mali_osk.h" -+#include "mali_osk_mali.h" -+#include "mali_kernel_linux.h" -+#include "mali_scheduler.h" -+#include "mali_memory_os_alloc.h" -+#include "mali_memory_manager.h" -+#include "mali_memory_virtual.h" -+ -+ -+/** -+*internal helper to link node into the rb-tree -+*/ -+static inline void _mali_vma_offset_add_rb(struct mali_allocation_manager *mgr, -+ struct mali_vma_node *node) -+{ -+ struct rb_node **iter = &mgr->allocation_mgr_rb.rb_node; -+ struct rb_node *parent = NULL; -+ struct mali_vma_node *iter_node; -+ -+ while (likely(*iter)) { -+ parent = *iter; -+ iter_node = rb_entry(*iter, struct mali_vma_node, vm_rb); -+ -+ if (node->vm_node.start < iter_node->vm_node.start) -+ iter = &(*iter)->rb_left; -+ else if (node->vm_node.start > iter_node->vm_node.start) -+ iter = &(*iter)->rb_right; -+ else -+ MALI_DEBUG_ASSERT(0); -+ } -+ -+ rb_link_node(&node->vm_rb, parent, iter); -+ rb_insert_color(&node->vm_rb, &mgr->allocation_mgr_rb); -+} -+ -+/** -+ * mali_vma_offset_add() - Add offset node to RB Tree -+ */ -+int mali_vma_offset_add(struct mali_allocation_manager *mgr, -+ struct mali_vma_node *node) -+{ -+ int ret = 0; -+ write_lock(&mgr->vm_lock); -+ -+ if (node->vm_node.allocated) { -+ goto out; -+ } -+ -+ _mali_vma_offset_add_rb(mgr, node); -+ /* set to allocated */ -+ node->vm_node.allocated = 1; -+ -+out: -+ write_unlock(&mgr->vm_lock); -+ return ret; -+} -+ -+/** -+ * mali_vma_offset_remove() - Remove offset node from RB tree -+ */ -+void mali_vma_offset_remove(struct mali_allocation_manager *mgr, -+ struct mali_vma_node *node) -+{ -+ write_lock(&mgr->vm_lock); -+ -+ if (node->vm_node.allocated) { -+ rb_erase(&node->vm_rb, &mgr->allocation_mgr_rb); -+ memset(&node->vm_node, 0, sizeof(node->vm_node)); -+ } -+ write_unlock(&mgr->vm_lock); -+} -+ -+/** -+* mali_vma_offset_search - Search the node in RB tree -+*/ -+struct mali_vma_node *mali_vma_offset_search(struct mali_allocation_manager *mgr, -+ unsigned long start, unsigned long pages) -+{ -+ struct mali_vma_node *node, *best; -+ struct rb_node *iter; -+ unsigned long offset; -+ read_lock(&mgr->vm_lock); -+ -+ iter = mgr->allocation_mgr_rb.rb_node; -+ best = NULL; -+ -+ while (likely(iter)) { -+ node = rb_entry(iter, struct mali_vma_node, vm_rb); -+ offset = node->vm_node.start; -+ if (start >= offset) { -+ iter = iter->rb_right; -+ best = node; -+ if (start == offset) -+ break; -+ } else { -+ iter = iter->rb_left; -+ } -+ } -+ -+ if (best) { -+ offset = best->vm_node.start + best->vm_node.size; -+ if (offset <= start + pages) -+ best = NULL; -+ } -+ read_unlock(&mgr->vm_lock); -+ -+ return best; -+} -+ ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "mali_osk.h" ++#include "mali_osk_mali.h" ++#include "mali_kernel_linux.h" ++#include "mali_scheduler.h" ++#include "mali_memory_os_alloc.h" ++#include "mali_memory_manager.h" ++#include "mali_memory_virtual.h" ++ ++ ++/** ++*internal helper to link node into the rb-tree ++*/ ++static inline void _mali_vma_offset_add_rb(struct mali_allocation_manager *mgr, ++ struct mali_vma_node *node) ++{ ++ struct rb_node **iter = &mgr->allocation_mgr_rb.rb_node; ++ struct rb_node *parent = NULL; ++ struct mali_vma_node *iter_node; ++ ++ while (likely(*iter)) { ++ parent = *iter; ++ iter_node = rb_entry(*iter, struct mali_vma_node, vm_rb); ++ ++ if (node->vm_node.start < iter_node->vm_node.start) ++ iter = &(*iter)->rb_left; ++ else if (node->vm_node.start > iter_node->vm_node.start) ++ iter = &(*iter)->rb_right; ++ else ++ MALI_DEBUG_ASSERT(0); ++ } ++ ++ rb_link_node(&node->vm_rb, parent, iter); ++ rb_insert_color(&node->vm_rb, &mgr->allocation_mgr_rb); ++} ++ ++/** ++ * mali_vma_offset_add() - Add offset node to RB Tree ++ */ ++int mali_vma_offset_add(struct mali_allocation_manager *mgr, ++ struct mali_vma_node *node) ++{ ++ int ret = 0; ++ write_lock(&mgr->vm_lock); ++ ++ if (node->vm_node.allocated) { ++ goto out; ++ } ++ ++ _mali_vma_offset_add_rb(mgr, node); ++ /* set to allocated */ ++ node->vm_node.allocated = 1; ++ ++out: ++ write_unlock(&mgr->vm_lock); ++ return ret; ++} ++ ++/** ++ * mali_vma_offset_remove() - Remove offset node from RB tree ++ */ ++void mali_vma_offset_remove(struct mali_allocation_manager *mgr, ++ struct mali_vma_node *node) ++{ ++ write_lock(&mgr->vm_lock); ++ ++ if (node->vm_node.allocated) { ++ rb_erase(&node->vm_rb, &mgr->allocation_mgr_rb); ++ memset(&node->vm_node, 0, sizeof(node->vm_node)); ++ } ++ write_unlock(&mgr->vm_lock); ++} ++ ++/** ++* mali_vma_offset_search - Search the node in RB tree ++*/ ++struct mali_vma_node *mali_vma_offset_search(struct mali_allocation_manager *mgr, ++ unsigned long start, unsigned long pages) ++{ ++ struct mali_vma_node *node, *best; ++ struct rb_node *iter; ++ unsigned long offset; ++ read_lock(&mgr->vm_lock); ++ ++ iter = mgr->allocation_mgr_rb.rb_node; ++ best = NULL; ++ ++ while (likely(iter)) { ++ node = rb_entry(iter, struct mali_vma_node, vm_rb); ++ offset = node->vm_node.start; ++ if (start >= offset) { ++ iter = iter->rb_right; ++ best = node; ++ if (start == offset) ++ break; ++ } else { ++ iter = iter->rb_left; ++ } ++ } ++ ++ if (best) { ++ offset = best->vm_node.start + best->vm_node.size; ++ if (offset <= start + pages) ++ best = NULL; ++ } ++ read_unlock(&mgr->vm_lock); ++ ++ return best; ++} ++ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_virtual.h b/drivers/gpu/arm/mali400/mali/linux/mali_memory_virtual.h new file mode 100755 -index 000000000000..fd03ed9f2bbb +index 000000000..696db570a --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_virtual.h @@ -0,0 +1,35 @@ -+/* ++/* + * Copyright (C) 2013-2014, 2016-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -344714,36 +344743,36 @@ index 000000000000..fd03ed9f2bbb + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+#ifndef __MALI_GPU_VMEM_H__ -+#define __MALI_GPU_VMEM_H__ -+ -+#include "mali_osk.h" -+#include "mali_session.h" -+#include -+#include -+#include -+#include -+#include -+#include "mali_memory_types.h" -+#include "mali_memory_os_alloc.h" -+#include "mali_memory_manager.h" -+ -+ -+ -+int mali_vma_offset_add(struct mali_allocation_manager *mgr, -+ struct mali_vma_node *node); -+ -+void mali_vma_offset_remove(struct mali_allocation_manager *mgr, -+ struct mali_vma_node *node); -+ -+struct mali_vma_node *mali_vma_offset_search(struct mali_allocation_manager *mgr, -+ unsigned long start, unsigned long pages); -+ -+#endif ++ */ ++#ifndef __MALI_GPU_VMEM_H__ ++#define __MALI_GPU_VMEM_H__ ++ ++#include "mali_osk.h" ++#include "mali_session.h" ++#include ++#include ++#include ++#include ++#include ++#include "mali_memory_types.h" ++#include "mali_memory_os_alloc.h" ++#include "mali_memory_manager.h" ++ ++ ++ ++int mali_vma_offset_add(struct mali_allocation_manager *mgr, ++ struct mali_vma_node *node); ++ ++void mali_vma_offset_remove(struct mali_allocation_manager *mgr, ++ struct mali_vma_node *node); ++ ++struct mali_vma_node *mali_vma_offset_search(struct mali_allocation_manager *mgr, ++ unsigned long start, unsigned long pages); ++ ++#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_atomics.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_atomics.c new file mode 100755 -index 000000000000..5bc0e52ebe23 +index 000000000..5bc0e52eb --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_atomics.c @@ -0,0 +1,59 @@ @@ -344808,11 +344837,11 @@ index 000000000000..5bc0e52ebe23 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_bitmap.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_bitmap.c new file mode 100755 -index 000000000000..fb9ccd2ad1e2 +index 000000000..54c455a37 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_bitmap.c @@ -0,0 +1,152 @@ -+/* ++/* + * Copyright (C) 2010, 2013-2017 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the GNU General Public License version 2 @@ -344820,153 +344849,153 @@ index 000000000000..fb9ccd2ad1e2 + * + * A copy of the licence is included with the program, and can also be obtained from Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+ -+/** -+ * @file mali_osk_bitmap.c -+ * Implementation of the OS abstraction layer for the kernel device driver -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include "common/mali_kernel_common.h" -+#include "mali_osk_types.h" -+#include "mali_osk.h" -+ -+u32 _mali_osk_bitmap_alloc(struct _mali_osk_bitmap *bitmap) -+{ -+ u32 obj; -+ -+ MALI_DEBUG_ASSERT_POINTER(bitmap); -+ -+ _mali_osk_spinlock_lock(bitmap->lock); -+ -+ obj = find_next_zero_bit(bitmap->table, bitmap->max, bitmap->reserve); -+ -+ if (obj < bitmap->max) { -+ set_bit(obj, bitmap->table); -+ } else { -+ obj = -1; -+ } -+ -+ if (obj != -1) -+ --bitmap->avail; -+ _mali_osk_spinlock_unlock(bitmap->lock); -+ -+ return obj; -+} -+ -+void _mali_osk_bitmap_free(struct _mali_osk_bitmap *bitmap, u32 obj) -+{ -+ MALI_DEBUG_ASSERT_POINTER(bitmap); -+ -+ _mali_osk_bitmap_free_range(bitmap, obj, 1); -+} -+ -+u32 _mali_osk_bitmap_alloc_range(struct _mali_osk_bitmap *bitmap, int cnt) -+{ -+ u32 obj; -+ -+ MALI_DEBUG_ASSERT_POINTER(bitmap); -+ -+ if (0 >= cnt) { -+ return -1; -+ } -+ -+ if (1 == cnt) { -+ return _mali_osk_bitmap_alloc(bitmap); -+ } -+ -+ _mali_osk_spinlock_lock(bitmap->lock); -+ obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, -+ bitmap->last, cnt, 0); -+ -+ if (obj >= bitmap->max) { -+ obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, -+ bitmap->reserve, cnt, 0); -+ } -+ -+ if (obj < bitmap->max) { -+ bitmap_set(bitmap->table, obj, cnt); -+ -+ bitmap->last = (obj + cnt); -+ if (bitmap->last >= bitmap->max) { -+ bitmap->last = bitmap->reserve; -+ } -+ } else { -+ obj = -1; -+ } -+ -+ if (obj != -1) { -+ bitmap->avail -= cnt; -+ } -+ -+ _mali_osk_spinlock_unlock(bitmap->lock); -+ -+ return obj; -+} -+ -+u32 _mali_osk_bitmap_avail(struct _mali_osk_bitmap *bitmap) -+{ -+ MALI_DEBUG_ASSERT_POINTER(bitmap); -+ -+ return bitmap->avail; -+} -+ -+void _mali_osk_bitmap_free_range(struct _mali_osk_bitmap *bitmap, u32 obj, int cnt) -+{ -+ MALI_DEBUG_ASSERT_POINTER(bitmap); -+ -+ _mali_osk_spinlock_lock(bitmap->lock); -+ bitmap_clear(bitmap->table, obj, cnt); -+ bitmap->last = min(bitmap->last, obj); -+ -+ bitmap->avail += cnt; -+ _mali_osk_spinlock_unlock(bitmap->lock); -+} -+ -+int _mali_osk_bitmap_init(struct _mali_osk_bitmap *bitmap, u32 num, u32 reserve) -+{ -+ MALI_DEBUG_ASSERT_POINTER(bitmap); -+ MALI_DEBUG_ASSERT(reserve <= num); -+ -+ bitmap->reserve = reserve; -+ bitmap->last = reserve; -+ bitmap->max = num; -+ bitmap->avail = num - reserve; -+ bitmap->lock = _mali_osk_spinlock_init(_MALI_OSK_LOCKFLAG_UNORDERED, _MALI_OSK_LOCK_ORDER_FIRST); -+ if (!bitmap->lock) { -+ return _MALI_OSK_ERR_NOMEM; -+ } -+ bitmap->table = kzalloc(BITS_TO_LONGS(bitmap->max) * -+ sizeof(long), GFP_KERNEL); -+ if (!bitmap->table) { -+ _mali_osk_spinlock_term(bitmap->lock); -+ return _MALI_OSK_ERR_NOMEM; -+ } -+ -+ return _MALI_OSK_ERR_OK; -+} -+ -+void _mali_osk_bitmap_term(struct _mali_osk_bitmap *bitmap) -+{ -+ MALI_DEBUG_ASSERT_POINTER(bitmap); -+ -+ if (NULL != bitmap->lock) { -+ _mali_osk_spinlock_term(bitmap->lock); -+ } -+ -+ if (NULL != bitmap->table) { -+ kfree(bitmap->table); -+ } -+} -+ ++ */ ++ ++/** ++ * @file mali_osk_bitmap.c ++ * Implementation of the OS abstraction layer for the kernel device driver ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include "common/mali_kernel_common.h" ++#include "mali_osk_types.h" ++#include "mali_osk.h" ++ ++u32 _mali_osk_bitmap_alloc(struct _mali_osk_bitmap *bitmap) ++{ ++ u32 obj; ++ ++ MALI_DEBUG_ASSERT_POINTER(bitmap); ++ ++ _mali_osk_spinlock_lock(bitmap->lock); ++ ++ obj = find_next_zero_bit(bitmap->table, bitmap->max, bitmap->reserve); ++ ++ if (obj < bitmap->max) { ++ set_bit(obj, bitmap->table); ++ } else { ++ obj = -1; ++ } ++ ++ if (obj != -1) ++ --bitmap->avail; ++ _mali_osk_spinlock_unlock(bitmap->lock); ++ ++ return obj; ++} ++ ++void _mali_osk_bitmap_free(struct _mali_osk_bitmap *bitmap, u32 obj) ++{ ++ MALI_DEBUG_ASSERT_POINTER(bitmap); ++ ++ _mali_osk_bitmap_free_range(bitmap, obj, 1); ++} ++ ++u32 _mali_osk_bitmap_alloc_range(struct _mali_osk_bitmap *bitmap, int cnt) ++{ ++ u32 obj; ++ ++ MALI_DEBUG_ASSERT_POINTER(bitmap); ++ ++ if (0 >= cnt) { ++ return -1; ++ } ++ ++ if (1 == cnt) { ++ return _mali_osk_bitmap_alloc(bitmap); ++ } ++ ++ _mali_osk_spinlock_lock(bitmap->lock); ++ obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, ++ bitmap->last, cnt, 0); ++ ++ if (obj >= bitmap->max) { ++ obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, ++ bitmap->reserve, cnt, 0); ++ } ++ ++ if (obj < bitmap->max) { ++ bitmap_set(bitmap->table, obj, cnt); ++ ++ bitmap->last = (obj + cnt); ++ if (bitmap->last >= bitmap->max) { ++ bitmap->last = bitmap->reserve; ++ } ++ } else { ++ obj = -1; ++ } ++ ++ if (obj != -1) { ++ bitmap->avail -= cnt; ++ } ++ ++ _mali_osk_spinlock_unlock(bitmap->lock); ++ ++ return obj; ++} ++ ++u32 _mali_osk_bitmap_avail(struct _mali_osk_bitmap *bitmap) ++{ ++ MALI_DEBUG_ASSERT_POINTER(bitmap); ++ ++ return bitmap->avail; ++} ++ ++void _mali_osk_bitmap_free_range(struct _mali_osk_bitmap *bitmap, u32 obj, int cnt) ++{ ++ MALI_DEBUG_ASSERT_POINTER(bitmap); ++ ++ _mali_osk_spinlock_lock(bitmap->lock); ++ bitmap_clear(bitmap->table, obj, cnt); ++ bitmap->last = min(bitmap->last, obj); ++ ++ bitmap->avail += cnt; ++ _mali_osk_spinlock_unlock(bitmap->lock); ++} ++ ++int _mali_osk_bitmap_init(struct _mali_osk_bitmap *bitmap, u32 num, u32 reserve) ++{ ++ MALI_DEBUG_ASSERT_POINTER(bitmap); ++ MALI_DEBUG_ASSERT(reserve <= num); ++ ++ bitmap->reserve = reserve; ++ bitmap->last = reserve; ++ bitmap->max = num; ++ bitmap->avail = num - reserve; ++ bitmap->lock = _mali_osk_spinlock_init(_MALI_OSK_LOCKFLAG_UNORDERED, _MALI_OSK_LOCK_ORDER_FIRST); ++ if (!bitmap->lock) { ++ return _MALI_OSK_ERR_NOMEM; ++ } ++ bitmap->table = kzalloc(BITS_TO_LONGS(bitmap->max) * ++ sizeof(long), GFP_KERNEL); ++ if (!bitmap->table) { ++ _mali_osk_spinlock_term(bitmap->lock); ++ return _MALI_OSK_ERR_NOMEM; ++ } ++ ++ return _MALI_OSK_ERR_OK; ++} ++ ++void _mali_osk_bitmap_term(struct _mali_osk_bitmap *bitmap) ++{ ++ MALI_DEBUG_ASSERT_POINTER(bitmap); ++ ++ if (NULL != bitmap->lock) { ++ _mali_osk_spinlock_term(bitmap->lock); ++ } ++ ++ if (NULL != bitmap->table) { ++ kfree(bitmap->table); ++ } ++} ++ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_irq.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_irq.c new file mode 100755 -index 000000000000..5c8b9ceab9ab +index 000000000..5c8b9ceab --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_irq.c @@ -0,0 +1,200 @@ @@ -345172,7 +345201,7 @@ index 000000000000..5c8b9ceab9ab +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_locks.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_locks.c new file mode 100755 -index 000000000000..ed5f0b0da7cb +index 000000000..ed5f0b0da --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_locks.c @@ -0,0 +1,287 @@ @@ -345465,7 +345494,7 @@ index 000000000000..ed5f0b0da7cb +#endif /* DEBUG */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_locks.h b/drivers/gpu/arm/mali400/mali/linux/mali_osk_locks.h new file mode 100755 -index 000000000000..6fd5af95285b +index 000000000..6fd5af952 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_locks.h @@ -0,0 +1,326 @@ @@ -345797,7 +345826,7 @@ index 000000000000..6fd5af95285b +#endif diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_low_level_mem.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_low_level_mem.c new file mode 100755 -index 000000000000..994b04dad745 +index 000000000..994b04dad --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_low_level_mem.c @@ -0,0 +1,146 @@ @@ -345949,7 +345978,7 @@ index 000000000000..994b04dad745 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_mali.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_mali.c new file mode 100755 -index 000000000000..a729d0499869 +index 000000000..a729d0499 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_mali.c @@ -0,0 +1,505 @@ @@ -346460,7 +346489,7 @@ index 000000000000..a729d0499869 + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_math.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_math.c new file mode 100755 -index 000000000000..0b2d00762771 +index 000000000..0b2d00762 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_math.c @@ -0,0 +1,27 @@ @@ -346493,7 +346522,7 @@ index 000000000000..0b2d00762771 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_memory.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_memory.c new file mode 100755 -index 000000000000..174616b566c4 +index 000000000..174616b56 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_memory.c @@ -0,0 +1,61 @@ @@ -346560,7 +346589,7 @@ index 000000000000..174616b566c4 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_misc.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_misc.c new file mode 100755 -index 000000000000..9845187f8122 +index 000000000..9845187f8 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_misc.c @@ -0,0 +1,81 @@ @@ -346647,7 +346676,7 @@ index 000000000000..9845187f8122 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_notification.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_notification.c new file mode 100755 -index 000000000000..a05f8f066964 +index 000000000..a05f8f066 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_notification.c @@ -0,0 +1,182 @@ @@ -346835,7 +346864,7 @@ index 000000000000..a05f8f066964 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_pm.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_pm.c new file mode 100755 -index 000000000000..e28e2eb21fe2 +index 000000000..e28e2eb21 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_pm.c @@ -0,0 +1,83 @@ @@ -346924,7 +346953,7 @@ index 000000000000..e28e2eb21fe2 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_profiling.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_profiling.c new file mode 100755 -index 000000000000..9e977ea4d0ff +index 000000000..9e977ea4d --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_profiling.c @@ -0,0 +1,1282 @@ @@ -348212,7 +348241,7 @@ index 000000000000..9e977ea4d0ff +EXPORT_SYMBOL(_mali_profiling_get_mali_version); diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_specific.h b/drivers/gpu/arm/mali400/mali/linux/mali_osk_specific.h new file mode 100755 -index 000000000000..af51161f9da1 +index 000000000..af51161f9 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_specific.h @@ -0,0 +1,74 @@ @@ -348292,7 +348321,7 @@ index 000000000000..af51161f9da1 +#endif /* __MALI_OSK_SPECIFIC_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_time.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_time.c new file mode 100755 -index 000000000000..d295e712ac7a +index 000000000..d295e712a --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_time.c @@ -0,0 +1,59 @@ @@ -348357,7 +348386,7 @@ index 000000000000..d295e712ac7a +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_timers.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_timers.c new file mode 100755 -index 000000000000..d01c1148272a +index 000000000..d01c11482 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_timers.c @@ -0,0 +1,76 @@ @@ -348439,7 +348468,7 @@ index 000000000000..d01c1148272a +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_wait_queue.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_wait_queue.c new file mode 100755 -index 000000000000..fa12abd3f5dc +index 000000000..fa12abd3f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_wait_queue.c @@ -0,0 +1,78 @@ @@ -348523,7 +348552,7 @@ index 000000000000..fa12abd3f5dc +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_wq.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_wq.c new file mode 100755 -index 000000000000..d5e258a83a29 +index 000000000..d5e258a83 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_wq.c @@ -0,0 +1,240 @@ @@ -348769,7 +348798,7 @@ index 000000000000..d5e258a83a29 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_pmu_power_up_down.c b/drivers/gpu/arm/mali400/mali/linux/mali_pmu_power_up_down.c new file mode 100755 -index 000000000000..931d7f07a1d2 +index 000000000..931d7f07a --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_pmu_power_up_down.c @@ -0,0 +1,23 @@ @@ -348798,7 +348827,7 @@ index 000000000000..931d7f07a1d2 +EXPORT_SYMBOL(mali_perf_set_num_pp_cores); diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_profiling_events.h b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_events.h new file mode 100755 -index 000000000000..4661cac42b3f +index 000000000..4661cac42 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_events.h @@ -0,0 +1,17 @@ @@ -348821,7 +348850,7 @@ index 000000000000..4661cac42b3f +#endif /* __MALI_PROFILING_EVENTS_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_profiling_gator_api.h b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_gator_api.h new file mode 100755 -index 000000000000..6fdaa427c4cf +index 000000000..6fdaa427c --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_gator_api.h @@ -0,0 +1,17 @@ @@ -348844,7 +348873,7 @@ index 000000000000..6fdaa427c4cf +#endif /* __MALI_PROFILING_GATOR_API_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_profiling_internal.c b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_internal.c new file mode 100755 -index 000000000000..c3a526f0ad90 +index 000000000..c3a526f0a --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_internal.c @@ -0,0 +1,275 @@ @@ -349125,7 +349154,7 @@ index 000000000000..c3a526f0ad90 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_profiling_internal.h b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_internal.h new file mode 100755 -index 000000000000..f17b4583307a +index 000000000..f17b45833 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_profiling_internal.h @@ -0,0 +1,35 @@ @@ -349166,7 +349195,7 @@ index 000000000000..f17b4583307a +#endif /* __MALI_PROFILING_INTERNAL_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_sync.c b/drivers/gpu/arm/mali400/mali/linux/mali_sync.c new file mode 100755 -index 000000000000..0d98b518f1ac +index 000000000..0d98b518f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_sync.c @@ -0,0 +1,665 @@ @@ -349837,7 +349866,7 @@ index 000000000000..0d98b518f1ac + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_sync.h b/drivers/gpu/arm/mali400/mali/linux/mali_sync.h new file mode 100755 -index 000000000000..91be8b9cf314 +index 000000000..91be8b9cf --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_sync.h @@ -0,0 +1,169 @@ @@ -350012,7 +350041,7 @@ index 000000000000..91be8b9cf314 +#endif /* _MALI_SYNC_H_ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_uk_types.h b/drivers/gpu/arm/mali400/mali/linux/mali_uk_types.h new file mode 100755 -index 000000000000..68b27b8be067 +index 000000000..68b27b8be --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_uk_types.h @@ -0,0 +1,17 @@ @@ -350035,7 +350064,7 @@ index 000000000000..68b27b8be067 +#endif /* __MALI_UK_TYPES_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_core.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_core.c new file mode 100755 -index 000000000000..0bd1cddb10c6 +index 000000000..0bd1cddb1 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_core.c @@ -0,0 +1,171 @@ @@ -350212,7 +350241,7 @@ index 000000000000..0bd1cddb10c6 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_gp.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_gp.c new file mode 100755 -index 000000000000..68fcd971938a +index 000000000..68fcd9719 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_gp.c @@ -0,0 +1,91 @@ @@ -350309,7 +350338,7 @@ index 000000000000..68fcd971938a +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_mem.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_mem.c new file mode 100755 -index 000000000000..baea4c688db9 +index 000000000..baea4c688 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_mem.c @@ -0,0 +1,333 @@ @@ -350648,7 +350677,7 @@ index 000000000000..baea4c688db9 + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_pp.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_pp.c new file mode 100755 -index 000000000000..a9b0958c06aa +index 000000000..a9b0958c0 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_pp.c @@ -0,0 +1,105 @@ @@ -350759,7 +350788,7 @@ index 000000000000..a9b0958c06aa +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_profiling.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_profiling.c new file mode 100755 -index 000000000000..8b49ebc50b95 +index 000000000..8b49ebc50 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_profiling.c @@ -0,0 +1,183 @@ @@ -350948,7 +350977,7 @@ index 000000000000..8b49ebc50b95 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_soft_job.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_soft_job.c new file mode 100755 -index 000000000000..1dd4a7c6fb1e +index 000000000..1dd4a7c6f --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_soft_job.c @@ -0,0 +1,90 @@ @@ -351044,7 +351073,7 @@ index 000000000000..1dd4a7c6fb1e +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_timeline.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_timeline.c new file mode 100755 -index 000000000000..ff0c909393a4 +index 000000000..ff0c90939 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_timeline.c @@ -0,0 +1,88 @@ @@ -351138,7 +351167,7 @@ index 000000000000..ff0c909393a4 +} diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_vsync.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_vsync.c new file mode 100755 -index 000000000000..52519d1f96e0 +index 000000000..52519d1f9 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_vsync.c @@ -0,0 +1,39 @@ @@ -351183,7 +351212,7 @@ index 000000000000..52519d1f96e0 + diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_wrappers.h b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_wrappers.h new file mode 100755 -index 000000000000..1add628fe323 +index 000000000..1add628fe --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_wrappers.h @@ -0,0 +1,82 @@ @@ -351271,7 +351300,7 @@ index 000000000000..1add628fe323 +#endif /* __MALI_UKK_WRAPPERS_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/platform/arm/arm.c b/drivers/gpu/arm/mali400/mali/platform/arm/arm.c new file mode 100755 -index 000000000000..fc7017bbfe08 +index 000000000..fc7017bbf --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/platform/arm/arm.c @@ -0,0 +1,629 @@ @@ -351906,7 +351935,7 @@ index 000000000000..fc7017bbfe08 +} diff --git a/drivers/gpu/arm/mali400/mali/platform/arm/arm_core_scaling.c b/drivers/gpu/arm/mali400/mali/platform/arm/arm_core_scaling.c new file mode 100755 -index 000000000000..7a2fc8107b4f +index 000000000..7a2fc8107 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/platform/arm/arm_core_scaling.c @@ -0,0 +1,122 @@ @@ -352034,7 +352063,7 @@ index 000000000000..7a2fc8107b4f +} diff --git a/drivers/gpu/arm/mali400/mali/platform/arm/arm_core_scaling.h b/drivers/gpu/arm/mali400/mali/platform/arm/arm_core_scaling.h new file mode 100755 -index 000000000000..8e0101830749 +index 000000000..8e0101830 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/platform/arm/arm_core_scaling.h @@ -0,0 +1,44 @@ @@ -352084,7 +352113,7 @@ index 000000000000..8e0101830749 +#endif /* __ARM_CORE_SCALING_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/platform/arm/juno_opp.c b/drivers/gpu/arm/mali400/mali/platform/arm/juno_opp.c new file mode 100755 -index 000000000000..e4e7ab8b2c2e +index 000000000..e4e7ab8b2 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/platform/arm/juno_opp.c @@ -0,0 +1,127 @@ @@ -352217,7 +352246,7 @@ index 000000000000..e4e7ab8b2c2e +#endif diff --git a/drivers/gpu/arm/mali400/mali/platform/rk/custom_log.h b/drivers/gpu/arm/mali400/mali/platform/rk/custom_log.h new file mode 100755 -index 000000000000..fe5e1224149e +index 000000000..fe5e12241 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/platform/rk/custom_log.h @@ -0,0 +1,209 @@ @@ -352432,7 +352461,7 @@ index 000000000000..fe5e1224149e +#endif /* __CUSTOM_LOG_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/platform/rk/rk.c b/drivers/gpu/arm/mali400/mali/platform/rk/rk.c new file mode 100755 -index 000000000000..2b412b5ec569 +index 000000000..2b412b5ec --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/platform/rk/rk.c @@ -0,0 +1,721 @@ @@ -353159,7 +353188,7 @@ index 000000000000..2b412b5ec569 +} diff --git a/drivers/gpu/arm/mali400/mali/platform/rk/rk_ext.h b/drivers/gpu/arm/mali400/mali/platform/rk/rk_ext.h new file mode 100755 -index 000000000000..bd939350c425 +index 000000000..bd939350c --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/platform/rk/rk_ext.h @@ -0,0 +1,37 @@ @@ -353202,7 +353231,7 @@ index 000000000000..bd939350c425 + diff --git a/drivers/gpu/arm/mali400/mali/readme.txt b/drivers/gpu/arm/mali400/mali/readme.txt new file mode 100755 -index 000000000000..6785ac933b38 +index 000000000..6785ac933 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/readme.txt @@ -0,0 +1,28 @@ @@ -353236,7 +353265,7 @@ index 000000000000..6785ac933b38 +resources. diff --git a/drivers/gpu/arm/mali400/mali/regs/mali_200_regs.h b/drivers/gpu/arm/mali400/mali/regs/mali_200_regs.h new file mode 100755 -index 000000000000..0345fb169a95 +index 000000000..0345fb169 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/regs/mali_200_regs.h @@ -0,0 +1,131 @@ @@ -353373,7 +353402,7 @@ index 000000000000..0345fb169a95 +#endif /* _MALI200_REGS_H_ */ diff --git a/drivers/gpu/arm/mali400/mali/regs/mali_gp_regs.h b/drivers/gpu/arm/mali400/mali/regs/mali_gp_regs.h new file mode 100755 -index 000000000000..7f8b58fd6c49 +index 000000000..7f8b58fd6 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/regs/mali_gp_regs.h @@ -0,0 +1,172 @@ @@ -353551,7 +353580,7 @@ index 000000000000..7f8b58fd6c49 +#endif diff --git a/drivers/gpu/arm/mali400/mali/timestamp-arm11-cc/mali_timestamp.c b/drivers/gpu/arm/mali400/mali/timestamp-arm11-cc/mali_timestamp.c new file mode 100755 -index 000000000000..7df934c12122 +index 000000000..7df934c12 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/timestamp-arm11-cc/mali_timestamp.c @@ -0,0 +1,13 @@ @@ -353570,7 +353599,7 @@ index 000000000000..7df934c12122 +/* This file is intentionally left empty, as all functions are inlined in mali_profiling_sampler.h */ diff --git a/drivers/gpu/arm/mali400/mali/timestamp-arm11-cc/mali_timestamp.h b/drivers/gpu/arm/mali400/mali/timestamp-arm11-cc/mali_timestamp.h new file mode 100755 -index 000000000000..f52097c1901b +index 000000000..f52097c19 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/timestamp-arm11-cc/mali_timestamp.h @@ -0,0 +1,48 @@ @@ -353624,7 +353653,7 @@ index 000000000000..f52097c1901b +#endif /* __MALI_TIMESTAMP_H__ */ diff --git a/drivers/gpu/arm/mali400/mali/timestamp-default/mali_timestamp.c b/drivers/gpu/arm/mali400/mali/timestamp-default/mali_timestamp.c new file mode 100755 -index 000000000000..7df934c12122 +index 000000000..7df934c12 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/timestamp-default/mali_timestamp.c @@ -0,0 +1,13 @@ @@ -353643,7 +353672,7 @@ index 000000000000..7df934c12122 +/* This file is intentionally left empty, as all functions are inlined in mali_profiling_sampler.h */ diff --git a/drivers/gpu/arm/mali400/mali/timestamp-default/mali_timestamp.h b/drivers/gpu/arm/mali400/mali/timestamp-default/mali_timestamp.h new file mode 100755 -index 000000000000..709a16a82f31 +index 000000000..709a16a82 --- /dev/null +++ b/drivers/gpu/arm/mali400/mali/timestamp-default/mali_timestamp.h @@ -0,0 +1,26 @@ @@ -353675,7 +353704,7 @@ index 000000000000..709a16a82f31 +#endif /* __MALI_TIMESTAMP_H__ */ diff --git a/drivers/gpu/arm/mali400/rk_ver_info.txt b/drivers/gpu/arm/mali400/rk_ver_info.txt new file mode 100755 -index 000000000000..2a6cbbbb5a97 +index 000000000..2a6cbbbb5 --- /dev/null +++ b/drivers/gpu/arm/mali400/rk_ver_info.txt @@ -0,0 +1,11 @@ @@ -353692,7 +353721,7 @@ index 000000000000..2a6cbbbb5a97 + diff --git a/drivers/gpu/arm/mali400/ump/Kbuild b/drivers/gpu/arm/mali400/ump/Kbuild new file mode 100755 -index 000000000000..a3067ba72459 +index 000000000..a3067ba72 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/Kbuild @@ -0,0 +1,92 @@ @@ -353790,7 +353819,7 @@ index 000000000000..a3067ba72459 + diff --git a/drivers/gpu/arm/mali400/ump/Kconfig b/drivers/gpu/arm/mali400/ump/Kconfig new file mode 100755 -index 000000000000..ec3509057732 +index 000000000..ec3509057 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/Kconfig @@ -0,0 +1,17 @@ @@ -353813,7 +353842,7 @@ index 000000000000..ec3509057732 + diff --git a/drivers/gpu/arm/mali400/ump/Makefile b/drivers/gpu/arm/mali400/ump/Makefile new file mode 100755 -index 000000000000..88b02a22fce5 +index 000000000..88b02a22f --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/Makefile @@ -0,0 +1,67 @@ @@ -353886,7 +353915,7 @@ index 000000000000..88b02a22fce5 + $(MAKE) -C $(KDIR) M=$(CURDIR)/../mali clean diff --git a/drivers/gpu/arm/mali400/ump/Makefile.common b/drivers/gpu/arm/mali400/ump/Makefile.common new file mode 100755 -index 000000000000..ad2c18da98a0 +index 000000000..ad2c18da9 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/Makefile.common @@ -0,0 +1,20 @@ @@ -353912,7 +353941,7 @@ index 000000000000..ad2c18da98a0 +EXTRA_CFLAGS += -DSVN_REV_STRING=\"$(SVN_REV)\" diff --git a/drivers/gpu/arm/mali400/ump/arch-default/config.h b/drivers/gpu/arm/mali400/ump/arch-default/config.h new file mode 100755 -index 000000000000..d4aef9dd09c7 +index 000000000..d4aef9dd0 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/arch-default/config.h @@ -0,0 +1,24 @@ @@ -353942,7 +353971,7 @@ index 000000000000..d4aef9dd09c7 +#endif /* __ARCH_CONFIG_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/arch-pb-virtex5/config.h b/drivers/gpu/arm/mali400/ump/arch-pb-virtex5/config.h new file mode 100755 -index 000000000000..182e90c1d64f +index 000000000..182e90c1d --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/arch-pb-virtex5/config.h @@ -0,0 +1,18 @@ @@ -353966,7 +353995,7 @@ index 000000000000..182e90c1d64f +#endif /* __ARCH_CONFIG_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/arch/config.h b/drivers/gpu/arm/mali400/ump/arch/config.h new file mode 100755 -index 000000000000..d4aef9dd09c7 +index 000000000..d4aef9dd0 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/arch/config.h @@ -0,0 +1,24 @@ @@ -353996,7 +354025,7 @@ index 000000000000..d4aef9dd09c7 +#endif /* __ARCH_CONFIG_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_api.c b/drivers/gpu/arm/mali400/ump/common/ump_kernel_api.c new file mode 100755 -index 000000000000..36adb2f5383e +index 000000000..36adb2f53 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_api.c @@ -0,0 +1,455 @@ @@ -354457,7 +354486,7 @@ index 000000000000..36adb2f5383e +} diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_common.c b/drivers/gpu/arm/mali400/ump/common/ump_kernel_common.c new file mode 100755 -index 000000000000..73aa9e4c49f9 +index 000000000..73aa9e4c4 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_common.c @@ -0,0 +1,358 @@ @@ -354821,7 +354850,7 @@ index 000000000000..73aa9e4c49f9 +} diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_common.h b/drivers/gpu/arm/mali400/ump/common/ump_kernel_common.h new file mode 100755 -index 000000000000..aa65f1cb6c88 +index 000000000..aa65f1cb6 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_common.h @@ -0,0 +1,125 @@ @@ -354952,7 +354981,7 @@ index 000000000000..aa65f1cb6c88 +#endif /* __UMP_KERNEL_COMMON_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_descriptor_mapping.c b/drivers/gpu/arm/mali400/ump/common/ump_kernel_descriptor_mapping.c new file mode 100755 -index 000000000000..e4642f0394c2 +index 000000000..e4642f039 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_descriptor_mapping.c @@ -0,0 +1,155 @@ @@ -355113,7 +355142,7 @@ index 000000000000..e4642f0394c2 + diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_descriptor_mapping.h b/drivers/gpu/arm/mali400/ump/common/ump_kernel_descriptor_mapping.h new file mode 100755 -index 000000000000..a888ba833fbb +index 000000000..a888ba833 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_descriptor_mapping.h @@ -0,0 +1,89 @@ @@ -355208,7 +355237,7 @@ index 000000000000..a888ba833fbb +#endif /* __UMP_KERNEL_DESCRIPTOR_MAPPING_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_memory_backend.h b/drivers/gpu/arm/mali400/ump/common/ump_kernel_memory_backend.h new file mode 100755 -index 000000000000..2b69f68e87ac +index 000000000..2b69f68e8 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_memory_backend.h @@ -0,0 +1,48 @@ @@ -355262,7 +355291,7 @@ index 000000000000..2b69f68e87ac + diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_ref_drv.c b/drivers/gpu/arm/mali400/ump/common/ump_kernel_ref_drv.c new file mode 100755 -index 000000000000..0b6434bee00f +index 000000000..0b6434bee --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_ref_drv.c @@ -0,0 +1,181 @@ @@ -355449,7 +355478,7 @@ index 000000000000..0b6434bee00f +} diff --git a/drivers/gpu/arm/mali400/ump/common/ump_kernel_types.h b/drivers/gpu/arm/mali400/ump/common/ump_kernel_types.h new file mode 100755 -index 000000000000..32f32ccbe9fc +index 000000000..32f32ccbe --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_kernel_types.h @@ -0,0 +1,58 @@ @@ -355513,7 +355542,7 @@ index 000000000000..32f32ccbe9fc +#endif /* __UMP_KERNEL_TYPES_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/common/ump_osk.h b/drivers/gpu/arm/mali400/ump/common/ump_osk.h new file mode 100755 -index 000000000000..9adc4d3df3f5 +index 000000000..9adc4d3df --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_osk.h @@ -0,0 +1,48 @@ @@ -355567,7 +355596,7 @@ index 000000000000..9adc4d3df3f5 +#endif diff --git a/drivers/gpu/arm/mali400/ump/common/ump_uk_types.h b/drivers/gpu/arm/mali400/ump/common/ump_uk_types.h new file mode 100755 -index 000000000000..db842cdcbeff +index 000000000..db842cdcb --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_uk_types.h @@ -0,0 +1,202 @@ @@ -355775,7 +355804,7 @@ index 000000000000..db842cdcbeff +#endif /* __UMP_UK_TYPES_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/common/ump_ukk.h b/drivers/gpu/arm/mali400/ump/common/ump_ukk.h new file mode 100755 -index 000000000000..f2906768c37f +index 000000000..f2906768c --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/common/ump_ukk.h @@ -0,0 +1,60 @@ @@ -355841,7 +355870,7 @@ index 000000000000..f2906768c37f +#endif /* __UMP_UKK_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/linux/license/gpl/ump_kernel_license.h b/drivers/gpu/arm/mali400/ump/linux/license/gpl/ump_kernel_license.h new file mode 100755 -index 000000000000..d0174055aa28 +index 000000000..d0174055a --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/license/gpl/ump_kernel_license.h @@ -0,0 +1,30 @@ @@ -355877,7 +355906,7 @@ index 000000000000..d0174055aa28 +#endif /* __UMP_KERNEL_LICENSE_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_ioctl.h b/drivers/gpu/arm/mali400/ump/linux/ump_ioctl.h new file mode 100755 -index 000000000000..bfb4e8d64885 +index 000000000..bfb4e8d64 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_ioctl.h @@ -0,0 +1,54 @@ @@ -355937,7 +355966,7 @@ index 000000000000..bfb4e8d64885 +#endif /* __UMP_IOCTL_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_linux.c b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_linux.c new file mode 100755 -index 000000000000..71b30830c308 +index 000000000..71b30830c --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_linux.c @@ -0,0 +1,449 @@ @@ -356392,7 +356421,7 @@ index 000000000000..71b30830c308 +MODULE_VERSION(SVN_REV_STRING); diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_linux.h b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_linux.h new file mode 100755 -index 000000000000..8d32ddbb5449 +index 000000000..8d32ddbb5 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_linux.h @@ -0,0 +1,18 @@ @@ -356416,7 +356445,7 @@ index 000000000000..8d32ddbb5449 +#endif /* __UMP_KERNEL_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_dedicated.c b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_dedicated.c new file mode 100755 -index 000000000000..5a1257a25b82 +index 000000000..5a1257a25 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_dedicated.c @@ -0,0 +1,271 @@ @@ -356693,7 +356722,7 @@ index 000000000000..5a1257a25b82 +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_dedicated.h b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_dedicated.h new file mode 100755 -index 000000000000..949fd245c6af +index 000000000..949fd245c --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_dedicated.h @@ -0,0 +1,23 @@ @@ -356722,7 +356751,7 @@ index 000000000000..949fd245c6af + diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_os.c b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_os.c new file mode 100755 -index 000000000000..7cd8d5d381cf +index 000000000..7cd8d5d38 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_os.c @@ -0,0 +1,235 @@ @@ -356963,7 +356992,7 @@ index 000000000000..7cd8d5d381cf +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_os.h b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_os.h new file mode 100755 -index 000000000000..d21d503512ec +index 000000000..d21d50351 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_memory_backend_os.h @@ -0,0 +1,23 @@ @@ -356992,7 +357021,7 @@ index 000000000000..d21d503512ec + diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_random_mapping.c b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_random_mapping.c new file mode 100755 -index 000000000000..6be0f86440de +index 000000000..6be0f8644 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_random_mapping.c @@ -0,0 +1,222 @@ @@ -357220,7 +357249,7 @@ index 000000000000..6be0f86440de +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_kernel_random_mapping.h b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_random_mapping.h new file mode 100755 -index 000000000000..2cea6cedc380 +index 000000000..2cea6cedc --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_kernel_random_mapping.h @@ -0,0 +1,84 @@ @@ -357310,7 +357339,7 @@ index 000000000000..2cea6cedc380 +#endif /* __UMP_KERNEL_RANDOM_MAPPING_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_memory_backend.c b/drivers/gpu/arm/mali400/ump/linux/ump_memory_backend.c new file mode 100755 -index 000000000000..e41931e1ea75 +index 000000000..e41931e1e --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_memory_backend.c @@ -0,0 +1,65 @@ @@ -357381,7 +357410,7 @@ index 000000000000..e41931e1ea75 +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_osk_atomics.c b/drivers/gpu/arm/mali400/ump/linux/ump_osk_atomics.c new file mode 100755 -index 000000000000..2b634ba79c6e +index 000000000..2b634ba79 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_osk_atomics.c @@ -0,0 +1,27 @@ @@ -357414,7 +357443,7 @@ index 000000000000..2b634ba79c6e +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_osk_low_level_mem.c b/drivers/gpu/arm/mali400/ump/linux/ump_osk_low_level_mem.c new file mode 100755 -index 000000000000..e08bf25257b0 +index 000000000..e08bf2525 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_osk_low_level_mem.c @@ -0,0 +1,314 @@ @@ -357734,7 +357763,7 @@ index 000000000000..e08bf25257b0 +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_osk_misc.c b/drivers/gpu/arm/mali400/ump/linux/ump_osk_misc.c new file mode 100755 -index 000000000000..58c9f1bf27b8 +index 000000000..58c9f1bf2 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_osk_misc.c @@ -0,0 +1,36 @@ @@ -357776,7 +357805,7 @@ index 000000000000..58c9f1bf27b8 +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_ukk_ref_wrappers.c b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_ref_wrappers.c new file mode 100755 -index 000000000000..56a787ff64dc +index 000000000..56a787ff6 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_ref_wrappers.c @@ -0,0 +1,230 @@ @@ -358012,7 +358041,7 @@ index 000000000000..56a787ff64dc +#endif diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_ukk_ref_wrappers.h b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_ref_wrappers.h new file mode 100755 -index 000000000000..61a7095a6920 +index 000000000..61a7095a6 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_ref_wrappers.h @@ -0,0 +1,36 @@ @@ -358054,7 +358083,7 @@ index 000000000000..61a7095a6920 +#endif /* __UMP_UKK_REF_WRAPPERS_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_ukk_wrappers.c b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_wrappers.c new file mode 100755 -index 000000000000..4d6b69608fd4 +index 000000000..4d6b69608 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_wrappers.c @@ -0,0 +1,280 @@ @@ -358340,7 +358369,7 @@ index 000000000000..4d6b69608fd4 +} diff --git a/drivers/gpu/arm/mali400/ump/linux/ump_ukk_wrappers.h b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_wrappers.h new file mode 100755 -index 000000000000..5f8fc683c8f5 +index 000000000..5f8fc683c --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/linux/ump_ukk_wrappers.h @@ -0,0 +1,46 @@ @@ -358392,7 +358421,7 @@ index 000000000000..5f8fc683c8f5 +#endif /* __UMP_UKK_WRAPPERS_H__ */ diff --git a/drivers/gpu/arm/mali400/ump/readme.txt b/drivers/gpu/arm/mali400/ump/readme.txt new file mode 100755 -index 000000000000..c238cf0f2b1f +index 000000000..c238cf0f2 --- /dev/null +++ b/drivers/gpu/arm/mali400/ump/readme.txt @@ -0,0 +1,28 @@ @@ -358426,7 +358455,7 @@ index 000000000000..c238cf0f2b1f +kernel itself. diff --git a/drivers/gpu/arm/mali400/umplock/Makefile b/drivers/gpu/arm/mali400/umplock/Makefile new file mode 100755 -index 000000000000..e5549a33f91d +index 000000000..e5549a33f --- /dev/null +++ b/drivers/gpu/arm/mali400/umplock/Makefile @@ -0,0 +1,69 @@ @@ -358501,7 +358530,7 @@ index 000000000000..e5549a33f91d +endif diff --git a/drivers/gpu/arm/mali400/umplock/umplock_driver.c b/drivers/gpu/arm/mali400/umplock/umplock_driver.c new file mode 100755 -index 000000000000..173f4d9bb5c7 +index 000000000..173f4d9bb --- /dev/null +++ b/drivers/gpu/arm/mali400/umplock/umplock_driver.c @@ -0,0 +1,618 @@ @@ -359125,7 +359154,7 @@ index 000000000000..173f4d9bb5c7 +MODULE_DESCRIPTION("ARM UMP locker"); diff --git a/drivers/gpu/arm/mali400/umplock/umplock_ioctl.h b/drivers/gpu/arm/mali400/umplock/umplock_ioctl.h new file mode 100755 -index 000000000000..8afdaad7000f +index 000000000..8afdaad70 --- /dev/null +++ b/drivers/gpu/arm/mali400/umplock/umplock_ioctl.h @@ -0,0 +1,66 @@ @@ -359197,7 +359226,7 @@ index 000000000000..8afdaad7000f + diff --git a/drivers/gpu/arm/midgard/Kbuild b/drivers/gpu/arm/midgard/Kbuild new file mode 100755 -index 000000000000..b2c2bbcda668 +index 000000000..b2c2bbcda --- /dev/null +++ b/drivers/gpu/arm/midgard/Kbuild @@ -0,0 +1,221 @@ @@ -359424,7 +359453,7 @@ index 000000000000..b2c2bbcda668 +obj-$(CONFIG_MALI_KUTF) += tests/ diff --git a/drivers/gpu/arm/midgard/Kconfig b/drivers/gpu/arm/midgard/Kconfig new file mode 100755 -index 000000000000..043bfc0021cc +index 000000000..043bfc002 --- /dev/null +++ b/drivers/gpu/arm/midgard/Kconfig @@ -0,0 +1,249 @@ @@ -359679,7 +359708,7 @@ index 000000000000..043bfc0021cc +source "drivers/gpu/arm/midgard/tests/Kconfig" diff --git a/drivers/gpu/arm/midgard/Makefile b/drivers/gpu/arm/midgard/Makefile new file mode 100755 -index 000000000000..9aa242c4f8c4 +index 000000000..9aa242c4f --- /dev/null +++ b/drivers/gpu/arm/midgard/Makefile @@ -0,0 +1,42 @@ @@ -359727,7 +359756,7 @@ index 000000000000..9aa242c4f8c4 + $(MAKE) -C $(KDIR) M=$(CURDIR) clean diff --git a/drivers/gpu/arm/midgard/Makefile.kbase b/drivers/gpu/arm/midgard/Makefile.kbase new file mode 100755 -index 000000000000..2bef9c25eaeb +index 000000000..2bef9c25e --- /dev/null +++ b/drivers/gpu/arm/midgard/Makefile.kbase @@ -0,0 +1,17 @@ @@ -359750,7 +359779,7 @@ index 000000000000..2bef9c25eaeb + diff --git a/drivers/gpu/arm/midgard/backend/gpu/Kbuild b/drivers/gpu/arm/midgard/backend/gpu/Kbuild new file mode 100755 -index 000000000000..5f700e9b6b44 +index 000000000..5f700e9b6 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/Kbuild @@ -0,0 +1,60 @@ @@ -359816,7 +359845,7 @@ index 000000000000..5f700e9b6b44 +endif diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_backend_config.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_backend_config.h new file mode 100755 -index 000000000000..c8ae87eb84a2 +index 000000000..c8ae87eb8 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_backend_config.h @@ -0,0 +1,29 @@ @@ -359851,7 +359880,7 @@ index 000000000000..c8ae87eb84a2 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_cache_policy_backend.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_cache_policy_backend.c new file mode 100755 -index 000000000000..fef9a2cb743e +index 000000000..fef9a2cb7 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_cache_policy_backend.c @@ -0,0 +1,29 @@ @@ -359886,7 +359915,7 @@ index 000000000000..fef9a2cb743e + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_cache_policy_backend.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_cache_policy_backend.h new file mode 100755 -index 000000000000..fe9869109a82 +index 000000000..fe9869109 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_cache_policy_backend.h @@ -0,0 +1,34 @@ @@ -359926,7 +359955,7 @@ index 000000000000..fe9869109a82 +#endif /* _KBASE_CACHE_POLICY_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_debug_job_fault_backend.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_debug_job_fault_backend.c new file mode 100755 -index 000000000000..7851ea6466c7 +index 000000000..7851ea646 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_debug_job_fault_backend.c @@ -0,0 +1,157 @@ @@ -360089,7 +360118,7 @@ index 000000000000..7851ea6466c7 +#endif diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c new file mode 100755 -index 000000000000..4e8e56e9baf2 +index 000000000..4e8e56e9b --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c @@ -0,0 +1,474 @@ @@ -360569,7 +360598,7 @@ index 000000000000..4e8e56e9baf2 +} diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.h new file mode 100755 -index 000000000000..c0bf8b15b3bc +index 000000000..c0bf8b15b --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.h @@ -0,0 +1,24 @@ @@ -360599,7 +360628,7 @@ index 000000000000..c0bf8b15b3bc +#endif /* _BASE_DEVFREQ_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_device_hw.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_device_hw.c new file mode 100755 -index 000000000000..dcdf15cdc3e8 +index 000000000..dcdf15cdc --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_device_hw.c @@ -0,0 +1,255 @@ @@ -360860,7 +360889,7 @@ index 000000000000..dcdf15cdc3e8 +} diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_device_internal.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_device_internal.h new file mode 100755 -index 000000000000..5b20445932fb +index 000000000..5b2044593 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_device_internal.h @@ -0,0 +1,67 @@ @@ -360933,7 +360962,7 @@ index 000000000000..5b20445932fb +#endif /* _KBASE_DEVICE_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_gpu.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_gpu.c new file mode 100755 -index 000000000000..d578fd78e825 +index 000000000..d578fd78e --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_gpu.c @@ -0,0 +1,123 @@ @@ -361062,7 +361091,7 @@ index 000000000000..d578fd78e825 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_gpuprops_backend.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_gpuprops_backend.c new file mode 100755 -index 000000000000..b395325b556b +index 000000000..b395325b5 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_gpuprops_backend.c @@ -0,0 +1,110 @@ @@ -361178,7 +361207,7 @@ index 000000000000..b395325b556b + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_backend.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_backend.c new file mode 100755 -index 000000000000..7ad309e8d7f4 +index 000000000..7ad309e8d --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_backend.c @@ -0,0 +1,492 @@ @@ -361676,7 +361705,7 @@ index 000000000000..7ad309e8d7f4 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_defs.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_defs.h new file mode 100755 -index 000000000000..4794672da8f0 +index 000000000..4794672da --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_defs.h @@ -0,0 +1,58 @@ @@ -361740,7 +361769,7 @@ index 000000000000..4794672da8f0 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_internal.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_internal.h new file mode 100755 -index 000000000000..e96aeae786e1 +index 000000000..e96aeae78 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_instr_internal.h @@ -0,0 +1,45 @@ @@ -361791,7 +361820,7 @@ index 000000000000..e96aeae786e1 +#endif /* _KBASE_INSTR_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_irq_internal.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_irq_internal.h new file mode 100755 -index 000000000000..8781561e73d0 +index 000000000..8781561e7 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_irq_internal.h @@ -0,0 +1,39 @@ @@ -361836,7 +361865,7 @@ index 000000000000..8781561e73d0 +#endif /* _KBASE_IRQ_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_irq_linux.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_irq_linux.c new file mode 100755 -index 000000000000..8416b80e8b77 +index 000000000..8416b80e8 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_irq_linux.c @@ -0,0 +1,469 @@ @@ -362311,7 +362340,7 @@ index 000000000000..8416b80e8b77 +#endif /* !defined(CONFIG_MALI_NO_MALI) */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_as.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_as.c new file mode 100755 -index 000000000000..92358f2bf298 +index 000000000..92358f2bf --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_as.c @@ -0,0 +1,237 @@ @@ -362554,7 +362583,7 @@ index 000000000000..92358f2bf298 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_defs.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_defs.h new file mode 100755 -index 000000000000..08a7400e66d5 +index 000000000..08a7400e6 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_defs.h @@ -0,0 +1,123 @@ @@ -362683,7 +362712,7 @@ index 000000000000..08a7400e66d5 +#endif /* _KBASE_HWACCESS_GPU_DEFS_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_hw.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_hw.c new file mode 100755 -index 000000000000..a6fb097b94f9 +index 000000000..a6fb097b9 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_hw.c @@ -0,0 +1,1518 @@ @@ -364207,7 +364236,7 @@ index 000000000000..a6fb097b94f9 +#endif /* KBASE_GPU_RESET_EN */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_internal.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_internal.h new file mode 100755 -index 000000000000..1f382b3c1af4 +index 000000000..1f382b3c1 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_internal.h @@ -0,0 +1,164 @@ @@ -364377,7 +364406,7 @@ index 000000000000..1f382b3c1af4 +#endif /* _KBASE_JM_HWACCESS_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_rb.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_rb.c new file mode 100755 -index 000000000000..4b4541660ec4 +index 000000000..4b4541660 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_rb.c @@ -0,0 +1,1952 @@ @@ -366335,7 +366364,7 @@ index 000000000000..4b4541660ec4 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_rb.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_rb.h new file mode 100755 -index 000000000000..1e0e05ad3ea4 +index 000000000..1e0e05ad3 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_jm_rb.h @@ -0,0 +1,76 @@ @@ -366417,7 +366446,7 @@ index 000000000000..1e0e05ad3ea4 +#endif /* _KBASE_HWACCESS_GPU_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_affinity.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_affinity.c new file mode 100755 -index 000000000000..54d8ddd80097 +index 000000000..54d8ddd80 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_affinity.c @@ -0,0 +1,303 @@ @@ -366726,7 +366755,7 @@ index 000000000000..54d8ddd80097 +#endif /* KBASE_TRACE_ENABLE */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_affinity.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_affinity.h new file mode 100755 -index 000000000000..35d9781ae092 +index 000000000..35d9781ae --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_affinity.h @@ -0,0 +1,129 @@ @@ -366861,7 +366890,7 @@ index 000000000000..35d9781ae092 +#endif /* _KBASE_JS_AFFINITY_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_backend.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_backend.c new file mode 100755 -index 000000000000..a8c1af23a369 +index 000000000..a8c1af23a --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_backend.c @@ -0,0 +1,356 @@ @@ -367223,7 +367252,7 @@ index 000000000000..a8c1af23a369 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_internal.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_internal.h new file mode 100755 -index 000000000000..3f53779c6747 +index 000000000..3f53779c6 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_js_internal.h @@ -0,0 +1,69 @@ @@ -367298,7 +367327,7 @@ index 000000000000..3f53779c6747 +#endif /* _KBASE_JS_BACKEND_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_mmu_hw_direct.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_mmu_hw_direct.c new file mode 100755 -index 000000000000..ba826184dd3f +index 000000000..ba826184d --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_mmu_hw_direct.c @@ -0,0 +1,407 @@ @@ -367711,7 +367740,7 @@ index 000000000000..ba826184dd3f +} diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_mmu_hw_direct.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_mmu_hw_direct.h new file mode 100755 -index 000000000000..c02253c6acc3 +index 000000000..c02253c6a --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_mmu_hw_direct.h @@ -0,0 +1,42 @@ @@ -367759,7 +367788,7 @@ index 000000000000..c02253c6acc3 +#endif /* _MALI_KBASE_MMU_HW_DIRECT_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_always_on.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_always_on.c new file mode 100755 -index 000000000000..0614348e935a +index 000000000..0614348e9 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_always_on.c @@ -0,0 +1,63 @@ @@ -367828,7 +367857,7 @@ index 000000000000..0614348e935a +KBASE_EXPORT_TEST_API(kbase_pm_always_on_policy_ops); diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_always_on.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_always_on.h new file mode 100755 -index 000000000000..f9d244b01bc2 +index 000000000..f9d244b01 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_always_on.h @@ -0,0 +1,77 @@ @@ -367911,7 +367940,7 @@ index 000000000000..f9d244b01bc2 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_backend.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_backend.c new file mode 100755 -index 000000000000..146fd48bab92 +index 000000000..146fd48ba --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_backend.c @@ -0,0 +1,482 @@ @@ -368399,7 +368428,7 @@ index 000000000000..146fd48bab92 +} diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca.c new file mode 100755 -index 000000000000..85890f1e85f5 +index 000000000..85890f1e8 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca.c @@ -0,0 +1,182 @@ @@ -368587,7 +368616,7 @@ index 000000000000..85890f1e85f5 +} diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca.h new file mode 100755 -index 000000000000..ee9e751f2d79 +index 000000000..ee9e751f2 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca.h @@ -0,0 +1,92 @@ @@ -368685,7 +368714,7 @@ index 000000000000..ee9e751f2d79 +#endif /* _KBASE_PM_CA_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_devfreq.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_devfreq.c new file mode 100755 -index 000000000000..66bf660cffb6 +index 000000000..66bf660cf --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_devfreq.c @@ -0,0 +1,129 @@ @@ -368820,7 +368849,7 @@ index 000000000000..66bf660cffb6 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_devfreq.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_devfreq.h new file mode 100755 -index 000000000000..7ab3cd4d8460 +index 000000000..7ab3cd4d8 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_devfreq.h @@ -0,0 +1,55 @@ @@ -368881,7 +368910,7 @@ index 000000000000..7ab3cd4d8460 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_fixed.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_fixed.c new file mode 100755 -index 000000000000..864612d31f9b +index 000000000..864612d31 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_fixed.c @@ -0,0 +1,65 @@ @@ -368952,7 +368981,7 @@ index 000000000000..864612d31f9b +KBASE_EXPORT_TEST_API(kbase_pm_ca_fixed_policy_ops); diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_fixed.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_fixed.h new file mode 100755 -index 000000000000..a763155cb703 +index 000000000..a763155cb --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_ca_fixed.h @@ -0,0 +1,40 @@ @@ -368998,7 +369027,7 @@ index 000000000000..a763155cb703 + diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_coarse_demand.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_coarse_demand.c new file mode 100755 -index 000000000000..f891fa225a89 +index 000000000..f891fa225 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_coarse_demand.c @@ -0,0 +1,70 @@ @@ -369074,7 +369103,7 @@ index 000000000000..f891fa225a89 +KBASE_EXPORT_TEST_API(kbase_pm_coarse_demand_policy_ops); diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_coarse_demand.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_coarse_demand.h new file mode 100755 -index 000000000000..749d305eee9a +index 000000000..749d305ee --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_coarse_demand.h @@ -0,0 +1,64 @@ @@ -369144,7 +369173,7 @@ index 000000000000..749d305eee9a +#endif /* MALI_KBASE_PM_COARSE_DEMAND_H */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_defs.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_defs.h new file mode 100755 -index 000000000000..352744ee6d73 +index 000000000..352744ee6 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_defs.h @@ -0,0 +1,519 @@ @@ -369669,7 +369698,7 @@ index 000000000000..352744ee6d73 +#endif /* _KBASE_PM_HWACCESS_DEFS_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_demand.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_demand.c new file mode 100755 -index 000000000000..81322fd0dd17 +index 000000000..81322fd0d --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_demand.c @@ -0,0 +1,73 @@ @@ -369748,7 +369777,7 @@ index 000000000000..81322fd0dd17 +KBASE_EXPORT_TEST_API(kbase_pm_demand_policy_ops); diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_demand.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_demand.h new file mode 100755 -index 000000000000..c0c84b6e9189 +index 000000000..c0c84b6e9 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_demand.h @@ -0,0 +1,64 @@ @@ -369818,7 +369847,7 @@ index 000000000000..c0c84b6e9189 +#endif /* MALI_KBASE_PM_DEMAND_H */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_driver.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_driver.c new file mode 100755 -index 000000000000..82727937c545 +index 000000000..82727937c --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_driver.c @@ -0,0 +1,1713 @@ @@ -371537,7 +371566,7 @@ index 000000000000..82727937c545 +KBASE_EXPORT_TEST_API(kbase_pm_release_gpu_cycle_counter); diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_internal.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_internal.h new file mode 100755 -index 000000000000..6804f45ac27b +index 000000000..6804f45ac --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_internal.h @@ -0,0 +1,548 @@ @@ -372091,7 +372120,7 @@ index 000000000000..6804f45ac27b +#endif /* _KBASE_BACKEND_PM_INTERNAL_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_metrics.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_metrics.c new file mode 100755 -index 000000000000..024248ca7123 +index 000000000..024248ca7 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_metrics.c @@ -0,0 +1,401 @@ @@ -372498,7 +372527,7 @@ index 000000000000..024248ca7123 +} diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_policy.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_policy.c new file mode 100755 -index 000000000000..075f020c66e6 +index 000000000..075f020c6 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_policy.c @@ -0,0 +1,973 @@ @@ -373477,7 +373506,7 @@ index 000000000000..075f020c66e6 +KBASE_EXPORT_TEST_API(kbase_pm_release_l2_caches); diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_policy.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_policy.h new file mode 100755 -index 000000000000..611a90e66e65 +index 000000000..611a90e66 --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_policy.h @@ -0,0 +1,227 @@ @@ -373710,7 +373739,7 @@ index 000000000000..611a90e66e65 +#endif /* _KBASE_PM_POLICY_H_ */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_time.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_time.c new file mode 100755 -index 000000000000..d08c628dd433 +index 000000000..d08c628dd --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_time.c @@ -0,0 +1,103 @@ @@ -373819,7 +373848,7 @@ index 000000000000..d08c628dd433 +#endif /* CONFIG_MALI_NO_MALI */ diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_time.h b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_time.h new file mode 100755 -index 000000000000..433aa4b9cb5e +index 000000000..433aa4b9c --- /dev/null +++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_time.h @@ -0,0 +1,52 @@ @@ -373877,7 +373906,7 @@ index 000000000000..433aa4b9cb5e +#endif /* _KBASE_BACKEND_TIME_H_ */ diff --git a/drivers/gpu/arm/midgard/docs/Doxyfile b/drivers/gpu/arm/midgard/docs/Doxyfile new file mode 100755 -index 000000000000..35ff2f1ce4a0 +index 000000000..35ff2f1ce --- /dev/null +++ b/drivers/gpu/arm/midgard/docs/Doxyfile @@ -0,0 +1,126 @@ @@ -374009,7 +374038,7 @@ index 000000000000..35ff2f1ce4a0 + diff --git a/drivers/gpu/arm/midgard/docs/policy_operation_diagram.dot b/drivers/gpu/arm/midgard/docs/policy_operation_diagram.dot new file mode 100755 -index 000000000000..7ae05c2f8ded +index 000000000..7ae05c2f8 --- /dev/null +++ b/drivers/gpu/arm/midgard/docs/policy_operation_diagram.dot @@ -0,0 +1,112 @@ @@ -374127,7 +374156,7 @@ index 000000000000..7ae05c2f8ded +} diff --git a/drivers/gpu/arm/midgard/docs/policy_overview.dot b/drivers/gpu/arm/midgard/docs/policy_overview.dot new file mode 100755 -index 000000000000..159b993b7d61 +index 000000000..159b993b7 --- /dev/null +++ b/drivers/gpu/arm/midgard/docs/policy_overview.dot @@ -0,0 +1,63 @@ @@ -374196,7 +374225,7 @@ index 000000000000..159b993b7d61 +} diff --git a/drivers/gpu/arm/midgard/ipa/Kbuild b/drivers/gpu/arm/midgard/ipa/Kbuild new file mode 100755 -index 000000000000..602b15f5225c +index 000000000..602b15f52 --- /dev/null +++ b/drivers/gpu/arm/midgard/ipa/Kbuild @@ -0,0 +1,24 @@ @@ -374226,7 +374255,7 @@ index 000000000000..602b15f5225c +endif diff --git a/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.c b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.c new file mode 100755 -index 000000000000..01bdbb4e8eb1 +index 000000000..01bdbb4e8 --- /dev/null +++ b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.c @@ -0,0 +1,585 @@ @@ -374817,7 +374846,7 @@ index 000000000000..01bdbb4e8eb1 +KBASE_EXPORT_TEST_API(kbase_ipa_power_model_ops); diff --git a/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.h b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.h new file mode 100755 -index 000000000000..b2d3db149579 +index 000000000..b2d3db149 --- /dev/null +++ b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.h @@ -0,0 +1,148 @@ @@ -374971,7 +375000,7 @@ index 000000000000..b2d3db149579 +#endif diff --git a/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_debugfs.c b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_debugfs.c new file mode 100755 -index 000000000000..eafc14009ddc +index 000000000..eafc14009 --- /dev/null +++ b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_debugfs.c @@ -0,0 +1,219 @@ @@ -375196,7 +375225,7 @@ index 000000000000..eafc14009ddc +} diff --git a/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_debugfs.h b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_debugfs.h new file mode 100755 -index 000000000000..ec06e2096f94 +index 000000000..ec06e2096 --- /dev/null +++ b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_debugfs.h @@ -0,0 +1,49 @@ @@ -375251,7 +375280,7 @@ index 000000000000..ec06e2096f94 +#endif /* _KBASE_IPA_DEBUGFS_H_ */ diff --git a/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_simple.c b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_simple.c new file mode 100755 -index 000000000000..da0a4d4a0e7e +index 000000000..da0a4d4a0 --- /dev/null +++ b/drivers/gpu/arm/midgard/ipa/mali_kbase_ipa_simple.c @@ -0,0 +1,222 @@ @@ -375479,7 +375508,7 @@ index 000000000000..da0a4d4a0e7e +}; diff --git a/drivers/gpu/arm/midgard/mali_base_hwconfig_features.h b/drivers/gpu/arm/midgard/mali_base_hwconfig_features.h new file mode 100755 -index 000000000000..6be0a334f99f +index 000000000..6be0a334f --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_base_hwconfig_features.h @@ -0,0 +1,311 @@ @@ -375796,7 +375825,7 @@ index 000000000000..6be0a334f99f +#endif /* _BASE_HWCONFIG_FEATURES_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_base_hwconfig_issues.h b/drivers/gpu/arm/midgard/mali_base_hwconfig_issues.h new file mode 100755 -index 000000000000..6d7e5c57e6a4 +index 000000000..6d7e5c57e --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_base_hwconfig_issues.h @@ -0,0 +1,1098 @@ @@ -376900,7 +376929,7 @@ index 000000000000..6d7e5c57e6a4 +#endif /* _BASE_HWCONFIG_ISSUES_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_base_kernel.h b/drivers/gpu/arm/midgard/mali_base_kernel.h new file mode 100755 -index 000000000000..ea5e473caef6 +index 000000000..ea5e473ca --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_base_kernel.h @@ -0,0 +1,1858 @@ @@ -378764,7 +378793,7 @@ index 000000000000..ea5e473caef6 +#endif /* _BASE_KERNEL_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_base_mem_priv.h b/drivers/gpu/arm/midgard/mali_base_mem_priv.h new file mode 100755 -index 000000000000..4a98a72cc37a +index 000000000..4a98a72cc --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_base_mem_priv.h @@ -0,0 +1,52 @@ @@ -378822,7 +378851,7 @@ index 000000000000..4a98a72cc37a +#endif diff --git a/drivers/gpu/arm/midgard/mali_base_vendor_specific_func.h b/drivers/gpu/arm/midgard/mali_base_vendor_specific_func.h new file mode 100755 -index 000000000000..be454a216a39 +index 000000000..be454a216 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_base_vendor_specific_func.h @@ -0,0 +1,24 @@ @@ -378852,7 +378881,7 @@ index 000000000000..be454a216a39 +#endif /*_BASE_VENDOR_SPEC_FUNC_H_*/ diff --git a/drivers/gpu/arm/midgard/mali_kbase.h b/drivers/gpu/arm/midgard/mali_kbase.h new file mode 100755 -index 000000000000..0d9bf23dc685 +index 000000000..0d9bf23dc --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase.h @@ -0,0 +1,612 @@ @@ -379470,7 +379499,7 @@ index 000000000000..0d9bf23dc685 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_10969_workaround.c b/drivers/gpu/arm/midgard/mali_kbase_10969_workaround.c new file mode 100755 -index 000000000000..fde0f8ff8582 +index 000000000..fde0f8ff8 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_10969_workaround.c @@ -0,0 +1,209 @@ @@ -379685,7 +379714,7 @@ index 000000000000..fde0f8ff8582 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_10969_workaround.h b/drivers/gpu/arm/midgard/mali_kbase_10969_workaround.h new file mode 100755 -index 000000000000..099a29861672 +index 000000000..099a29861 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_10969_workaround.h @@ -0,0 +1,23 @@ @@ -379714,7 +379743,7 @@ index 000000000000..099a29861672 +#endif /* _KBASE_10969_WORKAROUND_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_as_fault_debugfs.c b/drivers/gpu/arm/midgard/mali_kbase_as_fault_debugfs.c new file mode 100755 -index 000000000000..f910fe970feb +index 000000000..f910fe970 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_as_fault_debugfs.c @@ -0,0 +1,102 @@ @@ -379822,7 +379851,7 @@ index 000000000000..f910fe970feb +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_as_fault_debugfs.h b/drivers/gpu/arm/midgard/mali_kbase_as_fault_debugfs.h new file mode 100755 -index 000000000000..3ed2248897fc +index 000000000..3ed224889 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_as_fault_debugfs.h @@ -0,0 +1,45 @@ @@ -379873,7 +379902,7 @@ index 000000000000..3ed2248897fc +#endif /*_KBASE_AS_FAULT_DEBUG_FS_H*/ diff --git a/drivers/gpu/arm/midgard/mali_kbase_cache_policy.c b/drivers/gpu/arm/midgard/mali_kbase_cache_policy.c new file mode 100755 -index 000000000000..c67b3e97f1af +index 000000000..c67b3e97f --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_cache_policy.c @@ -0,0 +1,64 @@ @@ -379943,7 +379972,7 @@ index 000000000000..c67b3e97f1af +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_cache_policy.h b/drivers/gpu/arm/midgard/mali_kbase_cache_policy.h new file mode 100755 -index 000000000000..0c18bdb357b0 +index 000000000..0c18bdb35 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_cache_policy.h @@ -0,0 +1,45 @@ @@ -379994,7 +380023,7 @@ index 000000000000..0c18bdb357b0 +#endif /* _KBASE_CACHE_POLICY_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_config.c b/drivers/gpu/arm/midgard/mali_kbase_config.c new file mode 100755 -index 000000000000..fb615ae02ead +index 000000000..fb615ae02 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_config.c @@ -0,0 +1,51 @@ @@ -380051,7 +380080,7 @@ index 000000000000..fb615ae02ead + diff --git a/drivers/gpu/arm/midgard/mali_kbase_config.h b/drivers/gpu/arm/midgard/mali_kbase_config.h new file mode 100755 -index 000000000000..356d52bcd774 +index 000000000..356d52bcd --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_config.h @@ -0,0 +1,345 @@ @@ -380402,7 +380431,7 @@ index 000000000000..356d52bcd774 +#endif /* _KBASE_CONFIG_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_config_defaults.h b/drivers/gpu/arm/midgard/mali_kbase_config_defaults.h new file mode 100755 -index 000000000000..1cf44b3500cf +index 000000000..1cf44b350 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_config_defaults.h @@ -0,0 +1,227 @@ @@ -380635,7 +380664,7 @@ index 000000000000..1cf44b3500cf + diff --git a/drivers/gpu/arm/midgard/mali_kbase_context.c b/drivers/gpu/arm/midgard/mali_kbase_context.c new file mode 100755 -index 000000000000..6338a7e221ed +index 000000000..6338a7e22 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_context.c @@ -0,0 +1,342 @@ @@ -380983,7 +381012,7 @@ index 000000000000..6338a7e221ed +KBASE_EXPORT_SYMBOL(kbase_context_set_create_flags); diff --git a/drivers/gpu/arm/midgard/mali_kbase_context.h b/drivers/gpu/arm/midgard/mali_kbase_context.h new file mode 100755 -index 000000000000..a3f5bb0ce0da +index 000000000..a3f5bb0ce --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_context.h @@ -0,0 +1,90 @@ @@ -381079,7 +381108,7 @@ index 000000000000..a3f5bb0ce0da +#endif /* _KBASE_CONTEXT_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c new file mode 100755 -index 000000000000..da55cb080d00 +index 000000000..da55cb080 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c @@ -0,0 +1,4990 @@ @@ -386075,7 +386104,7 @@ index 000000000000..da55cb080d00 +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_ctx_sched.c b/drivers/gpu/arm/midgard/mali_kbase_ctx_sched.c new file mode 100755 -index 000000000000..ce004841403f +index 000000000..ce0048414 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_ctx_sched.c @@ -0,0 +1,208 @@ @@ -386289,7 +386318,7 @@ index 000000000000..ce004841403f +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_ctx_sched.h b/drivers/gpu/arm/midgard/mali_kbase_ctx_sched.h new file mode 100755 -index 000000000000..47474fecc2a9 +index 000000000..47474fecc --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_ctx_sched.h @@ -0,0 +1,134 @@ @@ -386429,7 +386458,7 @@ index 000000000000..47474fecc2a9 +#endif /* _KBASE_CTX_SCHED_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_debug.c b/drivers/gpu/arm/midgard/mali_kbase_debug.c new file mode 100755 -index 000000000000..fb57ac2e31ad +index 000000000..fb57ac2e3 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_debug.c @@ -0,0 +1,39 @@ @@ -386474,7 +386503,7 @@ index 000000000000..fb57ac2e31ad + diff --git a/drivers/gpu/arm/midgard/mali_kbase_debug.h b/drivers/gpu/arm/midgard/mali_kbase_debug.h new file mode 100755 -index 000000000000..5fff2892bb55 +index 000000000..5fff2892b --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_debug.h @@ -0,0 +1,164 @@ @@ -386644,7 +386673,7 @@ index 000000000000..5fff2892bb55 +#endif /* _KBASE_DEBUG_H */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_debug_job_fault.c b/drivers/gpu/arm/midgard/mali_kbase_debug_job_fault.c new file mode 100755 -index 000000000000..f29430ddf8f9 +index 000000000..f29430ddf --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_debug_job_fault.c @@ -0,0 +1,499 @@ @@ -387149,7 +387178,7 @@ index 000000000000..f29430ddf8f9 +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_debug_job_fault.h b/drivers/gpu/arm/midgard/mali_kbase_debug_job_fault.h new file mode 100755 -index 000000000000..a2bf8983c37c +index 000000000..a2bf8983c --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_debug_job_fault.h @@ -0,0 +1,96 @@ @@ -387251,7 +387280,7 @@ index 000000000000..a2bf8983c37c +#endif /*_KBASE_DEBUG_JOB_FAULT_H*/ diff --git a/drivers/gpu/arm/midgard/mali_kbase_debug_mem_view.c b/drivers/gpu/arm/midgard/mali_kbase_debug_mem_view.c new file mode 100755 -index 000000000000..6f2cbdf571cb +index 000000000..6f2cbdf57 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_debug_mem_view.c @@ -0,0 +1,306 @@ @@ -387563,7 +387592,7 @@ index 000000000000..6f2cbdf571cb +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_debug_mem_view.h b/drivers/gpu/arm/midgard/mali_kbase_debug_mem_view.h new file mode 100755 -index 000000000000..20ab51a776c6 +index 000000000..20ab51a77 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_debug_mem_view.h @@ -0,0 +1,25 @@ @@ -387594,7 +387623,7 @@ index 000000000000..20ab51a776c6 +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_defs.h b/drivers/gpu/arm/midgard/mali_kbase_defs.h new file mode 100755 -index 000000000000..f8a6f33df2da +index 000000000..f8a6f33df --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_defs.h @@ -0,0 +1,1602 @@ @@ -389202,7 +389231,7 @@ index 000000000000..f8a6f33df2da +#endif /* _KBASE_DEFS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_device.c b/drivers/gpu/arm/midgard/mali_kbase_device.c new file mode 100755 -index 000000000000..b0eb67da8644 +index 000000000..b0eb67da8 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_device.c @@ -0,0 +1,674 @@ @@ -389882,7 +389911,7 @@ index 000000000000..b0eb67da8644 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_disjoint_events.c b/drivers/gpu/arm/midgard/mali_kbase_disjoint_events.c new file mode 100755 -index 000000000000..f70bcccf4050 +index 000000000..f70bcccf4 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_disjoint_events.c @@ -0,0 +1,76 @@ @@ -389964,7 +389993,7 @@ index 000000000000..f70bcccf4050 +KBASE_EXPORT_TEST_API(kbase_disjoint_event_get); diff --git a/drivers/gpu/arm/midgard/mali_kbase_dma_fence.c b/drivers/gpu/arm/midgard/mali_kbase_dma_fence.c new file mode 100755 -index 000000000000..9197743c81d4 +index 000000000..9197743c8 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_dma_fence.c @@ -0,0 +1,449 @@ @@ -390419,7 +390448,7 @@ index 000000000000..9197743c81d4 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_dma_fence.h b/drivers/gpu/arm/midgard/mali_kbase_dma_fence.h new file mode 100755 -index 000000000000..c9ab40350422 +index 000000000..c9ab40350 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_dma_fence.h @@ -0,0 +1,131 @@ @@ -390556,7 +390585,7 @@ index 000000000000..c9ab40350422 +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_event.c b/drivers/gpu/arm/midgard/mali_kbase_event.c new file mode 100755 -index 000000000000..188148645f37 +index 000000000..188148645 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_event.c @@ -0,0 +1,259 @@ @@ -390821,7 +390850,7 @@ index 000000000000..188148645f37 +KBASE_EXPORT_TEST_API(kbase_event_cleanup); diff --git a/drivers/gpu/arm/midgard/mali_kbase_fence.c b/drivers/gpu/arm/midgard/mali_kbase_fence.c new file mode 100755 -index 000000000000..3bcfb38c31c2 +index 000000000..3bcfb38c3 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_fence.c @@ -0,0 +1,200 @@ @@ -391027,7 +391056,7 @@ index 000000000000..3bcfb38c31c2 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_fence.h b/drivers/gpu/arm/midgard/mali_kbase_fence.h new file mode 100755 -index 000000000000..639cc2ef4348 +index 000000000..639cc2ef4 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_fence.h @@ -0,0 +1,275 @@ @@ -391308,7 +391337,7 @@ index 000000000000..639cc2ef4348 +#endif /* _KBASE_FENCE_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_fence_defs.h b/drivers/gpu/arm/midgard/mali_kbase_fence_defs.h new file mode 100755 -index 000000000000..fa2c6dfe999e +index 000000000..fa2c6dfe9 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_fence_defs.h @@ -0,0 +1,51 @@ @@ -391365,7 +391394,7 @@ index 000000000000..fa2c6dfe999e +#endif /* _KBASE_FENCE_DEFS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gator.h b/drivers/gpu/arm/midgard/mali_kbase_gator.h new file mode 100755 -index 000000000000..ce65b5562a2b +index 000000000..ce65b5562 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gator.h @@ -0,0 +1,45 @@ @@ -391416,7 +391445,7 @@ index 000000000000..ce65b5562a2b +#endif /* _KBASE_GATOR_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gator_api.c b/drivers/gpu/arm/midgard/mali_kbase_gator_api.c new file mode 100755 -index 000000000000..860e10159fb3 +index 000000000..860e10159 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gator_api.c @@ -0,0 +1,334 @@ @@ -391756,7 +391785,7 @@ index 000000000000..860e10159fb3 +KBASE_EXPORT_SYMBOL(kbase_gator_instr_hwcnt_dump_irq); diff --git a/drivers/gpu/arm/midgard/mali_kbase_gator_api.h b/drivers/gpu/arm/midgard/mali_kbase_gator_api.h new file mode 100755 -index 000000000000..ef9ac0f7b633 +index 000000000..ef9ac0f7b --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gator_api.h @@ -0,0 +1,219 @@ @@ -391981,7 +392010,7 @@ index 000000000000..ef9ac0f7b633 +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names.h b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names.h new file mode 100755 -index 000000000000..cad19b66200d +index 000000000..cad19b662 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names.h @@ -0,0 +1,2170 @@ @@ -394157,7 +394186,7 @@ index 000000000000..cad19b66200d +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_thex.h b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_thex.h new file mode 100755 -index 000000000000..bcceef4fc9bc +index 000000000..bcceef4fc --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_thex.h @@ -0,0 +1,291 @@ @@ -394454,7 +394483,7 @@ index 000000000000..bcceef4fc9bc +#endif /* _KBASE_GATOR_HWCNT_NAMES_THEX_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_tmix.h b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_tmix.h new file mode 100755 -index 000000000000..5ea06770fdb2 +index 000000000..5ea06770f --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_tmix.h @@ -0,0 +1,291 @@ @@ -394751,7 +394780,7 @@ index 000000000000..5ea06770fdb2 +#endif /* _KBASE_GATOR_HWCNT_NAMES_TMIX_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_tsix.h b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_tsix.h new file mode 100755 -index 000000000000..be09c4556735 +index 000000000..be09c4556 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gator_hwcnt_names_tsix.h @@ -0,0 +1,291 @@ @@ -395048,7 +395077,7 @@ index 000000000000..be09c4556735 +#endif /* _KBASE_GATOR_HWCNT_NAMES_TSIX_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gpu_id.h b/drivers/gpu/arm/midgard/mali_kbase_gpu_id.h new file mode 100755 -index 000000000000..42f0111c474f +index 000000000..42f0111c4 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gpu_id.h @@ -0,0 +1,123 @@ @@ -395177,7 +395206,7 @@ index 000000000000..42f0111c474f +#endif /* _KBASE_GPU_ID_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gpu_memory_debugfs.c b/drivers/gpu/arm/midgard/mali_kbase_gpu_memory_debugfs.c new file mode 100755 -index 000000000000..6df0a1cb1264 +index 000000000..6df0a1cb1 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gpu_memory_debugfs.c @@ -0,0 +1,97 @@ @@ -395280,7 +395309,7 @@ index 000000000000..6df0a1cb1264 +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_gpu_memory_debugfs.h b/drivers/gpu/arm/midgard/mali_kbase_gpu_memory_debugfs.h new file mode 100755 -index 000000000000..7045693eb910 +index 000000000..7045693eb --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gpu_memory_debugfs.h @@ -0,0 +1,37 @@ @@ -395323,7 +395352,7 @@ index 000000000000..7045693eb910 +#endif /*_KBASE_GPU_MEMORY_DEBUGFS_H*/ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gpuprops.c b/drivers/gpu/arm/midgard/mali_kbase_gpuprops.c new file mode 100755 -index 000000000000..a947a2e03a2f +index 000000000..a947a2e03 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gpuprops.c @@ -0,0 +1,510 @@ @@ -395839,7 +395868,7 @@ index 000000000000..a947a2e03a2f +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_gpuprops.h b/drivers/gpu/arm/midgard/mali_kbase_gpuprops.h new file mode 100755 -index 000000000000..57b3eaf9cd53 +index 000000000..57b3eaf9c --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gpuprops.h @@ -0,0 +1,84 @@ @@ -395929,7 +395958,7 @@ index 000000000000..57b3eaf9cd53 +#endif /* _KBASE_GPUPROPS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_gpuprops_types.h b/drivers/gpu/arm/midgard/mali_kbase_gpuprops_types.h new file mode 100755 -index 000000000000..10794fc27318 +index 000000000..10794fc27 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_gpuprops_types.h @@ -0,0 +1,92 @@ @@ -396027,7 +396056,7 @@ index 000000000000..10794fc27318 +#endif /* _KBASE_GPUPROPS_TYPES_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hw.c b/drivers/gpu/arm/midgard/mali_kbase_hw.c new file mode 100755 -index 000000000000..9a390d233939 +index 000000000..9a390d233 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hw.c @@ -0,0 +1,453 @@ @@ -396486,7 +396515,7 @@ index 000000000000..9a390d233939 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_hw.h b/drivers/gpu/arm/midgard/mali_kbase_hw.h new file mode 100755 -index 000000000000..754250ce968d +index 000000000..754250ce9 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hw.h @@ -0,0 +1,65 @@ @@ -396557,7 +396586,7 @@ index 000000000000..754250ce968d +#endif /* _KBASE_HW_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwaccess_backend.h b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_backend.h new file mode 100755 -index 000000000000..b09be99e6b4e +index 000000000..b09be99e6 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_backend.h @@ -0,0 +1,54 @@ @@ -396617,7 +396646,7 @@ index 000000000000..b09be99e6b4e +#endif /* _KBASE_HWACCESS_BACKEND_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwaccess_defs.h b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_defs.h new file mode 100755 -index 000000000000..0acf297192fd +index 000000000..0acf29719 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_defs.h @@ -0,0 +1,36 @@ @@ -396659,7 +396688,7 @@ index 000000000000..0acf297192fd +#endif /* _KBASE_HWACCESS_DEFS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwaccess_gpuprops.h b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_gpuprops.h new file mode 100755 -index 000000000000..cf8a8131c22e +index 000000000..cf8a8131c --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_gpuprops.h @@ -0,0 +1,47 @@ @@ -396712,7 +396741,7 @@ index 000000000000..cf8a8131c22e +#endif /* _KBASE_HWACCESS_GPUPROPS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwaccess_instr.h b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_instr.h new file mode 100755 -index 000000000000..5de2b7535bb4 +index 000000000..5de2b7535 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_instr.h @@ -0,0 +1,116 @@ @@ -396834,7 +396863,7 @@ index 000000000000..5de2b7535bb4 +#endif /* _KBASE_HWACCESS_INSTR_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwaccess_jm.h b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_jm.h new file mode 100755 -index 000000000000..750fda2cd81d +index 000000000..750fda2cd --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_jm.h @@ -0,0 +1,381 @@ @@ -397221,7 +397250,7 @@ index 000000000000..750fda2cd81d +#endif /* _KBASE_HWACCESS_JM_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwaccess_pm.h b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_pm.h new file mode 100755 -index 000000000000..71c7d495c40a +index 000000000..71c7d495c --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_pm.h @@ -0,0 +1,209 @@ @@ -397436,7 +397465,7 @@ index 000000000000..71c7d495c40a +#endif /* _KBASE_HWACCESS_PM_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwaccess_time.h b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_time.h new file mode 100755 -index 000000000000..10b65798e6cf +index 000000000..10b65798e --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwaccess_time.h @@ -0,0 +1,53 @@ @@ -397495,7 +397524,7 @@ index 000000000000..10b65798e6cf +#endif /* _KBASE_BACKEND_TIME_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_hwcnt_reader.h b/drivers/gpu/arm/midgard/mali_kbase_hwcnt_reader.h new file mode 100755 -index 000000000000..cf7bf1b35dc5 +index 000000000..cf7bf1b35 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_hwcnt_reader.h @@ -0,0 +1,66 @@ @@ -397567,7 +397596,7 @@ index 000000000000..cf7bf1b35dc5 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_ioctl.h b/drivers/gpu/arm/midgard/mali_kbase_ioctl.h new file mode 100755 -index 000000000000..dcbed9c774d6 +index 000000000..dcbed9c77 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_ioctl.h @@ -0,0 +1,656 @@ @@ -398229,7 +398258,7 @@ index 000000000000..dcbed9c774d6 +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_jd.c b/drivers/gpu/arm/midgard/mali_kbase_jd.c new file mode 100755 -index 000000000000..d9d8658d31dc +index 000000000..d9d8658d3 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_jd.c @@ -0,0 +1,1903 @@ @@ -400138,7 +400167,7 @@ index 000000000000..d9d8658d31dc +KBASE_EXPORT_TEST_API(kbase_jd_exit); diff --git a/drivers/gpu/arm/midgard/mali_kbase_jd_debugfs.c b/drivers/gpu/arm/midgard/mali_kbase_jd_debugfs.c new file mode 100755 -index 000000000000..44643abf85aa +index 000000000..44643abf8 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_jd_debugfs.c @@ -0,0 +1,233 @@ @@ -400377,7 +400406,7 @@ index 000000000000..44643abf85aa +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_jd_debugfs.h b/drivers/gpu/arm/midgard/mali_kbase_jd_debugfs.h new file mode 100755 -index 000000000000..0935f1db7296 +index 000000000..0935f1db7 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_jd_debugfs.h @@ -0,0 +1,39 @@ @@ -400422,7 +400451,7 @@ index 000000000000..0935f1db7296 +#endif /*_KBASE_JD_DEBUGFS_H*/ diff --git a/drivers/gpu/arm/midgard/mali_kbase_jm.c b/drivers/gpu/arm/midgard/mali_kbase_jm.c new file mode 100755 -index 000000000000..0c5c6a6f78cb +index 000000000..0c5c6a6f7 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_jm.c @@ -0,0 +1,131 @@ @@ -400559,7 +400588,7 @@ index 000000000000..0c5c6a6f78cb + diff --git a/drivers/gpu/arm/midgard/mali_kbase_jm.h b/drivers/gpu/arm/midgard/mali_kbase_jm.h new file mode 100755 -index 000000000000..a74ee24c8058 +index 000000000..a74ee24c8 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_jm.h @@ -0,0 +1,110 @@ @@ -400675,7 +400704,7 @@ index 000000000000..a74ee24c8058 +#endif /* _KBASE_JM_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_js.c b/drivers/gpu/arm/midgard/mali_kbase_js.c new file mode 100755 -index 000000000000..10a1d5909bbe +index 000000000..10a1d5909 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_js.c @@ -0,0 +1,2834 @@ @@ -403515,7 +403544,7 @@ index 000000000000..10a1d5909bbe +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_js.h b/drivers/gpu/arm/midgard/mali_kbase_js.h new file mode 100755 -index 000000000000..ddada8e468a1 +index 000000000..ddada8e46 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_js.h @@ -0,0 +1,925 @@ @@ -404446,7 +404475,7 @@ index 000000000000..ddada8e468a1 +#endif /* _KBASE_JS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_js_ctx_attr.c b/drivers/gpu/arm/midgard/mali_kbase_js_ctx_attr.c new file mode 100755 -index 000000000000..321506ada835 +index 000000000..321506ada --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_js_ctx_attr.c @@ -0,0 +1,301 @@ @@ -404753,7 +404782,7 @@ index 000000000000..321506ada835 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_js_ctx_attr.h b/drivers/gpu/arm/midgard/mali_kbase_js_ctx_attr.h new file mode 100755 -index 000000000000..ce9183326a57 +index 000000000..ce9183326 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_js_ctx_attr.h @@ -0,0 +1,158 @@ @@ -404917,7 +404946,7 @@ index 000000000000..ce9183326a57 +#endif /* _KBASE_JS_DEFS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_js_defs.h b/drivers/gpu/arm/midgard/mali_kbase_js_defs.h new file mode 100755 -index 000000000000..ba8b6441549b +index 000000000..ba8b64415 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_js_defs.h @@ -0,0 +1,386 @@ @@ -405309,7 +405338,7 @@ index 000000000000..ba8b6441549b +#endif /* _KBASE_JS_DEFS_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_linux.h b/drivers/gpu/arm/midgard/mali_kbase_linux.h new file mode 100755 -index 000000000000..6d1e61fd41e0 +index 000000000..6d1e61fd4 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_linux.h @@ -0,0 +1,43 @@ @@ -405358,7 +405387,7 @@ index 000000000000..6d1e61fd41e0 +#endif /* _KBASE_LINUX_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem.c b/drivers/gpu/arm/midgard/mali_kbase_mem.c new file mode 100755 -index 000000000000..8cbb5f6765b8 +index 000000000..8cbb5f676 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem.c @@ -0,0 +1,2657 @@ @@ -408021,7 +408050,7 @@ index 000000000000..8cbb5f6765b8 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem.h b/drivers/gpu/arm/midgard/mali_kbase_mem.h new file mode 100755 -index 000000000000..3f3eaa3fda98 +index 000000000..3f3eaa3fd --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem.h @@ -0,0 +1,1068 @@ @@ -409095,7 +409124,7 @@ index 000000000000..3f3eaa3fda98 +#endif /* _KBASE_MEM_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_linux.c b/drivers/gpu/arm/midgard/mali_kbase_mem_linux.c new file mode 100755 -index 000000000000..e20315e67242 +index 000000000..e20315e67 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_linux.c @@ -0,0 +1,2578 @@ @@ -411679,7 +411708,7 @@ index 000000000000..e20315e67242 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_linux.h b/drivers/gpu/arm/midgard/mali_kbase_mem_linux.h new file mode 100755 -index 000000000000..33b3554f9d82 +index 000000000..33b3554f9 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_linux.h @@ -0,0 +1,231 @@ @@ -411916,7 +411945,7 @@ index 000000000000..33b3554f9d82 +#endif /* _KBASE_MEM_LINUX_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_lowlevel.h b/drivers/gpu/arm/midgard/mali_kbase_mem_lowlevel.h new file mode 100755 -index 000000000000..9725fd3f05df +index 000000000..9725fd3f0 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_lowlevel.h @@ -0,0 +1,45 @@ @@ -411967,7 +411996,7 @@ index 000000000000..9725fd3f05df +#endif /* _KBASE_LOWLEVEL_H */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_pool.c b/drivers/gpu/arm/midgard/mali_kbase_mem_pool.c new file mode 100755 -index 000000000000..a8269940a037 +index 000000000..a8269940a --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_pool.c @@ -0,0 +1,569 @@ @@ -412542,7 +412571,7 @@ index 000000000000..a8269940a037 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_pool_debugfs.c b/drivers/gpu/arm/midgard/mali_kbase_mem_pool_debugfs.c new file mode 100755 -index 000000000000..585fba036c9e +index 000000000..585fba036 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_pool_debugfs.c @@ -0,0 +1,81 @@ @@ -412629,7 +412658,7 @@ index 000000000000..585fba036c9e +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_pool_debugfs.h b/drivers/gpu/arm/midgard/mali_kbase_mem_pool_debugfs.h new file mode 100755 -index 000000000000..1442854e8956 +index 000000000..1442854e8 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_pool_debugfs.h @@ -0,0 +1,36 @@ @@ -412671,7 +412700,7 @@ index 000000000000..1442854e8956 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.c b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.c new file mode 100755 -index 000000000000..d58fd8d62fde +index 000000000..d58fd8d62 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.c @@ -0,0 +1,121 @@ @@ -412798,7 +412827,7 @@ index 000000000000..d58fd8d62fde +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.h b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.h new file mode 100755 -index 000000000000..a1dc2e0b165b +index 000000000..a1dc2e0b1 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs.h @@ -0,0 +1,59 @@ @@ -412863,7 +412892,7 @@ index 000000000000..a1dc2e0b165b + diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs_buf_size.h b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs_buf_size.h new file mode 100755 -index 000000000000..82f0702974c2 +index 000000000..82f070297 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mem_profile_debugfs_buf_size.h @@ -0,0 +1,33 @@ @@ -412902,7 +412931,7 @@ index 000000000000..82f0702974c2 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_mmu.c b/drivers/gpu/arm/midgard/mali_kbase_mmu.c new file mode 100755 -index 000000000000..26144850a588 +index 000000000..26144850a --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mmu.c @@ -0,0 +1,2088 @@ @@ -414996,7 +415025,7 @@ index 000000000000..26144850a588 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_mmu_hw.h b/drivers/gpu/arm/midgard/mali_kbase_mmu_hw.h new file mode 100755 -index 000000000000..986e959e9a0c +index 000000000..986e959e9 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mmu_hw.h @@ -0,0 +1,123 @@ @@ -415125,7 +415154,7 @@ index 000000000000..986e959e9a0c +#endif /* _MALI_KBASE_MMU_HW_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mmu_mode.h b/drivers/gpu/arm/midgard/mali_kbase_mmu_mode.h new file mode 100755 -index 000000000000..b487c00426ae +index 000000000..b487c0042 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mmu_mode.h @@ -0,0 +1,47 @@ @@ -415178,7 +415207,7 @@ index 000000000000..b487c00426ae +#endif /* _MALI_KBASE_MMU_MODE_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_mmu_mode_aarch64.c b/drivers/gpu/arm/midgard/mali_kbase_mmu_mode_aarch64.c new file mode 100755 -index 000000000000..60df171164ff +index 000000000..60df17116 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mmu_mode_aarch64.c @@ -0,0 +1,200 @@ @@ -415384,7 +415413,7 @@ index 000000000000..60df171164ff +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_mmu_mode_lpae.c b/drivers/gpu/arm/midgard/mali_kbase_mmu_mode_lpae.c new file mode 100755 -index 000000000000..53fbbc73af91 +index 000000000..53fbbc73a --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_mmu_mode_lpae.c @@ -0,0 +1,198 @@ @@ -415588,7 +415617,7 @@ index 000000000000..53fbbc73af91 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_platform_fake.c b/drivers/gpu/arm/midgard/mali_kbase_platform_fake.c new file mode 100755 -index 000000000000..1a44957fe44a +index 000000000..1a44957fe --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_platform_fake.c @@ -0,0 +1,124 @@ @@ -415718,7 +415747,7 @@ index 000000000000..1a44957fe44a + diff --git a/drivers/gpu/arm/midgard/mali_kbase_pm.c b/drivers/gpu/arm/midgard/mali_kbase_pm.c new file mode 100755 -index 000000000000..97d543464c28 +index 000000000..97d543464 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_pm.c @@ -0,0 +1,205 @@ @@ -415929,7 +415958,7 @@ index 000000000000..97d543464c28 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_pm.h b/drivers/gpu/arm/midgard/mali_kbase_pm.h new file mode 100755 -index 000000000000..37fa2479df74 +index 000000000..37fa2479d --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_pm.h @@ -0,0 +1,171 @@ @@ -416106,7 +416135,7 @@ index 000000000000..37fa2479df74 +#endif /* _KBASE_PM_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_profiling_gator_api.h b/drivers/gpu/arm/midgard/mali_kbase_profiling_gator_api.h new file mode 100755 -index 000000000000..7fb674eded37 +index 000000000..7fb674ede --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_profiling_gator_api.h @@ -0,0 +1,40 @@ @@ -416152,7 +416181,7 @@ index 000000000000..7fb674eded37 +#endif /* _KBASE_PROFILING_GATOR_API */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_regs_history_debugfs.c b/drivers/gpu/arm/midgard/mali_kbase_regs_history_debugfs.c new file mode 100755 -index 000000000000..c970650069cd +index 000000000..c97065006 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_regs_history_debugfs.c @@ -0,0 +1,130 @@ @@ -416288,7 +416317,7 @@ index 000000000000..c970650069cd +#endif /* CONFIG_DEBUG_FS */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_regs_history_debugfs.h b/drivers/gpu/arm/midgard/mali_kbase_regs_history_debugfs.h new file mode 100755 -index 000000000000..f10837002330 +index 000000000..f10837002 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_regs_history_debugfs.h @@ -0,0 +1,50 @@ @@ -416344,7 +416373,7 @@ index 000000000000..f10837002330 +#endif /*_KBASE_REGS_HISTORY_DEBUGFS_H*/ diff --git a/drivers/gpu/arm/midgard/mali_kbase_replay.c b/drivers/gpu/arm/midgard/mali_kbase_replay.c new file mode 100755 -index 000000000000..84aa3316e435 +index 000000000..84aa3316e --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_replay.c @@ -0,0 +1,1166 @@ @@ -417516,7 +417545,7 @@ index 000000000000..84aa3316e435 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_smc.c b/drivers/gpu/arm/midgard/mali_kbase_smc.c new file mode 100755 -index 000000000000..6c8cf73ae58c +index 000000000..6c8cf73ae --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_smc.c @@ -0,0 +1,86 @@ @@ -417608,7 +417637,7 @@ index 000000000000..6c8cf73ae58c + diff --git a/drivers/gpu/arm/midgard/mali_kbase_smc.h b/drivers/gpu/arm/midgard/mali_kbase_smc.h new file mode 100755 -index 000000000000..9bff3d2e8b4d +index 000000000..9bff3d2e8 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_smc.h @@ -0,0 +1,67 @@ @@ -417681,7 +417710,7 @@ index 000000000000..9bff3d2e8b4d +#endif /* _KBASE_SMC_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_softjobs.c b/drivers/gpu/arm/midgard/mali_kbase_softjobs.c new file mode 100755 -index 000000000000..396953e780a8 +index 000000000..396953e78 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_softjobs.c @@ -0,0 +1,1549 @@ @@ -419236,7 +419265,7 @@ index 000000000000..396953e780a8 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_strings.c b/drivers/gpu/arm/midgard/mali_kbase_strings.c new file mode 100755 -index 000000000000..c98762cec244 +index 000000000..c98762cec --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_strings.c @@ -0,0 +1,23 @@ @@ -419265,7 +419294,7 @@ index 000000000000..c98762cec244 +const char kbase_timeline_name[] = KBASE_TIMELINE_NAME; diff --git a/drivers/gpu/arm/midgard/mali_kbase_strings.h b/drivers/gpu/arm/midgard/mali_kbase_strings.h new file mode 100755 -index 000000000000..41b8fdbec6a4 +index 000000000..41b8fdbec --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_strings.h @@ -0,0 +1,19 @@ @@ -419290,7 +419319,7 @@ index 000000000000..41b8fdbec6a4 +extern const char kbase_timeline_name[]; diff --git a/drivers/gpu/arm/midgard/mali_kbase_sync.h b/drivers/gpu/arm/midgard/mali_kbase_sync.h new file mode 100755 -index 000000000000..33b580595563 +index 000000000..33b580595 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_sync.h @@ -0,0 +1,203 @@ @@ -419499,7 +419528,7 @@ index 000000000000..33b580595563 +#endif /* MALI_KBASE_SYNC_H */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_sync_android.c b/drivers/gpu/arm/midgard/mali_kbase_sync_android.c new file mode 100755 -index 000000000000..d7349dcae69a +index 000000000..d7349dcae --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_sync_android.c @@ -0,0 +1,537 @@ @@ -420042,7 +420071,7 @@ index 000000000000..d7349dcae69a +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_sync_common.c b/drivers/gpu/arm/midgard/mali_kbase_sync_common.c new file mode 100755 -index 000000000000..457def296684 +index 000000000..457def296 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_sync_common.c @@ -0,0 +1,43 @@ @@ -420091,7 +420120,7 @@ index 000000000000..457def296684 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_sync_file.c b/drivers/gpu/arm/midgard/mali_kbase_sync_file.c new file mode 100755 -index 000000000000..60b5d74db33e +index 000000000..60b5d74db --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_sync_file.c @@ -0,0 +1,359 @@ @@ -420456,7 +420485,7 @@ index 000000000000..60b5d74db33e +#endif diff --git a/drivers/gpu/arm/midgard/mali_kbase_tlstream.c b/drivers/gpu/arm/midgard/mali_kbase_tlstream.c new file mode 100755 -index 000000000000..c8310c45f143 +index 000000000..c8310c45f --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_tlstream.c @@ -0,0 +1,2572 @@ @@ -423034,7 +423063,7 @@ index 000000000000..c8310c45f143 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_tlstream.h b/drivers/gpu/arm/midgard/mali_kbase_tlstream.h new file mode 100755 -index 000000000000..c0a1117d5f25 +index 000000000..c0a1117d5 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_tlstream.h @@ -0,0 +1,623 @@ @@ -423663,7 +423692,7 @@ index 000000000000..c0a1117d5f25 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_trace_defs.h b/drivers/gpu/arm/midgard/mali_kbase_trace_defs.h new file mode 100755 -index 000000000000..e2e0544208ce +index 000000000..e2e054420 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_trace_defs.h @@ -0,0 +1,264 @@ @@ -423933,7 +423962,7 @@ index 000000000000..e2e0544208ce +/* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_trace_timeline.c b/drivers/gpu/arm/midgard/mali_kbase_trace_timeline.c new file mode 100755 -index 000000000000..5830e87f0818 +index 000000000..5830e87f0 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_trace_timeline.c @@ -0,0 +1,236 @@ @@ -424175,7 +424204,7 @@ index 000000000000..5830e87f0818 +#endif /* CONFIG_MALI_TRACE_TIMELINE */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_trace_timeline.h b/drivers/gpu/arm/midgard/mali_kbase_trace_timeline.h new file mode 100755 -index 000000000000..a04f7c1420e0 +index 000000000..a04f7c142 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_trace_timeline.h @@ -0,0 +1,363 @@ @@ -424544,7 +424573,7 @@ index 000000000000..a04f7c1420e0 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_trace_timeline_defs.h b/drivers/gpu/arm/midgard/mali_kbase_trace_timeline_defs.h new file mode 100755 -index 000000000000..156a95a67f4a +index 000000000..156a95a67 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_trace_timeline_defs.h @@ -0,0 +1,140 @@ @@ -424690,7 +424719,7 @@ index 000000000000..156a95a67f4a +"_tgid,job_slot,_producerof_atom_number_completed") diff --git a/drivers/gpu/arm/midgard/mali_kbase_uku.h b/drivers/gpu/arm/midgard/mali_kbase_uku.h new file mode 100755 -index 000000000000..c22a59324248 +index 000000000..c22a59324 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_uku.h @@ -0,0 +1,545 @@ @@ -425241,7 +425270,7 @@ index 000000000000..c22a59324248 + diff --git a/drivers/gpu/arm/midgard/mali_kbase_utility.c b/drivers/gpu/arm/midgard/mali_kbase_utility.c new file mode 100755 -index 000000000000..be474ff87401 +index 000000000..be474ff87 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_utility.c @@ -0,0 +1,33 @@ @@ -425280,7 +425309,7 @@ index 000000000000..be474ff87401 +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_utility.h b/drivers/gpu/arm/midgard/mali_kbase_utility.h new file mode 100755 -index 000000000000..fd7252dab0de +index 000000000..fd7252dab --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_utility.h @@ -0,0 +1,37 @@ @@ -425323,7 +425352,7 @@ index 000000000000..fd7252dab0de +#endif /* _KBASE_UTILITY_H */ diff --git a/drivers/gpu/arm/midgard/mali_kbase_vinstr.c b/drivers/gpu/arm/midgard/mali_kbase_vinstr.c new file mode 100755 -index 000000000000..8395568d0efa +index 000000000..8395568d0 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_vinstr.c @@ -0,0 +1,2070 @@ @@ -427399,7 +427428,7 @@ index 000000000000..8395568d0efa +} diff --git a/drivers/gpu/arm/midgard/mali_kbase_vinstr.h b/drivers/gpu/arm/midgard/mali_kbase_vinstr.h new file mode 100755 -index 000000000000..6207d25aef06 +index 000000000..6207d25ae --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_kbase_vinstr.h @@ -0,0 +1,155 @@ @@ -427560,7 +427589,7 @@ index 000000000000..6207d25aef06 + diff --git a/drivers/gpu/arm/midgard/mali_linux_kbase_trace.h b/drivers/gpu/arm/midgard/mali_linux_kbase_trace.h new file mode 100755 -index 000000000000..5d6b4021d626 +index 000000000..5d6b4021d --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_linux_kbase_trace.h @@ -0,0 +1,201 @@ @@ -427767,7 +427796,7 @@ index 000000000000..5d6b4021d626 +#include diff --git a/drivers/gpu/arm/midgard/mali_linux_trace.h b/drivers/gpu/arm/midgard/mali_linux_trace.h new file mode 100755 -index 000000000000..2be06a552768 +index 000000000..2be06a552 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_linux_trace.h @@ -0,0 +1,189 @@ @@ -427962,7 +427991,7 @@ index 000000000000..2be06a552768 +#include diff --git a/drivers/gpu/arm/midgard/mali_malisw.h b/drivers/gpu/arm/midgard/mali_malisw.h new file mode 100755 -index 000000000000..99452933eab4 +index 000000000..99452933e --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_malisw.h @@ -0,0 +1,131 @@ @@ -428099,7 +428128,7 @@ index 000000000000..99452933eab4 +#endif /* _MALISW_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_midg_coherency.h b/drivers/gpu/arm/midgard/mali_midg_coherency.h new file mode 100755 -index 000000000000..a509cbd5f175 +index 000000000..a509cbd5f --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_midg_coherency.h @@ -0,0 +1,26 @@ @@ -428131,7 +428160,7 @@ index 000000000000..a509cbd5f175 +#endif /* _MIDG_COHERENCY_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_midg_regmap.h b/drivers/gpu/arm/midgard/mali_midg_regmap.h new file mode 100755 -index 000000000000..7d7b7bcd3cc3 +index 000000000..7d7b7bcd3 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_midg_regmap.h @@ -0,0 +1,611 @@ @@ -428748,7 +428777,7 @@ index 000000000000..7d7b7bcd3cc3 +#endif /* _MIDGARD_REGMAP_H_ */ diff --git a/drivers/gpu/arm/midgard/mali_timeline.h b/drivers/gpu/arm/midgard/mali_timeline.h new file mode 100755 -index 000000000000..bd5f6614b6bb +index 000000000..bd5f6614b --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_timeline.h @@ -0,0 +1,396 @@ @@ -429150,7 +429179,7 @@ index 000000000000..bd5f6614b6bb + diff --git a/drivers/gpu/arm/midgard/mali_uk.h b/drivers/gpu/arm/midgard/mali_uk.h new file mode 100755 -index 000000000000..841d03fb5873 +index 000000000..841d03fb5 --- /dev/null +++ b/drivers/gpu/arm/midgard/mali_uk.h @@ -0,0 +1,141 @@ @@ -429297,7 +429326,7 @@ index 000000000000..841d03fb5873 +#endif /* _UK_H_ */ diff --git a/drivers/gpu/arm/midgard/platform/Kconfig b/drivers/gpu/arm/midgard/platform/Kconfig new file mode 100755 -index 000000000000..8fb4e917c4fa +index 000000000..8fb4e917c --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/Kconfig @@ -0,0 +1,24 @@ @@ -429327,7 +429356,7 @@ index 000000000000..8fb4e917c4fa + diff --git a/drivers/gpu/arm/midgard/platform/devicetree/Kbuild b/drivers/gpu/arm/midgard/platform/devicetree/Kbuild new file mode 100755 -index 000000000000..e888a42fc69a +index 000000000..e888a42fc --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/devicetree/Kbuild @@ -0,0 +1,18 @@ @@ -429351,7 +429380,7 @@ index 000000000000..e888a42fc69a + $(MALI_PLATFORM_THIRDPARTY_DIR)/mali_kbase_runtime_pm.o diff --git a/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_config_devicetree.c b/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_config_devicetree.c new file mode 100755 -index 000000000000..b2a7c93f12a9 +index 000000000..b2a7c93f1 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_config_devicetree.c @@ -0,0 +1,31 @@ @@ -429388,7 +429417,7 @@ index 000000000000..b2a7c93f12a9 +} diff --git a/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_config_platform.h b/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..49e107f98000 +index 000000000..49e107f98 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_config_platform.h @@ -0,0 +1,73 @@ @@ -429467,7 +429496,7 @@ index 000000000000..49e107f98000 +extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_runtime_pm.c b/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_runtime_pm.c new file mode 100755 -index 000000000000..aa4376afd3ba +index 000000000..aa4376afd --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/devicetree/mali_kbase_runtime_pm.c @@ -0,0 +1,100 @@ @@ -429573,7 +429602,7 @@ index 000000000000..aa4376afd3ba + diff --git a/drivers/gpu/arm/midgard/platform/mali_kbase_platform_common.h b/drivers/gpu/arm/midgard/platform/mali_kbase_platform_common.h new file mode 100755 -index 000000000000..c11085af5f24 +index 000000000..c11085af5 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/mali_kbase_platform_common.h @@ -0,0 +1,28 @@ @@ -429607,7 +429636,7 @@ index 000000000000..c11085af5f24 +int kbase_platform_rk_init_opp_table(struct kbase_device *kbdev); diff --git a/drivers/gpu/arm/midgard/platform/mali_kbase_platform_fake.h b/drivers/gpu/arm/midgard/platform/mali_kbase_platform_fake.h new file mode 100755 -index 000000000000..01f9dfce93cc +index 000000000..01f9dfce9 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/mali_kbase_platform_fake.h @@ -0,0 +1,38 @@ @@ -429651,7 +429680,7 @@ index 000000000000..01f9dfce93cc +#endif /* CONFIG_MALI_PLATFORM_FAKE */ diff --git a/drivers/gpu/arm/midgard/platform/rk/Kbuild b/drivers/gpu/arm/midgard/platform/rk/Kbuild new file mode 100755 -index 000000000000..db993487e3be +index 000000000..db993487e --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/rk/Kbuild @@ -0,0 +1,17 @@ @@ -429674,7 +429703,7 @@ index 000000000000..db993487e3be + diff --git a/drivers/gpu/arm/midgard/platform/rk/custom_log.h b/drivers/gpu/arm/midgard/platform/rk/custom_log.h new file mode 100755 -index 000000000000..fe5e1224149e +index 000000000..fe5e12241 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/rk/custom_log.h @@ -0,0 +1,209 @@ @@ -429889,7 +429918,7 @@ index 000000000000..fe5e1224149e +#endif /* __CUSTOM_LOG_H__ */ diff --git a/drivers/gpu/arm/midgard/platform/rk/mali_kbase_config_platform.h b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..07c5b6f8a760 +index 000000000..07c5b6f8a --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_config_platform.h @@ -0,0 +1,88 @@ @@ -429983,7 +430012,7 @@ index 000000000000..07c5b6f8a760 + diff --git a/drivers/gpu/arm/midgard/platform/rk/mali_kbase_config_rk.c b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_config_rk.c new file mode 100755 -index 000000000000..8ad910c1256f +index 000000000..8ad910c12 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_config_rk.c @@ -0,0 +1,492 @@ @@ -430481,7 +430510,7 @@ index 000000000000..8ad910c1256f +} diff --git a/drivers/gpu/arm/midgard/platform/rk/mali_kbase_rk.h b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_rk.h new file mode 100755 -index 000000000000..6eab25014d21 +index 000000000..6eab25014 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_rk.h @@ -0,0 +1,62 @@ @@ -430549,7 +430578,7 @@ index 000000000000..6eab25014d21 + diff --git a/drivers/gpu/arm/midgard/platform/vexpress/Kbuild b/drivers/gpu/arm/midgard/platform/vexpress/Kbuild new file mode 100755 -index 000000000000..1caa293666d3 +index 000000000..1caa29366 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress/Kbuild @@ -0,0 +1,18 @@ @@ -430573,7 +430602,7 @@ index 000000000000..1caa293666d3 + $(MALI_PLATFORM_THIRDPARTY_DIR)/mali_kbase_cpu_vexpress.o diff --git a/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_config_platform.h b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..02835f129aa3 +index 000000000..02835f129 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_config_platform.h @@ -0,0 +1,75 @@ @@ -430654,7 +430683,7 @@ index 000000000000..02835f129aa3 +extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_config_vexpress.c b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_config_vexpress.c new file mode 100755 -index 000000000000..15ce2bc5eea5 +index 000000000..15ce2bc5e --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_config_vexpress.c @@ -0,0 +1,85 @@ @@ -430745,7 +430774,7 @@ index 000000000000..15ce2bc5eea5 +} diff --git a/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_cpu_vexpress.c b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_cpu_vexpress.c new file mode 100755 -index 000000000000..4665f98cbbe4 +index 000000000..4665f98cb --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_cpu_vexpress.c @@ -0,0 +1,279 @@ @@ -431030,7 +431059,7 @@ index 000000000000..4665f98cbbe4 +} diff --git a/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_cpu_vexpress.h b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_cpu_vexpress.h new file mode 100755 -index 000000000000..da865698133a +index 000000000..da8656981 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress/mali_kbase_cpu_vexpress.h @@ -0,0 +1,38 @@ @@ -431074,7 +431103,7 @@ index 000000000000..da865698133a +#endif /* _KBASE_CPU_VEXPRESS_H_ */ diff --git a/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/Kbuild b/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/Kbuild new file mode 100755 -index 000000000000..7efe8fa4263b +index 000000000..7efe8fa42 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/Kbuild @@ -0,0 +1,16 @@ @@ -431096,7 +431125,7 @@ index 000000000000..7efe8fa4263b +mali_kbase-y += $(MALI_PLATFORM_THIRDPARTY_DIR)/mali_kbase_config_vexpress.o diff --git a/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h b/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..0efbf3962f98 +index 000000000..0efbf3962 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/mali_kbase_config_platform.h @@ -0,0 +1,73 @@ @@ -431175,7 +431204,7 @@ index 000000000000..0efbf3962f98 +extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/mali_kbase_config_vexpress.c b/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/mali_kbase_config_vexpress.c new file mode 100755 -index 000000000000..3ff0930fb4a3 +index 000000000..3ff0930fb --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_1xv7_a57/mali_kbase_config_vexpress.c @@ -0,0 +1,79 @@ @@ -431260,7 +431289,7 @@ index 000000000000..3ff0930fb4a3 +} diff --git a/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/Kbuild b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/Kbuild new file mode 100755 -index 000000000000..1caa293666d3 +index 000000000..1caa29366 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/Kbuild @@ -0,0 +1,18 @@ @@ -431284,7 +431313,7 @@ index 000000000000..1caa293666d3 + $(MALI_PLATFORM_THIRDPARTY_DIR)/mali_kbase_cpu_vexpress.o diff --git a/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h new file mode 100755 -index 000000000000..dbdf21e009f9 +index 000000000..dbdf21e00 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_platform.h @@ -0,0 +1,75 @@ @@ -431365,7 +431394,7 @@ index 000000000000..dbdf21e009f9 +extern struct kbase_pm_callback_conf pm_callbacks; diff --git a/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_vexpress.c b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_vexpress.c new file mode 100755 -index 000000000000..76ffe4a1e59e +index 000000000..76ffe4a1e --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_vexpress.c @@ -0,0 +1,83 @@ @@ -431454,7 +431483,7 @@ index 000000000000..76ffe4a1e59e + diff --git a/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_cpu_vexpress.c b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_cpu_vexpress.c new file mode 100755 -index 000000000000..816dff49835f +index 000000000..816dff498 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_cpu_vexpress.c @@ -0,0 +1,71 @@ @@ -431531,7 +431560,7 @@ index 000000000000..816dff49835f +} diff --git a/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_cpu_vexpress.h b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_cpu_vexpress.h new file mode 100755 -index 000000000000..23647ccb0871 +index 000000000..23647ccb0 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/vexpress_6xvirtex7_10mhz/mali_kbase_cpu_vexpress.h @@ -0,0 +1,28 @@ @@ -431565,7 +431594,7 @@ index 000000000000..23647ccb0871 +#endif /* _KBASE_CPU_VEXPRESS_H_ */ diff --git a/drivers/gpu/arm/midgard/platform_dummy/mali_ukk_os.h b/drivers/gpu/arm/midgard/platform_dummy/mali_ukk_os.h new file mode 100755 -index 000000000000..5fa9b39c4bc0 +index 000000000..5fa9b39c4 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform_dummy/mali_ukk_os.h @@ -0,0 +1,53 @@ @@ -431624,7 +431653,7 @@ index 000000000000..5fa9b39c4bc0 +#endif /* _UKK_OS_H__ */ diff --git a/drivers/gpu/arm/midgard/protected_mode_switcher.h b/drivers/gpu/arm/midgard/protected_mode_switcher.h new file mode 100755 -index 000000000000..5dc2f3ba8cf6 +index 000000000..5dc2f3ba8 --- /dev/null +++ b/drivers/gpu/arm/midgard/protected_mode_switcher.h @@ -0,0 +1,64 @@ @@ -431694,7 +431723,7 @@ index 000000000000..5dc2f3ba8cf6 +#endif /* _PROTECTED_MODE_SWITCH_H_ */ diff --git a/drivers/gpu/arm/midgard/rename.h b/drivers/gpu/arm/midgard/rename.h new file mode 100755 -index 000000000000..8218666183ea +index 000000000..821866618 --- /dev/null +++ b/drivers/gpu/arm/midgard/rename.h @@ -0,0 +1,426 @@ @@ -432126,7 +432155,7 @@ index 000000000000..8218666183ea +#endif diff --git a/drivers/gpu/arm/midgard/sconscript b/drivers/gpu/arm/midgard/sconscript new file mode 100755 -index 000000000000..ff23d7aebe6e +index 000000000..ff23d7aeb --- /dev/null +++ b/drivers/gpu/arm/midgard/sconscript @@ -0,0 +1,92 @@ @@ -432224,7 +432253,7 @@ index 000000000000..ff23d7aebe6e +env.AppendUnique(BASE=['cutils_linked_list']) diff --git a/drivers/gpu/arm/midgard/tests/Kbuild b/drivers/gpu/arm/midgard/tests/Kbuild new file mode 100755 -index 000000000000..b4bed0473439 +index 000000000..b4bed0473 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/Kbuild @@ -0,0 +1,17 @@ @@ -432247,7 +432276,7 @@ index 000000000000..b4bed0473439 +obj-$(CONFIG_MALI_IRQ_LATENCY) += mali_kutf_irq_test/ diff --git a/drivers/gpu/arm/midgard/tests/Kconfig b/drivers/gpu/arm/midgard/tests/Kconfig new file mode 100755 -index 000000000000..da0515c065de +index 000000000..da0515c06 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/Kconfig @@ -0,0 +1,17 @@ @@ -432270,7 +432299,7 @@ index 000000000000..da0515c065de +source "drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Kconfig" diff --git a/drivers/gpu/arm/midgard/tests/include/kutf/kutf_mem.h b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_mem.h new file mode 100755 -index 000000000000..0d145e42a0ca +index 000000000..0d145e42a --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_mem.h @@ -0,0 +1,65 @@ @@ -432341,7 +432370,7 @@ index 000000000000..0d145e42a0ca +#endif /* _KERNEL_UTF_MEM_H_ */ diff --git a/drivers/gpu/arm/midgard/tests/include/kutf/kutf_resultset.h b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_resultset.h new file mode 100755 -index 000000000000..1cc85f1b7a46 +index 000000000..1cc85f1b7 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_resultset.h @@ -0,0 +1,121 @@ @@ -432468,7 +432497,7 @@ index 000000000000..1cc85f1b7a46 +#endif /* _KERNEL_UTF_RESULTSET_H_ */ diff --git a/drivers/gpu/arm/midgard/tests/include/kutf/kutf_suite.h b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_suite.h new file mode 100755 -index 000000000000..754c3adb1cca +index 000000000..754c3adb1 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_suite.h @@ -0,0 +1,508 @@ @@ -432982,7 +433011,7 @@ index 000000000000..754c3adb1cca +#endif /* _KERNEL_UTF_SUITE_H_ */ diff --git a/drivers/gpu/arm/midgard/tests/include/kutf/kutf_utils.h b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_utils.h new file mode 100755 -index 000000000000..c458c1f73802 +index 000000000..c458c1f73 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/include/kutf/kutf_utils.h @@ -0,0 +1,55 @@ @@ -433043,7 +433072,7 @@ index 000000000000..c458c1f73802 +#endif /* _KERNEL_UTF_UTILS_H_ */ diff --git a/drivers/gpu/arm/midgard/tests/kutf/Kbuild b/drivers/gpu/arm/midgard/tests/kutf/Kbuild new file mode 100755 -index 000000000000..6b840c2ef7b7 +index 000000000..6b840c2ef --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/Kbuild @@ -0,0 +1,20 @@ @@ -433069,7 +433098,7 @@ index 000000000000..6b840c2ef7b7 +kutf-y := kutf_mem.o kutf_resultset.o kutf_suite.o kutf_utils.o diff --git a/drivers/gpu/arm/midgard/tests/kutf/Kconfig b/drivers/gpu/arm/midgard/tests/kutf/Kconfig new file mode 100755 -index 000000000000..84364716afe3 +index 000000000..84364716a --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/Kconfig @@ -0,0 +1,22 @@ @@ -433097,7 +433126,7 @@ index 000000000000..84364716afe3 + choose M here - this will generate a single module called kutf. diff --git a/drivers/gpu/arm/midgard/tests/kutf/Makefile b/drivers/gpu/arm/midgard/tests/kutf/Makefile new file mode 100755 -index 000000000000..010c92ca39b9 +index 000000000..010c92ca3 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/Makefile @@ -0,0 +1,29 @@ @@ -433132,7 +433161,7 @@ index 000000000000..010c92ca39b9 + $(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) clean diff --git a/drivers/gpu/arm/midgard/tests/kutf/kutf_mem.c b/drivers/gpu/arm/midgard/tests/kutf/kutf_mem.c new file mode 100755 -index 000000000000..5408e57d469a +index 000000000..5408e57d4 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/kutf_mem.c @@ -0,0 +1,94 @@ @@ -433232,7 +433261,7 @@ index 000000000000..5408e57d469a +EXPORT_SYMBOL(kutf_mempool_alloc); diff --git a/drivers/gpu/arm/midgard/tests/kutf/kutf_resultset.c b/drivers/gpu/arm/midgard/tests/kutf/kutf_resultset.c new file mode 100755 -index 000000000000..5bd04969fd55 +index 000000000..5bd04969f --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/kutf_resultset.c @@ -0,0 +1,95 @@ @@ -433333,7 +433362,7 @@ index 000000000000..5bd04969fd55 + diff --git a/drivers/gpu/arm/midgard/tests/kutf/kutf_suite.c b/drivers/gpu/arm/midgard/tests/kutf/kutf_suite.c new file mode 100755 -index 000000000000..a7cfd3be9c46 +index 000000000..a7cfd3be9 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/kutf_suite.c @@ -0,0 +1,1041 @@ @@ -434380,7 +434409,7 @@ index 000000000000..a7cfd3be9c46 +module_exit(exit_kutf_core); diff --git a/drivers/gpu/arm/midgard/tests/kutf/kutf_utils.c b/drivers/gpu/arm/midgard/tests/kutf/kutf_utils.c new file mode 100755 -index 000000000000..a429a2dbf788 +index 000000000..a429a2dbf --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/kutf_utils.c @@ -0,0 +1,71 @@ @@ -434457,7 +434486,7 @@ index 000000000000..a429a2dbf788 +EXPORT_SYMBOL(kutf_dsprintf); diff --git a/drivers/gpu/arm/midgard/tests/kutf/sconscript b/drivers/gpu/arm/midgard/tests/kutf/sconscript new file mode 100755 -index 000000000000..d7f112448e42 +index 000000000..d7f112448 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/kutf/sconscript @@ -0,0 +1,21 @@ @@ -434484,7 +434513,7 @@ index 000000000000..d7f112448e42 +kutf_env.KernelObjTarget('kutf', mod) diff --git a/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Kbuild b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Kbuild new file mode 100755 -index 000000000000..0cd9cebe9d8b +index 000000000..0cd9cebe9 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Kbuild @@ -0,0 +1,20 @@ @@ -434510,7 +434539,7 @@ index 000000000000..0cd9cebe9d8b +mali_kutf_irq_test-y := mali_kutf_irq_test_main.o diff --git a/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Kconfig b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Kconfig new file mode 100755 -index 000000000000..16f68d15c46e +index 000000000..16f68d15c --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Kconfig @@ -0,0 +1,23 @@ @@ -434539,7 +434568,7 @@ index 000000000000..16f68d15c46e + Choosing M here will generate a single module called mali_kutf_irq_test. diff --git a/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Makefile b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Makefile new file mode 100755 -index 000000000000..4e948767a4ac +index 000000000..4e948767a --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/Makefile @@ -0,0 +1,51 @@ @@ -434596,7 +434625,7 @@ index 000000000000..4e948767a4ac + $(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) clean diff --git a/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/mali_kutf_irq_test_main.c b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/mali_kutf_irq_test_main.c new file mode 100755 -index 000000000000..e2ff4432bf80 +index 000000000..e2ff4432b --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/mali_kutf_irq_test_main.c @@ -0,0 +1,257 @@ @@ -434859,7 +434888,7 @@ index 000000000000..e2ff4432bf80 +MODULE_VERSION("1.0"); diff --git a/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/sconscript b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/sconscript new file mode 100755 -index 000000000000..ec837f16448d +index 000000000..ec837f164 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/mali_kutf_irq_test/sconscript @@ -0,0 +1,30 @@ @@ -434895,7 +434924,7 @@ index 000000000000..ec837f16448d + env.KernelObjTarget('mali_kutf_irq_test', cmd) diff --git a/drivers/gpu/arm/midgard/tests/sconscript b/drivers/gpu/arm/midgard/tests/sconscript new file mode 100755 -index 000000000000..5337e1078e20 +index 000000000..5337e1078 --- /dev/null +++ b/drivers/gpu/arm/midgard/tests/sconscript @@ -0,0 +1,37 @@ @@ -434938,7 +434967,7 @@ index 000000000000..5337e1078e20 + SConscript('mali_kutf_vinstr_test/sconscript') diff --git a/drivers/gpu/arm/sconscript b/drivers/gpu/arm/sconscript new file mode 100755 -index 000000000000..a06092bd5bf0 +index 000000000..a06092bd5 --- /dev/null +++ b/drivers/gpu/arm/sconscript @@ -0,0 +1,25 @@ @@ -434968,7 +434997,7 @@ index 000000000000..a06092bd5bf0 + +SConscript('midgard/sconscript') diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig -index 4e9b3a95fa7c..95994151a360 100644 +index 4e9b3a95f..95994151a 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -32,6 +32,10 @@ config DRM_MIPI_DBI @@ -434983,7 +435012,7 @@ index 4e9b3a95fa7c..95994151a360 100644 bool depends on DRM diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c -index e8baa07450b7..53264c731c69 100644 +index e8baa0745..53264c731 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -8,11 +8,13 @@ @@ -437095,7 +437124,7 @@ index e8baa07450b7..53264c731c69 100644 int analogix_dp_start_crc(struct drm_connector *connector) { diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h -index c051502d7fbf..f744058e59a5 100644 +index c051502d7..f744058e5 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h @@ -10,6 +10,7 @@ @@ -437261,7 +437290,7 @@ index c051502d7fbf..f744058e59a5 100644 #endif /* _ANALOGIX_DP_CORE_H */ diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c -index cab3f5c4e2fc..e756d7cd3d41 100644 +index cab3f5c4e..e756d7cd3 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -11,30 +11,44 @@ @@ -438950,7 +438979,7 @@ index cab3f5c4e2fc..e756d7cd3d41 100644 + analogix_dp_init_aux(dp); +} diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.h b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.h -index e284ee8da58b..0a368b1722ec 100644 +index e284ee8da..0a368b172 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.h @@ -15,9 +15,27 @@ @@ -439142,7 +439171,7 @@ index e284ee8da58b..0a368b1722ec 100644 + #endif /* _ANALOGIX_DP_REG_H */ diff --git a/drivers/gpu/drm/bridge/synopsys/Makefile b/drivers/gpu/drm/bridge/synopsys/Makefile -index 91d746ad5de1..757f5526fd64 100644 +index 91d746ad5..757f5526f 100644 --- a/drivers/gpu/drm/bridge/synopsys/Makefile +++ b/drivers/gpu/drm/bridge/synopsys/Makefile @@ -1,7 +1,8 @@ @@ -439158,7 +439187,7 @@ index 91d746ad5de1..757f5526fd64 100644 obj-$(CONFIG_DRM_DW_MIPI_DSI) += dw-mipi-dsi.o diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h -index f72d27208ebe..966d297ef41d 100644 +index f72d27208..966d297ef 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-audio.h @@ -17,6 +17,7 @@ struct dw_hdmi_i2s_audio_data { @@ -439170,7 +439199,7 @@ index f72d27208ebe..966d297ef41d 100644 }; diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c -index 70ab4fbdc23e..414d601bf216 100644 +index 70ab4fbdc..414d601bf 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c @@ -4,14 +4,17 @@ @@ -439546,7 +439575,7 @@ index 70ab4fbdc23e..414d601bf216 100644 return 0; } diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.h -index cf4dc121a2c4..ec10660a7e53 100644 +index cf4dc121a..ec10660a7 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.h +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.h @@ -3,17 +3,24 @@ @@ -439576,7 +439605,7 @@ index cf4dc121a2c4..ec10660a7e53 100644 #endif diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-hdcp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-hdcp.c new file mode 100755 -index 000000000000..24aab5043e61 +index 000000000..24aab5043 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-hdcp.c @@ -0,0 +1,748 @@ @@ -440330,7 +440359,7 @@ index 000000000000..24aab5043e61 +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-hdcp.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-hdcp.h new file mode 100755 -index 000000000000..d138f91f3422 +index 000000000..d138f91f3 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-hdcp.h @@ -0,0 +1,54 @@ @@ -440389,7 +440418,7 @@ index 000000000000..d138f91f3422 + +#endif diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c -index 9682416056ed..7ec390d46ca5 100644 +index 968241605..7ec390d46 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c @@ -34,6 +34,14 @@ static inline u8 hdmi_read(struct dw_hdmi_i2s_audio_data *audio, int offset) @@ -440478,7 +440507,7 @@ index 9682416056ed..7ec390d46ca5 100644 .get_eld = dw_hdmi_i2s_get_eld, diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-audio.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-audio.h new file mode 100755 -index 000000000000..93f1a42954e7 +index 000000000..93f1a4295 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-audio.h @@ -0,0 +1,29 @@ @@ -440513,7 +440542,7 @@ index 000000000000..93f1a42954e7 +#endif diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-cec.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-cec.c new file mode 100644 -index 000000000000..2d2320ed0769 +index 000000000..2d2320ed0 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-cec.c @@ -0,0 +1,336 @@ @@ -440855,7 +440884,7 @@ index 000000000000..2d2320ed0769 +MODULE_ALIAS(PLATFORM_MODULE_PREFIX "dw-hdmi-qp-cec"); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-cec.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-cec.h new file mode 100644 -index 000000000000..c0977c612e34 +index 000000000..c0977c612 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-cec.h @@ -0,0 +1,25 @@ @@ -440886,7 +440915,7 @@ index 000000000000..c0977c612e34 +#endif diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-hdcp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-hdcp.c new file mode 100644 -index 000000000000..7f55f7201ff8 +index 000000000..7f55f7201 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-hdcp.c @@ -0,0 +1,650 @@ @@ -441542,7 +441571,7 @@ index 000000000000..7f55f7201ff8 +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-hdcp.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-hdcp.h new file mode 100644 -index 000000000000..48c3a4843ac0 +index 000000000..48c3a4843 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-hdcp.h @@ -0,0 +1,55 @@ @@ -441603,7 +441632,7 @@ index 000000000000..48c3a4843ac0 +#endif diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.c new file mode 100755 -index 000000000000..5ece777c1afa +index 000000000..5ece777c1 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.c @@ -0,0 +1,188 @@ @@ -441797,7 +441826,7 @@ index 000000000000..5ece777c1afa +MODULE_ALIAS("platform:" DRIVER_NAME); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c new file mode 100755 -index 000000000000..ee29181563f9 +index 000000000..ee2918156 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -0,0 +1,4109 @@ @@ -445912,7 +445941,7 @@ index 000000000000..ee29181563f9 +MODULE_ALIAS("platform:dw-hdmi-qp"); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h new file mode 100755 -index 000000000000..e9b5e19a3be5 +index 000000000..e9b5e19a3 --- /dev/null +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.h @@ -0,0 +1,850 @@ @@ -446767,7 +446796,7 @@ index 000000000000..e9b5e19a3be5 + +#endif /* __DW_HDMI_QP_H__ */ diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c -index 2c3c743df950..5d20a72a186f 100644 +index 2c3c743df..5d20a72a1 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -9,6 +9,8 @@ @@ -449771,7 +449800,7 @@ index 2c3c743df950..5d20a72a186f 100644 EXPORT_SYMBOL_GPL(dw_hdmi_resume); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h -index 1999db05bc3b..71e476bcfaf4 100644 +index 1999db05b..71e476bcf 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.h @@ -509,6 +509,51 @@ @@ -449894,7 +449923,7 @@ index 1999db05bc3b..71e476bcfaf4 100644 /* diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c -index 376fa6eb46f6..71f0daa5f834 100644 +index 376fa6eb4..71f0daa5f 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c @@ -26,6 +26,8 @@ @@ -450520,7 +450549,7 @@ index 376fa6eb46f6..71f0daa5f834 100644 MODULE_AUTHOR("Philippe Cornu "); MODULE_DESCRIPTION("DW MIPI DSI host controller driver"); diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c -index 7fc8e7000046..4108c7265d53 100644 +index 0fde260b7..fee489a4a 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -296,12 +296,14 @@ update_connector_routing(struct drm_atomic_state *state, @@ -450550,7 +450579,7 @@ index 7fc8e7000046..4108c7265d53 100644 DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d:%s]\n", connector->base.id, -@@ -3554,6 +3557,9 @@ int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc, +@@ -3563,6 +3566,9 @@ int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc, replaced = drm_property_replace_blob(&crtc_state->degamma_lut, NULL); replaced |= drm_property_replace_blob(&crtc_state->ctm, NULL); replaced |= drm_property_replace_blob(&crtc_state->gamma_lut, blob); @@ -450561,7 +450590,7 @@ index 7fc8e7000046..4108c7265d53 100644 ret = drm_atomic_commit(state); diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c -index 9ad74045158e..c29183d2aa4e 100644 +index 9ad740451..c29183d2a 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -141,6 +141,10 @@ void __drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc, @@ -450586,7 +450615,7 @@ index 9ad74045158e..c29183d2aa4e 100644 EXPORT_SYMBOL(__drm_atomic_helper_crtc_destroy_state); diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c -index b6062833370f..1184ba39dafb 100644 +index b60628333..1184ba39d 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -461,6 +461,16 @@ static int drm_atomic_crtc_set_property(struct drm_crtc *crtc, @@ -450618,7 +450647,7 @@ index b6062833370f..1184ba39dafb 100644 *val = 0; else if (crtc->funcs->atomic_get_property) diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c -index c7adbeaf10b1..232abbba3686 100644 +index c7adbeaf1..232abbba3 100644 --- a/drivers/gpu/drm/drm_auth.c +++ b/drivers/gpu/drm/drm_auth.c @@ -135,18 +135,16 @@ static void drm_set_master(struct drm_device *dev, struct drm_file *fpriv, @@ -450693,7 +450722,7 @@ index c7adbeaf10b1..232abbba3686 100644 { struct drm_master *master = container_of(kref, struct drm_master, refcount); diff --git a/drivers/gpu/drm/drm_color_mgmt.c b/drivers/gpu/drm/drm_color_mgmt.c -index 138ff34b31db..7b270b68ade4 100644 +index 138ff34b3..7b270b68a 100644 --- a/drivers/gpu/drm/drm_color_mgmt.c +++ b/drivers/gpu/drm/drm_color_mgmt.c @@ -33,7 +33,7 @@ @@ -450761,7 +450790,7 @@ index 138ff34b31db..7b270b68ade4 100644 * Setting this to NULL (blob property value set to 0) means a * linear/pass-thru gamma table should be used. This is generally the diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c -index b0a826489488..3d7182001004 100644 +index b0a826489..3d7182001 100644 --- a/drivers/gpu/drm/drm_debugfs.c +++ b/drivers/gpu/drm/drm_debugfs.c @@ -91,7 +91,6 @@ static int drm_clients_info(struct seq_file *m, void *data) @@ -450782,7 +450811,7 @@ index b0a826489488..3d7182001004 100644 from_kuid_munged(seq_user_ns(m), uid), priv->magic); diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c -index 39eb39e78d7a..efc2372d32a7 100644 +index 39eb39e78..efc2372d3 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -1835,20 +1835,11 @@ static void connector_bad_edid(struct drm_connector *connector, @@ -450931,7 +450960,7 @@ index 39eb39e78d7a..efc2372d32a7 100644 } diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c -index 537e7de8e9c3..01670305df3d 100644 +index 537e7de8e..01670305d 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -177,7 +177,6 @@ struct drm_file *drm_file_alloc(struct drm_minor *minor) @@ -451043,7 +451072,7 @@ index 537e7de8e9c3..01670305df3d 100644 } EXPORT_SYMBOL(drm_send_event); diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c -index 8d1064061e83..e4c8aa3614a4 100644 +index 8d1064061..e4c8aa361 100644 --- a/drivers/gpu/drm/drm_fourcc.c +++ b/drivers/gpu/drm/drm_fourcc.c @@ -282,6 +282,16 @@ const struct drm_format_info *__drm_format_info(u32 format) @@ -451064,7 +451093,7 @@ index 8d1064061e83..e4c8aa3614a4 100644 .num_planes = 3, .char_per_block = { 2, 2, 2 }, .block_w = { 1, 1, 1 }, .block_h = { 1, 1, 1 }, .hsub = 1, diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c -index c160a45a4274..73818ffa019b 100644 +index c160a45a4..73818ffa0 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -543,6 +543,7 @@ int drm_version(struct drm_device *dev, void *data, @@ -451097,7 +451126,7 @@ index c160a45a4274..73818ffa019b 100644 DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER), DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER), diff --git a/drivers/gpu/drm/drm_lease.c b/drivers/gpu/drm/drm_lease.c -index aef22634005e..da4f085fc09e 100644 +index aef226340..da4f085fc 100644 --- a/drivers/gpu/drm/drm_lease.c +++ b/drivers/gpu/drm/drm_lease.c @@ -107,19 +107,10 @@ static bool _drm_has_leased(struct drm_master *master, int id) @@ -451334,7 +451363,7 @@ index aef22634005e..da4f085fc09e 100644 return ret; } diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c -index 0c806e99e869..fddc041aa865 100644 +index 0c806e99e..fddc041aa 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -356,6 +356,7 @@ static ssize_t mipi_dsi_device_transfer(struct mipi_dsi_device *dsi, @@ -451346,7 +451375,7 @@ index 0c806e99e869..fddc041aa865 100644 return ops->transfer(dsi->host, msg); } diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c -index fad2c1181127..58050d4aeabc 100644 +index fad2c1181..58050d4ae 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -364,6 +364,22 @@ static int drm_mode_create_standard_properties(struct drm_device *dev) @@ -451373,10 +451402,10 @@ index fad2c1181127..58050d4aeabc 100644 DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB, "IN_FORMATS", 0); diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c -index 0f99e5453f15..d42c7310bf09 100644 +index 8bebc29a1..1ced8f34b 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c -@@ -1940,6 +1940,7 @@ void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out, +@@ -1943,6 +1943,7 @@ void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out, strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN); out->name[DRM_DISPLAY_MODE_LEN-1] = 0; } @@ -451384,7 +451413,7 @@ index 0f99e5453f15..d42c7310bf09 100644 /** * drm_crtc_convert_umode - convert a modeinfo into a drm_display_mode -@@ -2016,6 +2017,7 @@ int drm_mode_convert_umode(struct drm_device *dev, +@@ -2019,6 +2020,7 @@ int drm_mode_convert_umode(struct drm_device *dev, return 0; } @@ -451393,7 +451422,7 @@ index 0f99e5453f15..d42c7310bf09 100644 /** * drm_mode_is_420_only - if a given videomode can be only supported in YCBCR420 diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c -index 825499ea3ff5..272e5cdd61ce 100644 +index 825499ea3..272e5cdd6 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -784,6 +784,28 @@ int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma) @@ -451435,7 +451464,7 @@ index 825499ea3ff5..272e5cdd61ce 100644 /** diff --git a/drivers/gpu/drm/drm_sync_helper.c b/drivers/gpu/drm/drm_sync_helper.c new file mode 100755 -index 000000000000..0c6aa875b4c6 +index 000000000..0c6aa875b --- /dev/null +++ b/drivers/gpu/drm/drm_sync_helper.c @@ -0,0 +1,314 @@ @@ -451754,7 +451783,7 @@ index 000000000000..0c6aa875b4c6 +} +EXPORT_SYMBOL(drm_sw_fence_new); diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c -index f135b79593dd..286edbe1bf7a 100644 +index f135b7959..286edbe1b 100644 --- a/drivers/gpu/drm/drm_vblank.c +++ b/drivers/gpu/drm/drm_vblank.c @@ -1000,7 +1000,14 @@ static void send_vblank_event(struct drm_device *dev, @@ -451774,7 +451803,7 @@ index f135b79593dd..286edbe1bf7a 100644 /** diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c -index c940ac3aae2f..a19537706ed1 100644 +index c940ac3aa..a19537706 100644 --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c @@ -305,9 +305,8 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id) @@ -451789,7 +451818,7 @@ index c940ac3aae2f..a19537706ed1 100644 engine->class = info->class; engine->instance = info->instance; diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c -index 6909da1e1a73..942c7c187adb 100644 +index 6909da1e1..942c7c187 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c @@ -213,6 +213,23 @@ static u32 guc_ctl_feature_flags(struct intel_guc *guc) @@ -451825,7 +451854,7 @@ index 6909da1e1a73..942c7c187adb 100644 params[GUC_CTL_FEATURE] = guc_ctl_feature_flags(guc); params[GUC_CTL_DEBUG] = guc_ctl_debug_flags(guc); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c -index 7950d28beb8c..d44061033f23 100644 +index 7950d28be..d44061033 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c @@ -10,52 +10,11 @@ @@ -452028,7 +452057,7 @@ index 7950d28beb8c..d44061033f23 100644 - guc_ads_private_data_reset(guc); } diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h -index 79c560d9c0b6..a6b733c146c9 100644 +index 79c560d9c..a6b733c14 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h @@ -26,8 +26,8 @@ @@ -452179,7 +452208,7 @@ index 79c560d9c0b6..a6b733c146c9 100644 /* GuC logging structures */ diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h -index b37fc2ffaef2..1949346e714e 100644 +index b37fc2ffa..1949346e7 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h @@ -118,11 +118,6 @@ struct guc_doorbell_info { @@ -452195,7 +452224,7 @@ index b37fc2ffaef2..1949346e714e 100644 #define GUC_BCS_RCS_IER _MMIO(0xC550) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c -index ee4ac3922277..80e8b6c3bc8c 100644 +index ee4ac3922..80e8b6c3b 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c @@ -44,19 +44,23 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw, @@ -452243,7 +452272,7 @@ index ee4ac3922277..80e8b6c3bc8c 100644 if (IS_ERR(obj)) { err = PTR_ERR(obj); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h -index 99bb1fe1af66..23d3a423ac0f 100644 +index 99bb1fe1a..23d3a423a 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h @@ -88,8 +88,6 @@ struct intel_uc_fw { @@ -452256,7 +452285,7 @@ index 99bb1fe1af66..23d3a423ac0f 100644 #ifdef CONFIG_DRM_I915_DEBUG_GUC diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h -index e41ffc7a7fbc..029214cdedd5 100644 +index e41ffc7a7..029214cde 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h @@ -69,11 +69,7 @@ struct uc_css_header { @@ -452273,7 +452302,7 @@ index e41ffc7a7fbc..029214cdedd5 100644 } __packed; static_assert(sizeof(struct uc_css_header) == 128); diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c -index 8e15ff95b809..92ed8d45657a 100644 +index 8e15ff95b..92ed8d456 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -563,7 +563,6 @@ nouveau_drm_device_init(struct drm_device *dev) @@ -452378,7 +452407,7 @@ index 8e15ff95b809..92ed8d45657a 100644 static const struct drm_ioctl_desc diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h -index 8b252dca0fc3..b8025507a9e4 100644 +index 8b252dca0..b8025507a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.h +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h @@ -142,11 +142,6 @@ struct nouveau_drm { @@ -452394,7 +452423,7 @@ index 8b252dca0fc3..b8025507a9e4 100644 struct { diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig -index 6153972e0127..b9dbedf8f15e 100644 +index 6153972e0..b9dbedf8f 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -233,7 +233,6 @@ config DRM_PANEL_OLIMEX_LCD_OLINUXINO @@ -452406,7 +452435,7 @@ index 6153972e0127..b9dbedf8f15e 100644 The panel is used with different sizes LCDs, from 480x272 to 1280x800, and 24 bit per pixel. diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c -index 534dd7414d42..0145129d7c66 100644 +index 534dd7414..0145129d7 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c @@ -590,14 +590,14 @@ static const struct drm_display_mode k101_im2byl02_default_mode = { @@ -452431,7 +452460,7 @@ index 534dd7414d42..0145129d7c66 100644 .width_mm = 135, .height_mm = 217, diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c -index 1a87cc445b5e..d6c0bbc03c6d 100644 +index ee01b61a6..816474848 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -30,6 +30,7 @@ @@ -452870,7 +452899,7 @@ index 1a87cc445b5e..d6c0bbc03c6d 100644 connector_type = DRM_MODE_CONNECTOR_DPI; break; case DRM_MODE_CONNECTOR_LVDS: -@@ -3906,6 +4189,9 @@ static const struct panel_desc arm_rtsm = { +@@ -3911,6 +4194,9 @@ static const struct panel_desc arm_rtsm = { static const struct of_device_id platform_of_match[] = { { @@ -452880,7 +452909,7 @@ index 1a87cc445b5e..d6c0bbc03c6d 100644 .compatible = "ampire,am-1280800n3tzqw-t00h", .data = &ire_am_1280800n3tzqw_t00h, }, { -@@ -4314,15 +4600,132 @@ static const struct of_device_id platform_of_match[] = { +@@ -4319,15 +4605,132 @@ static const struct of_device_id platform_of_match[] = { }; MODULE_DEVICE_TABLE(of, platform_of_match); @@ -453014,7 +453043,7 @@ index 1a87cc445b5e..d6c0bbc03c6d 100644 } static int panel_simple_platform_remove(struct platform_device *pdev) -@@ -4557,6 +4960,9 @@ static const struct panel_desc_dsi osd101t2045_53ts = { +@@ -4562,6 +4965,9 @@ static const struct panel_desc_dsi osd101t2045_53ts = { static const struct of_device_id dsi_of_match[] = { { @@ -453024,7 +453053,7 @@ index 1a87cc445b5e..d6c0bbc03c6d 100644 .compatible = "auo,b080uan01", .data = &auo_b080uan01 }, { -@@ -4583,9 +4989,33 @@ static const struct of_device_id dsi_of_match[] = { +@@ -4588,9 +4994,33 @@ static const struct of_device_id dsi_of_match[] = { }; MODULE_DEVICE_TABLE(of, dsi_of_match); @@ -453058,7 +453087,7 @@ index 1a87cc445b5e..d6c0bbc03c6d 100644 const struct of_device_id *id; int err; -@@ -4593,12 +5023,47 @@ static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi) +@@ -4598,12 +5028,47 @@ static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi) if (!id) return -ENODEV; @@ -453109,7 +453138,7 @@ index 1a87cc445b5e..d6c0bbc03c6d 100644 dsi->lanes = desc->lanes; diff --git a/drivers/gpu/drm/panel/panel-simple.h b/drivers/gpu/drm/panel/panel-simple.h new file mode 100755 -index 000000000000..7349c35e3cb2 +index 000000000..7349c35e3 --- /dev/null +++ b/drivers/gpu/drm/panel/panel-simple.h @@ -0,0 +1,19 @@ @@ -453133,7 +453162,7 @@ index 000000000000..7349c35e3cb2 +#endif +#endif diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig -index 310aa1546893..3154597de251 100644 +index 310aa1546..3154597de 100644 --- a/drivers/gpu/drm/rockchip/Kconfig +++ b/drivers/gpu/drm/rockchip/Kconfig @@ -1,7 +1,7 @@ @@ -453275,7 +453304,7 @@ index 310aa1546893..3154597de251 100644 + endif diff --git a/drivers/gpu/drm/rockchip/Makefile b/drivers/gpu/drm/rockchip/Makefile -index 17a9e7eb2130..3287356fa0f8 100644 +index 17a9e7eb2..3287356fa 100644 --- a/drivers/gpu/drm/rockchip/Makefile +++ b/drivers/gpu/drm/rockchip/Makefile @@ -4,16 +4,33 @@ @@ -453316,7 +453345,7 @@ index 17a9e7eb2130..3287356fa0f8 100644 +obj-$(CONFIG_DRM_ROCKCHIP_RK618) += rk618/ +obj-$(CONFIG_DRM_ROCKCHIP_RK628) += rk628/ diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c -index 512581698a1e..9f09525b4bc0 100644 +index 512581698..9f09525b4 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -16,6 +16,7 @@ @@ -454100,7 +454129,7 @@ index 512581698a1e..9f09525b4bc0 100644 }; MODULE_DEVICE_TABLE(of, rockchip_dp_dt_ids); diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c -index adeaa0140f0f..9804fe1ba9a5 100644 +index 53cad1003..6d4904547 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-core.c +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c @@ -6,7 +6,6 @@ @@ -454442,9 +454471,9 @@ index adeaa0140f0f..9804fe1ba9a5 100644 struct cdn_dp_device *dp; - struct extcon_dev *extcon; struct phy *phy; + int ret; int i; - -@@ -1156,21 +1151,18 @@ static int cdn_dp_probe(struct platform_device *pdev) +@@ -1157,21 +1152,18 @@ static int cdn_dp_probe(struct platform_device *pdev) dp_data = (struct cdn_dp_data *)match->data; for (i = 0; i < dp_data->max_phy; i++) { @@ -454468,7 +454497,7 @@ index adeaa0140f0f..9804fe1ba9a5 100644 port->phy = phy; port->dp = dp; port->id = i; -@@ -1178,7 +1170,7 @@ static int cdn_dp_probe(struct platform_device *pdev) +@@ -1179,7 +1171,7 @@ static int cdn_dp_probe(struct platform_device *pdev) } if (!dp->ports) { @@ -454478,7 +454507,7 @@ index adeaa0140f0f..9804fe1ba9a5 100644 } diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.h b/drivers/gpu/drm/rockchip/cdn-dp-core.h -index 81ac9b658a70..60a8c095b30f 100644 +index 81ac9b658..60a8c095b 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-core.h +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.h @@ -53,8 +53,6 @@ struct cdn_firmware_header { @@ -454518,7 +454547,7 @@ index 81ac9b658a70..60a8c095b30f 100644 bool sink_has_audio; diff --git a/drivers/gpu/drm/rockchip/cdn-dp-link-training.c b/drivers/gpu/drm/rockchip/cdn-dp-link-training.c new file mode 100755 -index 000000000000..ec2f001c2557 +index 000000000..ec2f001c2 --- /dev/null +++ b/drivers/gpu/drm/rockchip/cdn-dp-link-training.c @@ -0,0 +1,447 @@ @@ -454970,7 +454999,7 @@ index 000000000000..ec2f001c2557 + return ret; +} diff --git a/drivers/gpu/drm/rockchip/cdn-dp-reg.c b/drivers/gpu/drm/rockchip/cdn-dp-reg.c -index 33fb4d05c506..2a544869e8de 100644 +index 33fb4d05c..2a544869e 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-reg.c +++ b/drivers/gpu/drm/rockchip/cdn-dp-reg.c @@ -181,7 +181,7 @@ static int cdn_dp_mailbox_send(struct cdn_dp_device *dp, u8 module_id, @@ -455143,7 +455172,7 @@ index 33fb4d05c506..2a544869e8de 100644 ret = cdn_dp_reg_write(dp, BND_HSYNC2VSYNC, VIF_BYPASS_INTERLACE); if (ret) diff --git a/drivers/gpu/drm/rockchip/cdn-dp-reg.h b/drivers/gpu/drm/rockchip/cdn-dp-reg.h -index 441248b7a79e..656ec69be66d 100644 +index 441248b7a..656ec69be 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-reg.h +++ b/drivers/gpu/drm/rockchip/cdn-dp-reg.h @@ -8,6 +8,7 @@ @@ -455241,10 +455270,10 @@ index 441248b7a79e..656ec69be66d 100644 #endif /* _CDN_DP_REG_H */ diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c new file mode 100755 -index 000000000000..e6c3ac37c1b0 +index 000000000..70327150d --- /dev/null +++ b/drivers/gpu/drm/rockchip/dw-dp.c -@@ -0,0 +1,4250 @@ +@@ -0,0 +1,4240 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Synopsys DesignWare Cores DisplayPort Transmitter Controller @@ -456305,15 +456334,13 @@ index 000000000000..e6c3ac37c1b0 +{ + struct dw_dp *dp = connector_to_dp(connector); + -+ if (connector->status == connector_status_connected) { ++ if (connector->status == connector_status_connected) + extcon_set_state_sync(dp->extcon, EXTCON_DISP_DP, true); -+ dw_dp_audio_handle_plugged_change(&dp->audio, true); -+ } else { ++ else + extcon_set_state_sync(dp->extcon, EXTCON_DISP_DP, false); -+ dw_dp_audio_handle_plugged_change(&dp->audio, false); -+ } +} + ++ +static void dw_dp_atomic_connector_reset(struct drm_connector *connector) +{ + struct dw_dp_state *dp_state = connector_to_dp_state(connector->state); @@ -456497,7 +456524,6 @@ index 000000000000..e6c3ac37c1b0 + if (edid) { + drm_connector_update_edid_property(connector, edid); + num_modes = drm_add_edid_modes(connector, edid); -+ dw_dp_update_hdr_property(connector); + kfree(edid); + } + } @@ -458427,14 +458453,10 @@ index 000000000000..e6c3ac37c1b0 + if (ret) + goto fail_power_on; + -+ ret = drm_dp_dpcd_readb(&dp->aux, DP_DPCD_REV, &value); -+ if (ret < 0) { -+ dev_err(dp->dev, "aux failed to read dpcd: %d\n", ret); -+ goto fail_probe; -+ } + + ret = dw_dp_link_probe(dp); + if (ret) { ++ phy_power_off(dp->phy); + dev_err(dp->dev, "failed to probe DP link: %d\n", ret); + goto fail_probe; + } @@ -459175,9 +459197,7 @@ index 000000000000..e6c3ac37c1b0 + pm_runtime_enable(dp->dev); + pm_runtime_get_sync(dp->dev); + -+ enable_irq(dp->irq); -+ if (dp->hpd_gpio) -+ enable_irq(dp->hpd_irq); ++ + + return 0; +} @@ -459186,9 +459206,6 @@ index 000000000000..e6c3ac37c1b0 +{ + struct dw_dp *dp = dev_get_drvdata(dev); + -+ if (dp->hpd_gpio) -+ disable_irq(dp->hpd_irq); -+ disable_irq(dp->irq); + + pm_runtime_put(dp->dev); + pm_runtime_disable(dp->dev); @@ -459454,6 +459471,8 @@ index 000000000000..e6c3ac37c1b0 +{ + struct dw_dp *dp = dev_get_drvdata(dev); + ++ disable_irq(dp->irq); ++ + clk_disable_unprepare(dp->aux_clk); + clk_disable_unprepare(dp->apb_clk); + clk_disable_unprepare(dp->hclk); @@ -459476,8 +459495,8 @@ index 000000000000..e6c3ac37c1b0 + +static const struct dev_pm_ops dw_dp_pm_ops = { + SET_RUNTIME_PM_OPS(dw_dp_runtime_suspend, dw_dp_runtime_resume, NULL) -+ SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, -+ pm_runtime_force_resume) ++ SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, ++ pm_runtime_force_resume) +}; + +static const struct of_device_id dw_dp_of_match[] = { @@ -459496,7 +459515,7 @@ index 000000000000..e6c3ac37c1b0 + }, +}; diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c -index 82cbfccba1bc..2ff99e503224 100644 +index 82cbfccba..2ff99e503 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c @@ -16,8 +16,9 @@ @@ -460450,7 +460469,7 @@ index 82cbfccba1bc..2ff99e503224 100644 * For dual-DSI display, one DSI pokes at the other DSI's diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c new file mode 100755 -index 000000000000..e66df80980f4 +index 000000000..e66df8098 --- /dev/null +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c @@ -0,0 +1,1868 @@ @@ -462324,7 +462343,7 @@ index 000000000000..e66df80980f4 +}; diff --git a/drivers/gpu/drm/rockchip/dw_hdcp2.c b/drivers/gpu/drm/rockchip/dw_hdcp2.c new file mode 100644 -index 000000000000..f8362ddea171 +index 000000000..f8362ddea --- /dev/null +++ b/drivers/gpu/drm/rockchip/dw_hdcp2.c @@ -0,0 +1,642 @@ @@ -462971,7 +462990,7 @@ index 000000000000..f8362ddea171 +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Rockchip HDCP Host Library Driver"); diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c -index 23de359a1dec..3253cf215c5f 100644 +index 23de359a1..d45b82116 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -4,21 +4,33 @@ @@ -463481,7 +463500,7 @@ index 23de359a1dec..3253cf215c5f 100644 }, } }; -@@ -160,171 +450,2679 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = { +@@ -160,171 +450,2682 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = { static const struct dw_hdmi_curr_ctrl rockchip_cur_ctr[] = { /* pixelclk bpp8 bpp10 bpp12 */ { @@ -464214,8 +464233,7 @@ index 23de359a1dec..3253cf215c5f 100644 + u16 pic_width, u16 pic_height, + u16 slice_width, u16 slice_height, + u16 bits_per_pixel, u8 bits_per_component) - { -- return true; ++{ + int i; + + for (i = 0; i < PPS_TABLE_LEN; i++) @@ -464238,16 +464256,12 @@ index 23de359a1dec..3253cf215c5f 100644 + (pic_width / slice_width); + + return 0; - } - --static void dw_hdmi_rockchip_encoder_mode_set(struct drm_encoder *encoder, -- struct drm_display_mode *mode, -- struct drm_display_mode *adj_mode) ++} ++ +static void dw_hdmi_qp_dsc_configure(struct rockchip_hdmi *hdmi, + struct rockchip_crtc_state *s, + struct drm_crtc_state *crtc_state) - { -- struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder); ++{ + int ret; + int slice_height; + int slice_width; @@ -464360,7 +464374,8 @@ index 23de359a1dec..3253cf215c5f 100644 +} + +static irqreturn_t rockchip_hdmi_irq(int irq, void *dev_id) -+{ + { +- return true; + struct rockchip_hdmi *hdmi = dev_id; + u32 intr_stat, val; + int msecs; @@ -464951,6 +464966,8 @@ index 23de359a1dec..3253cf215c5f 100644 + } +} + ++ ++ +static void rk3588_set_color_format(struct rockchip_hdmi *hdmi, u64 bus_format, + u32 depth) +{ @@ -465066,6 +465083,7 @@ index 23de359a1dec..3253cf215c5f 100644 + return bus_format; +} + ++ +static void +dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state, + struct drm_crtc_state *crtc_state, @@ -466152,12 +466170,10 @@ index 23de359a1dec..3253cf215c5f 100644 + + DRM_ERROR("Unknown property [PROP:%d:%s]\n", + property->base.id, property->name); - -- clk_set_rate(hdmi->vpll_clk, adj_mode->clock * 1000); ++ + return -EINVAL; } --static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder) +static const struct dw_hdmi_property_ops dw_hdmi_rockchip_property_ops = { + .attach_properties = dw_hdmi_rockchip_attach_properties, + .destroy_properties = dw_hdmi_rockchip_destroy_properties, @@ -466165,8 +466181,16 @@ index 23de359a1dec..3253cf215c5f 100644 + .get_property = dw_hdmi_rockchip_get_property, +}; + -+static void dw_hdmi_rockchip_encoder_mode_set(struct drm_encoder *encoder, -+ struct drm_display_mode *mode, + static void dw_hdmi_rockchip_encoder_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *mode, +- struct drm_display_mode *adj_mode) +-{ +- struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder); +- +- clk_set_rate(hdmi->vpll_clk, adj_mode->clock * 1000); +-} +- +-static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder) + struct drm_display_mode *adj) { struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder); @@ -466262,7 +466286,7 @@ index 23de359a1dec..3253cf215c5f 100644 } static void dw_hdmi_rk3228_setup_hpd(struct dw_hdmi *dw_hdmi, void *data) -@@ -391,6 +3189,90 @@ static void dw_hdmi_rk3328_setup_hpd(struct dw_hdmi *dw_hdmi, void *data) +@@ -391,6 +3192,90 @@ static void dw_hdmi_rk3328_setup_hpd(struct dw_hdmi *dw_hdmi, void *data) RK3328_HDMI_HPD_IOE)); } @@ -466353,7 +466377,7 @@ index 23de359a1dec..3253cf215c5f 100644 static const struct dw_hdmi_phy_ops rk3228_hdmi_phy_ops = { .init = dw_hdmi_rockchip_genphy_init, .disable = dw_hdmi_rockchip_genphy_disable, -@@ -412,6 +3294,8 @@ static const struct dw_hdmi_plat_data rk3228_hdmi_drv_data = { +@@ -412,6 +3297,8 @@ static const struct dw_hdmi_plat_data rk3228_hdmi_drv_data = { .phy_ops = &rk3228_hdmi_phy_ops, .phy_name = "inno_dw_hdmi_phy2", .phy_force_vendor = true, @@ -466362,7 +466386,7 @@ index 23de359a1dec..3253cf215c5f 100644 }; static struct rockchip_hdmi_chip_data rk3288_chip_data = { -@@ -423,9 +3307,13 @@ static struct rockchip_hdmi_chip_data rk3288_chip_data = { +@@ -423,9 +3310,13 @@ static struct rockchip_hdmi_chip_data rk3288_chip_data = { static const struct dw_hdmi_plat_data rk3288_hdmi_drv_data = { .mode_valid = dw_hdmi_rockchip_mode_valid, .mpll_cfg = rockchip_mpll_cfg, @@ -466376,7 +466400,7 @@ index 23de359a1dec..3253cf215c5f 100644 }; static const struct dw_hdmi_phy_ops rk3328_hdmi_phy_ops = { -@@ -436,6 +3324,20 @@ static const struct dw_hdmi_phy_ops rk3328_hdmi_phy_ops = { +@@ -436,6 +3327,20 @@ static const struct dw_hdmi_phy_ops rk3328_hdmi_phy_ops = { .setup_hpd = dw_hdmi_rk3328_setup_hpd, }; @@ -466397,7 +466421,7 @@ index 23de359a1dec..3253cf215c5f 100644 static struct rockchip_hdmi_chip_data rk3328_chip_data = { .lcdsel_grf_reg = -1, }; -@@ -450,6 +3352,24 @@ static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = { +@@ -450,6 +3355,24 @@ static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = { .phy_name = "inno_dw_hdmi_phy2", .phy_force_vendor = true, .use_drm_infoframe = true, @@ -466422,7 +466446,7 @@ index 23de359a1dec..3253cf215c5f 100644 }; static struct rockchip_hdmi_chip_data rk3399_chip_data = { -@@ -461,10 +3381,70 @@ static struct rockchip_hdmi_chip_data rk3399_chip_data = { +@@ -461,10 +3384,70 @@ static struct rockchip_hdmi_chip_data rk3399_chip_data = { static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = { .mode_valid = dw_hdmi_rockchip_mode_valid, .mpll_cfg = rockchip_mpll_cfg, @@ -466493,7 +466517,7 @@ index 23de359a1dec..3253cf215c5f 100644 }; static const struct of_device_id dw_hdmi_rockchip_dt_ids[] = { -@@ -477,9 +3457,22 @@ static const struct of_device_id dw_hdmi_rockchip_dt_ids[] = { +@@ -477,9 +3460,22 @@ static const struct of_device_id dw_hdmi_rockchip_dt_ids[] = { { .compatible = "rockchip,rk3328-dw-hdmi", .data = &rk3328_hdmi_drv_data }, @@ -466516,7 +466540,7 @@ index 23de359a1dec..3253cf215c5f 100644 {}, }; MODULE_DEVICE_TABLE(of, dw_hdmi_rockchip_dt_ids); -@@ -488,40 +3481,115 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, +@@ -488,40 +3484,115 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, void *data) { struct platform_device *pdev = to_platform_device(dev); @@ -466652,7 +466676,7 @@ index 23de359a1dec..3253cf215c5f 100644 ret = rockchip_hdmi_parse_dt(hdmi); if (ret) { -@@ -529,27 +3597,182 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, +@@ -529,27 +3600,182 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, return ret; } @@ -466844,7 +466868,7 @@ index 23de359a1dec..3253cf215c5f 100644 /* * If dw_hdmi_bind() fails we'll never call dw_hdmi_unbind(), -@@ -557,8 +3780,21 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, +@@ -557,8 +3783,21 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, */ if (IS_ERR(hdmi->hdmi)) { ret = PTR_ERR(hdmi->hdmi); @@ -466868,7 +466892,7 @@ index 23de359a1dec..3253cf215c5f 100644 } return ret; -@@ -569,8 +3805,27 @@ static void dw_hdmi_rockchip_unbind(struct device *dev, struct device *master, +@@ -569,8 +3808,27 @@ static void dw_hdmi_rockchip_unbind(struct device *dev, struct device *master, { struct rockchip_hdmi *hdmi = dev_get_drvdata(dev); @@ -466898,7 +466922,7 @@ index 23de359a1dec..3253cf215c5f 100644 } static const struct component_ops dw_hdmi_rockchip_ops = { -@@ -580,32 +3835,150 @@ static const struct component_ops dw_hdmi_rockchip_ops = { +@@ -580,32 +3838,143 @@ static const struct component_ops dw_hdmi_rockchip_ops = { static int dw_hdmi_rockchip_probe(struct platform_device *pdev) { @@ -466943,17 +466967,10 @@ index 23de359a1dec..3253cf215c5f 100644 + return; + + if (hdmi->is_hdmi_qp) { -+ if (hdmi->hpd_irq) -+ disable_irq(hdmi->hpd_irq); + cancel_delayed_work(&hdmi->work); + flush_workqueue(hdmi->workqueue); + dw_hdmi_qp_suspend(hdmi->dev, hdmi->hdmi_qp); + } else { -+ if (hdmi->hpd_gpiod) { -+ disable_irq(hdmi->hpd_irq); -+ if (hdmi->hpd_wake_en) -+ disable_irq_wake(hdmi->hpd_irq); -+ } + dw_hdmi_suspend(hdmi->hdmi); + } + pm_runtime_put_sync(&pdev->dev); @@ -467054,7 +467071,7 @@ index 23de359a1dec..3253cf215c5f 100644 .pm = &dw_hdmi_rockchip_pm, diff --git a/drivers/gpu/drm/rockchip/ebc-dev/Kconfig b/drivers/gpu/drm/rockchip/ebc-dev/Kconfig new file mode 100755 -index 000000000000..949c8e4b7b57 +index 000000000..949c8e4b7 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/Kconfig @@ -0,0 +1,14 @@ @@ -467074,7 +467091,7 @@ index 000000000000..949c8e4b7b57 +endchoice diff --git a/drivers/gpu/drm/rockchip/ebc-dev/Makefile b/drivers/gpu/drm/rockchip/ebc-dev/Makefile new file mode 100755 -index 000000000000..848ac22fd0b2 +index 000000000..848ac22fd --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/Makefile @@ -0,0 +1,9 @@ @@ -467089,7 +467106,7 @@ index 000000000000..848ac22fd0b2 +rkebc-$(CONFIG_ARM64) += ebc_dev_v8.o diff --git a/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/Makefile b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/Makefile new file mode 100755 -index 000000000000..a63ef49dea04 +index 000000000..a63ef49de --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/Makefile @@ -0,0 +1,3 @@ @@ -467098,7 +467115,7 @@ index 000000000000..a63ef49dea04 +obj-$(CONFIG_ROCKCHIP_EBC_DEV) += buf_manage.o buf_list.o diff --git a/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_list.c b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_list.c new file mode 100755 -index 000000000000..90f350110b70 +index 000000000..90f350110 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_list.c @@ -0,0 +1,171 @@ @@ -467275,7 +467292,7 @@ index 000000000000..90f350110b70 +} diff --git a/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_list.h b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_list.h new file mode 100755 -index 000000000000..eaf504560fb8 +index 000000000..eaf504560 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_list.h @@ -0,0 +1,95 @@ @@ -467376,7 +467393,7 @@ index 000000000000..eaf504560fb8 +#endif diff --git a/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_manage.c b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_manage.c new file mode 100755 -index 000000000000..a2e47b45c148 +index 000000000..a2e47b45c --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_manage.c @@ -0,0 +1,327 @@ @@ -467709,7 +467726,7 @@ index 000000000000..a2e47b45c148 +} diff --git a/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_manage.h b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_manage.h new file mode 100755 -index 000000000000..745cdbf9cfde +index 000000000..745cdbf9c --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/bufmanage/buf_manage.h @@ -0,0 +1,49 @@ @@ -467764,7 +467781,7 @@ index 000000000000..745cdbf9cfde + diff --git a/drivers/gpu/drm/rockchip/ebc-dev/ebc_dev.h b/drivers/gpu/drm/rockchip/ebc-dev/ebc_dev.h new file mode 100755 -index 000000000000..5fc2fecd22cb +index 000000000..5fc2fecd2 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/ebc_dev.h @@ -0,0 +1,114 @@ @@ -467884,7 +467901,7 @@ index 000000000000..5fc2fecd22cb +#endif diff --git a/drivers/gpu/drm/rockchip/ebc-dev/ebc_dev_v8.S b/drivers/gpu/drm/rockchip/ebc-dev/ebc_dev_v8.S new file mode 100755 -index 000000000000..65be1fdee09f +index 000000000..65be1fdee --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/ebc_dev_v8.S @@ -0,0 +1,55302 @@ @@ -523192,7 +523209,7 @@ index 000000000000..65be1fdee09f + .section .note.GNU-stack,"",@progbits diff --git a/drivers/gpu/drm/rockchip/ebc-dev/ebc_panel.h b/drivers/gpu/drm/rockchip/ebc-dev/ebc_panel.h new file mode 100755 -index 000000000000..dc0a72b11b21 +index 000000000..dc0a72b11 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/ebc_panel.h @@ -0,0 +1,50 @@ @@ -523248,7 +523265,7 @@ index 000000000000..dc0a72b11b21 +#endif diff --git a/drivers/gpu/drm/rockchip/ebc-dev/ebc_public.c b/drivers/gpu/drm/rockchip/ebc-dev/ebc_public.c new file mode 100755 -index 000000000000..8ecccb7f6403 +index 000000000..8ecccb7f6 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/ebc_public.c @@ -0,0 +1,36 @@ @@ -523290,7 +523307,7 @@ index 000000000000..8ecccb7f6403 +} diff --git a/drivers/gpu/drm/rockchip/ebc-dev/epdlut/Makefile b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/Makefile new file mode 100755 -index 000000000000..6b99702b7a6f +index 000000000..6b99702b7 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/Makefile @@ -0,0 +1,5 @@ @@ -523301,7 +523318,7 @@ index 000000000000..6b99702b7a6f +waveform-$(CONFIG_ARM64) += pvi_waveform_v8.o rkf_waveform_v8.o diff --git a/drivers/gpu/drm/rockchip/ebc-dev/epdlut/epd_lut.c b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/epd_lut.c new file mode 100755 -index 000000000000..8871b37d52cc +index 000000000..8871b37d5 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/epd_lut.c @@ -0,0 +1,72 @@ @@ -523379,7 +523396,7 @@ index 000000000000..8871b37d52cc +} diff --git a/drivers/gpu/drm/rockchip/ebc-dev/epdlut/epd_lut.h b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/epd_lut.h new file mode 100755 -index 000000000000..8d2210603a29 +index 000000000..8d2210603 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/epd_lut.h @@ -0,0 +1,66 @@ @@ -523451,7 +523468,7 @@ index 000000000000..8d2210603a29 +#endif diff --git a/drivers/gpu/drm/rockchip/ebc-dev/epdlut/pvi_waveform_v8.S b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/pvi_waveform_v8.S new file mode 100755 -index 000000000000..849c81dcfc71 +index 000000000..849c81dcf --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/pvi_waveform_v8.S @@ -0,0 +1,18656 @@ @@ -542113,7 +542130,7 @@ index 000000000000..849c81dcfc71 + .section .note.GNU-stack,"",@progbits diff --git a/drivers/gpu/drm/rockchip/ebc-dev/epdlut/rkf_waveform_v8.S b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/rkf_waveform_v8.S new file mode 100755 -index 000000000000..8a17822240c5 +index 000000000..8a1782224 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/epdlut/rkf_waveform_v8.S @@ -0,0 +1,19357 @@ @@ -561476,7 +561493,7 @@ index 000000000000..8a17822240c5 + .section .note.GNU-stack,"",@progbits diff --git a/drivers/gpu/drm/rockchip/ebc-dev/pmic/Makefile b/drivers/gpu/drm/rockchip/ebc-dev/pmic/Makefile new file mode 100755 -index 000000000000..a05717f1ce98 +index 000000000..a05717f1c --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/pmic/Makefile @@ -0,0 +1,4 @@ @@ -561486,7 +561503,7 @@ index 000000000000..a05717f1ce98 +obj-$(CONFIG_EPD_TPS65185_SENSOR) += tps65185.o diff --git a/drivers/gpu/drm/rockchip/ebc-dev/pmic/ebc_pmic.c b/drivers/gpu/drm/rockchip/ebc-dev/pmic/ebc_pmic.c new file mode 100755 -index 000000000000..c24db23dc47d +index 000000000..c24db23dc --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/pmic/ebc_pmic.c @@ -0,0 +1,70 @@ @@ -561562,7 +561579,7 @@ index 000000000000..c24db23dc47d +module_param(vcom, int, 0644); diff --git a/drivers/gpu/drm/rockchip/ebc-dev/pmic/ebc_pmic.h b/drivers/gpu/drm/rockchip/ebc-dev/pmic/ebc_pmic.h new file mode 100755 -index 000000000000..f95192094ba7 +index 000000000..f95192094 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/pmic/ebc_pmic.h @@ -0,0 +1,60 @@ @@ -561628,7 +561645,7 @@ index 000000000000..f95192094ba7 +#endif diff --git a/drivers/gpu/drm/rockchip/ebc-dev/pmic/tps65185.c b/drivers/gpu/drm/rockchip/ebc-dev/pmic/tps65185.c new file mode 100755 -index 000000000000..f007dd0adb65 +index 000000000..f007dd0ad --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/pmic/tps65185.c @@ -0,0 +1,672 @@ @@ -562306,7 +562323,7 @@ index 000000000000..f007dd0adb65 +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/rockchip/ebc-dev/tcon/Makefile b/drivers/gpu/drm/rockchip/ebc-dev/tcon/Makefile new file mode 100755 -index 000000000000..913d4813773b +index 000000000..913d48137 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/tcon/Makefile @@ -0,0 +1,3 @@ @@ -562315,7 +562332,7 @@ index 000000000000..913d4813773b +obj-$(CONFIG_ROCKCHIP_EBC_DEV) += ebc_tcon.o eink_tcon.o diff --git a/drivers/gpu/drm/rockchip/ebc-dev/tcon/ebc_tcon.c b/drivers/gpu/drm/rockchip/ebc-dev/tcon/ebc_tcon.c new file mode 100755 -index 000000000000..23c82751bb1b +index 000000000..23c82751b --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/tcon/ebc_tcon.c @@ -0,0 +1,416 @@ @@ -562737,7 +562754,7 @@ index 000000000000..23c82751bb1b +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/ebc-dev/tcon/ebc_tcon.h b/drivers/gpu/drm/rockchip/ebc-dev/tcon/ebc_tcon.h new file mode 100755 -index 000000000000..9a9ea56f3cdb +index 000000000..9a9ea56f3 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/tcon/ebc_tcon.h @@ -0,0 +1,119 @@ @@ -562862,7 +562879,7 @@ index 000000000000..9a9ea56f3cdb +#endif diff --git a/drivers/gpu/drm/rockchip/ebc-dev/tcon/eink_tcon.c b/drivers/gpu/drm/rockchip/ebc-dev/tcon/eink_tcon.c new file mode 100755 -index 000000000000..01b2b9629c35 +index 000000000..01b2b9629 --- /dev/null +++ b/drivers/gpu/drm/rockchip/ebc-dev/tcon/eink_tcon.c @@ -0,0 +1,301 @@ @@ -563168,7 +563185,7 @@ index 000000000000..01b2b9629c35 +MODULE_DESCRIPTION("ROCKCHIP EINK tcon driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c -index 78120da5e63a..c74e0367caf9 100644 +index 78120da5e..c74e0367c 100644 --- a/drivers/gpu/drm/rockchip/inno_hdmi.c +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c @@ -21,6 +21,8 @@ @@ -563678,7 +563695,7 @@ index 78120da5e63a..c74e0367caf9 100644 .probe = inno_hdmi_probe, .remove = inno_hdmi_remove, diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.h b/drivers/gpu/drm/rockchip/inno_hdmi.h -index 93245b55f967..b722afc4e41f 100644 +index 93245b55f..b722afc4e 100644 --- a/drivers/gpu/drm/rockchip/inno_hdmi.h +++ b/drivers/gpu/drm/rockchip/inno_hdmi.h @@ -96,11 +96,13 @@ enum { @@ -563697,7 +563714,7 @@ index 93245b55f967..b722afc4e41f 100644 #define HDMI_VIDEO_TIMING_CTL 0x08 diff --git a/drivers/gpu/drm/rockchip/kernel_logo_img.h b/drivers/gpu/drm/rockchip/kernel_logo_img.h new file mode 100644 -index 000000000000..98c4443ec1bd +index 000000000..98c4443ec --- /dev/null +++ b/drivers/gpu/drm/rockchip/kernel_logo_img.h @@ -0,0 +1,21855 @@ @@ -585557,7 +585574,7 @@ index 000000000000..98c4443ec1bd + 0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; diff --git a/drivers/gpu/drm/rockchip/rk3066_hdmi.c b/drivers/gpu/drm/rockchip/rk3066_hdmi.c -index 17e7c40a9e7b..46683937fc07 100644 +index 17e7c40a9..46683937f 100644 --- a/drivers/gpu/drm/rockchip/rk3066_hdmi.c +++ b/drivers/gpu/drm/rockchip/rk3066_hdmi.c @@ -542,7 +542,7 @@ rk3066_hdmi_register(struct drm_device *drm, struct rk3066_hdmi *hdmi) @@ -585571,7 +585588,7 @@ index 17e7c40a9e7b..46683937fc07 100644 * If we failed to find the CRTC(s) which this encoder is diff --git a/drivers/gpu/drm/rockchip/rk618/Kconfig b/drivers/gpu/drm/rockchip/rk618/Kconfig new file mode 100755 -index 000000000000..03ae305a93c1 +index 000000000..03ae305a9 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/Kconfig @@ -0,0 +1,10 @@ @@ -585587,7 +585604,7 @@ index 000000000000..03ae305a93c1 + Rockchip rk618 display bridge chips driver. diff --git a/drivers/gpu/drm/rockchip/rk618/Makefile b/drivers/gpu/drm/rockchip/rk618/Makefile new file mode 100755 -index 000000000000..ad3ac27b36ad +index 000000000..ad3ac27b3 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/Makefile @@ -0,0 +1,12 @@ @@ -585605,7 +585622,7 @@ index 000000000000..ad3ac27b36ad + rk618_dsi.o diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_dither.c b/drivers/gpu/drm/rockchip/rk618/rk618_dither.c new file mode 100755 -index 000000000000..a9bc0c37c2d6 +index 000000000..a9bc0c37c --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_dither.c @@ -0,0 +1,53 @@ @@ -585664,7 +585681,7 @@ index 000000000000..a9bc0c37c2d6 +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_dither.h b/drivers/gpu/drm/rockchip/rk618/rk618_dither.h new file mode 100755 -index 000000000000..c74bb95f0ce4 +index 000000000..c74bb95f0 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_dither.h @@ -0,0 +1,17 @@ @@ -585687,7 +585704,7 @@ index 000000000000..c74bb95f0ce4 +#endif diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_dsi.c b/drivers/gpu/drm/rockchip/rk618/rk618_dsi.c new file mode 100755 -index 000000000000..a00825784e2d +index 000000000..a00825784 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_dsi.c @@ -0,0 +1,1195 @@ @@ -586888,7 +586905,7 @@ index 000000000000..a00825784e2d +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_hdmi.c b/drivers/gpu/drm/rockchip/rk618/rk618_hdmi.c new file mode 100755 -index 000000000000..ab3fa5bfab54 +index 000000000..ab3fa5bfa --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_hdmi.c @@ -0,0 +1,1607 @@ @@ -588501,7 +588518,7 @@ index 000000000000..ab3fa5bfab54 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_lvds.c b/drivers/gpu/drm/rockchip/rk618/rk618_lvds.c new file mode 100755 -index 000000000000..b652e19a6a34 +index 000000000..b652e19a6 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_lvds.c @@ -0,0 +1,303 @@ @@ -588810,7 +588827,7 @@ index 000000000000..b652e19a6a34 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_rgb.c b/drivers/gpu/drm/rockchip/rk618/rk618_rgb.c new file mode 100755 -index 000000000000..76efc25aa216 +index 000000000..76efc25aa --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_rgb.c @@ -0,0 +1,301 @@ @@ -589117,7 +589134,7 @@ index 000000000000..76efc25aa216 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_scaler.c b/drivers/gpu/drm/rockchip/rk618/rk618_scaler.c new file mode 100755 -index 000000000000..2c3a67664699 +index 000000000..2c3a67664 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_scaler.c @@ -0,0 +1,425 @@ @@ -589548,7 +589565,7 @@ index 000000000000..2c3a67664699 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_vif.c b/drivers/gpu/drm/rockchip/rk618/rk618_vif.c new file mode 100755 -index 000000000000..9dc9e10e2d3a +index 000000000..9dc9e10e2 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk618/rk618_vif.c @@ -0,0 +1,261 @@ @@ -589815,7 +589832,7 @@ index 000000000000..9dc9e10e2d3a +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/Kconfig b/drivers/gpu/drm/rockchip/rk628/Kconfig new file mode 100755 -index 000000000000..41e1fbbe1e61 +index 000000000..41e1fbbe1 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/Kconfig @@ -0,0 +1,8 @@ @@ -589829,7 +589846,7 @@ index 000000000000..41e1fbbe1e61 + Rockchip RK628 display bridge chips driver. diff --git a/drivers/gpu/drm/rockchip/rk628/Makefile b/drivers/gpu/drm/rockchip/rk628/Makefile new file mode 100755 -index 000000000000..76d768d29776 +index 000000000..76d768d29 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/Makefile @@ -0,0 +1,14 @@ @@ -589849,7 +589866,7 @@ index 000000000000..76d768d29776 + rk628_hdmirx.o diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_combrxphy.c b/drivers/gpu/drm/rockchip/rk628/rk628_combrxphy.c new file mode 100755 -index 000000000000..a83eeeaf935f +index 000000000..a83eeeaf9 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_combrxphy.c @@ -0,0 +1,1030 @@ @@ -590885,7 +590902,7 @@ index 000000000000..a83eeeaf935f +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_combtxphy.c b/drivers/gpu/drm/rockchip/rk628/rk628_combtxphy.c new file mode 100755 -index 000000000000..cbe7923139b7 +index 000000000..cbe792313 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_combtxphy.c @@ -0,0 +1,520 @@ @@ -591411,7 +591428,7 @@ index 000000000000..cbe7923139b7 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_combtxphy.h b/drivers/gpu/drm/rockchip/rk628/rk628_combtxphy.h new file mode 100755 -index 000000000000..40d785eecd67 +index 000000000..40d785eec --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_combtxphy.h @@ -0,0 +1,13 @@ @@ -591430,7 +591447,7 @@ index 000000000000..40d785eecd67 +#endif diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_dsi.c b/drivers/gpu/drm/rockchip/rk628/rk628_dsi.c new file mode 100755 -index 000000000000..fc7da77ec0e4 +index 000000000..fc7da77ec --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_dsi.c @@ -0,0 +1,1395 @@ @@ -592831,7 +592848,7 @@ index 000000000000..fc7da77ec0e4 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_gvi.c b/drivers/gpu/drm/rockchip/rk628/rk628_gvi.c new file mode 100755 -index 000000000000..a3c92195e2dd +index 000000000..a3c92195e --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_gvi.c @@ -0,0 +1,664 @@ @@ -593501,7 +593518,7 @@ index 000000000000..a3c92195e2dd +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_hdmi.c b/drivers/gpu/drm/rockchip/rk628/rk628_hdmi.c new file mode 100755 -index 000000000000..29b5fcb2d3bc +index 000000000..29b5fcb2d --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_hdmi.c @@ -0,0 +1,1622 @@ @@ -595129,7 +595146,7 @@ index 000000000000..29b5fcb2d3bc +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c b/drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c new file mode 100755 -index 000000000000..7ff3cc0087a1 +index 000000000..7ff3cc008 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_hdmirx.c @@ -0,0 +1,980 @@ @@ -596115,7 +596132,7 @@ index 000000000000..7ff3cc0087a1 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c b/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c new file mode 100755 -index 000000000000..61326b1477cc +index 000000000..61326b147 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_lvds.c @@ -0,0 +1,319 @@ @@ -596440,7 +596457,7 @@ index 000000000000..61326b1477cc +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_post_process.c b/drivers/gpu/drm/rockchip/rk628/rk628_post_process.c new file mode 100755 -index 000000000000..80fd257a6471 +index 000000000..80fd257a6 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_post_process.c @@ -0,0 +1,495 @@ @@ -596941,7 +596958,7 @@ index 000000000000..80fd257a6471 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rk628/rk628_rgb.c b/drivers/gpu/drm/rockchip/rk628/rk628_rgb.c new file mode 100755 -index 000000000000..df8cc3cee860 +index 000000000..df8cc3cee --- /dev/null +++ b/drivers/gpu/drm/rockchip/rk628/rk628_rgb.c @@ -0,0 +1,378 @@ @@ -597325,7 +597342,7 @@ index 000000000000..df8cc3cee860 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rockchip-mipi-csi-tx.c b/drivers/gpu/drm/rockchip/rockchip-mipi-csi-tx.c new file mode 100755 -index 000000000000..adbc11679f53 +index 000000000..adbc11679 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip-mipi-csi-tx.c @@ -0,0 +1,1403 @@ @@ -598734,7 +598751,7 @@ index 000000000000..adbc11679f53 +MODULE_ALIAS("platform:" DRIVER_NAME); diff --git a/drivers/gpu/drm/rockchip/rockchip-mipi-csi-tx.h b/drivers/gpu/drm/rockchip/rockchip-mipi-csi-tx.h new file mode 100755 -index 000000000000..a4330df85b33 +index 000000000..a4330df85 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip-mipi-csi-tx.h @@ -0,0 +1,289 @@ @@ -599029,7 +599046,7 @@ index 000000000000..a4330df85b33 +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_backlight.c b/drivers/gpu/drm/rockchip/rockchip_drm_backlight.c new file mode 100755 -index 000000000000..2f0a98749683 +index 000000000..2f0a98749 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_backlight.c @@ -0,0 +1,514 @@ @@ -599549,7 +599566,7 @@ index 000000000000..2f0a98749683 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_backlight.h b/drivers/gpu/drm/rockchip/rockchip_drm_backlight.h new file mode 100755 -index 000000000000..4c8dc6348354 +index 000000000..4c8dc6348 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_backlight.h @@ -0,0 +1,64 @@ @@ -599619,7 +599636,7 @@ index 000000000000..4c8dc6348354 +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_clk.c b/drivers/gpu/drm/rockchip/rockchip_drm_clk.c new file mode 100644 -index 000000000000..f606377aeb07 +index 000000000..f606377ae --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_clk.c @@ -0,0 +1,284 @@ @@ -599909,7 +599926,7 @@ index 000000000000..f606377aeb07 +} diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_debugfs.c b/drivers/gpu/drm/rockchip/rockchip_drm_debugfs.c new file mode 100755 -index 000000000000..923bcf3b2aa9 +index 000000000..923bcf3b2 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_debugfs.c @@ -0,0 +1,287 @@ @@ -600202,7 +600219,7 @@ index 000000000000..923bcf3b2aa9 +} diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_debugfs.h b/drivers/gpu/drm/rockchip/rockchip_drm_debugfs.h new file mode 100755 -index 000000000000..5bb39c0447f0 +index 000000000..5bb39c044 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_debugfs.h @@ -0,0 +1,79 @@ @@ -600287,7 +600304,7 @@ index 000000000000..5bb39c0447f0 +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_direct_show.c b/drivers/gpu/drm/rockchip/rockchip_drm_direct_show.c new file mode 100644 -index 000000000000..9e7276b933f9 +index 000000000..9e7276b93 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_direct_show.c @@ -0,0 +1,333 @@ @@ -600626,7 +600643,7 @@ index 000000000000..9e7276b933f9 + diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_direct_show.h b/drivers/gpu/drm/rockchip/rockchip_drm_direct_show.h new file mode 100644 -index 000000000000..583f760eb1f5 +index 000000000..583f760eb --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_direct_show.h @@ -0,0 +1,67 @@ @@ -600699,7 +600716,7 @@ index 000000000000..583f760eb1f5 +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_display_pattern.c b/drivers/gpu/drm/rockchip/rockchip_drm_display_pattern.c new file mode 100644 -index 000000000000..58a907b6c816 +index 000000000..58a907b6c --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_display_pattern.c @@ -0,0 +1,419 @@ @@ -601124,7 +601141,7 @@ index 000000000000..58a907b6c816 +} diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_display_pattern.h b/drivers/gpu/drm/rockchip/rockchip_drm_display_pattern.h new file mode 100644 -index 000000000000..4368f3397dbe +index 000000000..4368f3397 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_display_pattern.h @@ -0,0 +1,51 @@ @@ -601180,7 +601197,7 @@ index 000000000000..4368f3397dbe + +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c -index 0f3eb392fe39..9f64ad8ed07b 100644 +index 0f3eb392f..55ea3e6e8 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -6,17 +6,24 @@ @@ -603080,7 +603097,7 @@ index 0f3eb392fe39..9f64ad8ed07b 100644 MODULE_AUTHOR("Mark Yao "); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h -index e33c2dcd0d4b..2e8739b4fcab 100644 +index e33c2dcd0..2e8739b4f 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -9,32 +9,463 @@ @@ -603681,7 +603698,7 @@ index e33c2dcd0d4b..2e8739b4fcab 100644 +extern struct platform_driver vvop_platform_driver; #endif /* _ROCKCHIP_DRM_DRV_H_ */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c -index 3aa37e177667..91cb11985db8 100644 +index 3aa37e177..91cb11985 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c @@ -5,6 +5,7 @@ @@ -603972,7 +603989,7 @@ index 3aa37e177667..91cb11985db8 100644 dev->mode_config.funcs = &rockchip_drm_mode_config_funcs; dev->mode_config.helper_private = &rockchip_mode_config_helpers; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.h b/drivers/gpu/drm/rockchip/rockchip_drm_fb.h -index 1a696521096d..4442719270ab 100644 +index 1a6965210..444271927 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.h @@ -7,6 +7,10 @@ @@ -604011,7 +604028,7 @@ index 1a696521096d..4442719270ab 100644 + #endif /* _ROCKCHIP_DRM_FB_H */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c -index 2fdc455c4ad7..bd449be5b9c0 100644 +index 2fdc455c4..bd449be5b 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c @@ -15,14 +15,12 @@ @@ -604083,7 +604100,7 @@ index 2fdc455c4ad7..bd449be5b9c0 100644 drm_fb_helper_unregister_fbi(helper); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c -index 22ff4a592976..9a4b78d04191 100644 +index 6038aafa2..c7a10c6e6 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -4,7 +4,7 @@ @@ -604497,7 +604514,7 @@ index 22ff4a592976..9a4b78d04191 100644 struct drm_device *drm = obj->dev; struct rockchip_drm_private *private = drm->dev_private; + int ret = 0; -+ + + if (!private->domain && is_vop_enabled()) + rk_obj->flags |= ROCKCHIP_BO_CONTIG; + @@ -604533,7 +604550,7 @@ index 22ff4a592976..9a4b78d04191 100644 + } + } + } - ++ + if (private->domain) { + ret = rockchip_gem_iommu_map(rk_obj); + if (ret < 0) @@ -604630,7 +604647,7 @@ index 22ff4a592976..9a4b78d04191 100644 return ret; } -@@ -293,11 +608,22 @@ static void rockchip_gem_release_object(struct rockchip_gem_object *rk_obj) +@@ -293,11 +608,15 @@ static void rockchip_gem_release_object(struct rockchip_gem_object *rk_obj) } static struct rockchip_gem_object * @@ -604642,19 +604659,12 @@ index 22ff4a592976..9a4b78d04191 100644 struct rockchip_gem_object *rk_obj; struct drm_gem_object *obj; -+#ifdef CONFIG_ARM_LPAE + gfp_t gfp_mask = GFP_HIGHUSER | __GFP_RECLAIMABLE | __GFP_DMA32; -+#else -+ gfp_t gfp_mask = GFP_HIGHUSER | __GFP_RECLAIMABLE; -+#endif -+ -+ if (flags & ROCKCHIP_BO_DMA32) -+ gfp_mask |= __GFP_DMA32; + size = round_up(size, PAGE_SIZE); rk_obj = kzalloc(sizeof(*rk_obj), GFP_KERNEL); -@@ -308,19 +634,23 @@ static struct rockchip_gem_object * +@@ -308,19 +627,23 @@ static struct rockchip_gem_object * drm_gem_object_init(drm, obj, size); @@ -604680,7 +604690,7 @@ index 22ff4a592976..9a4b78d04191 100644 ret = rockchip_gem_alloc_buf(rk_obj, alloc_kmap); if (ret) -@@ -333,6 +663,28 @@ rockchip_gem_create_object(struct drm_device *drm, unsigned int size, +@@ -333,6 +656,28 @@ rockchip_gem_create_object(struct drm_device *drm, unsigned int size, return ERR_PTR(ret); } @@ -604709,7 +604719,7 @@ index 22ff4a592976..9a4b78d04191 100644 /* * rockchip_gem_free_object - (struct drm_driver)->gem_free_object_unlocked * callback function -@@ -350,7 +702,8 @@ void rockchip_gem_free_object(struct drm_gem_object *obj) +@@ -350,7 +695,8 @@ void rockchip_gem_free_object(struct drm_gem_object *obj) dma_unmap_sgtable(drm->dev, rk_obj->sgt, DMA_BIDIRECTIONAL, 0); } @@ -604719,7 +604729,7 @@ index 22ff4a592976..9a4b78d04191 100644 } else { rockchip_gem_free_buf(rk_obj); } -@@ -368,13 +721,14 @@ void rockchip_gem_free_object(struct drm_gem_object *obj) +@@ -368,13 +714,14 @@ void rockchip_gem_free_object(struct drm_gem_object *obj) static struct rockchip_gem_object * rockchip_gem_create_with_handle(struct drm_file *file_priv, struct drm_device *drm, unsigned int size, @@ -604736,7 +604746,7 @@ index 22ff4a592976..9a4b78d04191 100644 if (IS_ERR(rk_obj)) return ERR_CAST(rk_obj); -@@ -411,7 +765,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv, +@@ -411,7 +758,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv, struct drm_mode_create_dumb *args) { struct rockchip_gem_object *rk_obj; @@ -604745,7 +604755,7 @@ index 22ff4a592976..9a4b78d04191 100644 /* * align to 64 bytes since Mali requires it. -@@ -420,7 +774,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv, +@@ -420,7 +767,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv, args->size = args->pitch * args->height; rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size, @@ -604754,7 +604764,7 @@ index 22ff4a592976..9a4b78d04191 100644 return PTR_ERR_OR_ZERO(rk_obj); } -@@ -497,7 +851,7 @@ rockchip_gem_prime_import_sg_table(struct drm_device *drm, +@@ -497,7 +844,7 @@ rockchip_gem_prime_import_sg_table(struct drm_device *drm, struct rockchip_gem_object *rk_obj; int ret; @@ -604763,7 +604773,7 @@ index 22ff4a592976..9a4b78d04191 100644 if (IS_ERR(rk_obj)) return ERR_CAST(rk_obj); -@@ -511,6 +865,21 @@ rockchip_gem_prime_import_sg_table(struct drm_device *drm, +@@ -511,6 +858,21 @@ rockchip_gem_prime_import_sg_table(struct drm_device *drm, goto err_free_rk_obj; } @@ -604785,7 +604795,7 @@ index 22ff4a592976..9a4b78d04191 100644 return &rk_obj->base; err_free_rk_obj: -@@ -543,3 +912,80 @@ void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) +@@ -543,3 +905,80 @@ void rockchip_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) /* Nothing to do if allocated by DMA mapping API. */ } @@ -604867,7 +604877,7 @@ index 22ff4a592976..9a4b78d04191 100644 + return 0; +} diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h -index 7ffc541bea07..34bcb76b20e3 100644 +index 7ffc541be..34bcb76b2 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h @@ -7,14 +7,24 @@ @@ -604935,7 +604945,7 @@ index 7ffc541bea07..34bcb76b20e3 100644 #endif /* _ROCKCHIP_DRM_GEM_H */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_logo.c b/drivers/gpu/drm/rockchip/rockchip_drm_logo.c new file mode 100755 -index 000000000000..af228f40c404 +index 000000000..af228f40c --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_logo.c @@ -0,0 +1,1234 @@ @@ -606175,7 +606185,7 @@ index 000000000000..af228f40c404 +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_logo.h b/drivers/gpu/drm/rockchip/rockchip_drm_logo.h new file mode 100755 -index 000000000000..7e1b1d2dfdf4 +index 000000000..7e1b1d2df --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_logo.h @@ -0,0 +1,46 @@ @@ -606227,7 +606237,7 @@ index 000000000000..7e1b1d2dfdf4 +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_self_test.c b/drivers/gpu/drm/rockchip/rockchip_drm_self_test.c new file mode 100644 -index 000000000000..7c764fca154d +index 000000000..7c764fca1 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_self_test.c @@ -0,0 +1,269 @@ @@ -606502,7 +606512,7 @@ index 000000000000..7c764fca154d +subsys_initcall_sync(rockchip_drm_self_test); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_tve.c b/drivers/gpu/drm/rockchip/rockchip_drm_tve.c new file mode 100755 -index 000000000000..6fbd17c1b003 +index 000000000..6fbd17c1b --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_tve.c @@ -0,0 +1,1067 @@ @@ -607575,7 +607585,7 @@ index 000000000000..6fbd17c1b003 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_tve.h b/drivers/gpu/drm/rockchip/rockchip_drm_tve.h new file mode 100755 -index 000000000000..376b2ff0f422 +index 000000000..376b2ff0f --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_tve.h @@ -0,0 +1,285 @@ @@ -607866,7 +607876,7 @@ index 000000000000..376b2ff0f422 +#endif /* _ROCKCHIP_DRM_TVE_ */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vconn.c b/drivers/gpu/drm/rockchip/rockchip_drm_vconn.c new file mode 100755 -index 000000000000..f0fab09d386b +index 000000000..f0fab09d3 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vconn.c @@ -0,0 +1,587 @@ @@ -608458,7 +608468,7 @@ index 000000000000..f0fab09d386b + }, +}; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c -index af98bfcde518..b80ef0c6dc53 100644 +index 682d78fab..09a256b3e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -6,21 +6,28 @@ @@ -614053,7 +614063,7 @@ index af98bfcde518..b80ef0c6dc53 100644 const struct component_ops vop_component_ops = { diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h -index 857d97cdc67c..5f72a76beee0 100644 +index 857d97cdc..5f72a76be 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -7,112 +7,396 @@ @@ -615621,10 +615631,10 @@ index 857d97cdc67c..5f72a76beee0 100644 #endif /* _ROCKCHIP_DRM_VOP_H */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c new file mode 100755 -index 000000000000..2c7a66adfb75 +index 000000000..cd16a8d1f --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c -@@ -0,0 +1,12140 @@ +@@ -0,0 +1,12191 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2020 Rockchip Electronics Co., Ltd. @@ -616510,6 +616520,8 @@ index 000000000000..2c7a66adfb75 + struct clk *hclk; + struct clk *aclk; + struct clk *pclk; ++ struct clk *hdmi0_phy_pll; ++ struct clk *hdmi1_phy_pll; + struct reset_control *ahb_rst; + struct reset_control *axi_rst; + struct csu_clk *csu_aclk; @@ -619461,6 +619473,18 @@ index 000000000000..2c7a66adfb75 + return; + } + ++ /* ++ * we should rest axi to clear register state ++ * when set pd_off_imd in vop2_power_off_all_pd, ++ * otherwise the bit0/1/2 of POWER_CTRL register ++ * will auto cleared after we clear pd_off_imd ++ * in the following. ++ */ ++ if (vop2->version == VOP_VERSION_RK3588) { ++ if (!vp->loader_protect) ++ vop2_clk_reset(vop2->axi_rst); ++ } ++ + if (vop2_soc_is_rk3566()) + VOP_CTRL_SET(vop2, otp_en, 1); + @@ -622697,6 +622721,8 @@ index 000000000000..2c7a66adfb75 + return ret; +} + ++ ++ +static int vop2_set_dsc_clk(struct drm_crtc *crtc, u8 dsc_id) +{ + struct vop2_video_port *vp = to_vop2_video_port(crtc); @@ -622861,6 +622887,24 @@ index 000000000000..2c7a66adfb75 + } + } + ++ /* ++ * HDMI use 1:1 dclk for rgb/yuv444, 1:2 for yuv420 when ++ * pixclk <= 600 ++ * We want use HDMI PHY clk as dclk source for DP/HDMI. ++ * The max freq of HDMI PHY CLK is 600 MHZ. ++ * When used for HDMI, the input freq and v_pixclk must ++ * keep 1:1 for rgb/yuv444, 1:2 for yuv420 ++ */ ++ if (vcstate->output_type == DRM_MODE_CONNECTOR_HDMIA) { ++ snprintf(clk_name, sizeof(clk_name), "dclk%d", vp->id); ++ dclk = vop2_clk_get(vop2, clk_name); ++ if (v_pixclk <= (VOP2_MAX_DCLK_RATE * 1000)) { ++ if (vcstate->output_mode == ROCKCHIP_OUT_MODE_YUV420) ++ v_pixclk = v_pixclk >> 1; ++ clk_set_rate(dclk->hw.clk, v_pixclk); ++ } ++ } ++ + if (dclk_core_rate > if_pixclk->rate) { + clk_set_rate(dclk_core->hw.clk, dclk_core_rate); + if (output_if_is_mipi(conn_id)) @@ -623254,26 +623298,7 @@ index 000000000000..2c7a66adfb75 + return val; +} + -+static void vop2_post_color_swap(struct drm_crtc *crtc) -+{ -+ struct vop2_video_port *vp = to_vop2_video_port(crtc); -+ struct vop2 *vop2 = vp->vop2; -+ struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(crtc->state); -+ u32 output_if = vcstate->output_if; -+ u32 data_swap = 0; + -+ if (vop2_output_uv_swap(vcstate->bus_format, vcstate->output_mode) || -+ vop3_output_rb_swap(vcstate->bus_format, vcstate->output_mode)) -+ data_swap = DSP_RB_SWAP; -+ -+ if (vop2->version == VOP_VERSION_RK3588 && -+ (output_if_is_hdmi(output_if) || output_if_is_dp(output_if)) && -+ (vcstate->bus_format == MEDIA_BUS_FMT_YUV8_1X24 || -+ vcstate->bus_format == MEDIA_BUS_FMT_YUV10_1X30)) -+ data_swap |= DSP_RG_SWAP; -+ -+ VOP_MODULE_SET(vop2, vp, dsp_data_swap, data_swap); -+} + +/* + * For vop3 video port0, if hdr_vivid is not enable, the pipe delay time as follow: @@ -623376,6 +623401,26 @@ index 000000000000..2c7a66adfb75 + } +} + ++static void vop2_post_color_swap(struct drm_crtc *crtc) ++{ ++ struct vop2_video_port *vp = to_vop2_video_port(crtc); ++ struct vop2 *vop2 = vp->vop2; ++ struct rockchip_crtc_state *vcstate = to_rockchip_crtc_state(crtc->state); ++ u32 output_if = vcstate->output_if; ++ u32 data_swap = 0; ++ ++ if (vop2_output_uv_swap(vcstate->bus_format, vcstate->output_mode)) ++ data_swap = DSP_RB_SWAP; ++ ++ if (vop2->version == VOP_VERSION_RK3588 && ++ (output_if_is_hdmi(output_if) || output_if_is_dp(output_if)) && ++ (vcstate->bus_format == MEDIA_BUS_FMT_YUV8_1X24 || ++ vcstate->bus_format == MEDIA_BUS_FMT_YUV10_1X30)) ++ data_swap |= DSP_RG_SWAP; ++ ++ VOP_MODULE_SET(vop2, vp, dsp_data_swap, data_swap); ++} ++ +static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) +{ + struct vop2_video_port *vp = to_vop2_video_port(crtc); @@ -624905,7 +624950,7 @@ index 000000000000..2c7a66adfb75 + bg_dly -= vp->bg_ovl_dly; + + /* -+ * right vp share the same crtc state in splice mode ++ * right vp share the same crtc/plane state in splice mode + */ + if (vp->splice_mode_right) { + vcstate = to_rockchip_crtc_state(left_vp->rockchip_crtc.crtc.state); @@ -625060,6 +625105,8 @@ index 000000000000..2c7a66adfb75 + rockchip_connector_update_vfp_for_vrr(crtc, adjust_mode, new_vfp); +} + ++ ++ +static void vop2_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *old_crtc_state) +{ + struct vop2_video_port *vp = to_vop2_video_port(crtc); @@ -627629,6 +627676,20 @@ index 000000000000..2c7a66adfb75 + return PTR_ERR(vop2->pclk); + } + ++ vop2->hdmi0_phy_pll = devm_clk_get_optional(vop2->dev, "hdmi0_phy_pll"); ++ if (IS_ERR(vop2->hdmi0_phy_pll)) { ++ dev_warn(vop2->dev, "failed to get hdmi0_phy_pll: %ld\n", ++ PTR_ERR(vop2->hdmi0_phy_pll)); ++ vop2->hdmi0_phy_pll = NULL; ++ } ++ ++ vop2->hdmi1_phy_pll = devm_clk_get_optional(vop2->dev, "hdmi1_phy_pll"); ++ if (IS_ERR(vop2->hdmi1_phy_pll)) { ++ dev_warn(vop2->dev, "failed to get hdmi1_phy_pll: %ld\n", ++ PTR_ERR(vop2->hdmi1_phy_pll)); ++ vop2->hdmi1_phy_pll = NULL; ++ } ++ + vop2->ahb_rst = devm_reset_control_get_optional(vop2->dev, "ahb"); + if (IS_ERR(vop2->ahb_rst)) { + DRM_DEV_ERROR(vop2->dev, "failed to get ahb reset\n"); @@ -627767,7 +627828,7 @@ index 000000000000..2c7a66adfb75 +EXPORT_SYMBOL_GPL(vop2_component_ops); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c new file mode 100755 -index 000000000000..3f4432ad596c +index 000000000..3f4432ad5 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c @@ -0,0 +1,679 @@ @@ -628451,7 +628512,7 @@ index 000000000000..3f4432ad596c +MODULE_AUTHOR("Andy Yan "); +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c -index e2487937c4e3..bc21bf48a329 100644 +index e2487937c..bc21bf48a 100644 --- a/drivers/gpu/drm/rockchip/rockchip_lvds.c +++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c @@ -6,98 +6,252 @@ @@ -629800,7 +629861,7 @@ index e2487937c4e3..bc21bf48a329 100644 .remove = rockchip_lvds_remove, diff --git a/drivers/gpu/drm/rockchip/rockchip_post_csc.c b/drivers/gpu/drm/rockchip/rockchip_post_csc.c new file mode 100644 -index 000000000000..212a4b4b89e6 +index 000000000..212a4b4b8 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_post_csc.c @@ -0,0 +1,1573 @@ @@ -631379,7 +631440,7 @@ index 000000000000..212a4b4b89e6 +} diff --git a/drivers/gpu/drm/rockchip/rockchip_post_csc.h b/drivers/gpu/drm/rockchip/rockchip_post_csc.h new file mode 100644 -index 000000000000..1215a5cd1c87 +index 000000000..1215a5cd1 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_post_csc.h @@ -0,0 +1,18 @@ @@ -631402,7 +631463,7 @@ index 000000000000..1215a5cd1c87 + +#endif diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c -index 9a771af5d0c9..a7f2057d349f 100644 +index 9a771af5d..a7f2057d3 100644 --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c @@ -6,29 +6,256 @@ @@ -632618,7 +632679,7 @@ index 9a771af5d0c9..a7f2057d349f 100644 + }, +}; diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.h b/drivers/gpu/drm/rockchip/rockchip_rgb.h -index 27b9635124bc..8973232e0caa 100644 +index 27b963512..8973232e0 100644 --- a/drivers/gpu/drm/rockchip/rockchip_rgb.h +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.h @@ -8,12 +8,14 @@ @@ -632640,7 +632701,7 @@ index 27b9635124bc..8973232e0caa 100644 } diff --git a/drivers/gpu/drm/rockchip/rockchip_vop2_clk.c b/drivers/gpu/drm/rockchip/rockchip_vop2_clk.c new file mode 100755 -index 000000000000..b670e3d38a64 +index 000000000..b670e3d38 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_vop2_clk.c @@ -0,0 +1,332 @@ @@ -632978,7 +633039,7 @@ index 000000000000..b670e3d38a64 +} diff --git a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c new file mode 100755 -index 000000000000..9854a23f545b +index 000000000..9854a23f5 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c @@ -0,0 +1,4010 @@ @@ -636993,7 +637054,7 @@ index 000000000000..9854a23f545b + }, +}; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c -index 39e1e1ebea92..069cb6e7aef9 100644 +index 39e1e1ebe..069cb6e7a 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -5,36 +5,36 @@ @@ -639819,7 +639880,7 @@ index 39e1e1ebea92..069cb6e7aef9 100644 }; MODULE_DEVICE_TABLE(of, vop_driver_dt_match); diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h -index 6e9fa5815d4d..a33f6fcecb78 100644 +index 6e9fa5815..a33f6fcec 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.h +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.h @@ -113,6 +113,11 @@ @@ -640847,7 +640908,7 @@ index 6e9fa5815d4d..a33f6fcecb78 100644 +#define RK3528_ACM_YHS_DEL_HGAIN_SEG64 0x07d8 #endif /* _ROCKCHIP_VOP_REG_H */ diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c -index 13c14eb175e9..3a3de40fc90f 100644 +index 6abcf975a..960fbd0a9 100644 --- a/drivers/i2c/busses/i2c-rk3x.c +++ b/drivers/i2c/busses/i2c-rk3x.c @@ -23,6 +23,8 @@ @@ -641351,7 +641412,7 @@ index 13c14eb175e9..3a3de40fc90f 100644 MODULE_DESCRIPTION("Rockchip RK3xxx I2C Bus driver"); MODULE_AUTHOR("Max Schwarz "); diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c -index 34fecf97a355..d041b7fa5c9c 100644 +index e8a89e18c..3a9fc1c88 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -61,6 +61,7 @@ @@ -641456,7 +641517,7 @@ index 34fecf97a355..d041b7fa5c9c 100644 unsigned cmd; void *arg; diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig -index e39b679126a2..2760f1e52b97 100644 +index e39b67912..2760f1e52 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -876,6 +876,13 @@ config ROCKCHIP_SARADC @@ -641474,7 +641535,7 @@ index e39b679126a2..2760f1e52b97 100644 tristate "Spreadtrum SC27xx series PMICs ADC" depends on MFD_SC27XX_PMIC || COMPILE_TEST diff --git a/drivers/iio/adc/rockchip_saradc.c b/drivers/iio/adc/rockchip_saradc.c -index 12584f1631d8..c266169dfe61 100644 +index deb58e232..badb07ed5 100644 --- a/drivers/iio/adc/rockchip_saradc.c +++ b/drivers/iio/adc/rockchip_saradc.c @@ -35,7 +35,7 @@ @@ -641593,7 +641654,7 @@ index 12584f1631d8..c266169dfe61 100644 }, {}, }; -@@ -278,6 +317,72 @@ static irqreturn_t rockchip_saradc_trigger_handler(int irq, void *p) +@@ -280,6 +319,72 @@ static irqreturn_t rockchip_saradc_trigger_handler(int irq, void *p) return IRQ_HANDLED; } @@ -641666,7 +641727,7 @@ index 12584f1631d8..c266169dfe61 100644 static int rockchip_saradc_probe(struct platform_device *pdev) { struct rockchip_saradc *info = NULL; -@@ -390,6 +495,13 @@ static int rockchip_saradc_probe(struct platform_device *pdev) +@@ -392,6 +497,13 @@ static int rockchip_saradc_probe(struct platform_device *pdev) return ret; } @@ -641680,7 +641741,7 @@ index 12584f1631d8..c266169dfe61 100644 ret = clk_prepare_enable(info->pclk); if (ret < 0) { dev_err(&pdev->dev, "failed to enable pclk\n"); -@@ -430,6 +542,21 @@ static int rockchip_saradc_probe(struct platform_device *pdev) +@@ -432,6 +544,21 @@ static int rockchip_saradc_probe(struct platform_device *pdev) if (ret) return ret; @@ -641703,7 +641764,7 @@ index 12584f1631d8..c266169dfe61 100644 } diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig -index 1efd3154b68d..1c80fe7b3c4a 100644 +index 1efd3154b..1c80fe7b3 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig @@ -197,6 +197,10 @@ source "drivers/input/tablet/Kconfig" @@ -641718,7 +641779,7 @@ index 1efd3154b68d..1c80fe7b3c4a 100644 source "drivers/input/rmi4/Kconfig" diff --git a/drivers/input/Makefile b/drivers/input/Makefile -index e35650930371..5cd16233ce08 100644 +index e35650930..5cd16233c 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile @@ -24,6 +24,8 @@ obj-$(CONFIG_INPUT_MOUSE) += mouse/ @@ -641731,7 +641792,7 @@ index e35650930371..5cd16233ce08 100644 obj-$(CONFIG_INPUT_APMPOWER) += apm-power.o diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig -index 3f7a5ff17a9a..7f21a0ba6ae1 100644 +index 3f7a5ff17..7f21a0ba6 100644 --- a/drivers/input/keyboard/Kconfig +++ b/drivers/input/keyboard/Kconfig @@ -67,6 +67,9 @@ config KEYBOARD_AMIGA @@ -641745,7 +641806,7 @@ index 3f7a5ff17a9a..7f21a0ba6ae1 100644 tristate "Apple SPI keyboard and trackpad" depends on ACPI && EFI diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c -index 54afb38601b9..bb29a7c9a1c0 100644 +index 54afb3860..bb29a7c9a 100644 --- a/drivers/input/keyboard/hil_kbd.c +++ b/drivers/input/keyboard/hil_kbd.c @@ -512,7 +512,6 @@ static int hil_dev_connect(struct serio *serio, struct serio_driver *drv) @@ -641758,7 +641819,7 @@ index 54afb38601b9..bb29a7c9a1c0 100644 diff --git a/drivers/input/keyboard/rk_keys.c b/drivers/input/keyboard/rk_keys.c new file mode 100755 -index 000000000000..375cfbd600ea +index 000000000..375cfbd60 --- /dev/null +++ b/drivers/input/keyboard/rk_keys.c @@ -0,0 +1,555 @@ @@ -642319,7 +642380,7 @@ index 000000000000..375cfbd600ea +module_exit(rk_keys_driver_exit); diff --git a/drivers/input/remotectl/Kconfig b/drivers/input/remotectl/Kconfig new file mode 100755 -index 000000000000..67558b48869e +index 000000000..67558b488 --- /dev/null +++ b/drivers/input/remotectl/Kconfig @@ -0,0 +1,19 @@ @@ -642344,7 +642405,7 @@ index 000000000000..67558b48869e +endif diff --git a/drivers/input/remotectl/Makefile b/drivers/input/remotectl/Makefile new file mode 100755 -index 000000000000..209472b4a356 +index 000000000..209472b4a --- /dev/null +++ b/drivers/input/remotectl/Makefile @@ -0,0 +1,8 @@ @@ -642358,7 +642419,7 @@ index 000000000000..209472b4a356 +obj-$(CONFIG_ROCKCHIP_REMOTECTL_PWM) += rockchip_pwm_remotectl.o diff --git a/drivers/input/remotectl/rockchip_pwm_remotectl.c b/drivers/input/remotectl/rockchip_pwm_remotectl.c new file mode 100755 -index 000000000000..f24ba9edf08b +index 000000000..f24ba9edf --- /dev/null +++ b/drivers/input/remotectl/rockchip_pwm_remotectl.c @@ -0,0 +1,828 @@ @@ -643192,7 +643253,7 @@ index 000000000000..f24ba9edf08b +MODULE_LICENSE("GPL"); diff --git a/drivers/input/remotectl/rockchip_pwm_remotectl.h b/drivers/input/remotectl/rockchip_pwm_remotectl.h new file mode 100755 -index 000000000000..5126a3edb5d5 +index 000000000..5126a3edb --- /dev/null +++ b/drivers/input/remotectl/rockchip_pwm_remotectl.h @@ -0,0 +1,160 @@ @@ -643358,7 +643419,7 @@ index 000000000000..5126a3edb5d5 +#endif diff --git a/drivers/input/sensors/Kconfig b/drivers/input/sensors/Kconfig new file mode 100755 -index 000000000000..ebff9437aa66 +index 000000000..ebff9437a --- /dev/null +++ b/drivers/input/sensors/Kconfig @@ -0,0 +1,23 @@ @@ -643387,7 +643448,7 @@ index 000000000000..ebff9437aa66 +endif diff --git a/drivers/input/sensors/Makefile b/drivers/input/sensors/Makefile new file mode 100755 -index 000000000000..df8d372dafe1 +index 000000000..df8d372da --- /dev/null +++ b/drivers/input/sensors/Makefile @@ -0,0 +1,15 @@ @@ -643408,7 +643469,7 @@ index 000000000000..df8d372dafe1 +sensor_dev-y = sensor-i2c.o sensor-dev.o diff --git a/drivers/input/sensors/accel/Kconfig b/drivers/input/sensors/accel/Kconfig new file mode 100755 -index 000000000000..724cb2ca1e7a +index 000000000..724cb2ca1 --- /dev/null +++ b/drivers/input/sensors/accel/Kconfig @@ -0,0 +1,149 @@ @@ -643563,7 +643624,7 @@ index 000000000000..724cb2ca1e7a +endif diff --git a/drivers/input/sensors/accel/Makefile b/drivers/input/sensors/accel/Makefile new file mode 100755 -index 000000000000..de250ef4a282 +index 000000000..de250ef4a --- /dev/null +++ b/drivers/input/sensors/accel/Makefile @@ -0,0 +1,22 @@ @@ -643591,7 +643652,7 @@ index 000000000000..de250ef4a282 +da223-y := da223_cust.o da223_core.o diff --git a/drivers/input/sensors/accel/bma2xx.c b/drivers/input/sensors/accel/bma2xx.c new file mode 100755 -index 000000000000..19f578a77295 +index 000000000..19f578a77 --- /dev/null +++ b/drivers/input/sensors/accel/bma2xx.c @@ -0,0 +1,2268 @@ @@ -645865,7 +645926,7 @@ index 000000000000..19f578a77295 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/da223_core.c b/drivers/input/sensors/accel/da223_core.c new file mode 100755 -index 000000000000..b0e25eac9b5f +index 000000000..b0e25eac9 --- /dev/null +++ b/drivers/input/sensors/accel/da223_core.c @@ -0,0 +1,1907 @@ @@ -647778,7 +647839,7 @@ index 000000000000..b0e25eac9b5f +} diff --git a/drivers/input/sensors/accel/da223_core.h b/drivers/input/sensors/accel/da223_core.h new file mode 100755 -index 000000000000..de67d711b486 +index 000000000..de67d711b --- /dev/null +++ b/drivers/input/sensors/accel/da223_core.h @@ -0,0 +1,303 @@ @@ -648087,7 +648148,7 @@ index 000000000000..de67d711b486 + diff --git a/drivers/input/sensors/accel/da223_cust.c b/drivers/input/sensors/accel/da223_cust.c new file mode 100755 -index 000000000000..c00836d5b78d +index 000000000..c00836d5b --- /dev/null +++ b/drivers/input/sensors/accel/da223_cust.c @@ -0,0 +1,898 @@ @@ -648991,7 +649052,7 @@ index 000000000000..c00836d5b78d +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/da223_cust.h b/drivers/input/sensors/accel/da223_cust.h new file mode 100755 -index 000000000000..e6bf15a02da8 +index 000000000..e6bf15a02 --- /dev/null +++ b/drivers/input/sensors/accel/da223_cust.h @@ -0,0 +1,44 @@ @@ -649041,7 +649102,7 @@ index 000000000000..e6bf15a02da8 + diff --git a/drivers/input/sensors/accel/dmard10.c b/drivers/input/sensors/accel/dmard10.c new file mode 100755 -index 000000000000..8be258c316a2 +index 000000000..8be258c31 --- /dev/null +++ b/drivers/input/sensors/accel/dmard10.c @@ -0,0 +1,454 @@ @@ -649501,7 +649562,7 @@ index 000000000000..8be258c316a2 + diff --git a/drivers/input/sensors/accel/icm2060x_acc.c b/drivers/input/sensors/accel/icm2060x_acc.c new file mode 100755 -index 000000000000..80a5c96e6207 +index 000000000..80a5c96e6 --- /dev/null +++ b/drivers/input/sensors/accel/icm2060x_acc.c @@ -0,0 +1,260 @@ @@ -649767,7 +649828,7 @@ index 000000000000..80a5c96e6207 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/kxtik.c b/drivers/input/sensors/accel/kxtik.c new file mode 100755 -index 000000000000..734b471f5d3a +index 000000000..734b471f5 --- /dev/null +++ b/drivers/input/sensors/accel/kxtik.c @@ -0,0 +1,359 @@ @@ -650132,7 +650193,7 @@ index 000000000000..734b471f5d3a +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/kxtj9.c b/drivers/input/sensors/accel/kxtj9.c new file mode 100755 -index 000000000000..6fc6a8c5f119 +index 000000000..6fc6a8c5f --- /dev/null +++ b/drivers/input/sensors/accel/kxtj9.c @@ -0,0 +1,332 @@ @@ -650470,7 +650531,7 @@ index 000000000000..6fc6a8c5f119 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/lis3dh.c b/drivers/input/sensors/accel/lis3dh.c new file mode 100755 -index 000000000000..55f0fe526899 +index 000000000..55f0fe526 --- /dev/null +++ b/drivers/input/sensors/accel/lis3dh.c @@ -0,0 +1,303 @@ @@ -650779,7 +650840,7 @@ index 000000000000..55f0fe526899 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/lsm303d.c b/drivers/input/sensors/accel/lsm303d.c new file mode 100755 -index 000000000000..ff238278f10c +index 000000000..ff238278f --- /dev/null +++ b/drivers/input/sensors/accel/lsm303d.c @@ -0,0 +1,362 @@ @@ -651147,7 +651208,7 @@ index 000000000000..ff238278f10c +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/lsm330_acc.c b/drivers/input/sensors/accel/lsm330_acc.c new file mode 100755 -index 000000000000..ed93bb0147ff +index 000000000..ed93bb014 --- /dev/null +++ b/drivers/input/sensors/accel/lsm330_acc.c @@ -0,0 +1,278 @@ @@ -651431,7 +651492,7 @@ index 000000000000..ed93bb0147ff +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/mc3230.c b/drivers/input/sensors/accel/mc3230.c new file mode 100755 -index 000000000000..d5827f2f2bee +index 000000000..d5827f2f2 --- /dev/null +++ b/drivers/input/sensors/accel/mc3230.c @@ -0,0 +1,1353 @@ @@ -652790,7 +652851,7 @@ index 000000000000..d5827f2f2bee +MODULE_DESCRIPTION("mc3230 3-Axis accelerometer driver"); diff --git a/drivers/input/sensors/accel/mma7660.c b/drivers/input/sensors/accel/mma7660.c new file mode 100755 -index 000000000000..33e2dec7bb22 +index 000000000..33e2dec7b --- /dev/null +++ b/drivers/input/sensors/accel/mma7660.c @@ -0,0 +1,258 @@ @@ -653054,7 +653115,7 @@ index 000000000000..33e2dec7bb22 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/mma8452.c b/drivers/input/sensors/accel/mma8452.c new file mode 100755 -index 000000000000..9c8bb48f0848 +index 000000000..9c8bb48f0 --- /dev/null +++ b/drivers/input/sensors/accel/mma8452.c @@ -0,0 +1,424 @@ @@ -653484,7 +653545,7 @@ index 000000000000..9c8bb48f0848 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/mpu6500_acc.c b/drivers/input/sensors/accel/mpu6500_acc.c new file mode 100755 -index 000000000000..6fc2058e0f9f +index 000000000..6fc2058e0 --- /dev/null +++ b/drivers/input/sensors/accel/mpu6500_acc.c @@ -0,0 +1,300 @@ @@ -653790,7 +653851,7 @@ index 000000000000..6fc2058e0f9f +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/mpu6880_acc.c b/drivers/input/sensors/accel/mpu6880_acc.c new file mode 100755 -index 000000000000..4cf8c89506a5 +index 000000000..4cf8c8950 --- /dev/null +++ b/drivers/input/sensors/accel/mpu6880_acc.c @@ -0,0 +1,296 @@ @@ -654092,7 +654153,7 @@ index 000000000000..4cf8c89506a5 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/mxc622x.c b/drivers/input/sensors/accel/mxc622x.c new file mode 100755 -index 000000000000..614242584e0a +index 000000000..614242584 --- /dev/null +++ b/drivers/input/sensors/accel/mxc622x.c @@ -0,0 +1,284 @@ @@ -654382,7 +654443,7 @@ index 000000000000..614242584e0a +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/mxc6655xa.c b/drivers/input/sensors/accel/mxc6655xa.c new file mode 100755 -index 000000000000..535a83a262f5 +index 000000000..535a83a26 --- /dev/null +++ b/drivers/input/sensors/accel/mxc6655xa.c @@ -0,0 +1,262 @@ @@ -654650,7 +654711,7 @@ index 000000000000..535a83a262f5 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/sc7660.c b/drivers/input/sensors/accel/sc7660.c new file mode 100755 -index 000000000000..39106b111000 +index 000000000..39106b111 --- /dev/null +++ b/drivers/input/sensors/accel/sc7660.c @@ -0,0 +1,1655 @@ @@ -656311,7 +656372,7 @@ index 000000000000..39106b111000 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/sc7a20.c b/drivers/input/sensors/accel/sc7a20.c new file mode 100755 -index 000000000000..f7443f922e7e +index 000000000..f7443f922 --- /dev/null +++ b/drivers/input/sensors/accel/sc7a20.c @@ -0,0 +1,1768 @@ @@ -658085,7 +658146,7 @@ index 000000000000..f7443f922e7e +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/sc7a30.c b/drivers/input/sensors/accel/sc7a30.c new file mode 100755 -index 000000000000..576c9188029b +index 000000000..576c91880 --- /dev/null +++ b/drivers/input/sensors/accel/sc7a30.c @@ -0,0 +1,1215 @@ @@ -659306,7 +659367,7 @@ index 000000000000..576c9188029b +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/accel/stk8baxx.c b/drivers/input/sensors/accel/stk8baxx.c new file mode 100755 -index 000000000000..9ca93971d914 +index 000000000..9ca93971d --- /dev/null +++ b/drivers/input/sensors/accel/stk8baxx.c @@ -0,0 +1,957 @@ @@ -660269,7 +660330,7 @@ index 000000000000..9ca93971d914 +MODULE_VERSION(STK_ACC_DRIVER_VERSION); diff --git a/drivers/input/sensors/angle/Kconfig b/drivers/input/sensors/angle/Kconfig new file mode 100755 -index 000000000000..088837f92ed8 +index 000000000..088837f92 --- /dev/null +++ b/drivers/input/sensors/angle/Kconfig @@ -0,0 +1,27 @@ @@ -660302,7 +660363,7 @@ index 000000000000..088837f92ed8 + diff --git a/drivers/input/sensors/angle/Makefile b/drivers/input/sensors/angle/Makefile new file mode 100755 -index 000000000000..0696550b53f8 +index 000000000..0696550b5 --- /dev/null +++ b/drivers/input/sensors/angle/Makefile @@ -0,0 +1,3 @@ @@ -660311,7 +660372,7 @@ index 000000000000..0696550b53f8 +obj-$(CONFIG_ANGLE_LIS3DH) += angle_lis3dh.o diff --git a/drivers/input/sensors/angle/angle_kxtik.c b/drivers/input/sensors/angle/angle_kxtik.c new file mode 100755 -index 000000000000..7373c6bd4068 +index 000000000..7373c6bd4 --- /dev/null +++ b/drivers/input/sensors/angle/angle_kxtik.c @@ -0,0 +1,398 @@ @@ -660715,7 +660776,7 @@ index 000000000000..7373c6bd4068 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/angle/angle_lis3dh.c b/drivers/input/sensors/angle/angle_lis3dh.c new file mode 100755 -index 000000000000..ae247ffa2312 +index 000000000..ae247ffa2 --- /dev/null +++ b/drivers/input/sensors/angle/angle_lis3dh.c @@ -0,0 +1,342 @@ @@ -661063,7 +661124,7 @@ index 000000000000..ae247ffa2312 + diff --git a/drivers/input/sensors/compass/Kconfig b/drivers/input/sensors/compass/Kconfig new file mode 100755 -index 000000000000..91a19ffe23ea +index 000000000..91a19ffe2 --- /dev/null +++ b/drivers/input/sensors/compass/Kconfig @@ -0,0 +1,58 @@ @@ -661127,7 +661188,7 @@ index 000000000000..91a19ffe23ea + diff --git a/drivers/input/sensors/compass/Makefile b/drivers/input/sensors/compass/Makefile new file mode 100755 -index 000000000000..f42c2aa2dd17 +index 000000000..f42c2aa2d --- /dev/null +++ b/drivers/input/sensors/compass/Makefile @@ -0,0 +1,8 @@ @@ -661141,7 +661202,7 @@ index 000000000000..f42c2aa2dd17 +obj-$(CONFIG_COMPASS_AK09918) += ak09918.o diff --git a/drivers/input/sensors/compass/ak09911.c b/drivers/input/sensors/compass/ak09911.c new file mode 100755 -index 000000000000..b1e334d0b5a8 +index 000000000..b1e334d0b --- /dev/null +++ b/drivers/input/sensors/compass/ak09911.c @@ -0,0 +1,667 @@ @@ -661814,7 +661875,7 @@ index 000000000000..b1e334d0b5a8 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/compass/ak09918.c b/drivers/input/sensors/compass/ak09918.c new file mode 100755 -index 000000000000..1c3056a824e5 +index 000000000..1c3056a82 --- /dev/null +++ b/drivers/input/sensors/compass/ak09918.c @@ -0,0 +1,692 @@ @@ -662512,7 +662573,7 @@ index 000000000000..1c3056a824e5 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/compass/ak8963.c b/drivers/input/sensors/compass/ak8963.c new file mode 100755 -index 000000000000..10e91eb2d0be +index 000000000..10e91eb2d --- /dev/null +++ b/drivers/input/sensors/compass/ak8963.c @@ -0,0 +1,714 @@ @@ -663232,7 +663293,7 @@ index 000000000000..10e91eb2d0be +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/compass/ak8975.c b/drivers/input/sensors/compass/ak8975.c new file mode 100755 -index 000000000000..c48a808ed18d +index 000000000..c48a808ed --- /dev/null +++ b/drivers/input/sensors/compass/ak8975.c @@ -0,0 +1,650 @@ @@ -663888,7 +663949,7 @@ index 000000000000..c48a808ed18d + diff --git a/drivers/input/sensors/gyro/Kconfig b/drivers/input/sensors/gyro/Kconfig new file mode 100755 -index 000000000000..fb721d4cb30d +index 000000000..fb721d4cb --- /dev/null +++ b/drivers/input/sensors/gyro/Kconfig @@ -0,0 +1,42 @@ @@ -663936,7 +663997,7 @@ index 000000000000..fb721d4cb30d +endif diff --git a/drivers/input/sensors/gyro/Makefile b/drivers/input/sensors/gyro/Makefile new file mode 100755 -index 000000000000..0943257a11de +index 000000000..0943257a1 --- /dev/null +++ b/drivers/input/sensors/gyro/Makefile @@ -0,0 +1,11 @@ @@ -663953,7 +664014,7 @@ index 000000000000..0943257a11de +obj-$(CONFIG_GYRO_ICM2060X) += icm2060x_gyro.o diff --git a/drivers/input/sensors/gyro/ewtsa.c b/drivers/input/sensors/gyro/ewtsa.c new file mode 100755 -index 000000000000..acbc0ac4b143 +index 000000000..acbc0ac4b --- /dev/null +++ b/drivers/input/sensors/gyro/ewtsa.c @@ -0,0 +1,461 @@ @@ -664420,7 +664481,7 @@ index 000000000000..acbc0ac4b143 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/gyro/icm2060x_gyro.c b/drivers/input/sensors/gyro/icm2060x_gyro.c new file mode 100755 -index 000000000000..3d4624b5dbd6 +index 000000000..3d4624b5d --- /dev/null +++ b/drivers/input/sensors/gyro/icm2060x_gyro.c @@ -0,0 +1,216 @@ @@ -664642,7 +664703,7 @@ index 000000000000..3d4624b5dbd6 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/gyro/l3g20d.c b/drivers/input/sensors/gyro/l3g20d.c new file mode 100755 -index 000000000000..8822a0e3bfe0 +index 000000000..8822a0e3b --- /dev/null +++ b/drivers/input/sensors/gyro/l3g20d.c @@ -0,0 +1,257 @@ @@ -664905,7 +664966,7 @@ index 000000000000..8822a0e3bfe0 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/gyro/l3g4200d.c b/drivers/input/sensors/gyro/l3g4200d.c new file mode 100755 -index 000000000000..b1e3af6589cb +index 000000000..b1e3af658 --- /dev/null +++ b/drivers/input/sensors/gyro/l3g4200d.c @@ -0,0 +1,257 @@ @@ -665168,7 +665229,7 @@ index 000000000000..b1e3af6589cb +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/gyro/lsm330_gyro.c b/drivers/input/sensors/gyro/lsm330_gyro.c new file mode 100755 -index 000000000000..a488d4826acf +index 000000000..a488d4826 --- /dev/null +++ b/drivers/input/sensors/gyro/lsm330_gyro.c @@ -0,0 +1,262 @@ @@ -665436,7 +665497,7 @@ index 000000000000..a488d4826acf +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/gyro/mpu6500_gyro.c b/drivers/input/sensors/gyro/mpu6500_gyro.c new file mode 100755 -index 000000000000..6b4f81154b7f +index 000000000..6b4f81154 --- /dev/null +++ b/drivers/input/sensors/gyro/mpu6500_gyro.c @@ -0,0 +1,216 @@ @@ -665658,7 +665719,7 @@ index 000000000000..6b4f81154b7f +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/gyro/mpu6880_gyro.c b/drivers/input/sensors/gyro/mpu6880_gyro.c new file mode 100755 -index 000000000000..324e66ecfab6 +index 000000000..324e66ecf --- /dev/null +++ b/drivers/input/sensors/gyro/mpu6880_gyro.c @@ -0,0 +1,216 @@ @@ -665880,7 +665941,7 @@ index 000000000000..324e66ecfab6 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/hall/Kconfig b/drivers/input/sensors/hall/Kconfig new file mode 100755 -index 000000000000..33ca28c87cda +index 000000000..33ca28c87 --- /dev/null +++ b/drivers/input/sensors/hall/Kconfig @@ -0,0 +1,16 @@ @@ -665902,7 +665963,7 @@ index 000000000000..33ca28c87cda +endif diff --git a/drivers/input/sensors/hall/Makefile b/drivers/input/sensors/hall/Makefile new file mode 100755 -index 000000000000..f78ba4ffb850 +index 000000000..f78ba4ffb --- /dev/null +++ b/drivers/input/sensors/hall/Makefile @@ -0,0 +1,3 @@ @@ -665911,7 +665972,7 @@ index 000000000000..f78ba4ffb850 +obj-$(CONFIG_HS_MH248) += mh248.o diff --git a/drivers/input/sensors/hall/mh248.c b/drivers/input/sensors/hall/mh248.c new file mode 100755 -index 000000000000..88ee00980514 +index 000000000..88ee00980 --- /dev/null +++ b/drivers/input/sensors/hall/mh248.c @@ -0,0 +1,165 @@ @@ -666082,7 +666143,7 @@ index 000000000000..88ee00980514 +MODULE_DESCRIPTION("Hall Sensor MH248 driver"); diff --git a/drivers/input/sensors/hall/och165t_hall.c b/drivers/input/sensors/hall/och165t_hall.c new file mode 100755 -index 000000000000..71711a95028d +index 000000000..71711a950 --- /dev/null +++ b/drivers/input/sensors/hall/och165t_hall.c @@ -0,0 +1,159 @@ @@ -666247,7 +666308,7 @@ index 000000000000..71711a95028d +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/lsensor/Kconfig b/drivers/input/sensors/lsensor/Kconfig new file mode 100755 -index 000000000000..8ea493862dd3 +index 000000000..8ea493862 --- /dev/null +++ b/drivers/input/sensors/lsensor/Kconfig @@ -0,0 +1,50 @@ @@ -666303,7 +666364,7 @@ index 000000000000..8ea493862dd3 + diff --git a/drivers/input/sensors/lsensor/Makefile b/drivers/input/sensors/lsensor/Makefile new file mode 100755 -index 000000000000..aa8bf78f440c +index 000000000..aa8bf78f4 --- /dev/null +++ b/drivers/input/sensors/lsensor/Makefile @@ -0,0 +1,13 @@ @@ -666322,7 +666383,7 @@ index 000000000000..aa8bf78f440c +obj-$(CONFIG_LS_EM3071X) += ls_em3071x.o diff --git a/drivers/input/sensors/lsensor/cm3217.c b/drivers/input/sensors/lsensor/cm3217.c new file mode 100755 -index 000000000000..182fee423993 +index 000000000..182fee423 --- /dev/null +++ b/drivers/input/sensors/lsensor/cm3217.c @@ -0,0 +1,237 @@ @@ -666565,7 +666626,7 @@ index 000000000000..182fee423993 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/lsensor/cm3218.c b/drivers/input/sensors/lsensor/cm3218.c new file mode 100755 -index 000000000000..eed39578b005 +index 000000000..eed39578b --- /dev/null +++ b/drivers/input/sensors/lsensor/cm3218.c @@ -0,0 +1,415 @@ @@ -666986,7 +667047,7 @@ index 000000000000..eed39578b005 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/lsensor/cm3232.c b/drivers/input/sensors/lsensor/cm3232.c new file mode 100755 -index 000000000000..6322e57bb1a9 +index 000000000..6322e57bb --- /dev/null +++ b/drivers/input/sensors/lsensor/cm3232.c @@ -0,0 +1,245 @@ @@ -667237,7 +667298,7 @@ index 000000000000..6322e57bb1a9 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/lsensor/isl29023.c b/drivers/input/sensors/lsensor/isl29023.c new file mode 100755 -index 000000000000..200c4b2959c7 +index 000000000..200c4b295 --- /dev/null +++ b/drivers/input/sensors/lsensor/isl29023.c @@ -0,0 +1,273 @@ @@ -667516,7 +667577,7 @@ index 000000000000..200c4b2959c7 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/lsensor/ls_al3006.c b/drivers/input/sensors/lsensor/ls_al3006.c new file mode 100755 -index 000000000000..8334d0faceaf +index 000000000..8334d0fac --- /dev/null +++ b/drivers/input/sensors/lsensor/ls_al3006.c @@ -0,0 +1,301 @@ @@ -667823,7 +667884,7 @@ index 000000000000..8334d0faceaf + diff --git a/drivers/input/sensors/lsensor/ls_ap321xx.c b/drivers/input/sensors/lsensor/ls_ap321xx.c new file mode 100755 -index 000000000000..8181cec587a0 +index 000000000..8181cec58 --- /dev/null +++ b/drivers/input/sensors/lsensor/ls_ap321xx.c @@ -0,0 +1,415 @@ @@ -668244,7 +668305,7 @@ index 000000000000..8181cec587a0 + diff --git a/drivers/input/sensors/lsensor/ls_em3071x.c b/drivers/input/sensors/lsensor/ls_em3071x.c new file mode 100755 -index 000000000000..fc7500963ab5 +index 000000000..fc7500963 --- /dev/null +++ b/drivers/input/sensors/lsensor/ls_em3071x.c @@ -0,0 +1,283 @@ @@ -668533,7 +668594,7 @@ index 000000000000..fc7500963ab5 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/lsensor/ls_stk3171.c b/drivers/input/sensors/lsensor/ls_stk3171.c new file mode 100755 -index 000000000000..a8bc7d0e9af3 +index 000000000..a8bc7d0e9 --- /dev/null +++ b/drivers/input/sensors/lsensor/ls_stk3171.c @@ -0,0 +1,321 @@ @@ -668860,7 +668921,7 @@ index 000000000000..a8bc7d0e9af3 + diff --git a/drivers/input/sensors/lsensor/ls_stk3410.c b/drivers/input/sensors/lsensor/ls_stk3410.c new file mode 100755 -index 000000000000..25722040fc31 +index 000000000..25722040f --- /dev/null +++ b/drivers/input/sensors/lsensor/ls_stk3410.c @@ -0,0 +1,374 @@ @@ -669240,7 +669301,7 @@ index 000000000000..25722040fc31 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/lsensor/ls_us5152.c b/drivers/input/sensors/lsensor/ls_us5152.c new file mode 100755 -index 000000000000..4f5b470bc735 +index 000000000..4f5b470bc --- /dev/null +++ b/drivers/input/sensors/lsensor/ls_us5152.c @@ -0,0 +1,440 @@ @@ -669686,7 +669747,7 @@ index 000000000000..4f5b470bc735 +MODULE_VERSION(DRIVER_VERSION); diff --git a/drivers/input/sensors/lsensor/ls_us5152.h b/drivers/input/sensors/lsensor/ls_us5152.h new file mode 100755 -index 000000000000..71f108572639 +index 000000000..71f108572 --- /dev/null +++ b/drivers/input/sensors/lsensor/ls_us5152.h @@ -0,0 +1,235 @@ @@ -669927,7 +669988,7 @@ index 000000000000..71f108572639 +#endif diff --git a/drivers/input/sensors/pressure/Kconfig b/drivers/input/sensors/pressure/Kconfig new file mode 100755 -index 000000000000..8bbaaa148690 +index 000000000..8bbaaa148 --- /dev/null +++ b/drivers/input/sensors/pressure/Kconfig @@ -0,0 +1,15 @@ @@ -669948,7 +670009,7 @@ index 000000000000..8bbaaa148690 +endif diff --git a/drivers/input/sensors/pressure/Makefile b/drivers/input/sensors/pressure/Makefile new file mode 100755 -index 000000000000..18872b53bb4b +index 000000000..18872b53b --- /dev/null +++ b/drivers/input/sensors/pressure/Makefile @@ -0,0 +1,7 @@ @@ -669961,7 +670022,7 @@ index 000000000000..18872b53bb4b + diff --git a/drivers/input/sensors/pressure/pr_ms5607.c b/drivers/input/sensors/pressure/pr_ms5607.c new file mode 100755 -index 000000000000..9833ad5d9a9e +index 000000000..9833ad5d9 --- /dev/null +++ b/drivers/input/sensors/pressure/pr_ms5607.c @@ -0,0 +1,297 @@ @@ -670264,7 +670325,7 @@ index 000000000000..9833ad5d9a9e +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/psensor/Kconfig b/drivers/input/sensors/psensor/Kconfig new file mode 100755 -index 000000000000..c7d32f51e7d0 +index 000000000..c7d32f51e --- /dev/null +++ b/drivers/input/sensors/psensor/Kconfig @@ -0,0 +1,32 @@ @@ -670302,7 +670363,7 @@ index 000000000000..c7d32f51e7d0 + diff --git a/drivers/input/sensors/psensor/Makefile b/drivers/input/sensors/psensor/Makefile new file mode 100755 -index 000000000000..49210d0e71cc +index 000000000..49210d0e7 --- /dev/null +++ b/drivers/input/sensors/psensor/Makefile @@ -0,0 +1,8 @@ @@ -670316,7 +670377,7 @@ index 000000000000..49210d0e71cc +obj-$(CONFIG_PS_EM3071X) += ps_em3071x.o diff --git a/drivers/input/sensors/psensor/ps_al3006.c b/drivers/input/sensors/psensor/ps_al3006.c new file mode 100755 -index 000000000000..3242af2be23f +index 000000000..3242af2be --- /dev/null +++ b/drivers/input/sensors/psensor/ps_al3006.c @@ -0,0 +1,261 @@ @@ -670583,7 +670644,7 @@ index 000000000000..3242af2be23f +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/psensor/ps_ap321xx.c b/drivers/input/sensors/psensor/ps_ap321xx.c new file mode 100755 -index 000000000000..d3711461af20 +index 000000000..d3711461a --- /dev/null +++ b/drivers/input/sensors/psensor/ps_ap321xx.c @@ -0,0 +1,325 @@ @@ -670914,7 +670975,7 @@ index 000000000000..d3711461af20 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/psensor/ps_em3071x.c b/drivers/input/sensors/psensor/ps_em3071x.c new file mode 100755 -index 000000000000..5f387348881b +index 000000000..5f3873488 --- /dev/null +++ b/drivers/input/sensors/psensor/ps_em3071x.c @@ -0,0 +1,280 @@ @@ -671200,7 +671261,7 @@ index 000000000000..5f387348881b +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/psensor/ps_stk3171.c b/drivers/input/sensors/psensor/ps_stk3171.c new file mode 100755 -index 000000000000..1753bbe65c19 +index 000000000..1753bbe65 --- /dev/null +++ b/drivers/input/sensors/psensor/ps_stk3171.c @@ -0,0 +1,268 @@ @@ -671474,7 +671535,7 @@ index 000000000000..1753bbe65c19 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/psensor/ps_stk3410.c b/drivers/input/sensors/psensor/ps_stk3410.c new file mode 100755 -index 000000000000..90f9a2313d1f +index 000000000..90f9a2313 --- /dev/null +++ b/drivers/input/sensors/psensor/ps_stk3410.c @@ -0,0 +1,377 @@ @@ -671857,7 +671918,7 @@ index 000000000000..90f9a2313d1f +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/sensor-dev.c b/drivers/input/sensors/sensor-dev.c new file mode 100755 -index 000000000000..5aeeba175edd +index 000000000..5aeeba175 --- /dev/null +++ b/drivers/input/sensors/sensor-dev.c @@ -0,0 +1,2042 @@ @@ -673905,7 +673966,7 @@ index 000000000000..5aeeba175edd +MODULE_LICENSE("GPL"); diff --git a/drivers/input/sensors/sensor-i2c.c b/drivers/input/sensors/sensor-i2c.c new file mode 100755 -index 000000000000..35c3feec8b32 +index 000000000..35c3feec8 --- /dev/null +++ b/drivers/input/sensors/sensor-i2c.c @@ -0,0 +1,245 @@ @@ -674156,7 +674217,7 @@ index 000000000000..35c3feec8b32 + diff --git a/drivers/input/sensors/temperature/Kconfig b/drivers/input/sensors/temperature/Kconfig new file mode 100755 -index 000000000000..34edaa7838ac +index 000000000..34edaa783 --- /dev/null +++ b/drivers/input/sensors/temperature/Kconfig @@ -0,0 +1,15 @@ @@ -674177,7 +674238,7 @@ index 000000000000..34edaa7838ac +endif diff --git a/drivers/input/sensors/temperature/Makefile b/drivers/input/sensors/temperature/Makefile new file mode 100755 -index 000000000000..6045760d7e93 +index 000000000..6045760d7 --- /dev/null +++ b/drivers/input/sensors/temperature/Makefile @@ -0,0 +1,7 @@ @@ -674190,7 +674251,7 @@ index 000000000000..6045760d7e93 + diff --git a/drivers/input/sensors/temperature/tmp_ms5607.c b/drivers/input/sensors/temperature/tmp_ms5607.c new file mode 100755 -index 000000000000..1e5183ccc11d +index 000000000..1e5183ccc --- /dev/null +++ b/drivers/input/sensors/temperature/tmp_ms5607.c @@ -0,0 +1,314 @@ @@ -674509,7 +674570,7 @@ index 000000000000..1e5183ccc11d +MODULE_DESCRIPTION("ms5607 temperature driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig -index cc18f54ea887..b9db13edafc1 100644 +index cc18f54ea..b9db13eda 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -404,6 +404,24 @@ config TOUCHSCREEN_GOODIX @@ -674538,7 +674599,7 @@ index cc18f54ea887..b9db13edafc1 100644 tristate "HiDeep Touch IC" depends on I2C diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile -index 6233541e9173..4a3cd29bd96d 100644 +index 6233541e9..4a3cd29bd 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -45,6 +45,10 @@ obj-$(CONFIG_TOUCHSCREEN_EGALAX_SERIAL) += egalax_ts_serial.o @@ -674554,7 +674615,7 @@ index 6233541e9173..4a3cd29bd96d 100644 obj-$(CONFIG_TOUCHSCREEN_IMX6UL_TSC) += imx6ul_tsc.o diff --git a/drivers/input/touchscreen/cy8c_touchpad.c b/drivers/input/touchscreen/cy8c_touchpad.c new file mode 100755 -index 000000000000..8088cb918c79 +index 000000000..8088cb918 --- /dev/null +++ b/drivers/input/touchscreen/cy8c_touchpad.c @@ -0,0 +1,296 @@ @@ -674856,7 +674917,7 @@ index 000000000000..8088cb918c79 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/cyttsp5/Kconfig b/drivers/input/touchscreen/cyttsp5/Kconfig new file mode 100755 -index 000000000000..4bdeb1b8365d +index 000000000..4bdeb1b83 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/Kconfig @@ -0,0 +1,205 @@ @@ -675067,7 +675128,7 @@ index 000000000000..4bdeb1b8365d + diff --git a/drivers/input/touchscreen/cyttsp5/Makefile b/drivers/input/touchscreen/cyttsp5/Makefile new file mode 100755 -index 000000000000..ff1fe526035d +index 000000000..ff1fe5260 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/Makefile @@ -0,0 +1,23 @@ @@ -675096,7 +675157,7 @@ index 000000000000..ff1fe526035d +obj-$(CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_TEST_DEVICE_ACCESS_API) += cyttsp5_test_device_access_api.o diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_btn.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_btn.c new file mode 100755 -index 000000000000..52c0eb85d29e +index 000000000..52c0eb85d --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_btn.c @@ -0,0 +1,369 @@ @@ -675471,7 +675532,7 @@ index 000000000000..52c0eb85d29e +} diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_core.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_core.c new file mode 100755 -index 000000000000..7fac39a1bbaf +index 000000000..7fac39a1b --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_core.c @@ -0,0 +1,6292 @@ @@ -681769,7 +681830,7 @@ index 000000000000..7fac39a1bbaf +MODULE_AUTHOR("Parade Technologies "); diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_core.h b/drivers/input/touchscreen/cyttsp5/cyttsp5_core.h new file mode 100755 -index 000000000000..5989613865c1 +index 000000000..598961386 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_core.h @@ -0,0 +1,182 @@ @@ -681957,7 +682018,7 @@ index 000000000000..5989613865c1 +#endif /* _LINUX_CYTTSP5_CORE_H */ diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_debug.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_debug.c new file mode 100755 -index 000000000000..f4ebba784936 +index 000000000..f4ebba784 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_debug.c @@ -0,0 +1,393 @@ @@ -682356,7 +682417,7 @@ index 000000000000..f4ebba784936 +MODULE_AUTHOR("Parade Technologies "); diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_device_access.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_device_access.c new file mode 100755 -index 000000000000..51cd63dc6ac0 +index 000000000..51cd63dc6 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_device_access.c @@ -0,0 +1,5219 @@ @@ -687581,7 +687642,7 @@ index 000000000000..51cd63dc6ac0 + diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_devtree.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_devtree.c new file mode 100755 -index 000000000000..9cb9050960b6 +index 000000000..9cb905096 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_devtree.c @@ -0,0 +1,785 @@ @@ -688372,7 +688433,7 @@ index 000000000000..9cb9050960b6 +MODULE_AUTHOR("Parade Technologies "); diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_i2c.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_i2c.c new file mode 100755 -index 000000000000..976db422b907 +index 000000000..976db422b --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_i2c.c @@ -0,0 +1,248 @@ @@ -688626,7 +688687,7 @@ index 000000000000..976db422b907 +MODULE_AUTHOR("Parade Technologies "); diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_loader.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_loader.c new file mode 100755 -index 000000000000..c900eb206881 +index 000000000..c900eb206 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_loader.c @@ -0,0 +1,1586 @@ @@ -690218,7 +690279,7 @@ index 000000000000..c900eb206881 +MODULE_AUTHOR("Parade Technologies "); diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_mt_common.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_mt_common.c new file mode 100755 -index 000000000000..25e5fa7654d4 +index 000000000..25e5fa765 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_mt_common.c @@ -0,0 +1,793 @@ @@ -691017,7 +691078,7 @@ index 000000000000..25e5fa7654d4 +} diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_mta.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_mta.c new file mode 100755 -index 000000000000..d457bb66d360 +index 000000000..d457bb66d --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_mta.c @@ -0,0 +1,85 @@ @@ -691108,7 +691169,7 @@ index 000000000000..d457bb66d360 +} diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_mtb.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_mtb.c new file mode 100755 -index 000000000000..d5f51e9c836f +index 000000000..d5f51e9c8 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_mtb.c @@ -0,0 +1,93 @@ @@ -691207,7 +691268,7 @@ index 000000000000..d5f51e9c836f + diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_params.h b/drivers/input/touchscreen/cyttsp5/cyttsp5_params.h new file mode 100755 -index 000000000000..7a92d109fa73 +index 000000000..f9113814e --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_params.h @@ -0,0 +1,1548 @@ @@ -691223,17 +691284,17 @@ index 000000000000..7a92d109fa73 +//***************************************************************************** +//***************************************************************************** +//----------------------------------------------------------------------------- -+/* Touchscreen Version Information */ -+static u8 ttconfig_fw_ver[] = { -+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x86, 0x8C, 0x16, 0x00, 0x11, 0xA6, 0x00, 0x25 -+}; -+ -+/* Touchscreen Parameters Endianess (Endianess: 0:Little; 1:Big)*/ ++/* Touchscreen Version Information */ ++static u8 ttconfig_fw_ver[] = { ++ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x86, 0x8C, 0x16, 0x00, 0x11, 0xA6, 0x00, 0x25 ++}; ++ ++/* Touchscreen Parameters Endianess (Endianess: 0:Little; 1:Big)*/ +static const uint8_t cyttsp4_param_endianess = 0; -+ -+/* Touchscreen Parameters */ -+static const uint8_t cyttsp4_param_regs[] = { -+/* Value Name */ ++ ++/* Touchscreen Parameters */ ++static const uint8_t cyttsp4_param_regs[] = { ++/* Value Name */ + 0xFC, 0x04, /* CONFIG_DATA_SIZE */ + 0xFC, 0x04, /* CONFIG_DATA_MAX_SIZE */ + 0x00, 0x03, /* CROSS_NUM */ @@ -691835,11 +691896,11 @@ index 000000000000..7a92d109fa73 + 0x00, /* PIP_REPORTING_DISABLE */ + 0x00, 0x00, /* INTERRUPT_PIN_OVERRIDE */ + 0x8F, 0x73, /* CONFIG_CRC */ -+}; -+ -+/* Touchscreen Parameters Field Sizes (Writable: 0:Readonly; 1:Writable) */ -+static const uint16_t cyttsp4_param_size[] = { -+/* Size Name */ ++}; ++ ++/* Touchscreen Parameters Field Sizes (Writable: 0:Readonly; 1:Writable) */ ++static const uint16_t cyttsp4_param_size[] = { ++/* Size Name */ + 2, /* CONFIG_DATA_SIZE */ + 2, /* CONFIG_DATA_MAX_SIZE */ + 2, /* CROSS_NUM */ @@ -692296,11 +692357,11 @@ index 000000000000..7a92d109fa73 + 1, /* PIP_REPORTING_DISABLE */ + 2, /* INTERRUPT_PIN_OVERRIDE */ + 2, /* CONFIG_CRC */ -+}; -+ -+/* Touchscreen Parameters Field Address*/ -+static const uint8_t cyttsp4_param_addr[] = { -+/* Address Name */ ++}; ++ ++/* Touchscreen Parameters Field Address*/ ++static const uint8_t cyttsp4_param_addr[] = { ++/* Address Name */ + 0xE1, 0x00, /* CONFIG_DATA_SIZE */ + 0xE1, 0x02, /* CONFIG_DATA_MAX_SIZE */ + 0xE1, 0x04, /* CROSS_NUM */ @@ -692757,11 +692818,11 @@ index 000000000000..7a92d109fa73 + 0xE5, 0xF9, /* PIP_REPORTING_DISABLE */ + 0xE5, 0xFA, /* INTERRUPT_PIN_OVERRIDE */ + 0xE5, 0xFC, /* CONFIG_CRC */ -+}; -+ ++}; ++ diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_params_pid00.h b/drivers/input/touchscreen/cyttsp5/cyttsp5_params_pid00.h new file mode 100755 -index 000000000000..939ff2a288ae +index 000000000..939ff2a28 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_params_pid00.h @@ -0,0 +1,1548 @@ @@ -694315,7 +694376,7 @@ index 000000000000..939ff2a288ae + diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_params_pid01.h b/drivers/input/touchscreen/cyttsp5/cyttsp5_params_pid01.h new file mode 100755 -index 000000000000..3dcb64dd3ba7 +index 000000000..3dcb64dd3 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_params_pid01.h @@ -0,0 +1,1548 @@ @@ -695869,7 +695930,7 @@ index 000000000000..3dcb64dd3ba7 + diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_platform.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_platform.c new file mode 100755 -index 000000000000..cc6feaef1031 +index 000000000..cc6feaef1 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_platform.c @@ -0,0 +1,289 @@ @@ -696164,7 +696225,7 @@ index 000000000000..cc6feaef1031 +#endif diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_platform.h b/drivers/input/touchscreen/cyttsp5/cyttsp5_platform.h new file mode 100755 -index 000000000000..289b014775c0 +index 000000000..289b01477 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_platform.h @@ -0,0 +1,60 @@ @@ -696230,7 +696291,7 @@ index 000000000000..289b014775c0 +#endif /* _LINUX_CYTTSP5_PLATFORM_H */ diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_proximity.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_proximity.c new file mode 100755 -index 000000000000..0dba2c817387 +index 000000000..0dba2c817 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_proximity.c @@ -0,0 +1,555 @@ @@ -696791,7 +696852,7 @@ index 000000000000..0dba2c817387 +} diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_regs.h b/drivers/input/touchscreen/cyttsp5/cyttsp5_regs.h new file mode 100755 -index 000000000000..ded98eff2deb +index 000000000..ded98eff2 --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_regs.h @@ -0,0 +1,1202 @@ @@ -697999,7 +698060,7 @@ index 000000000000..ded98eff2deb +#endif /* _CYTTSP5_REGS_H */ diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_spi.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_spi.c new file mode 100755 -index 000000000000..a01b88b0c8a9 +index 000000000..a01b88b0c --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_spi.c @@ -0,0 +1,255 @@ @@ -698260,7 +698321,7 @@ index 000000000000..a01b88b0c8a9 +MODULE_AUTHOR("Parade Technologies "); diff --git a/drivers/input/touchscreen/cyttsp5/cyttsp5_test_device_access_api.c b/drivers/input/touchscreen/cyttsp5/cyttsp5_test_device_access_api.c new file mode 100755 -index 000000000000..b9517d52d5d4 +index 000000000..b9517d52d --- /dev/null +++ b/drivers/input/touchscreen/cyttsp5/cyttsp5_test_device_access_api.c @@ -0,0 +1,442 @@ @@ -698708,7 +698769,7 @@ index 000000000000..b9517d52d5d4 +MODULE_AUTHOR("Parade Technologies "); diff --git a/drivers/input/touchscreen/focaltech_touch/Makefile b/drivers/input/touchscreen/focaltech_touch/Makefile new file mode 100755 -index 000000000000..bf7df1543b01 +index 000000000..bf7df1543 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/Makefile @@ -0,0 +1,18 @@ @@ -698732,7 +698793,7 @@ index 000000000000..bf7df1543b01 + diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_common.h b/drivers/input/touchscreen/focaltech_touch/focaltech_common.h new file mode 100755 -index 000000000000..7e911d1ac36f +index 000000000..7e911d1ac --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_common.h @@ -0,0 +1,159 @@ @@ -698897,7 +698958,7 @@ index 000000000000..7e911d1ac36f +#endif /* __LINUX_FOCALTECH_COMMON_H__ */ diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_config.h b/drivers/input/touchscreen/focaltech_touch/focaltech_config.h new file mode 100755 -index 000000000000..18cf1eafaa9a +index 000000000..18cf1eafa --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_config.h @@ -0,0 +1,244 @@ @@ -699147,7 +699208,7 @@ index 000000000000..18cf1eafaa9a +#endif /* _LINUX_FOCLATECH_CONFIG_H_ */ diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_core.c b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c new file mode 100755 -index 000000000000..c8318c0ce8c0 +index 000000000..c8318c0ce --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c @@ -0,0 +1,1783 @@ @@ -700936,7 +700997,7 @@ index 000000000000..c8318c0ce8c0 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_core.h b/drivers/input/touchscreen/focaltech_touch/focaltech_core.h new file mode 100755 -index 000000000000..6547719b94a9 +index 000000000..6547719b9 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_core.h @@ -0,0 +1,254 @@ @@ -701196,7 +701257,7 @@ index 000000000000..6547719b94a9 +#endif /* __LINUX_FOCALTECH_CORE_H__ */ diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_esdcheck.c b/drivers/input/touchscreen/focaltech_touch/focaltech_esdcheck.c new file mode 100755 -index 000000000000..cb8e6ec18bcf +index 000000000..cb8e6ec18 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_esdcheck.c @@ -0,0 +1,552 @@ @@ -701754,7 +701815,7 @@ index 000000000000..cb8e6ec18bcf + diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_ex_fun.c b/drivers/input/touchscreen/focaltech_touch/focaltech_ex_fun.c new file mode 100755 -index 000000000000..06511c515869 +index 000000000..06511c515 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_ex_fun.c @@ -0,0 +1,1130 @@ @@ -702890,7 +702951,7 @@ index 000000000000..06511c515869 +#endif diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_ex_mode.c b/drivers/input/touchscreen/focaltech_touch/focaltech_ex_mode.c new file mode 100755 -index 000000000000..bca972ebb040 +index 000000000..bca972ebb --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_ex_mode.c @@ -0,0 +1,382 @@ @@ -703278,7 +703339,7 @@ index 000000000000..bca972ebb040 + diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_flash.c b/drivers/input/touchscreen/focaltech_touch/focaltech_flash.c new file mode 100755 -index 000000000000..43672a78ddac +index 000000000..43672a78d --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_flash.c @@ -0,0 +1,1971 @@ @@ -705255,7 +705316,7 @@ index 000000000000..43672a78ddac +#endif /* #if FTS_AUTO_UPGRADE_EN */ diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_flash.h b/drivers/input/touchscreen/focaltech_touch/focaltech_flash.h new file mode 100755 -index 000000000000..d11f42ca8e1e +index 000000000..d11f42ca8 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_flash.h @@ -0,0 +1,182 @@ @@ -705443,7 +705504,7 @@ index 000000000000..d11f42ca8e1e +#endif diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_flash/Makefile b/drivers/input/touchscreen/focaltech_touch/focaltech_flash/Makefile new file mode 100755 -index 000000000000..133dbcf8d701 +index 000000000..133dbcf8d --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_flash/Makefile @@ -0,0 +1,8 @@ @@ -705458,7 +705519,7 @@ index 000000000000..133dbcf8d701 \ No newline at end of file diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_flash/focaltech_upgrade_ft8201.c b/drivers/input/touchscreen/focaltech_touch/focaltech_flash/focaltech_upgrade_ft8201.c new file mode 100755 -index 000000000000..e32de88b2435 +index 000000000..e32de88b2 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_flash/focaltech_upgrade_ft8201.c @@ -0,0 +1,1033 @@ @@ -706497,7 +706558,7 @@ index 000000000000..e32de88b2435 +}; diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_gesture.c b/drivers/input/touchscreen/focaltech_touch/focaltech_gesture.c new file mode 100755 -index 000000000000..0874729e5d59 +index 000000000..0874729e5 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_gesture.c @@ -0,0 +1,597 @@ @@ -707100,7 +707161,7 @@ index 000000000000..0874729e5d59 +#endif diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_i2c.c b/drivers/input/touchscreen/focaltech_touch/focaltech_i2c.c new file mode 100755 -index 000000000000..5e8294145b28 +index 000000000..5e8294145 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_i2c.c @@ -0,0 +1,240 @@ @@ -707346,7 +707407,7 @@ index 000000000000..5e8294145b28 + diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_point_report_check.c b/drivers/input/touchscreen/focaltech_touch/focaltech_point_report_check.c new file mode 100755 -index 000000000000..7157f444080d +index 000000000..7157f4440 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_point_report_check.c @@ -0,0 +1,135 @@ @@ -707487,7 +707548,7 @@ index 000000000000..7157f444080d + diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_test/Makefile b/drivers/input/touchscreen/focaltech_touch/focaltech_test/Makefile new file mode 100755 -index 000000000000..2a2945ec021a +index 000000000..2a2945ec0 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_test/Makefile @@ -0,0 +1,11 @@ @@ -707504,7 +707565,7 @@ index 000000000000..2a2945ec021a + diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test.c b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test.c new file mode 100755 -index 000000000000..991bbba87c70 +index 000000000..991bbba87 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test.c @@ -0,0 +1,1948 @@ @@ -709458,7 +709519,7 @@ index 000000000000..991bbba87c70 +} diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test.h b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test.h new file mode 100755 -index 000000000000..bf36233363a1 +index 000000000..bf3623336 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test.h @@ -0,0 +1,589 @@ @@ -710053,7 +710114,7 @@ index 000000000000..bf36233363a1 +#endif diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test_ini.c b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test_ini.c new file mode 100755 -index 000000000000..a6ea11fd6025 +index 000000000..a6ea11fd6 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test_ini.c @@ -0,0 +1,1220 @@ @@ -711279,7 +711340,7 @@ index 000000000000..a6ea11fd6025 +} diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test_ini.h b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test_ini.h new file mode 100755 -index 000000000000..a6c8d50c11d2 +index 000000000..a6c8d50c1 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_test/focaltech_test_ini.h @@ -0,0 +1,144 @@ @@ -711429,7 +711490,7 @@ index 000000000000..a6c8d50c11d2 +#endif /* _INI_H */ diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_test/supported_ic/Makefile b/drivers/input/touchscreen/focaltech_touch/focaltech_test/supported_ic/Makefile new file mode 100755 -index 000000000000..2e3a5e524418 +index 000000000..2e3a5e524 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_test/supported_ic/Makefile @@ -0,0 +1,6 @@ @@ -711441,7 +711502,7 @@ index 000000000000..2e3a5e524418 +obj-y += focaltech_test_ft8201.o diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_test/supported_ic/focaltech_test_ft8201.c b/drivers/input/touchscreen/focaltech_touch/focaltech_test/supported_ic/focaltech_test_ft8201.c new file mode 100755 -index 000000000000..a5d666724e55 +index 000000000..a5d666724 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_test/supported_ic/focaltech_test_ft8201.c @@ -0,0 +1,1034 @@ @@ -712481,10 +712542,10 @@ index 000000000000..a5d666724e55 + diff --git a/drivers/input/touchscreen/focaltech_touch/include/firmware/fw_sample.h b/drivers/input/touchscreen/focaltech_touch/include/firmware/fw_sample.h new file mode 100755 -index 000000000000..e69de29bb2d1 +index 000000000..e69de29bb diff --git a/drivers/input/touchscreen/focaltech_touch/include/pramboot/FT8006M_Pramboot_V1.6_20180426_le.h b/drivers/input/touchscreen/focaltech_touch/include/pramboot/FT8006M_Pramboot_V1.6_20180426_le.h new file mode 100755 -index 000000000000..0db3f051175a +index 000000000..0db3f0511 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch/include/pramboot/FT8006M_Pramboot_V1.6_20180426_le.h @@ -0,0 +1,299 @@ @@ -712790,7 +712851,7 @@ index 000000000000..0db3f051175a \ No newline at end of file diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/Makefile b/drivers/input/touchscreen/focaltech_touch_ft5436/Makefile new file mode 100755 -index 000000000000..df8d3e5ef10a +index 000000000..df8d3e5ef --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/Makefile @@ -0,0 +1,16 @@ @@ -712812,7 +712873,7 @@ index 000000000000..df8d3e5ef10a +obj-y += focaltech_flash/ diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_common.h b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_common.h new file mode 100755 -index 000000000000..1d7ac55572fe +index 000000000..1d7ac5557 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_common.h @@ -0,0 +1,166 @@ @@ -712984,7 +713045,7 @@ index 000000000000..1d7ac55572fe +#endif /* __LINUX_FOCALTECH_COMMON_H__ */ diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_config.h b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_config.h new file mode 100755 -index 000000000000..d30ca81df9a9 +index 000000000..d30ca81df --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_config.h @@ -0,0 +1,241 @@ @@ -713231,7 +713292,7 @@ index 000000000000..d30ca81df9a9 +#endif /* _LINUX_FOCLATECH_CONFIG_H_ */ diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_core.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_core.c new file mode 100755 -index 000000000000..932b2f866274 +index 000000000..932b2f866 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_core.c @@ -0,0 +1,1747 @@ @@ -714984,7 +715045,7 @@ index 000000000000..932b2f866274 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_core.h b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_core.h new file mode 100755 -index 000000000000..66e98371bf1c +index 000000000..66e98371b --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_core.h @@ -0,0 +1,263 @@ @@ -715253,7 +715314,7 @@ index 000000000000..66e98371bf1c +#endif /* __LINUX_FOCALTECH_CORE_H__ */ diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_esdcheck.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_esdcheck.c new file mode 100755 -index 000000000000..b34bb26e8529 +index 000000000..b34bb26e8 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_esdcheck.c @@ -0,0 +1,464 @@ @@ -715723,7 +715784,7 @@ index 000000000000..b34bb26e8529 + diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_ex_fun.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_ex_fun.c new file mode 100755 -index 000000000000..b012c093b4d5 +index 000000000..b012c093b --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_ex_fun.c @@ -0,0 +1,1181 @@ @@ -716910,7 +716971,7 @@ index 000000000000..b012c093b4d5 +} diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_ex_mode.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_ex_mode.c new file mode 100755 -index 000000000000..c0c970b12e48 +index 000000000..c0c970b12 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_ex_mode.c @@ -0,0 +1,307 @@ @@ -717223,7 +717284,7 @@ index 000000000000..c0c970b12e48 +} diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash.c new file mode 100755 -index 000000000000..83bf8f4a6039 +index 000000000..83bf8f4a6 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash.c @@ -0,0 +1,2011 @@ @@ -719240,7 +719301,7 @@ index 000000000000..83bf8f4a6039 +} diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash.h b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash.h new file mode 100755 -index 000000000000..cfebe2d12489 +index 000000000..cfebe2d12 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash.h @@ -0,0 +1,205 @@ @@ -719451,7 +719512,7 @@ index 000000000000..cfebe2d12489 +#endif diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash/Makefile b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash/Makefile new file mode 100755 -index 000000000000..17c9595ca5c9 +index 000000000..17c9595ca --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash/Makefile @@ -0,0 +1,7 @@ @@ -719464,7 +719525,7 @@ index 000000000000..17c9595ca5c9 + diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash/focaltech_upgrade_ft5436.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash/focaltech_upgrade_ft5436.c new file mode 100755 -index 000000000000..7ed7315f0d93 +index 000000000..7ed7315f0 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_flash/focaltech_upgrade_ft5436.c @@ -0,0 +1,154 @@ @@ -719624,7 +719685,7 @@ index 000000000000..7ed7315f0d93 +}; diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_gesture.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_gesture.c new file mode 100755 -index 000000000000..b65cf39451d2 +index 000000000..b65cf3945 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_gesture.c @@ -0,0 +1,460 @@ @@ -720090,7 +720151,7 @@ index 000000000000..b65cf39451d2 +} diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_i2c.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_i2c.c new file mode 100755 -index 000000000000..f2e335c3db4f +index 000000000..f2e335c3d --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_i2c.c @@ -0,0 +1,193 @@ @@ -720290,7 +720351,7 @@ index 000000000000..f2e335c3db4f \ No newline at end of file diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_point_report_check.c b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_point_report_check.c new file mode 100755 -index 000000000000..1296af1551db +index 000000000..1296af155 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/focaltech_point_report_check.c @@ -0,0 +1,135 @@ @@ -720431,3237 +720492,3237 @@ index 000000000000..1296af1551db + diff --git a/drivers/input/touchscreen/focaltech_touch_ft5436/include/firmware/fw_sample.h b/drivers/input/touchscreen/focaltech_touch_ft5436/include/firmware/fw_sample.h new file mode 100755 -index 000000000000..60120df3213d +index 000000000..7617b0b73 --- /dev/null +++ b/drivers/input/touchscreen/focaltech_touch_ft5436/include/firmware/fw_sample.h @@ -0,0 +1,3223 @@ -+0x2, 0x20,0x7, 0x2, 0xb9,0xe2,0xeb,0xaa,0x8, 0x22,0x22,0x2, 0x0, 0x4a,0xb4,0x2, -+0x4, 0xa9,0xb7,0xea,0x22,0x24,0xff,0xa9,0x97,0xea,0x22,0x2, 0x68,0x1c,0xb4,0x2, -+0x4, 0xa9,0xb6,0xea,0x22,0x24,0xff,0xa9,0x96,0xea,0x22,0x2, 0x88,0x1c,0x7f,0x60, -+0xa9,0xc2,0xea,0x74,0x1, 0x12,0x13,0xcb,0x7f,0x6, 0x12,0x5, 0xb4,0x7f,0x6, 0x2, -+0x9, 0xa1,0x22,0x2, 0x88,0x38,0xe4,0x2, 0x2a,0x20,0x32,0x2, 0x0, 0x5a,0x12,0x10, -+0xa2,0x2, 0x13,0xae,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32,0x2, 0x0, 0x76,0x1, 0x2, -+0x4, 0x8, 0x10,0x20,0x40,0x80,0x2, 0x3c,0x93,0x32,0xff,0x2, 0x0, 0x69,0xb2,0x86, -+0x22,0xff,0xff,0x2, 0x10,0x52,0xca,0x7b,0xca,0x6b,0xca,0x5b,0xca,0x4b,0xca,0x2b, -+0xca,0x1b,0xca,0xb, 0xc0,0xd0,0xc0,0x83,0xc0,0x82,0xd2,0xf, 0x7e,0xf, 0x3b,0x10, -+0x69,0x30,0x0, 0x4, 0x7a,0x73,0x3b,0x20,0x7e,0x73,0x3b,0x20,0xa, 0x37,0x5e,0x34, -+0x0, 0x4, 0x68,0x4, 0xd2,0xe, 0x80,0x2, 0xc2,0xe, 0x7e,0x34,0x0, 0x1f,0x79,0x30, -+0x0, 0x4, 0xc2,0xc3,0x12,0x12,0xd3,0x12,0x89,0xef,0x7e,0x1f,0x3b,0x10,0x69,0x31, -+0x0, 0x2, 0x5e,0x34,0x0, 0x40,0x68,0x2e,0x6c,0xaa,0x7e,0x10,0x2, 0xac,0x1a,0x7e, -+0x1f,0x3b,0x10,0x7f,0x71,0x2d,0xf0,0x69,0x17,0x0, 0x9c,0x59,0x10,0x3b,0x14,0xb, -+0xa0,0xbe,0xa0,0x3, 0x78,0xe4,0x69,0x11,0x0, 0xa4,0x7a,0x17,0x3b,0x1c,0x69,0x31, -+0x0, 0xa2,0x7a,0x37,0x3b,0x1a,0xa9,0xc1,0xc4,0xd0,0x82,0xd0,0x83,0xd0,0xd0,0xda, -+0xb, 0xda,0x1b,0xda,0x2b,0xda,0x4b,0xda,0x5b,0xda,0x6b,0xda,0x7b,0x32,0x7d,0x13, -+0x7e,0x1f,0x33,0xfc,0x1b,0x1a,0x10,0xc2,0xc6,0xd2,0xee,0x22,0xff,0xff,0x54,0x2c, -+0xca,0x79,0x7f,0x50,0x7c,0xeb,0x7e,0x34,0x0, 0x24,0x7e,0x8, 0x0, 0x2c,0x7e,0x24, -+0x0, 0x2, 0x12,0x69,0x9f,0xe5,0x2c,0xbe,0xb0,0x0, 0x38,0x2, 0x21,0x4a,0xe5,0x2c, -+0xbe,0xb0,0x76,0x28,0x2, 0x21,0x4a,0x7e,0xe1,0x2c,0xbe,0xe0,0x76,0x38,0x2, 0x21, -+0x78,0x7e,0x34,0x1e,0x7a,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x5e,0x79,0x35,0x0, -+0x4, 0xbe,0xe0,0x81,0x68,0x2, 0x21,0x71,0x74,0x23,0x7a,0x5b,0xb0,0x74,0x1c,0x61, -+0x84,0x74,0x1, 0x7a,0x5b,0xb0,0x61,0x84,0x7c,0xbe,0x14,0xbe,0xb0,0x75,0x40,0x2, -+0x61,0x33,0x7e,0xa0,0x3, 0xa4,0x2e,0x54,0x1, 0x8c,0x89,0x54,0x2, 0x2, 0xfb,0x2, -+0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x2, 0xed,0x2, 0x2, -+0xfb,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x2, 0xfb, -+0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x25,0x2, 0x3, 0x33,0x2, 0x3, 0x9, 0x2, -+0x2, 0xfb,0x2, 0x3, 0x17,0x2, 0x3, 0x17,0x2, 0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x3, -+0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, -+0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, -+0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, -+0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, -+0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, -+0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, -+0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, -+0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, -+0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, -+0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, -+0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, -+0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, -+0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, -+0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, -+0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, -+0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, -+0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, -+0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x2, 0xfb,0x41,0xfb,0x7e,0x34,0x1e, -+0x7a,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x17,0x61,0x3f,0x7e,0x34,0x1e,0x4e,0x79, -+0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x5e,0x61,0x3f,0x7e,0x34,0x1e,0x4e,0x79,0x35,0x0, -+0x2, 0x7e,0x34,0x1d,0xe7,0x61,0x3f,0x7e,0x34,0x1d,0xcb,0x79,0x35,0x0, 0x2, 0x7e, -+0x34,0x1d,0xfb,0x61,0x3f,0x7e,0x34,0x1e,0x3f,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e, -+0x26,0x61,0x3f,0x7e,0x34,0x1e,0x7a,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x5e,0x79, -+0x35,0x0, 0x4, 0xbe,0xe0,0x16,0x28,0x2, 0x61,0x4e,0x7c,0xfe,0x61,0x62,0x7e,0xf0, -+0x16,0xbe,0xe0,0x72,0x50,0x2, 0x61,0x62,0xa, 0x3e,0x9e,0x34,0x0, 0x72,0xb, 0x34, -+0x2c,0xf7,0x7e,0x70,0x3, 0xac,0x7f,0x7d,0x23,0x2e,0x24,0x1e,0x9e,0x7a,0x51,0x82, -+0x7a,0x41,0x83,0xe4,0x93,0x7a,0x5b,0xb0,0x2e,0x34,0x1e,0x9f,0x7a,0x71,0x82,0x7a, -+0x61,0x83,0xe4,0x93,0x39,0xb5,0x0, 0x1, 0xda,0x79,0x22,0xca,0x3b,0x7f,0x30,0x74, -+0x1, 0x12,0x14,0x13,0x29,0x73,0x0, 0xf3,0x2e,0x70,0xff,0x92,0x1, 0x29,0xb3,0x0, -+0xf4,0x12,0x13,0xe4,0x7f,0x3, 0x12,0xd, 0x72,0x7f,0x3, 0x12,0x6, 0xba,0x29,0x73, -+0x0, 0xa, 0xa, 0x37,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x24,0x29,0x73,0x0, 0xa3, -+0xa, 0x27,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24, -+0x69,0x33,0x0, 0xff,0x4d,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2, 0x29,0x73, -+0x0, 0xa, 0xa, 0x47,0x29,0x73,0x0, 0x5, 0xa, 0x57,0x9d,0x54,0xf5,0x35,0x29,0xb3, -+0x0, 0xa5,0x70,0xb, 0x29,0xb3,0x0, 0xf8,0x29,0x73,0x0, 0xf7,0x12,0xb, 0xad,0x29, -+0x73,0x0, 0xa5,0x2e,0x70,0xff,0x92,0x1, 0xe5,0x35,0x12,0xb, 0x1e,0x69,0x33,0x0, -+0xfd,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x28,0x69,0x23,0x0, 0xfb,0x3e,0x24,0x3e, -+0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x29,0x73,0x0, 0xfa,0xa, 0x37,0x2d, -+0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2a,0x29,0x73,0x0, 0xf9,0xa, 0x37,0x7e, -+0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2c,0x7e,0x34,0x0, 0x1, 0x7e,0xf, 0x3b,0x10,0x79, -+0x30,0x0, 0x34,0x7e,0x34,0x1, 0xb, 0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2e,0x29, -+0x73,0x0, 0x5, 0xa, 0x37,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x10,0x69,0x33,0x0, -+0xa8,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x1c,0x69,0x33,0x0, 0xaa,0x7e,0xf, 0x3b, -+0x10,0x79,0x30,0x0, 0x1e,0x6c,0xaa,0x7e,0x50,0x2, 0xac,0x5a,0x69,0x13,0x1, 0x1, -+0x2d,0x12,0x7e,0x4, 0x0, 0xff,0xb, 0xa, 0x30,0x7e,0xf, 0x3b,0x10,0x2d,0x12,0x79, -+0x30,0x0, 0x44,0xb, 0xa0,0xbe,0xa0,0xc, 0x40,0xdd,0xda,0x3b,0x22,0xca,0xf8,0x7f, -+0x70,0x7e,0x7b,0xf0,0x29,0x77,0x0, 0x1, 0xbc,0x7f,0x28,0x2, 0x7c,0xf7,0x69,0x17, -+0x0, 0x6, 0x6d,0x0, 0x7e,0x34,0x0, 0xf2,0x74,0xff,0x12,0x21,0x16,0x7f,0x7, 0x12, -+0xe, 0xed,0xa9,0xd6,0xcb,0x6c,0xaa,0x80,0x2d,0x6c,0x77,0x80,0x1f,0x7e,0x10,0xb, -+0xac,0x1a,0xa, 0x17,0x2d,0x1, 0x3e,0x4, 0x69,0x17,0x0, 0x6, 0x2d,0x10,0x6d,0x0, -+0xb, 0xa, 0x20,0x6e,0x24,0xff,0xff,0x1b,0xa, 0x20,0xb, 0x70,0x29,0x67,0x0, 0x1, -+0xbc,0x67,0x38,0xd9,0xb, 0xa0,0x7e,0x7b,0x60,0xbc,0x6a,0x38,0xcc,0x69,0x37,0x0, -+0x6, 0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0x4, 0x7c,0x4f,0x6c,0x55,0xa, 0x3f,0x2d, -+0x32,0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0xc, 0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b, -+0x1a,0x10,0x7e,0x34,0x0, 0xd0,0x12,0xf, 0x45,0x6c,0xaa,0xbe,0xa0,0x4, 0x50,0x18, -+0x7e,0x70,0x4, 0xac,0x7a,0x7c,0xb7,0x7e,0x1f,0x3, 0xfc,0x69,0x41,0x0, 0x26,0x60, -+0x42,0x1e,0x44,0x14,0x78,0xfb,0x80,0x3b,0xbe,0xa0,0x8, 0x50,0x1b,0xa, 0x3a,0x1b, -+0x36,0x3e,0x34,0x3e,0x34,0x7c,0xb7,0x7e,0x1f,0x3, 0xfc,0x69,0x41,0x0, 0x28,0x60, -+0x22,0x1e,0x44,0x14,0x78,0xfb,0x80,0x1b,0xa, 0x3a,0x9e,0x34,0x0, 0x8, 0x3e,0x34, -+0x3e,0x34,0x7c,0xb7,0x7e,0x1f,0x3, 0xfc,0x69,0x41,0x0, 0x2a,0x60,0x5, 0x1e,0x44, -+0x14,0x78,0xfb,0x5e,0x44,0x0, 0xf, 0x7e,0x50,0x2, 0xac,0x5a,0x69,0x37,0x0, 0x6, -+0x2d,0x32,0x6d,0x22,0x1b,0x1a,0x40,0xb, 0xa0,0xbe,0xa0,0xb, 0x40,0x8d,0xa9,0xc6, -+0xcb,0xda,0xf8,0x22,0x29,0x70,0x0, 0x96,0x29,0x90,0x0, 0x98,0x29,0x60,0x0, 0x97, -+0x29,0x80,0x0, 0x8d,0xbe,0x80,0x4, 0x38,0x4, 0x6c,0xaa,0x80,0x21,0xbe,0x80,0x8, -+0x38,0x5, 0x7e,0xa0,0x1, 0x80,0x17,0xbe,0x80,0x10,0x38,0x5, 0x7e,0xa0,0x2, 0x80, -+0xd, 0xbe,0x80,0x20,0x38,0x5, 0x7e,0xa0,0x3, 0x80,0x3, 0x7e,0xa0,0x4, 0xbe,0x90, -+0x3, 0x28,0x3, 0x7e,0x90,0x3, 0xbe,0x80,0x3f,0x28,0x3, 0x7e,0x80,0x3f,0xbe,0x60, -+0x1, 0x28,0x3, 0x7e,0x60,0x1, 0xbe,0x70,0x2, 0x28,0x2, 0x6c,0x77,0xa, 0x28,0x3e, -+0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x7c,0x89,0x6c,0x99,0x3e,0x44,0x3e, -+0x44,0x3e,0x44,0x2d,0x42,0xa, 0x26,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x2d, -+0x24,0xa, 0x37,0x3e,0x34,0x3e,0x34,0x2d,0x32,0x7e,0x7f,0x33,0xfc,0x79,0x37,0x0, -+0x2, 0x29,0xb0,0x0, 0x8c,0x7c,0x4b,0x6c,0x55,0x29,0xb0,0x0, 0x8b,0xa, 0x3b,0x2d, -+0x32,0x7e,0x7f,0x3b,0x8, 0x79,0x37,0x0, 0x80,0x69,0x30,0x0, 0xa0,0x7e,0x7f,0x33, -+0xfc,0x79,0x37,0x0, 0xc, 0x69,0x30,0x0, 0x9e,0x5e,0x34,0xe0,0xf, 0x29,0xb0,0x0, -+0x8c,0xa, 0x2b,0x1b,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x2d,0x32,0x7e, -+0x7f,0x3b,0x8, 0x79,0x37,0x0, 0x82,0xa, 0x2a,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e, -+0x24,0x29,0xb0,0x0, 0x99,0xa, 0x3b,0x2d,0x32,0x7e,0x7f,0x33,0xfc,0x79,0x37,0x0, -+0x6, 0x69,0x30,0x0, 0x9c,0x7e,0x7f,0x33,0xfc,0x79,0x37,0x0, 0x8, 0x69,0x30,0x0, -+0x9a,0x7e,0xf, 0x33,0xfc,0x79,0x30,0x0, 0xa, 0x22,0x7f,0x60,0x74,0x1, 0x12,0x14, -+0x13,0x29,0x36,0x0, 0xf5,0x29,0x26,0x0, 0xa3,0x29,0x16,0x0, 0xa4,0xbe,0x20,0x2, -+0x28,0x3, 0x7e,0x20,0x2, 0xbe,0x10,0x40,0x28,0x3, 0x7e,0x10,0x40,0x7e,0x34,0x0, -+0x4, 0x7c,0xb2,0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb,0x7c,0x7, 0xa, 0x31,0x7e,0x2f, -+0x3b,0x10,0x79,0x32,0x0, 0x12,0x7c,0x73,0xac,0x70,0xa, 0x21,0x12,0x1e,0xee,0x7c, -+0x27,0xa, 0x32,0x7e,0x2f,0x3b,0x10,0x79,0x32,0x0, 0x14,0x7c,0x73,0xac,0x70,0x29, -+0x26,0x0, 0xf6,0xa, 0x22,0xad,0x32,0xa, 0x21,0x8d,0x32,0x7d,0x43,0x7c,0x73,0xac, -+0x70,0xa, 0x21,0x12,0x1e,0xee,0x7c,0xa7,0x7c,0x2a,0x7c,0xb9,0x2c,0xab,0xbe,0xa0, -+0xc, 0x50,0x3, 0x7e,0xa0,0xc, 0xbe,0x20,0xc, 0x50,0x3, 0x7e,0x20,0xc, 0xa, 0x20, -+0xa, 0x31,0x12,0x1e,0xee,0x7d,0xe3,0xa, 0x3a,0xb, 0x34,0xad,0x3e,0xb, 0x34,0xbe, -+0x34,0x2, 0x0, 0x40,0x4, 0x7e,0x34,0x1, 0xff,0x29,0x46,0x0, 0xf7,0x7e,0x50,0x2, -+0xac,0x45,0xa, 0xf2,0xad,0xfe,0x2d,0x2f,0xb, 0x24,0xbe,0x24,0x2, 0x0, 0x40,0x4, -+0x7e,0x24,0x1, 0xff,0xa, 0x13,0x7e,0x7f,0x3b,0x10,0x79,0x17,0x0, 0xa, 0x1e,0x24, -+0x7c,0x45,0x6c,0x55,0x1e,0x34,0x2d,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0xc, -+0xa, 0x3a,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x22,0x22,0xa9,0xd6,0xcb,0x69,0x30, -+0x0, 0x4, 0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x4, 0x69,0x30,0x0, 0x6, 0x7e,0x2f, -+0x3, 0xfc,0x79,0x32,0x0, 0x6, 0x69,0x30,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc,0x79,0x32, -+0x0, 0x8, 0x7e,0xb, 0x70,0x7c,0x47,0x6c,0x55,0x29,0x70,0x0, 0x1, 0xa, 0x37,0x2d, -+0x32,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xc, 0x29,0x70,0x0, 0x2, 0xa, 0x37,0x7e, -+0xf, 0x3, 0xfc,0x79,0x30,0x0, 0xe, 0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10, -+0x7e,0x34,0x0, 0xe0,0x12,0xf, 0x45,0xa9,0xc6,0xcb,0x22,0xb2,0x82,0x22,0xff,0xff, -+0x7f,0x21,0xa9,0xd6,0xcb,0x69,0x30,0x0, 0x4, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, -+0x4, 0x69,0x30,0x0, 0x8, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0x6, 0x69,0x30,0x0, -+0x6, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0x8, 0x29,0x70,0x0, 0x1, 0x7c,0x47,0x6c, -+0x55,0x7e,0xb, 0x70,0xa, 0x37,0x2d,0x32,0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0xc, -+0x29,0x70,0x0, 0x2, 0xa, 0x37,0x1b,0x34,0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0xa, -+0x69,0x30,0x0, 0xa, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0xe, 0x69,0x30,0x0, 0xc, -+0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0x10,0x69,0x30,0x0, 0xe, 0x7e,0x7f,0x3, 0xfc, -+0x79,0x37,0x0, 0x12,0x29,0x70,0x0, 0x3, 0x7c,0x27,0x6c,0x33,0x7e,0x1f,0x3, 0xfc, -+0x1b,0x1a,0x10,0x7e,0x34,0x0, 0xa0,0x12,0xf, 0x45,0x7e,0x1f,0x3, 0xfc,0x69,0x11, -+0x0, 0x1a,0x7a,0x2b,0x30,0x69,0x11,0x0, 0x1c,0x39,0x32,0x0, 0x1, 0x69,0x11,0x0, -+0x16,0x79,0x12,0x0, 0x2, 0x69,0x11,0x0, 0x18,0x79,0x12,0x0, 0x4, 0x69,0x11,0x0, -+0x22,0x79,0x12,0x0, 0x6, 0x69,0x11,0x0, 0x24,0x79,0x12,0x0, 0x8, 0x69,0x11,0x0, -+0x1e,0x79,0x12,0x0, 0xa, 0x69,0x31,0x0, 0x20,0x79,0x32,0x0, 0xc, 0xa9,0xc6,0xcb, -+0x22,0xca,0x3b,0x7c,0x57,0x7c,0x4b,0x5e,0x40,0x3, 0x69,0x30,0x0, 0x4, 0x5e,0x60, -+0x3f,0x6c,0xaa,0xa, 0x4a,0x69,0xf0,0x0, 0xa, 0x69,0xe0,0x0, 0x8, 0x2d,0xf4,0x7e, -+0x7b,0xb0,0xa, 0xfb,0x7d,0x4f,0x7c,0x89,0x6c,0x99,0x7d,0xf4,0xa, 0xea,0x69,0xd0, -+0x0, 0xe, 0x69,0xc0,0x0, 0xc, 0x2d,0xde,0x7e,0x6b,0xb0,0xa, 0x4b,0x2d,0x4f,0x7e, -+0xd0,0x28,0xac,0xd5,0x7e,0xf0,0x2, 0xac,0xfa,0x7d,0xd7,0x2d,0xd6,0x7e,0xf0,0xf0, -+0xac,0xf4,0x2d,0xd7,0x7e,0x7f,0x33,0xf8,0x2d,0xfd,0x79,0x47,0x1, 0x8c,0xb, 0xa0, -+0xbe,0xa0,0xe, 0x78,0xae,0x6c,0xaa,0x7e,0x90,0x2, 0xac,0x9a,0x69,0xf0,0x0, 0x2, -+0xb, 0xa, 0xe0,0x2d,0xf4,0xb, 0x7a,0x40,0x7e,0xd0,0x28,0xac,0xd5,0x7e,0xf0,0x2, -+0xac,0xfa,0x7d,0xd7,0x2d,0xd6,0x7e,0xf0,0xf0,0xac,0xf4,0x2d,0xd7,0x7e,0x7f,0x33, -+0xf8,0x2d,0xfd,0x79,0x47,0x1, 0x80,0xb, 0xa0,0xbe,0xa0,0x4, 0x40,0xc9,0x7e,0x90, -+0xf0,0xac,0x94,0x74,0x28,0xac,0xb5,0x7d,0xf5,0x2d,0xf4,0x7e,0x2f,0x33,0xf8,0x2d, -+0x5f,0x79,0x32,0x1, 0x88,0x69,0x30,0x0, 0x6, 0x7e,0x30,0xf0,0xac,0x34,0x74,0x28, -+0xac,0x5b,0x2d,0x21,0x7e,0xf, 0x33,0xf8,0x2d,0x12,0x79,0x30,0x1, 0x8a,0xda,0x3b, -+0x22,0x29,0x60,0x0, 0xb, 0xa, 0x46,0x29,0x60,0x0, 0x4, 0xa, 0x26,0x2d,0x24,0x7c, -+0x65,0x29,0xb0,0x0, 0x6, 0xbc,0xb6,0x28,0x2, 0x7c,0x6b,0x29,0x70,0x0, 0x5, 0x29, -+0xb0,0x0, 0x7, 0xbc,0xb7,0x28,0x2, 0x7c,0x7b,0x6c,0xaa,0x6d,0x22,0x7e,0x90,0x2, -+0xac,0x9a,0x7e,0x7f,0x3b,0x8, 0x2d,0xf4,0x79,0x27,0x0, 0x2, 0xb, 0xa0,0xbe,0xa0, -+0x23,0x78,0xea,0x6c,0xaa,0x80,0x55,0xa, 0x2a,0x7f,0x70,0x2d,0xf2,0x29,0x57,0x0, -+0x4c,0xbe,0x50,0x23,0x50,0x23,0x29,0x47,0x0, 0xb4,0xa, 0xd4,0x7d,0x4d,0x7c,0x89, -+0x6c,0x99,0x7d,0xd4,0x7e,0x90,0x2, 0xac,0x95,0x7e,0x7f,0x3b,0x8, 0x2d,0xf4,0xb, -+0xf5,0xb, 0x7a,0x40,0x4d,0x4d,0x1b,0x7a,0x40,0xa, 0x4a,0x7f,0x70,0x2d,0xf4,0x29, -+0x47,0x0, 0x4c,0xa, 0xd4,0x7e,0x90,0x2, 0xac,0x9a,0x7e,0x7f,0x3b,0x8, 0x2d,0xf4, -+0xb, 0xf5,0xb, 0x7a,0x40,0x4d,0x4d,0x1b,0x7a,0x40,0xb, 0xa0,0xbc,0x6a,0x38,0xa7, -+0x6c,0xaa,0x80,0x1d,0xa, 0x2a,0x7f,0x70,0x2d,0xf2,0x29,0x67,0x0, 0x6f,0xa, 0x46, -+0x7e,0x50,0x2, 0xac,0x5a,0x7e,0x7f,0x3b,0x8, 0x2d,0xf2,0x79,0x47,0x0, 0x48,0xb, -+0xa0,0xbc,0x7a,0x38,0xdf,0x22,0x7c,0x7b,0x7e,0x7f,0x3b,0x10,0x69,0x47,0x0, 0xc, -+0x6c,0x88,0x3e,0x44,0x69,0x7, 0x0, 0xa, 0x69,0x57,0x0, 0x2, 0x1e,0x54,0x1e,0x54, -+0x1e,0x54,0x1e,0x54,0x1e,0x54,0x1e,0x54,0x1e,0x54,0x5e,0x54,0x0, 0x3, 0x7e,0x14, -+0x0, 0x4, 0x70,0x2, 0x41,0x9b,0x3e,0x14,0x14,0x78,0xfb,0x7c,0xa3,0xa, 0xda,0xad, -+0xd0,0x7d,0xcd,0x6d,0x11,0x79,0x17,0x0, 0x8c,0x7c,0xb7,0x70,0x2, 0x41,0xb4,0x1e, -+0xd4,0x14,0x78,0xfb,0xbe,0xd4,0x1, 0x0, 0x38,0x2, 0x41,0xc2,0x7e,0xd4,0x1, 0x0, -+0x41,0xce,0xbe,0xd4,0x0, 0x10,0x40,0x2, 0x41,0xce,0x7e,0xd4,0x0, 0x10,0x7d,0x3d, -+0x12,0x12,0x9f,0xa, 0x1b,0x7e,0x1f,0x3b,0x10,0x79,0x11,0x0, 0x90,0x7e,0x1f,0x3b, -+0x10,0x79,0xd1,0x0, 0x8e,0x7e,0x7f,0x3b,0x10,0x69,0x37,0x0, 0x8, 0xad,0x3c,0x8d, -+0x3d,0x79,0x37,0x0, 0x92,0x7e,0x14,0x0, 0x6, 0x7e,0x1f,0x3b,0x10,0x79,0x11,0x0, -+0x94,0x7d,0x24,0x9d,0x20,0xa, 0x3a,0xad,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, -+0x96,0x7e,0x34,0x0, 0x10,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x98,0x22,0x7c,0x5b, -+0x7e,0xf, 0x3b,0x10,0x69,0x40,0x0, 0x22,0x30,0x1, 0x6b,0x6d,0xff,0x7d,0x3f,0xbe, -+0x50,0x10,0x28,0x2e,0x7e,0x54,0xff,0xff,0x79,0x50,0x0, 0x42,0x9e,0x50,0x10,0x6c, -+0xaa,0x80,0x11,0x7e,0xe4,0x0, 0x1, 0x7c,0xba,0x60,0x5, 0x3e,0xe4,0x14,0x78,0xfb, -+0x2d,0x3e,0xb, 0xa0,0xbc,0x5a,0x38,0xeb,0x7e,0x6f,0x3b,0x10,0x79,0x36,0x0, 0x40, -+0x80,0x25,0x79,0xf0,0x0, 0x40,0x6c,0xaa,0x80,0x11,0x7e,0xf4,0x0, 0x1, 0x7c,0xba, -+0x60,0x5, 0x3e,0xf4,0x14,0x78,0xfb,0x2d,0x3f,0xb, 0xa0,0xbc,0x5a,0x38,0xeb,0x7e, -+0x7f,0x3b,0x10,0x79,0x37,0x0, 0x42,0x7d,0x34,0x2e,0x34,0x0, 0xc, 0x7e,0x7f,0x3b, -+0x10,0x79,0x37,0x0, 0x16,0x22,0x6d,0x33,0x79,0x30,0x0, 0x40,0x7e,0xf, 0x3b,0x10, -+0x79,0x30,0x0, 0x42,0x7e,0x1f,0x3b,0x10,0x79,0x41,0x0, 0x16,0x22,0x7c,0x17,0x7c, -+0x3b,0x6d,0x33,0x7e,0x2f,0x3b,0x10,0x79,0x32,0x0, 0x40,0x7e,0x2f,0x3b,0x10,0x79, -+0x32,0x0, 0x42,0x7e,0x7f,0x3b,0x10,0x69,0x57,0x0, 0x12,0x7c,0xab,0x69,0x37,0x0, -+0x2, 0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x5e, -+0x34,0x0, 0x3, 0x7c,0xb7,0x7e,0x44,0x0, 0x4, 0x60,0x5, 0x3e,0x44,0x14,0x78,0xfb, -+0x7c,0x29,0xa, 0x22,0xa, 0x3a,0x12,0x1e,0xee,0xa, 0x23,0x2d,0x32,0x7c,0xb7,0x7c, -+0x61,0x6c,0x77,0xa, 0xb, 0x1e,0x4, 0x2d,0x3, 0x79,0x7, 0x0, 0xc, 0x7c,0x73,0xac, -+0x72,0xa, 0x2a,0x12,0x1e,0xee,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x16,0x6d,0x33, -+0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x22,0x22,0xa9,0xd6,0xcb,0x69,0x30,0x0, 0x6, -+0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x4, 0x69,0x30,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc, -+0x79,0x32,0x0, 0x8, 0x29,0x70,0x0, 0x2, 0x7c,0x47,0x6c,0x55,0x29,0x70,0x0, 0x3, -+0xa, 0x37,0x2d,0x32,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xc, 0x7e,0xb, 0x70,0x7c, -+0x47,0x29,0x70,0x0, 0x1, 0xa, 0x37,0x2d,0x32,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, -+0xa, 0x29,0x70,0x0, 0x4, 0xa, 0x37,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xe, 0x29, -+0xb0,0x0, 0x5, 0x54,0x1, 0x7c,0x2b,0x6c,0x33,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10, -+0x7e,0x34,0x0, 0xc0,0x12,0xf, 0x45,0xa9,0xc6,0xcb,0x22,0xca,0x79,0x7c,0xab,0x5e, -+0xa0,0x3, 0x6c,0x77,0x7e,0x50,0x2, 0xac,0x57,0x69,0xd0,0x0, 0xe, 0x69,0xc0,0x0, -+0xc, 0x2d,0xd2,0x29,0x66,0x0, 0x1, 0xa, 0xf6,0x7d,0x4f,0x7c,0x89,0x6c,0x99,0x7d, -+0xf4,0x7e,0x6b,0x60,0xa, 0x46,0x2d,0x4f,0x7e,0xf0,0xf0,0xac,0xfa,0x2d,0x27,0x7e, -+0x7f,0x33,0xf8,0x2d,0xf2,0x79,0x47,0x2, 0x54,0xb, 0x70,0xbe,0x70,0xe, 0x40,0xc4, -+0x69,0x40,0x0, 0x4, 0x7e,0xf0,0xf0,0xac,0xfa,0x7e,0x1f,0x33,0xf8,0x2d,0x37,0x79, -+0x41,0x2, 0x50,0x69,0x30,0x0, 0x6, 0x74,0xf0,0xa4,0x7e,0xf, 0x33,0xf8,0x2d,0x15, -+0x79,0x30,0x2, 0x52,0xda,0x79,0x22,0xa9,0xd6,0xcb,0xc2,0x1c,0x69,0x30,0x0, 0x4, -+0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x4, 0x69,0x30,0x0, 0x6, 0x7e,0x2f,0x3, 0xfc, -+0x79,0x32,0x0, 0x6, 0x69,0x30,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x8, -+0x7e,0xb, 0x70,0x7c,0x47,0x6c,0x55,0x29,0x70,0x0, 0x1, 0xa, 0x37,0x2d,0x32,0x7e, -+0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xc, 0x29,0x70,0x0, 0x2, 0xa, 0x37,0x7e,0x2f,0x3, -+0xfc,0x79,0x32,0x0, 0xe, 0x29,0xb0,0x0, 0x3, 0x54,0x1, 0xa, 0x5b,0x7c,0xab,0xe4, -+0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x50,0x69,0x30,0x0, 0xa, 0x12,0xf, 0x45,0xa9,0xc6, -+0xcb,0x22,0x69,0x30,0x0, 0xae,0x7e,0x2f,0x3b,0x10,0x79,0x32,0x0, 0x6, 0x29,0x50, -+0x0, 0xa6,0xa, 0x55,0x7d,0x23,0x1e,0x24,0x9d,0x25,0x7e,0x2f,0x3b,0x10,0x79,0x22, -+0x0, 0x18,0x7d,0x23,0x1e,0x24,0x1b,0x25,0x7e,0x2f,0x3b,0x10,0x79,0x22,0x0, 0x38, -+0x69,0x20,0x0, 0xfd,0x1e,0x34,0x9d,0x32,0x9e,0x34,0x0, 0xa, 0x7e,0x2f,0x3b,0x10, -+0x79,0x32,0x0, 0x26,0x29,0x70,0x0, 0xa7,0xa, 0x37,0x7e,0x2f,0x3b,0x10,0x79,0x32, -+0x0, 0x1a,0x29,0x70,0x0, 0xb, 0xa, 0x27,0x29,0x70,0x0, 0x4, 0x2d,0x32,0x7e,0x2f, -+0x3b,0x10,0x79,0x32,0x0, 0x8, 0x2, 0x9, 0xa1,0xca,0x3b,0xf5,0x24,0x7f,0x41,0x7f, -+0x30,0xe5,0x25,0x7e,0x8, 0x0, 0x26,0x12,0x1, 0x20,0xe5,0x24,0xbe,0xb0,0x23,0x28, -+0x3, 0x75,0x24,0x23,0x6c,0xaa,0x80,0x36,0xa, 0x3a,0x2d,0x39,0x7d,0x28,0x7e,0x1b, -+0xb0,0xbe,0xb1,0x26,0x40,0xd, 0x74,0x23,0xa, 0x4a,0x7f,0x3, 0x2d,0x14,0x7a,0xb, -+0xb0,0x80,0x19,0x7e,0x1b,0xb0,0xa, 0x3b,0x2e,0x35,0x28,0x7a,0x71,0x82,0x7a,0x61, -+0x83,0xe4,0x93,0xa, 0x4a,0x7f,0x13,0x2d,0x34,0x7a,0x1b,0xb0,0xb, 0xa0,0xe5,0x24, -+0xbc,0xba,0x38,0xc4,0xda,0x3b,0x22,0xa9,0xd6,0xcb,0x69,0x20,0x0, 0x4, 0x7e,0x2f, -+0x3, 0xfc,0x79,0x22,0x0, 0x4, 0x69,0x20,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc,0x79,0x22, -+0x0, 0x8, 0x7e,0xb, 0x50,0xa, 0x55,0x7c,0xab,0xe4,0x29,0x50,0x0, 0x1, 0xa, 0x25, -+0x2d,0x25,0x7e,0x2f,0x3, 0xfc,0x79,0x22,0x0, 0xc, 0x29,0x50,0x0, 0x2, 0xa, 0x25, -+0x7e,0xf, 0x3, 0xfc,0x79,0x20,0x0, 0xe, 0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0xa, -+0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10,0x7e,0x34,0x0, 0x40,0x12,0xf, 0x45, -+0xa9,0xc6,0xcb,0x22,0x7c,0xab,0x7e,0x34,0x0, 0x1, 0x7e,0xf, 0x33,0xfc,0x79,0x30, -+0x0, 0xe, 0xc2,0x1b,0xe4,0x7a,0xb3,0x33,0xf7,0x5e,0xa0,0x3, 0xa, 0x1a,0x3e,0x14, -+0x7e,0x1f,0x3b,0x8, 0x1b,0x1a,0x10,0x7e,0xf, 0x3b,0x8, 0x2e,0x14,0x0, 0x84,0xb, -+0xa, 0x30,0x4e,0x70,0x20,0x1b,0xa, 0x30,0x74,0x1, 0x12,0x13,0x8b,0x7e,0xf, 0x33, -+0xfc,0xb, 0xa, 0x30,0x4e,0x70,0xc, 0x1b,0xa, 0x30,0xa9,0xd3,0xcd,0x7e,0xf, 0x33, -+0xfc,0xb, 0x15,0xb, 0xa, 0x30,0x4e,0x70,0x1, 0x1b,0xa, 0x30,0x22,0x7f,0x10,0xa9, -+0xd6,0xcb,0x69,0x11,0x0, 0x2, 0x7e,0x2f,0x3, 0xfc,0x79,0x12,0x0, 0x4, 0x69,0x11, -+0x0, 0x4, 0x7e,0x2f,0x3, 0xfc,0x79,0x12,0x0, 0x6, 0x69,0x11,0x0, 0x6, 0x7e,0x2f, -+0x3, 0xfc,0x79,0x12,0x0, 0x8, 0x7e,0x1b,0x30,0xa, 0x3, 0x7e,0x14,0x1, 0x0, 0xad, -+0x10,0x29,0x71,0x0, 0x1, 0xa, 0x37,0x2d,0x31,0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, -+0xc, 0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10,0x7e,0x34,0x0, 0x60,0x12,0xf, -+0x45,0xa9,0xc6,0xcb,0x22,0xa9,0xd7,0xcb,0x7d,0x23,0x4e,0x50,0x1, 0x7e,0xf, 0x3, -+0xfc,0xb, 0xa, 0x30,0x4d,0x32,0x1b,0xa, 0x30,0x80,0x1e,0x7e,0xf, 0x3, 0xfc,0xb, -+0xa, 0x30,0x7d,0x23,0x5e,0x24,0x0, 0x8, 0xbe,0x24,0x0, 0x8, 0x78,0xb, 0xa9,0xd7, -+0xcb,0x4e,0x70,0x4, 0x1b,0xa, 0x30,0xd2,0x1c,0x7e,0xf, 0x3, 0xfc,0xb, 0xa, 0x30, -+0x7d,0x23,0x5e,0x24,0x80,0x0, 0xbe,0x24,0x80,0x0, 0x78,0xcf,0x4e,0x60,0x40,0x1b, -+0xa, 0x30,0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10,0x22,0xca,0x3b,0xf5,0x24, -+0x7f,0x41,0x7f,0x30,0xe5,0x25,0x7e,0x8, 0x0, 0x26,0x12,0x1, 0x20,0x6c,0xaa,0x80, -+0x36,0xa, 0x3a,0x2d,0x39,0x7d,0x28,0x7e,0x1b,0xb0,0xbe,0xb1,0x27,0x40,0xd, 0x74, -+0x1c,0xa, 0x4a,0x7f,0x3, 0x2d,0x14,0x7a,0xb, 0xb0,0x80,0x19,0x7e,0x1b,0xb0,0xa, -+0x3b,0x2e,0x35,0x2a,0x7a,0x71,0x82,0x7a,0x61,0x83,0xe4,0x93,0xa, 0x4a,0x7f,0x13, -+0x2d,0x34,0x7a,0x1b,0xb0,0xb, 0xa0,0xe5,0x24,0xbc,0xba,0x38,0xc4,0xda,0x3b,0x22, -+0x5, 0x63,0x31,0x20,0x18,0x13,0xf, 0xd, 0xc, 0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, -+0xca,0xf8,0x7d,0xe2,0x7d,0xd3,0x7c,0xfb,0xbe,0x30,0x1, 0x28,0x6, 0x7e,0xf4,0x0, -+0x10,0x80,0xf, 0xbe,0x30,0x0, 0x28,0x6, 0x7e,0xf4,0x0, 0x8, 0x80,0x4, 0x7e,0xf4, -+0x0, 0x4, 0x7d,0x1f,0x6d,0x0, 0x6d,0x33,0x7e,0x24,0x0, 0x10,0x12,0x1f,0x8d,0x7f, -+0x1, 0x7d,0x3d,0x6d,0x22,0x12,0x1f,0x20,0x7d,0x1e,0x12,0x1f,0x3a,0x74,0x4, 0xac, -+0xbf,0x7e,0xf, 0x3b,0x10,0x2d,0x15,0x79,0x30,0x0, 0x82,0x79,0x20,0x0, 0x80,0xda, -+0xf8,0x22,0xca,0x7b,0xca,0x6b,0xca,0x5b,0xca,0x4b,0xca,0x2b,0xca,0x1b,0xca,0xb, -+0xc0,0xd0,0xc0,0x83,0xc0,0x82,0xd2,0x1b,0x7e,0xf, 0x33,0xfc,0xb, 0xa, 0x30,0x7c, -+0x57,0x7a,0x53,0x33,0xf7,0x4e,0x70,0xc, 0x1b,0xa, 0x30,0xc2,0xc6,0x6d,0x33,0x7e, -+0xf, 0x33,0xfc,0x79,0x30,0x0, 0xe, 0x12,0x12,0xd3,0x12,0x89,0xef,0xd0,0x82,0xd0, -+0x83,0xd0,0xd0,0xda,0xb, 0xda,0x1b,0xda,0x2b,0xda,0x4b,0xda,0x5b,0xda,0x6b,0xda, -+0x7b,0x32,0x74,0x3, 0x12,0x13,0x8b,0xa9,0xd1,0xc4,0x7e,0xf, 0x3b,0x8, 0x2e,0x14, -+0x0, 0x84,0xb, 0xa, 0x30,0x4e,0x70,0x20,0x1b,0xa, 0x30,0x7e,0x14,0x0, 0x1, 0x7e, -+0x1f,0x3b,0x8, 0x1b,0x1a,0x10,0x7e,0xf, 0x3b,0x10,0xb, 0x16,0xb, 0xa, 0x30,0x4e, -+0x70,0x1, 0x1b,0xa, 0x30,0xc2,0xf, 0xe4,0x7a,0xb3,0x3b,0x20,0x7e,0x1f,0x3b,0x8, -+0xb, 0x1a,0x30,0x5e,0x34,0x0, 0x1, 0x78,0xf3,0x74,0x2, 0x2, 0x13,0x8b,0x7c,0x6b, -+0x6c,0xaa,0x80,0x17,0x7e,0x90,0x2, 0xac,0x9a,0x7e,0x7f,0x33,0xf8,0x2d,0xf4,0xb, -+0x7a,0x20,0x7f,0x70,0x2d,0xf4,0x1b,0x7a,0x20,0xb, 0xa0,0xbc,0x7a,0x38,0xe5,0x6c, -+0xaa,0x80,0x20,0x7e,0x50,0x2, 0xac,0x5a,0x7e,0x7f,0x33,0xf8,0x2d,0xf2,0x69,0x27, -+0x0, 0x38,0xa, 0xf7,0xa, 0x4a,0x2d,0x4f,0x3e,0x44,0x7f,0x70,0x2d,0xf4,0x1b,0x7a, -+0x20,0xb, 0xa0,0xbc,0x6a,0x38,0xdc,0x22,0xca,0x79,0x7c,0xab,0x5e,0xa0,0x3, 0x6c, -+0x77,0x7e,0x50,0x2, 0xac,0x57,0x7f,0x60,0x2d,0xd2,0x29,0x66,0x0, 0x1, 0xa, 0xf6, -+0x7d,0x4f,0x7c,0x89,0x6c,0x99,0x7d,0xf4,0x7e,0x6b,0x60,0xa, 0x46,0x2d,0x4f,0x7e, -+0xf0,0xf0,0xac,0xfa,0x2d,0x27,0x7e,0x7f,0x33,0xf8,0x2d,0xf2,0x79,0x47,0x2, 0x54, -+0xb, 0x70,0xbe,0x70,0xe, 0x40,0xca,0xda,0x79,0x22,0x29,0x50,0x0, 0xf5,0xac,0x5b, -+0x7e,0xf, 0x3b,0x10,0x69,0x30,0x0, 0xc, 0xa, 0x56,0x3e,0x54,0xbe,0x24,0x2, 0x0, -+0x40,0x4, 0x7e,0x24,0x1, 0xff,0xbd,0x25,0x28,0x1f,0x2e,0x14,0x0, 0xc, 0x6c,0x66, -+0x1b,0xa, 0x30,0x1e,0x24,0x7c,0x45,0x6c,0x55,0x7e,0xf, 0x3b,0x10,0x2e,0x14,0x0, -+0xc, 0xb, 0xa, 0x30,0x4d,0x32,0x1b,0xa, 0x30,0x22,0x7c,0x6b,0x6c,0xaa,0x7e,0x50, -+0x28,0xac,0x57,0x7e,0x90,0x2, 0xac,0x9a,0x2d,0x42,0x7e,0x50,0xf0,0xac,0x56,0x2d, -+0x24,0x7e,0x7f,0x33,0xf8,0x2d,0xf2,0x69,0x27,0x1, 0x8c,0x6c,0x44,0xa, 0x4a,0x7f, -+0x60,0x2d,0xd4,0x7e,0x6b,0xb0,0x7c,0x8b,0x6c,0x99,0x4d,0x24,0x79,0x27,0x1, 0x8c, -+0xb, 0xa0,0xbe,0xa0,0xe, 0x40,0xc7,0x22,0x7c,0x6b,0x6c,0xaa,0x7e,0x50,0x28,0xac, -+0x57,0x7e,0x90,0x2, 0xac,0x9a,0x2d,0x42,0x7e,0x50,0xf0,0xac,0x56,0x2d,0x24,0x7e, -+0x7f,0x33,0xf8,0x2d,0xf2,0x69,0x27,0x1, 0x8c,0x6c,0x55,0xa, 0x4a,0x7f,0x60,0x2d, -+0xd4,0x7e,0x6b,0xb0,0xa, 0x4b,0x4d,0x24,0x79,0x27,0x1, 0x8c,0xb, 0xa0,0xbe,0xa0, -+0xe, 0x40,0xc9,0x22,0xa9,0xd6,0xcb,0x54,0x3f,0x5e,0x70,0x1f,0x7c,0x2b,0x6c,0x33, -+0x3e,0x14,0x3e,0x14,0x2e,0x14,0x0, 0x5, 0xa, 0x37,0x3e,0x34,0x3e,0x34,0x3e,0x34, -+0x3e,0x34,0x3e,0x34,0x2d,0x31,0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0x2, 0x7e,0xf, -+0x3, 0xfc,0x79,0x20,0x0, 0x14,0xa9,0xc6,0xcb,0x22,0x12,0x5f,0xfc,0x7c,0x6b,0x12, -+0xbd,0x89,0x7c,0x7b,0x6c,0xaa,0xbe,0x60,0x15,0x68,0x4, 0xa5,0xbf,0x15,0x1f,0xbc, -+0x76,0x68,0x5, 0x7e,0xa0,0xf1,0x80,0xb, 0x12,0xbf,0xae,0xbe,0xb0,0x51,0x68,0x3, -+0x7e,0xa0,0xf2,0x7c,0xba,0x12,0xbf,0xa9,0x4c,0xaa,0x68,0x2, 0x80,0xfe,0x22,0x7d, -+0x23,0x6c,0x66,0x7e,0x30,0x2, 0xac,0x36,0x2e,0x14,0x20,0xc7,0x7a,0x31,0x82,0x7a, -+0x21,0x83,0xe4,0x93,0xa, 0x1b,0xbd,0x12,0x28,0x7, 0xb, 0x60,0xbe,0x60,0x14,0x40, -+0xe2,0x7e,0x70,0x2, 0xac,0x67,0x2e,0x34,0x20,0xc8,0x7a,0x71,0x82,0x7a,0x61,0x83, -+0xe4,0x93,0x22,0x7e,0xf, 0x3b,0x8, 0x2e,0x14,0x0, 0x84,0xb, 0xa, 0x30,0x5e,0x70, -+0xdf,0x1b,0xa, 0x30,0x74,0x3, 0x12,0x13,0x8b,0x7e,0x14,0x0, 0x3, 0x7e,0x1f,0x3b, -+0x8, 0x1b,0x1a,0x10,0x7e,0x1f,0x3b,0x8, 0xb, 0x1a,0x30,0x5e,0x34,0x0, 0x1, 0x78, -+0xf3,0xe4,0x2, 0x13,0x8b,0x2e,0x34,0x4, 0x0, 0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, -+0x60,0x7e,0x34,0x4, 0x0, 0x9d,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x62,0x7e, -+0x34,0x0, 0x1, 0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x64,0xa, 0x3b,0x7e,0xf, 0x3b, -+0x10,0x79,0x30,0x0, 0x66,0x22,0x7c,0xa5,0xbe,0x34,0x0, 0x0, 0x28,0x10,0xa, 0x1b, -+0x3e,0x14,0x7d,0x23,0x7c,0x45,0x6c,0x55,0x2d,0x21,0xa, 0x3a,0x80,0x8, 0xa, 0x2b, -+0x3e,0x24,0x7c,0x67,0x6c,0x77,0x2d,0x32,0x7e,0xf, 0x33,0xfc,0x79,0x30,0x0, 0x4, -+0x22,0x7c,0xa7,0x7e,0x1f,0x3b,0x8, 0x69,0x41,0x0, 0x8a,0x5e,0x44,0x10,0xf, 0xa, -+0x1a,0x3e,0x14,0x3e,0x14,0x3e,0x14,0x3e,0x14,0xa, 0x5b,0xc4,0x23,0x54,0xe0,0x7c, -+0xab,0xe4,0x2d,0x51,0x4d,0x45,0x79,0x41,0x0, 0x8a,0x22,0x7e,0xf, 0x3b,0x8, 0x69, -+0x30,0x0, 0x84,0x5e,0x70,0xe7,0x1b,0xb1,0x68,0xc, 0x14,0x68,0xc, 0xb, 0xb1,0x78, -+0x5, 0x4e,0x70,0x10,0x80,0x3, 0x4e,0x70,0x8, 0x79,0x30,0x0, 0x84,0x22,0x7e,0x34, -+0x0, 0x1f,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x4, 0xa9,0xd2,0xcd,0x7e,0xf, 0x3b, -+0x10,0xb, 0xa, 0x30,0x4e,0x70,0x1, 0x1b,0xa, 0x30,0x22,0xbe,0xb0,0x0, 0x28,0xa, -+0xa9,0xd7,0xca,0xa9,0xd3,0xcb,0xa9,0xd2,0xcb,0x22,0xa9,0xc7,0xca,0xa9,0xc3,0xcb, -+0xa9,0xc2,0xcb,0x22,0x30,0x1, 0xa, 0x54,0x3, 0xa, 0x3b,0x2e,0x34,0x2, 0x0, 0x80, -+0x2, 0x6d,0x33,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x3a,0x22,0x7e,0xf, 0x3b,0x8, -+0x69,0x30,0x0, 0x8a,0x60,0x5, 0x4e,0x60,0x10,0x80,0x3, 0x5e,0x60,0xef,0x79,0x30, -+0x0, 0x8a,0x22,0xbe,0xb0,0x0, 0x28,0x9, 0xa9,0xd6,0xca,0xd2,0xcd,0xa9,0xd1,0xcb, -+0x22,0xa9,0xc6,0xca,0xc2,0xcd,0xa9,0xc1,0xcb,0x22,0x7e,0x34,0x0, 0xf, 0x7e,0xf, -+0x3b,0x10,0x79,0x30,0x0, 0x4, 0xc2,0xc3,0xd2,0xeb,0x22,0x6, 0xe, 0x15,0x1a,0x1f, -+0x26,0x2b,0x2d,0x2e,0x2f,0x2c,0x2a,0x24,0x1f,0x1a,0x14,0xf, 0x8, 0x3, 0x3, 0x6, -+0xb, 0x10,0x15,0x1c,0x22,0x28,0x2d,0x34,0x39,0x3d,0x40,0xe, 0x3, 0x0, 0x0, 0x0, -+0x3, 0x8, 0xc, 0x11,0x16,0x1c,0x23,0x2b,0x32,0x37,0x3c,0x40,0x45,0x4a,0x4d,0x4c, -+0x4b,0x4a,0x48,0x46,0x46,0x45,0x45,0x44,0x44,0x43,0x44,0x45,0x78,0x65,0x55,0x2, -+0xd, 0x14,0x1b,0x21,0x25,0x2b,0x31,0x37,0x36,0x33,0x2d,0x28,0x20,0x19,0x14,0xd, -+0x8, 0x1, 0x2, 0x5, 0xb, 0x10,0x18,0x1e,0x23,0x2a,0x30,0x35,0x3a,0x3e,0x3f,0x0, -+0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0x9, 0xf, 0x15,0x1d,0x24,0x2a,0x30, -+0x35,0x3b,0x3e,0x3f,0x40,0x3f,0x3e,0x3d,0x3d,0x3c,0x3c,0x3b,0x3b,0x39,0x37,0x1a, -+0x2d,0x65,0x55,0x1b,0x29,0x27,0x1e,0x14,0x11,0x1a,0x26,0x2e,0x37,0x3d,0x3f,0x3d, -+0x37,0x2e,0x21,0x16,0xc, 0x5, 0x1, 0x0, 0x0, 0x1, 0x3, 0xa, 0x13,0x1d,0x26,0x2e, -+0x33,0x38,0x3a,0x16,0x21,0x2b,0x32,0x30,0x2a,0x27,0x2a,0x2f,0x2d,0x24,0x1a,0x10, -+0x7, 0x1, 0x0, 0x2, 0x7, 0x10,0x19,0x23,0x2d,0x36,0x41,0x49,0x4c,0x4a,0x45,0x3c, -+0x34,0x2a,0x27,0x51,0x71,0x50,0x55,0x28,0x12,0x11,0x18,0x23,0x29,0x2b,0x2a,0x2e, -+0x35,0x3c,0x3e,0x3f,0x39,0x31,0x28,0x1e,0x15,0xe, 0x6, 0x3, 0x1, 0x0, 0x0, 0x3, -+0xc, 0x16,0x20,0x2b,0x32,0x37,0x39,0x20,0x29,0x32,0x37,0x31,0x28,0x21,0x2a,0x31, -+0x2d,0x23,0x1b,0x13,0x8, 0x1, 0x0, 0x1, 0x5, 0xc, 0x18,0x20,0x29,0x34,0x3e,0x47, -+0x4f,0x50,0x4d,0x45,0x3c,0x34,0x31,0x26,0xcb,0x50,0x55,0x1d,0x2f,0x2c,0x25,0x1a, -+0x1b,0x20,0x29,0x31,0x31,0x2e,0x2d,0x35,0x3d,0x3f,0x3d,0x38,0x2c,0x22,0x15,0xd, -+0x6, 0x1, 0x0, 0x1, 0x6, 0x10,0x1b,0x24,0x2f,0x38,0x3d,0xd, 0x1b,0x27,0x31,0x32, -+0x28,0x1e,0x14,0x15,0x1d,0x28,0x31,0x34,0x2a,0x1f,0x14,0x9, 0x1, 0x0, 0x4, 0xd, -+0x17,0x21,0x2c,0x35,0x40,0x47,0x47,0x44,0x3c,0x34,0x30,0x1b,0x82,0x50,0x55,0x19, -+0x2e,0x2a,0x1f,0x18,0x1b,0x22,0x2d,0x30,0x2e,0x2e,0x35,0x3d,0x3f,0x3d,0x3a,0x2f, -+0x24,0x18,0xf, 0x7, 0x1, 0x0, 0x0, 0x3, 0xb, 0x16,0x1e,0x29,0x32,0x3a,0x3d,0x11, -+0x1f,0x28,0x32,0x30,0x26,0x1b,0x14,0x1c,0x25,0x2e,0x35,0x2e,0x23,0x19,0x11,0x4, -+0x0, 0x1, 0x8, 0x10,0x1c,0x25,0x30,0x38,0x40,0x42,0x3f,0x39,0x32,0x2c,0x27,0xc0, -+0xd1,0x50,0x55,0x18,0x2c,0x29,0x1e,0x14,0x13,0x16,0x1e,0x29,0x30,0x2e,0x2c,0x2b, -+0x37,0x3d,0x3f,0x3e,0x39,0x30,0x25,0x1b,0x10,0x8, 0x1, 0x0, 0x2, 0x9, 0x13,0x1f, -+0x2d,0x38,0x3c,0x11,0x1a,0x23,0x2f,0x33,0x29,0x20,0x16,0xe, 0x13,0x1d,0x28,0x32, -+0x31,0x28,0x1e,0x16,0xb, 0x2, 0x0, 0x1, 0x8, 0x12,0x1e,0x29,0x33,0x3b,0x3f,0x3c, -+0x32,0x29,0x26,0x30,0x6e,0x50,0x55,0x16,0x2b,0x24,0x17,0xd, 0xa, 0xe, 0x15,0x24, -+0x28,0x25,0x23,0x2b,0x36,0x3b,0x3d,0x3b,0x37,0x2b,0x20,0x15,0xb, 0x4, 0x0, 0x0, -+0x3, 0xe, 0x19,0x27,0x33,0x3d,0x3f,0x13,0x21,0x2e,0x37,0x3a,0x31,0x27,0x1c,0x13, -+0x1c,0x28,0x34,0x3e,0x37,0x2d,0x22,0x18,0xc, 0x1, 0x0, 0x3, 0xd, 0x18,0x25,0x31, -+0x3c,0x47,0x48,0x42,0x38,0x2e,0x2a,0x31,0x62,0x50,0x55,0x35,0x2e,0x27,0x22,0x1f, -+0x1b,0x16,0x10,0xc, 0x8, 0x6, 0x4, 0x2, 0x0, 0x0, 0x0, 0x1, 0x3, 0x6, 0xb, 0xe, -+0x12,0x17,0x1d,0x22,0x26,0x2a,0x30,0x35,0x39,0x3d,0x3f,0x0, 0x0, 0x1, 0x4, 0x6, -+0x8, 0xb, 0x10,0x16,0x1b,0x1f,0x23,0x28,0x2d,0x32,0x36,0x3b,0x40,0x44,0x48,0x4a, -+0x4b,0x4c,0x4b,0x4a,0x48,0x46,0x43,0x40,0x3e,0x3c,0x3a,0x3c,0x9c,0x34,0x55,0x9, -+0x17,0x1d,0x26,0x2e,0x37,0x3c,0x3f,0x3b,0x33,0x2b,0x22,0x1a,0x11,0xb, 0x5, 0x3, -+0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x6, 0xa, 0x11,0x19,0x22,0x2a,0x32,0x39,0x3d,0x30, -+0x30,0x2f,0x2c,0x26,0x1e,0x17,0xd, 0x5, 0x0, 0x0, 0x1, 0x6, 0xe, 0x15,0x1e,0x26, -+0x2c,0x32,0x3a,0x41,0x48,0x50,0x5b,0x61,0x64,0x64,0x60,0x5b,0x56,0x51,0x4f,0xd8, -+0x2c,0x33,0x55,0x26,0x1c,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x15, -+0xf, 0x9, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0xb, 0x12,0x18,0x1f,0x28,0x31, -+0x37,0x3c,0x40,0x1, 0x7, 0xe, 0x14,0x1c,0x23,0x2c,0x34,0x3e,0x44,0x4c,0x54,0x5b, -+0x60,0x5d,0x55,0x4f,0x49,0x43,0x3d,0x38,0x32,0x2b,0x26,0x22,0x1f,0x1e,0x1c,0x1c, -+0x1c,0x1c,0x1d,0x66,0x54,0x74,0x55,0x3e,0x2c,0x21,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, -+0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1a,0x11,0xc, 0x7, 0x2, 0x0, 0x0, 0x3, -+0xa, 0x12,0x1c,0x23,0x2c,0x38,0x40,0xc, 0x0, 0x6, 0xf, 0x17,0x22,0x29,0x32,0x3b, -+0x41,0x47,0x4f,0x55,0x5c,0x66,0x71,0x79,0x3e,0x76,0x6d,0x64,0x5a,0x52,0x4b,0x42, -+0x39,0x35,0x33,0x32,0x32,0x31,0x31,0xf3,0xdb,0x74,0x55,0x9, 0x7, 0x6, 0x6, 0x5, -+0x5, 0x4, 0x4, 0x4, 0x4, 0x3, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, -+0xa, 0x10,0x14,0x1b,0x22,0x28,0x2e,0x34,0x39,0x3d,0x40,0x0, 0xb, 0x11,0x16,0x1b, -+0x22,0x28,0x2c,0x33,0x39,0x40,0x46,0x4d,0x52,0x56,0x5c,0x61,0x68,0x6d,0x73,0x73, -+0x71,0x71,0x71,0x70,0x70,0x6f,0x6f,0x6f,0x6f,0x6d,0x6e,0x79,0x80,0x44,0x55,0x17, -+0x13,0x12,0x12,0x11,0x10,0xf, 0xd, 0xc, 0xb, 0x9, 0x8, 0x7, 0x4, 0x3, 0x2, 0x1, -+0x0, 0x0, 0x0, 0x1, 0x4, 0xb, 0x10,0x16,0x1d,0x24,0x29,0x31,0x39,0x3d,0x40,0x0, -+0xe, 0x16,0x1a,0x1f,0x24,0x29,0x2e,0x33,0x38,0x3e,0x43,0x47,0x50,0x55,0x59,0x62, -+0x69,0x6e,0x75,0x7c,0xff,0x7d,0x7c,0x79,0x73,0x6d,0x68,0x60,0x5a,0x57,0x56,0x5d, -+0x8, 0x44,0x55,0x0, 0x7, 0xb, 0xd, 0x10,0x12,0x16,0x17,0x17,0x18,0x18,0x19,0x19, -+0x19,0x1c,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x30,0x32,0x33,0x35,0x38,0x39, -+0x3b,0x3d,0x3f,0x3e,0x29,0x1f,0x18,0xf, 0x7, 0x6, 0xc, 0x12,0x1d,0x25,0x2d,0x36, -+0x3e,0x3b,0x35,0x2c,0x26,0x20,0x19,0x11,0xa, 0x3, 0x3, 0x9, 0x10,0x18,0x24,0x2c, -+0x33,0x3a,0x3e,0x60,0x9b,0x32,0x55,0x0, 0x5, 0x5, 0x5, 0x4, 0x3, 0x2, 0x3, 0x5, -+0x7, 0xa, 0xe, 0x11,0x19,0x1b,0x1c,0x1d,0x1c,0x1c,0x1d,0x1f,0x22,0x25,0x2a,0x31, -+0x33,0x35,0x37,0x38,0x39,0x3c,0x40,0x0, 0x12,0x1c,0x24,0x2b,0x34,0x3c,0x39,0x2f, -+0x29,0x21,0x16,0xf, 0xd, 0x14,0x1e,0x2a,0x33,0x31,0x27,0x20,0x18,0x10,0x7, 0xa, -+0x10,0x1a,0x26,0x2f,0x37,0x3d,0x3f,0xfb,0x8f,0x32,0x55,0x2c,0x23,0x1f,0x19,0x13, -+0xc, 0x7, 0x3, 0x0, 0x0, 0x0, 0x1, 0x5, 0xa, 0xf, 0x16,0x1d,0x23,0x2a,0x30,0x36, -+0x3b,0x3e,0x40,0x3f,0x3e,0x3b,0x38,0x33,0x2f,0x2b,0x28,0x9, 0x1, 0x0, 0x1, 0x3, -+0x9, 0xe, 0x14,0x1b,0x21,0x27,0x2e,0x36,0x3b,0x3e,0x41,0x41,0x40,0x3d,0x3a,0x36, -+0x2f,0x2b,0x26,0x20,0x1c,0x16,0x10,0xc, 0xa, 0x9, 0xb, 0x36,0xdc,0x30,0x55,0x1a, -+0x9, 0x5, 0x1, 0x0, 0x0, 0x0, 0x2, 0x5, 0x9, 0xf, 0x16,0x1c,0x22,0x2a,0x31,0x36, -+0x39,0x3c,0x3e,0x3f,0x3f,0x3d,0x38,0x30,0x27,0x1f,0x18,0x12,0xb, 0x6, 0x5, 0x7, -+0x12,0x19,0x22,0x2c,0x36,0x3f,0x49,0x53,0x5c,0x63,0x66,0x64,0x5f,0x58,0x4c,0x43, -+0x3d,0x34,0x2b,0x22,0x1b,0x15,0xb, 0x4, 0x0, 0x0, 0x1, 0x4, 0xb, 0x13,0x18,0xf1, -+0xc, 0x30,0x55,0x18,0x2c,0x34,0x39,0x3c,0x3d,0x3f,0x3f,0x3f,0x3d,0x3b,0x36,0x30, -+0x2a,0x24,0x1c,0x16,0xd, 0x6, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x3, 0x5, 0x9, 0xf, -+0x17,0x1e,0x24,0x1, 0x2, 0x8, 0xe, 0x14,0x1a,0x21,0x28,0x30,0x37,0x40,0x49,0x50, -+0x55,0x59,0x5c,0x5c,0x58,0x51,0x48,0x3f,0x38,0x31,0x2b,0x25,0x1d,0x17,0x11,0xa, -+0x4, 0x1, 0x1, 0x9d,0xbf,0x30,0x55,0x16,0x7, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, -+0x8, 0xe, 0x16,0x1f,0x28,0x30,0x38,0x3c,0x3e,0x3f,0x40,0x3f,0x3f,0x3d,0x3b,0x37, -+0x32,0x2c,0x25,0x1d,0x16,0xf, 0xc, 0x53,0x46,0x3e,0x35,0x2e,0x27,0x20,0x1a,0x14, -+0xd, 0x6, 0x1, 0x0, 0x0, 0x3, 0xa, 0x13,0x1a,0x20,0x27,0x2d,0x33,0x3a,0x40,0x48, -+0x4f,0x54,0x58,0x5a,0x5a,0x58,0x57,0xc6,0x55,0x30,0x55,0x7, 0x1, 0x4, 0xa, 0x10, -+0x18,0x20,0x2a,0x32,0x38,0x3c,0x3e,0x3f,0x3e,0x3d,0x3b,0x39,0x35,0x30,0x27,0x21, -+0x19,0x12,0xb, 0x6, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32,0x1d,0x12,0x9, 0x5, -+0x1, 0x0, 0x0, 0x1, 0x5, 0xd, 0x17,0x20,0x2a,0x32,0x3b,0x45,0x4e,0x58,0x63,0x69, -+0x6b,0x6a,0x64,0x5d,0x57,0x4f,0x47,0x40,0x38,0x32,0x2f,0x1a,0xb5,0x30,0x55,0x21, -+0x13,0xc, 0x8, 0x5, 0x2, 0x1, 0x0, 0x0, 0x1, 0x3, 0x8, 0xf, 0x17,0x1e,0x24,0x2b, -+0x32,0x39,0x3d,0x3e,0x3f,0x3f,0x3d,0x3a,0x36,0x30,0x29,0x21,0x1a,0x16,0x13,0x5, -+0x9, 0xe, 0x14,0x1a,0x22,0x29,0x30,0x38,0x3f,0x47,0x4d,0x51,0x51,0x4f,0x4d,0x49, -+0x42,0x39,0x31,0x2b,0x25,0x1e,0x17,0x10,0x8, 0x3, 0x0, 0x0, 0x1, 0x3, 0x5, 0xaf, -+0x13,0x30,0x55,0x38,0x3f,0x3d,0x3a,0x36,0x2e,0x26,0x1f,0x14,0xb, 0x6, 0x2, 0x0, -+0x0, 0x0, 0x1, 0x2, 0x5, 0x9, 0xe, 0x14,0x1c,0x23,0x2a,0x34,0x38,0x3a,0x3b,0x3d, -+0x3d,0x3d,0x3d,0x29,0x1a,0x10,0x9, 0x4, 0x0, 0x0, 0x1, 0x4, 0xc, 0x14,0x1c,0x22, -+0x28,0x2f,0x37,0x3f,0x47,0x4f,0x56,0x5a,0x5b,0x59,0x56,0x4e,0x47,0x40,0x37,0x30, -+0x28,0x22,0x1f,0x2a,0xa9,0x30,0x55,0x3e,0x3b,0x38,0x33,0x2b,0x24,0x1d,0x16,0x10, -+0x7, 0x3, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x3, 0x6, 0xc, 0x15,0x1c,0x23,0x29,0x2f, -+0x35,0x38,0x3b,0x3c,0x3e,0x3f,0x3f,0x1f,0x10,0xa, 0x6, 0x0, 0x0, 0x0, 0x2, 0x4, -+0xc, 0x12,0x18,0x1e,0x25,0x2c,0x35,0x3c,0x42,0x4a,0x51,0x56,0x56,0x53,0x4e,0x49, -+0x40,0x3a,0x33,0x2c,0x25,0x1f,0x1c,0xf9,0xa2,0x30,0x55,0x1f,0x2b,0x31,0x35,0x38, -+0x3b,0x3e,0x3f,0x3f,0x3d,0x3a,0x34,0x2d,0x27,0x23,0x1d,0x17,0x10,0x9, 0x4, 0x1, -+0x0, 0x0, 0x1, 0x3, 0x6, 0xa, 0xf, 0x15,0x1b,0x20,0x23,0x45,0x42,0x3e,0x38,0x34, -+0x2d,0x24,0x1c,0x15,0x11,0xb, 0x6, 0x2, 0x0, 0x0, 0x0, 0x1, 0x3, 0x7, 0xd, 0x12, -+0x18,0x20,0x28,0x30,0x36,0x3c,0x42,0x47,0x48,0x49,0x4a,0x65,0x9d,0x30,0x55,0x1c, -+0x2a,0x33,0x39,0x3c,0x3e,0x3f,0x3f,0x3e,0x3d,0x3a,0x35,0x2e,0x28,0x23,0x1c,0x15, -+0xf, 0x9, 0x4, 0x1, 0x0, 0x0, 0x1, 0x1, 0x4, 0x8, 0xd, 0x13,0x19,0x1e,0x22,0x40, -+0x3e,0x3a,0x33,0x2f,0x29,0x22,0x1b,0x15,0x10,0xa, 0x5, 0x1, 0x0, 0x0, 0x1, 0x2, -+0x5, 0xa, 0x11,0x17,0x1c,0x24,0x2a,0x30,0x35,0x3b,0x40,0x43,0x44,0x45,0x45,0xcb, -+0xc6,0x30,0x55,0x5, 0x3, 0x4, 0x7, 0xa, 0x10,0x17,0x21,0x28,0x2e,0x33,0x38,0x3c, -+0x3e,0x3f,0x3f,0x3e,0x3b,0x38,0x31,0x29,0x21,0x18,0xf, 0x9, 0x4, 0x1, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x26,0x35,0x3d,0x45,0x4b,0x51,0x53,0x52,0x4f,0x4c,0x46,0x41,0x3b, -+0x34,0x2e,0x25,0x1e,0x17,0x11,0x9, 0x3, 0x0, 0x0, 0x2, 0x6, 0xc, 0x12,0x18,0x1e, -+0x24,0x2c,0x31,0xf4,0xb6,0x30,0x55,0xa, 0x5, 0x5, 0x5, 0x8, 0xf, 0x16,0x20,0x29, -+0x31,0x36,0x3a,0x3c,0x3e,0x3f,0x3f,0x3e,0x3c,0x3a,0x33,0x2d,0x24,0x1c,0x14,0xf, -+0x8, 0x4, 0x0, 0x0, 0x0, 0x1, 0x2, 0x35,0x46,0x4e,0x56,0x5d,0x65,0x68,0x66,0x60, -+0x57,0x4f,0x47,0x3f,0x37,0x2e,0x25,0x1e,0x16,0x10,0x6, 0x2, 0x0, 0x1, 0x5, 0xb, -+0x15,0x1d,0x28,0x2f,0x39,0x41,0x45,0xf0,0xbc,0x30,0x55,0x7, 0x3, 0x3, 0x3, 0x4, -+0x7, 0xf, 0x17,0x20,0x28,0x30,0x36,0x3b,0x3d,0x3f,0x3f,0x3d,0x39,0x36,0x2d,0x25, -+0x1d,0x16,0xd, 0x8, 0x2, 0x0, 0x0, 0x1, 0x2, 0x3, 0x5, 0x2e,0x3f,0x48,0x50,0x59, -+0x5f,0x67,0x68,0x63,0x5d,0x52,0x4a,0x3e,0x35,0x2b,0x20,0x18,0x10,0xa, 0x3, 0x0, -+0x0, 0x1, 0x7, 0xe, 0x19,0x22,0x2b,0x31,0x3a,0x42,0x47,0xef,0xc9,0x30,0x55,0x3b, -+0x3c,0x3c,0x3b,0x39,0x36,0x2f,0x27,0x21,0x19,0x11,0xb, 0x5, 0x1, 0x0, 0x0, 0x1, -+0x2, 0x4, 0x6, 0xa, 0x10,0x16,0x1f,0x26,0x2d,0x33,0x39,0x3c,0x3e,0x3f,0x3f,0x22, -+0x31,0x3b,0x41,0x47,0x4d,0x56,0x59,0x5a,0x58,0x55,0x51,0x4b,0x43,0x3d,0x35,0x29, -+0x20,0x18,0x11,0x9, 0x3, 0x0, 0x0, 0x1, 0x3, 0x7, 0xf, 0x15,0x1b,0x21,0x26,0x2b, -+0xa0,0x30,0x55,0x37,0x38,0x37,0x34,0x2d,0x26,0x1c,0x16,0xe, 0x9, 0x4, 0x2, 0x0, -+0x0, 0x0, 0x1, 0x2, 0x5, 0xa, 0x10,0x17,0x20,0x26,0x2e,0x35,0x3a,0x3c,0x3e,0x3f, -+0x3f,0x3e,0x3e,0x30,0x40,0x49,0x50,0x59,0x5e,0x60,0x5d,0x56,0x50,0x47,0x41,0x39, -+0x33,0x2a,0x20,0x1a,0x10,0xa, 0x5, 0x1, 0x0, 0x0, 0x3, 0x8, 0x10,0x17,0x1f,0x25, -+0x2f,0x38,0x3c,0x37,0xc3,0x30,0x55,0x3b,0x3d,0x3d,0x3b,0x38,0x32,0x27,0x1c,0x13, -+0xe, 0x8, 0x3, 0x0, 0x0, 0x0, 0x1, 0x3, 0x7, 0xb, 0x12,0x18,0x20,0x28,0x31,0x39, -+0x3d,0x3f,0x40,0x3f,0x3f,0x3e,0x3e,0x33,0x45,0x4e,0x57,0x5d,0x65,0x6c,0x6a,0x66, -+0x63,0x5c,0x53,0x4a,0x40,0x38,0x2e,0x25,0x1a,0x11,0x8, 0x4, 0x0, 0x0, 0x2, 0x9, -+0x10,0x19,0x21,0x2a,0x32,0x39,0x3e,0x7, 0x90,0x30,0x55,0x39,0x2b,0x24,0x1c,0x15, -+0xe, 0x9, 0x6, 0x5, 0x6, 0x9, 0x10,0x19,0x22,0x27,0x2e,0x35,0x3b,0x3e,0x3f,0x3d, -+0x38,0x32,0x2c,0x26,0x1f,0x19,0x13,0xb, 0x5, 0x1, 0x0, 0x6, 0x0, 0x1, 0x2, 0x6, -+0xb, 0x11,0x17,0x1d,0x24,0x2a,0x2f,0x32,0x34,0x35,0x36,0x37,0x3b,0x41,0x47,0x4e, -+0x56,0x5d,0x61,0x64,0x65,0x65,0x63,0x60,0x5c,0x57,0x54,0xd1,0x4a,0x46,0x55,0x0, -+0x1, 0x3, 0x5, 0x7, 0x8, 0xa, 0xb, 0xc, 0xe, 0xf, 0x11,0x12,0x14,0x16,0x1a,0x1e, -+0x22,0x24,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3a,0x3c,0x3e,0x3f,0x3f,0x1, -+0xe, 0x14,0x1b,0x23,0x28,0x2e,0x35,0x3a,0x40,0x48,0x4f,0x56,0x5d,0x62,0x61,0x5a, -+0x53,0x4e,0x47,0x40,0x3b,0x35,0x2d,0x29,0x22,0x1b,0x17,0x10,0x9, 0x5, 0x1, 0x6d, -+0x7d,0x54,0x55,0x0, 0x2, 0x3, 0x5, 0x6, 0x8, 0xb, 0x10,0x13,0x16,0x17,0x19,0x1b, -+0x1d,0x1f,0x21,0x22,0x22,0x22,0x22,0x23,0x25,0x28,0x2e,0x31,0x34,0x36,0x38,0x3a, -+0x3c,0x3e,0x3f,0x6, 0x17,0x20,0x27,0x30,0x38,0x3e,0x39,0x32,0x2b,0x25,0x1e,0x18, -+0x10,0x9, 0x9, 0x10,0x18,0x1f,0x26,0x2f,0x36,0x3c,0x38,0x2f,0x27,0x1f,0x18,0xf, -+0x8, 0x1, 0x2, 0xc7,0x75,0x31,0x55,0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x3, 0x8, 0xd, -+0x12,0x15,0x17,0x18,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1f,0x22,0x27,0x2e,0x35,0x38, -+0x3b,0x3d,0x3e,0x3f,0x40,0x3f,0x3e,0x6, 0x15,0x1b,0x23,0x29,0x2f,0x37,0x3c,0x37, -+0x2e,0x27,0x20,0x1a,0x13,0xe, 0x14,0x1a,0x21,0x27,0x2f,0x38,0x3f,0x3d,0x35,0x2e, -+0x26,0x20,0x18,0x11,0xb, 0x3, 0x0, 0x67,0x3f,0x31,0x55,0x0, 0x1, 0x2, 0x3, 0x4, -+0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14, -+0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, -+0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x0, 0x1, 0x2, 0x3, 0x4, -+0x5, 0x6, 0x7, 0x8, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x0, 0x1, 0x2, -+0x3, 0x4, 0x1c,0x1d,0x1e,0x1f,0x20,0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x10,0x11,0x12, -+0x13,0x14,0x15,0x16,0x17,0x18,0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, -+0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x6, -+0x5, 0x4, 0x3, 0x2, 0x1, 0x0, 0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x0, 0x0, 0x0, 0x1, -+0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x0, 0x1, -+0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,0x11, -+0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x0, 0x1, 0x2, 0x3, 0x4, 0x5, -+0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15, -+0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x0, 0x1, 0x1, -+0x1, 0x10,0x1c,0x2, 0x10,0x1c,0x0, 0x1, 0x1, 0x4, 0xf, 0x1c,0x0, 0x1, 0x1, 0x6, -+0x1b,0xf, 0x7, 0xe, 0x1c,0x8, 0x23,0x15,0x0, 0x1, 0x1, 0xa, 0x10,0x19,0xb, 0x14, -+0x1c,0xc, 0xf, 0x18,0x0, 0x1, 0x1, 0xe, 0x23,0x15,0xf, 0xd, 0x19,0x0, 0x1, 0x1, -+0x11,0xd, 0x14,0x12,0x10,0x19,0x13,0x1c,0x10,0x14,0x1a,0x10,0x15,0x10,0x19,0x16, -+0x23,0x1c,0x72,0x23,0x15,0x73,0x23,0x1c,0x74,0x23,0x1c,0x75,0xe, 0x1c,0xc2,0xd5, -+0x7c,0xb4,0x30,0xe7,0x8, 0xb2,0xd5,0x6e,0x24,0xff,0xff,0xb, 0x24,0x7c,0xb6,0x30, -+0xe7,0x12,0xb2,0xd5,0x6e,0x34,0xff,0xff,0xb, 0x34,0x8d,0x32,0x6e,0x24,0xff,0xff, -+0xb, 0x24,0x80,0x2, 0x8d,0x32,0x30,0xd5,0x6, 0x6e,0x34,0xff,0xff,0xb, 0x34,0x22, -+0x7d,0x51,0xad,0x3, 0x7d,0x2, 0x7d,0x21,0xad,0x5, 0x2d,0x12,0xad,0x35,0x2d,0x21, -+0x22,0x7d,0x2, 0xad,0x31,0xad,0x10,0x2d,0x21,0x22,0x6d,0x0, 0x74,0x10,0x4d,0x0, -+0x78,0xb, 0x4d,0x22,0x78,0x27,0x8d,0x31,0x7d,0x12,0x6d,0x22,0x22,0x7d,0x43,0x7d, -+0x32,0x6d,0x22,0x2f,0x11,0x2d,0x44,0x50,0x2, 0xa5,0xf, 0xbf,0x10,0x40,0x4, 0x9f, -+0x10,0xb, 0x90,0x14,0x78,0xed,0x7f,0x1, 0x6d,0x22,0x7d,0x34,0x22,0x7d,0x41,0x7d, -+0x13,0x8d,0x24,0x7d,0x2, 0x2f,0x0, 0x40,0x4, 0xbd,0x4, 0x40,0x4, 0x9d,0x4, 0xb, -+0x14,0x14,0x78,0xf1,0x7d,0x23,0x7d,0x31,0x7d,0x10,0x6d,0x0, 0x22,0xc2,0xd5,0x7c, -+0xb0,0x30,0xe7,0x8, 0xb2,0xd5,0x9f,0x22,0x9f,0x20,0x7f,0x2, 0x7c,0xb4,0x30,0xe7, -+0x13,0xb2,0xd5,0x9f,0x22,0x9f,0x21,0x7f,0x12,0x12,0x1f,0x3c,0x9f,0x22,0x9f,0x20, -+0x7f,0x2, 0x80,0x3, 0x12,0x1f,0x3c,0x30,0xd5,0x6, 0x9f,0x22,0x9f,0x21,0x7f,0x12, -+0x22,0x6c,0xaa,0x4d,0x11,0x68,0x1a,0x1e,0x54,0x68,0xe, 0xb, 0x38,0x20,0x1b,0x18, -+0x20,0xb, 0x35,0xb, 0x15,0x1b,0x54,0x78,0xf2,0x50,0x6, 0x7e,0x39,0x40,0x7a,0x19, -+0x40,0x22,0x6c,0xaa,0x4d,0x11,0x68,0x1e,0x1e,0x54,0x50,0xc, 0x7e,0x1b,0x0, 0x7a, -+0x19,0x0, 0x68,0x12,0xb, 0x1c,0xb, 0x14,0xb, 0x1a,0x0, 0x1b,0x18,0x0, 0xb, 0x1d, -+0xb, 0x15,0x1b,0x54,0x78,0xf2,0x22,0x75,0x84,0x1, 0x7e,0x44,0x3f,0xff,0xe4,0x7a, -+0x49,0xb0,0x1b,0x44,0x78,0xf9,0x7e,0xf8,0x3b,0x62,0x75,0xc, 0x0, 0x75,0xd, 0x0, -+0x75,0xe, 0x2, 0x75,0xf, 0x0, 0xc2,0x8, 0xc2,0x9, 0x75,0x1e,0x0, 0xc2,0x10,0xc2, -+0x11,0x75,0x18,0x0, 0xc2,0xa, 0xc2,0x12,0x75,0x1f,0x0, 0x75,0x5a,0x0, 0xc2,0x14, -+0x75,0x5b,0x0, 0xc2,0x16,0x75,0x5c,0x0, 0xc2,0x17,0xc2,0x18,0xc2,0xc, 0x75,0x1c, -+0x0, 0x75,0x1d,0x64,0xc2,0x19,0xc2,0x1a,0x75,0x5d,0x0, 0xd2,0x5, 0xd2,0x6, 0xd2, -+0x7, 0xd2,0x1b,0xc2,0xe, 0xd2,0xf, 0x7e,0x4, 0x0, 0xff,0x7e,0x14,0x21,0x58,0xb, -+0xa, 0x40,0x5d,0x44,0x68,0x1a,0x69,0x20,0x0, 0x2, 0xb, 0xe, 0xb, 0x44,0x80,0xa, -+0x7e,0xb, 0xb0,0x7a,0x29,0xb0,0xb, 0x24,0xb, 0xc, 0x1b,0x44,0x78,0xf2,0x80,0xdf, -+0x2, 0x3f,0xec,0x0, 0x0, 0x0, 0x47,0x0, 0xcb,0x1, 0x0, 0x0, 0x10,0xfd,0xc7,0xfb, -+0x7e,0xfb,0xfb,0x1, 0xbb,0xc, 0x9e,0x19,0x0, 0x21,0x45,0x0, 0xe, 0x1, 0xf, 0x2, -+0x10,0x3, 0x11,0x4, 0x12,0x5, 0x13,0x6, 0x14,0x7, 0x15,0x8, 0x16,0x9, 0x17,0xa, -+0x18,0xb, 0x19,0xc, 0x1a,0xd, 0x1b,0xdf,0x22,0xc3,0x21,0xa9,0x20,0x94,0x1f,0x81, -+0x1e,0x70,0x1d,0x62,0x1c,0x55,0x1b,0x4a,0x1a,0x41,0x19,0x38,0x18,0x31,0x17,0x2b, -+0x16,0x25,0x15,0x21,0x14,0x1c,0x13,0x19,0x12,0x16,0x11,0x13,0x10,0x11,0xf, 0x10, -+0xe, 0xca,0xf8,0x7f,0x20,0x80,0xa, 0x7e,0x1b,0xf0,0x7a,0x2b,0xf0,0xb, 0x34,0xb, -+0x54,0x69,0xff,0xff,0xfc,0x7d,0xef,0x1b,0xe4,0x79,0xef,0xff,0xfc,0x4d,0xff,0x78, -+0xe6,0x7f,0x10,0xda,0xf8,0x22,0x7d,0x43,0x7f,0x10,0x80,0x7, 0x1b,0x44,0x7a,0xb, -+0xb0,0xb, 0x14,0x4d,0x44,0x78,0xf5,0x22,0x32,0x1, 0x19,0x1, 0x0, 0x2, 0xf8,0x4, -+0xe7,0x5, 0xce,0x6, 0xc2,0x7, 0xb5,0x8, 0xff,0x0, 0x1, 0x2, 0x0, 0xff,0x1, 0x2, -+0x0, 0x1, 0xff,0x2, 0x0, 0x1, 0x2, 0xff,0x7d,0x23,0xbe,0x24,0x0, 0x0, 0x48,0x3, -+0x7d,0x32,0x22,0x6d,0x33,0x9d,0x32,0x22,0x0, 0x4, 0x36,0xae,0x0, 0x0, 0x0, 0x0, -+0x0, 0x1, 0x34,0x4f,0x1, 0x0, 0x1, 0x25,0xf6,0x1, 0x0, 0x1, 0x39,0xe3,0x0, 0x0, -+0x2, 0x3a,0x35,0x0, 0x0, 0x0, 0x2, 0x3a,0x37,0x0, 0x0, 0x0, 0x1, 0x3a,0x39,0x0, -+0x0, 0x1, 0x3b,0x5f,0x0, 0x0, 0x1, 0x3b,0x60,0x0, 0x0, 0x2, 0x30,0x19,0x0, 0x0, -+0x0, 0x1, 0x30,0x3c,0x0, 0x0, 0x1, 0x31,0xcd,0x0, 0x0, 0x1, 0x31,0xce,0x0, 0x0, -+0x3c,0x38,0xb1,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x1, 0x38,0x2d,0x1, 0x0, 0x2, 0x38,0x30,0x0, 0x0, 0x0, 0x1, 0x34,0x88,0x0, 0x0, -+0x1, 0x34,0x89,0x0, 0x0, 0x1, 0x34,0x8a,0x0, 0x0, 0x1, 0x38,0x34,0x1, 0x0, 0x1, -+0x38,0xae,0x0, 0x0, 0x1, 0x3b,0x61,0x0, 0x0, 0x6, 0x3b,0x4b,0x3f,0x1f,0x50,0x11, -+0x20,0x10,0x0, 0x1, 0x3b,0x51,0x24,0x0, 0x1, 0x3b,0x58,0x0, 0x0, 0x1, 0x3b,0x59, -+0x0, 0x0, 0x1, 0x3b,0x5a,0x0, 0x0, 0x1, 0x3b,0x5b,0x0, 0x0, 0x1, 0x3b,0x5c,0x0, -+0x0, 0x1, 0x0, 0x5e,0x0, 0x0, 0x1, 0x3, 0xfb,0x0, 0x0, 0x1, 0x31,0xf9,0x0, 0x0, -+0x2, 0x32,0x1a,0x0, 0x0, 0x0, 0x1, 0x32,0x58,0x0, 0x0, 0x4, 0x39,0x88,0x0, 0x0, -+0x0, 0x0, 0x0, 0x1, 0x3b,0x52,0x0, 0x0, 0x1, 0x3b,0x53,0x0, 0x0, 0x2, 0x3b,0x54, -+0x0, 0x0, 0x0, 0x1, 0x3b,0x56,0x64,0x0, 0x1, 0x3b,0x57,0x0, 0x0, 0x1, 0x3b,0x62, -+0x0, 0x0, 0x1, 0x3b,0x5d,0x0, 0x0, 0x1, 0x3b,0x5e,0x0, 0x0, 0x2, 0x2b,0xb9,0x2b, -+0xbf,0x0, 0x1, 0x2f,0x7f,0x2, 0x0, 0x1, 0x2f,0xa8,0x0, 0x0, 0x1, 0x3b,0x36,0x0, -+0x0, 0x1, 0x3a,0x86,0xff,0x0, 0x1, 0x3a,0x87,0x0, 0x0, 0x1, 0x3a,0x88,0x0, 0x0, -+0x1, 0x3a,0x89,0x40,0x0, 0x1, 0x3a,0x8a,0x40,0x0, 0x4, 0x33,0xf8,0x0, 0x0, 0x50, -+0x0, 0x0, 0x4, 0x33,0xfc,0x0, 0x0, 0x64,0x0, 0x0, 0x4, 0x3b,0x8, 0x0, 0x0, 0x6c, -+0x0, 0x0, 0x4, 0x3b,0xc, 0x0, 0x0, 0x68,0xc0,0x0, 0x4, 0x3b,0x10,0x0, 0x0, 0x68, -+0x0, 0x0, 0x4, 0x3b,0x21,0x0, 0x0, 0x40,0x0, 0x0, 0x4, 0x3, 0xfc,0x0, 0x0, 0x60, -+0x0, 0x0, 0x0, 0x3, 0xe8,0x0, 0xc, 0x1, 0xf4,0x3, 0x20,0x0, 0xa, 0x1, 0x4a,0x2, -+0xbc,0x0, 0x9, 0x0, 0xc8,0x1, 0xf4,0x0, 0x6, 0x0, 0x3c,0x1, 0x2c,0x0, 0x6, 0x0, -+0x3c,0x0, 0x64,0x0, 0x6, 0x0, 0x3c,0x0, 0x50,0x0, 0x6, 0x0, 0x0, 0x0, 0xe, 0x1c, -+0x23,0x5, 0xdc,0x0, 0x32,0x3, 0xe8,0x0, 0x28,0x0, 0x0, 0x0, 0x1e,0x12,0x46,0xd1, -+0x12,0x5f,0xa6,0x12,0x23,0x36,0x12,0x28,0x6e,0x12,0x6c,0xe8,0x2, 0x23,0x2f,0x74, -+0x1, 0x7a,0xb3,0x38,0x38,0x22,0x12,0x71,0xc7,0x12,0x23,0x6b,0x2, 0x23,0x3f,0x7e, -+0x34,0x0, 0x3, 0x6d,0x22,0x2, 0x23,0x48,0x7d,0x43,0x7e,0xa3,0x34,0x38,0xbe,0xa0, -+0x5, 0x50,0x16,0x7e,0x70,0x4, 0xac,0x7a,0x59,0x43,0x34,0x3b,0x59,0x23,0x34,0x3d, -+0x7c,0xba,0x4, 0x7a,0xb3,0x34,0x38,0xc3,0x22,0xd3,0x22,0x6d,0x33,0x7e,0x24,0x6, -+0xfc,0x12,0x23,0x48,0x7e,0x34,0x0, 0x1, 0x7e,0x24,0x7, 0x7a,0x2, 0x23,0x48,0x7e, -+0x34,0x60,0xa3,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12,0x68,0x48,0x12,0x71,0x7e,0x12, -+0x46,0xd1,0x12,0x5f,0x9f,0x12,0xc8,0x76,0x12,0x23,0x36,0x12,0x28,0x6e,0x12,0x5f, -+0x93,0x12,0x6c,0xe8,0x2, 0x23,0x2f,0x7e,0x34,0x61,0x4f,0x7e,0x24,0x0, 0xff,0xb, -+0x1a,0x30,0x7a,0x37,0x2a,0x5a,0x7e,0x34,0x61,0x51,0x7e,0x24,0x0, 0xff,0xb, 0x1a, -+0x30,0x7a,0x37,0x2a,0x5c,0x7e,0x34,0x61,0x53,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x30, -+0x22,0x7e,0x34,0x61,0x55,0x12,0x23,0xc9,0x7a,0x37,0x28,0x95,0x7e,0x34,0x61,0xba, -+0x12,0x23,0xc9,0x7a,0x37,0x28,0x99,0x7e,0x34,0x61,0xb8,0x12,0x23,0xc9,0x7a,0x37, -+0x28,0x97,0x7e,0x34,0x62,0x12,0x12,0x23,0xc9,0x7a,0x37,0x28,0x9b,0x7e,0x34,0x61, -+0xbc,0x12,0x23,0xc9,0x7a,0x37,0x28,0x9d,0x7e,0x34,0x61,0xbe,0x12,0x23,0xc9,0x7a, -+0x37,0x28,0x9f,0x7e,0x34,0x61,0xc0,0x12,0x23,0xc9,0x7a,0x37,0x28,0xa1,0x7e,0x34, -+0x61,0xc2,0x12,0x23,0xc9,0x7a,0x37,0x28,0xa3,0x90,0x61,0xc4,0xe4,0x93,0x7a,0xb3, -+0x28,0xa5,0xe4,0x7a,0xb3,0x28,0xa8,0x12,0xb7,0xaa,0x3e,0x34,0x7e,0x8, 0x25,0xf7, -+0xe4,0x2, 0x21,0x16,0x12,0x25,0xf2,0x7e,0xb3,0x38,0x3f,0xb4,0x1, 0x16,0x7e,0x34, -+0x62,0x34,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x5a,0x7e,0x34,0x62,0x36,0x12,0x23,0xc9, -+0x7a,0x37,0x2a,0x5c,0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x37,0x7e,0x34,0x62,0x3e,0x12, -+0x23,0xc9,0x7a,0x37,0x2a,0x5a,0x7e,0x34,0x62,0x40,0x12,0x23,0xc9,0x7a,0x37,0x2a, -+0x5c,0x7e,0x34,0x62,0x42,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x4f,0x7e,0x34,0x62,0x44, -+0x12,0x23,0xc9,0x7a,0x37,0x2a,0x51,0x7e,0x34,0x62,0x46,0x12,0x23,0xc9,0x7a,0x37, -+0x2a,0x53,0x7e,0xb3,0x2a,0x2, 0x70,0x21,0x7e,0x27,0x2a,0x5a,0x7d,0x32,0x7e,0x14, -+0x0, 0x4, 0xad,0x13,0x7d,0x31,0x12,0x25,0x6f,0xbe,0x34,0x0, 0x50,0x28,0x4, 0x7e, -+0x34,0x0, 0x50,0x2d,0x32,0x7a,0x37,0x2a,0x5a,0x22,0x7e,0x54,0x0, 0x54,0x7e,0x44, -+0x0, 0xff,0x69,0x32,0x0, 0x4, 0x69,0x22,0x0, 0x2, 0xb, 0x2a,0x10,0x7a,0x1d,0x26, -+0x7a,0x15,0x24,0x7e,0x34,0x0, 0x20,0x7e,0x8, 0x0, 0x24,0x7e,0x24,0x0, 0x6, 0x12, -+0x69,0x9f,0x7e,0x34,0x61,0x4f,0x12,0x23,0xc9,0x1e,0x34,0x1e,0x34,0x7a,0x73,0x39, -+0x29,0x7e,0x34,0x61,0x51,0x12,0x23,0xc9,0xe, 0x34,0xe, 0x34,0x7a,0x73,0x39,0x2a, -+0x7e,0x34,0x61,0x55,0x12,0x23,0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2b,0x7e,0x34, -+0x61,0x57,0x12,0x23,0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2c,0x7e,0x34,0x61,0x59, -+0x12,0x23,0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2d,0x7e,0x34,0x61,0x5b,0x12,0x23, -+0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2e,0x7e,0x34,0x0, 0x59,0xca,0x39,0x7e,0x34, -+0x61,0x5f,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x39,0x2f,0x12,0x20,0xf1,0x1b,0xfd,0xe5, -+0x25,0x7a,0xb3,0x39,0x5a,0xe5,0x28,0x7a,0xb3,0x39,0x49,0x22,0xb, 0x28,0x30,0x1e, -+0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x22,0x90,0x60,0x99,0xe4,0x93,0x7a,0xb3,0x2a, -+0x4d,0x90,0x60,0x9e,0xe4,0x93,0x7a,0xb3,0x2a,0x4e,0x7e,0x34,0x61,0x55,0x12,0x23, -+0xc9,0x12,0xc8,0xe9,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x51,0x7e,0x14,0x61,0x59,0x12, -+0x5f,0xec,0x7a,0x27,0x2a,0x53,0x7a,0x37,0x2a,0x55,0x90,0x60,0x9d,0xe4,0x93,0x7a, -+0xb3,0x2a,0x59,0x12,0x23,0xa7,0x12,0xc8,0xc1,0x7e,0x34,0x62,0x12,0x12,0x23,0xc9, -+0x7a,0x37,0x2a,0x60,0x90,0x60,0x9f,0xe4,0x93,0x7a,0xb3,0x2a,0x64,0x90,0x60,0xa0, -+0xe4,0x93,0x7a,0xb3,0x2a,0x65,0x7e,0x34,0x60,0xa1,0x12,0x23,0xc9,0x7a,0x37,0x2a, -+0x66,0x7e,0x34,0x61,0x5b,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x62,0xe4,0x7a,0xb3,0x16, -+0x92,0x22,0x12,0x23,0xa7,0x12,0xc8,0xc1,0x7e,0x34,0x61,0x55,0x12,0x23,0xc9,0x12, -+0xc8,0xe9,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x51,0x7e,0x34,0x61,0x59,0x12,0x23,0xc9, -+0x7a,0x37,0x2a,0x53,0x22,0xca,0xf8,0x7e,0xf3,0x39,0xe8,0xbe,0xf0,0x5, 0x78,0xb, -+0x74,0x1, 0x7a,0xb3,0x39,0xe8,0x12,0x0, 0x9, 0x80,0x52,0xbe,0xf0,0x4, 0x78,0x13, -+0x12,0xc8,0x61,0x12,0x23,0xc9,0x12,0x26,0x8a,0xe4,0x7a,0xb3,0x2b,0x2, 0x12,0x84, -+0xd5,0x80,0x3a,0xbe,0xf0,0x6, 0x78,0x19,0x12,0xc8,0x61,0x12,0x23,0xc9,0x12,0x26, -+0x8a,0x12,0x51,0x16,0xe4,0x7a,0xb3,0x2b,0x1e,0x12,0x7d,0xf0,0x12,0xc9,0xd, 0x80, -+0x1c,0xbe,0xf0,0x7, 0x78,0x1d,0x12,0xc8,0x61,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12, -+0x2f,0xe8,0x50,0xfb,0x12,0x7e,0x16,0x12,0x5f,0xaf,0x12,0x28,0x6e,0x74,0x2, 0x7a, -+0xb3,0x39,0xe8,0xda,0xf8,0x22,0x7e,0x34,0x3, 0xe8,0x6d,0x22,0x7a,0x27,0x3b,0x25, -+0x7a,0x37,0x3b,0x27,0x22,0x7e,0xb3,0x39,0x4e,0x14,0x68,0x5d,0x14,0x78,0x2, 0xe1, -+0x36,0x14,0x68,0x6d,0x24,0x3, 0x68,0x2, 0xe1,0x2e,0x12,0xc9,0x55,0x38,0x8, 0x30, -+0x13,0xf, 0x12,0xc9,0x4d,0x68,0xa, 0x12,0x58,0xdc,0xe4,0x7a,0xb3,0x3a,0xcd,0x80, -+0x75,0x7e,0xb3,0x39,0x2f,0x30,0xe0,0x6e,0x7e,0x73,0x39,0x30,0xa, 0x27,0x7e,0x34, -+0x4, 0x0, 0xad,0x32,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0xb, 0x7e,0x34,0x62,0x64,0x12, -+0x23,0xc9,0x2e,0x34,0x4, 0x0, 0xbe,0x37,0x3a,0xcb,0x50,0x4a,0x12,0x58,0xdc,0x12, -+0x5d,0x3e,0xe4,0x7a,0xb3,0x3a,0xcf,0x80,0x3d,0x12,0xc9,0x55,0x28,0x33,0xe4,0x7a, -+0xb3,0x39,0x4e,0x7e,0xb3,0x3a,0xcd,0xb4,0x1, 0x3, 0x12,0x5d,0x3e,0xd2,0x1a,0x80, -+0x20,0x7e,0x34,0x60,0xa5,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12,0x82,0x80,0x12,0x23, -+0x7f,0xe4,0x7a,0xb3,0x39,0x4e,0x7a,0xb3,0x3b,0x57,0xd2,0x1a,0x80,0x8, 0x12,0x5d, -+0x3e,0xe4,0x7a,0xb3,0x3b,0x57,0x12,0x83,0x70,0x2, 0x27,0x3c,0xca,0xd8,0xca,0x79, -+0x7e,0xb3,0x39,0x4e,0xb4,0x1, 0x2, 0x80,0x3, 0x2, 0x28,0x5e,0x6c,0xdd,0x6c,0xff, -+0x12,0x97,0x5c,0x7d,0xf3,0x12,0x2f,0xe8,0x50,0xfb,0x74,0x1, 0x7a,0xb3,0x3a,0xce, -+0x12,0x45,0x6e,0x12,0x13,0xfc,0x12,0x0, 0x1e,0x74,0xa, 0x12,0x4f,0x4a,0x12,0xc8, -+0xb9,0x7e,0xe7,0x2b,0xd, 0x7a,0xe5,0x24,0x7e,0xe3,0x2a,0xfa,0x74,0x4, 0x7a,0xb3, -+0x2a,0xfa,0x7e,0xe7,0x2b,0xd, 0x5e,0xe4,0x0, 0x3f,0x7a,0xe7,0x2b,0xd, 0x7e,0xb3, -+0x2a,0xfa,0x12,0xbf,0x62,0x7c,0x7b,0x74,0x4, 0xac,0x7b,0x7e,0x24,0x0, 0x4, 0x12, -+0x1e,0xee,0x7d,0x23,0x7d,0x3f,0x12,0x25,0x6f,0xad,0x32,0x7a,0x37,0x2b,0x7, 0x12, -+0x56,0xe7,0x12,0x26,0x86,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0x4, 0x74,0x10,0x80,0x2, -+0x74,0xf, 0x12,0x97,0xa8,0x12,0x57,0xbb,0x80,0xf, 0x80,0x7, 0x12,0x82,0xac,0xe4, -+0x12,0x82,0xe4,0x20,0x93,0xf6,0x12,0x83,0x98,0x30,0x1b,0xf7,0x30,0x1a,0xf4,0xd2, -+0x1, 0x12,0x4f,0xae,0xe4,0x12,0x14,0x13,0xb, 0xd0,0x12,0x54,0x8a,0x12,0x97,0xbf, -+0x7e,0xa3,0x3a,0xcd,0x4c,0xaa,0x78,0x6, 0x74,0x1, 0x7a,0xb3,0x3a,0xce,0x4c,0xaa, -+0x68,0xb, 0x7e,0xb3,0x39,0x79,0x70,0x5, 0xe4,0x7a,0xb3,0x3a,0xcd,0x12,0x28,0x63, -+0x78,0x18,0x7e,0xb3,0x3a,0xcd,0x60,0x12,0xe4,0x7a,0xb3,0x3a,0xcd,0x7a,0xb3,0x2a, -+0x2, 0x7a,0xb3,0x2a,0x3, 0x7e,0xf0,0x1, 0x80,0x1d,0x12,0x28,0x63,0x68,0x10,0x7e, -+0xb3,0x3a,0xcd,0x70,0xa, 0x7e,0xf0,0x1, 0xe4,0x7a,0xb3,0x39,0x4e,0x80,0x8, 0xbe, -+0xd0,0x32,0x50,0x3, 0x2, 0x27,0xb2,0xe4,0x7a,0xb3,0x2b,0x4, 0x7e,0x35,0x24,0x7a, -+0x37,0x2b,0xd, 0x7a,0xe3,0x2a,0xfa,0x4c,0xff,0x68,0x3, 0x12,0x28,0x6e,0xda,0x79, -+0xda,0xd8,0x22,0x7e,0x73,0x33,0xf7,0xa, 0x37,0x5e,0x34,0x0, 0x2, 0x22,0xe4,0x7a, -+0xb3,0x34,0x3a,0x7a,0xb3,0x34,0x39,0x12,0x56,0xa2,0xb4,0x1, 0x4, 0x74,0x1, 0x80, -+0x2, 0x74,0x3, 0x7a,0xb3,0x34,0x3a,0x22,0xca,0x3b,0x12,0x2f,0xe8,0x50,0xfb,0x7e, -+0xf3,0x2b,0xf, 0x7c,0xbf,0x12,0xac,0x55,0x12,0xbc,0xe, 0x7e,0xb3,0x2b,0x1f,0xf5, -+0x28,0x7e,0xb3,0x2b,0x20,0xf5,0x29,0x7e,0xb3,0x39,0x50,0xb4,0x1, 0xf, 0x12,0x6c, -+0xa1,0x7e,0xb3,0x16,0x91,0x70,0x6, 0x12,0x28,0x6e,0xc3,0x21,0x92,0x12,0x29,0x95, -+0x3e,0x34,0xca,0x39,0x7e,0x18,0x6, 0xfc,0x7e,0x8, 0x4, 0x7e,0x12,0x20,0xf1,0x1b, -+0xfd,0x12,0x29,0x95,0x3e,0x34,0xca,0x39,0x7e,0x18,0x7, 0x7a,0x7e,0x8, 0x4, 0x0, -+0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xb3,0x39,0x50,0xb4,0x3, 0x7, 0x12,0xa8,0x62,0x7a, -+0x37,0x3a,0x2b,0x74,0x1, 0x7a,0xb3,0x16,0x90,0x12,0x5f,0xa6,0x12,0xa8,0x4e,0x7e, -+0xc3,0x3, 0xfb,0x12,0x6b,0xb9,0xe4,0x12,0x14,0x13,0x12,0x28,0x6e,0x7e,0x8, 0x4, -+0x7e,0x7a,0xd, 0x2a,0x7e,0x18,0x6, 0x76,0x7e,0xb3,0x2b,0x72,0x12,0x85,0x70,0x7e, -+0x8, 0x4, 0x0, 0x7a,0xd, 0x2a,0x7e,0x18,0x5, 0xf8,0x7e,0xb3,0x25,0xf0,0x12,0x85, -+0x70,0x7e,0xd3,0x2b,0x1f,0x7e,0xe3,0x2b,0x20,0xe5,0x28,0x7a,0xb3,0x2b,0x1f,0xe5, -+0x29,0x12,0x7e,0x2a,0x50,0x5, 0x7c,0xbc,0x12,0x6f,0x53,0x7e,0x34,0x8, 0xa, 0x7e, -+0x4, 0xd, 0xc8,0x7d,0x20,0x7d,0x10,0x12,0x7b,0xeb,0x7a,0xd3,0x2b,0x1f,0x7a,0xe3, -+0x2b,0x20,0x7c,0xbf,0x12,0xab,0xf5,0x12,0xa7,0xc8,0x7e,0xb3,0x3b,0x57,0x4, 0x7a, -+0xb3,0x3b,0x57,0x7e,0x73,0x3b,0x57,0xbe,0x70,0xfa,0x28,0x6, 0x74,0x64,0x7a,0xb3, -+0x3b,0x57,0x7e,0xb3,0x16,0x90,0x60,0x9, 0x7e,0xb3,0x16,0x91,0x60,0x3, 0xd3,0x80, -+0x1, 0xc3,0xda,0x3b,0x22,0x7e,0x73,0x2a,0x74,0xa, 0x27,0x7e,0x73,0x2a,0x73,0xa, -+0x37,0x2d,0x32,0x22,0x12,0x50,0x9, 0x7e,0xb3,0x39,0x50,0xb4,0x3, 0x6c,0x12,0xbb, -+0x5a,0x12,0x26,0x86,0x12,0x47,0xc8,0x7e,0xb3,0x39,0xe4,0x30,0xe7,0xe9,0x12,0x28, -+0x88,0x12,0x29,0x95,0x3e,0x34,0xca,0x39,0x7e,0x18,0x4, 0x0, 0x7e,0x8, 0x4, 0xfc, -+0x12,0x20,0xf1,0x1b,0xfd,0x12,0x29,0x95,0x3e,0x34,0xca,0x39,0x7e,0x18,0x4, 0x7e, -+0x7e,0x8, 0x5, 0x7a,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xb3,0x2b,0x1d,0xb4,0x1, 0x18, -+0x12,0x3f,0xb9,0x12,0x79,0xd3,0x12,0x2f,0xf3,0x12,0xa6,0x96,0x12,0x7e,0xc5,0x12, -+0x2f,0x43,0x12,0x2a,0x29,0x12,0x57,0xf8,0x12,0x50,0x42,0x12,0xb3,0x8a,0x7e,0xb3, -+0x39,0xe4,0x54,0x7f,0x7a,0xb3,0x39,0xe4,0x80,0x8d,0x12,0x2f,0xd8,0x2, 0x0, 0x46, -+0x7a,0xb3,0x2b,0x2, 0x7a,0xb3,0x2b,0x1e,0x22,0x12,0x33,0x82,0x12,0x2c,0x1d,0x12, -+0xa4,0x50,0x12,0x2c,0x1d,0x12,0x37,0xbd,0x12,0x38,0x94,0x12,0x2c,0x1d,0x12,0x63, -+0x71,0x12,0x2c,0x1d,0x12,0x2c,0x1d,0x2, 0x2a,0x4a,0xca,0x3b,0x75,0x24,0x0, 0x6c, -+0xcc,0x6c,0xdd,0x7e,0xc4,0x0, 0x3c,0xca,0xc9,0x7e,0x18,0x38,0xed,0x7e,0x8, 0x38, -+0xb1,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xf3,0x28,0x84,0xa, 0xcf,0x3e,0xc4,0xca,0xc9, -+0x7e,0x18,0x26,0xfa,0x7e,0x8, 0x1f,0x34,0x12,0x20,0xf1,0x1b,0xfd,0x6c,0x88,0x6c, -+0xee,0x61,0x1e,0x7e,0xc4,0x3, 0xff,0x7e,0xc0,0xff,0x6c,0x99,0x80,0x4c,0x74,0x2, -+0xac,0xb9,0x9, 0xb5,0x1f,0x34,0xbe,0xb0,0xff,0x68,0x3d,0x7c,0xb9,0x12,0x2d,0xb6, -+0x60,0x36,0x74,0x2, 0xac,0xb9,0x9, 0x75,0x1f,0x35,0xa, 0x27,0x74,0x2, 0xac,0xbe, -+0x9, 0x75,0x38,0xee,0xa, 0x37,0x12,0x8f,0x29,0x74,0x2, 0xac,0xb9,0x9, 0x75,0x1f, -+0x34,0xa, 0x27,0x74,0x2, 0xac,0xbe,0x9, 0x75,0x38,0xed,0x12,0x67,0xb1,0x2d,0x13, -+0xbd,0xc1,0x28,0x4, 0x7d,0xc1,0x7c,0xc9,0xb, 0x90,0xbc,0xf9,0x38,0xb0,0xbe,0xc0, -+0xff,0x68,0x39,0x7e,0x70,0x2, 0xac,0x7c,0x9, 0xb3,0x1f,0x34,0x9, 0x73,0x1f,0x35, -+0x12,0x2c,0x63,0xbe,0x37,0x2a,0x5a,0x48,0x23,0x7e,0x70,0x2, 0xac,0x7c,0x9, 0x53, -+0x1f,0x34,0x74,0x2, 0xac,0xbd,0x19,0x55,0x1f,0x70,0x9, 0x53,0x1f,0x35,0x19,0x55, -+0x1f,0x71,0x74,0xff,0x19,0xb3,0x1f,0x34,0xb, 0x80,0xb, 0xd0,0xb, 0xe0,0x7e,0x73, -+0x38,0xb0,0xbc,0x7e,0x28,0x2, 0x41,0x83,0x7c,0xe8,0x80,0x6d,0x6d,0xdd,0x7e,0x80, -+0xff,0x6c,0x99,0x80,0x3c,0x7c,0xb9,0x12,0x2d,0xb6,0x60,0x33,0x12,0x2f,0xde,0xbe, -+0xb0,0xff,0x68,0x2b,0x9, 0x73,0x1f,0x35,0x12,0x92,0xc0,0x7f,0x71,0xb, 0x7a,0x50, -+0xbe,0x54,0x0, 0x0, 0x58,0x5, 0x6d,0x55,0x1b,0x7a,0x50,0xb, 0x7a,0xc0,0xbd,0xcd, -+0x8, 0xd, 0x12,0x2f,0xde,0xf5,0x24,0x9, 0xc3,0x1f,0x35,0x7d,0xdc,0x7c,0x89,0xb, -+0x90,0xbc,0xf9,0x38,0xc0,0xbe,0x80,0xff,0x68,0x1d,0x7e,0x71,0x24,0x74,0x2, 0xac, -+0xbd,0x19,0x75,0x1f,0x70,0x19,0xc5,0x1f,0x71,0x7e,0xa0,0xff,0x7e,0x70,0x2, 0xac, -+0x78,0x19,0xa3,0x1f,0x34,0xb, 0xd0,0xb, 0xe0,0x90,0x60,0x99,0xe4,0x93,0xbc,0xbe, -+0x38,0x8a,0x90,0x60,0x9a,0xe4,0x93,0x7c,0xab,0x74,0x2, 0xa4,0xca,0x59,0x7e,0x18, -+0x1f,0x70,0x7e,0x8, 0x1f,0x34,0x12,0x20,0xf1,0x1b,0xfd,0x7c,0xfd,0x12,0x8b,0x9c, -+0x7e,0x8, 0x38,0xed,0x74,0xff,0x12,0x21,0x16,0xbe,0xf0,0x0, 0x28,0x35,0xa, 0x3f, -+0x3e,0x34,0xca,0x39,0x7e,0x18,0x1f,0x34,0x7e,0x8, 0x26,0xfa,0x12,0x20,0xf1,0x1b, -+0xfd,0xa, 0x3f,0x3e,0x34,0xca,0x39,0x7e,0x18,0x1f,0x34,0x7e,0x8, 0x38,0xed,0x12, -+0x20,0xf1,0x1b,0xfd,0x6c,0xee,0x80,0x7, 0x7c,0xbe,0x12,0x33,0x1c,0xb, 0xe0,0xbc, -+0xfe,0x38,0xf5,0x7a,0xf3,0x38,0xb0,0x7a,0xf3,0x28,0x84,0x90,0x60,0x99,0xe4,0x93, -+0xbe,0xb3,0x28,0x84,0x50,0x4, 0x7a,0xb3,0x28,0x84,0xda,0x3b,0x22,0xca,0x79,0x6c, -+0xff,0x6c,0xee,0x80,0x2e,0x7c,0xbe,0x12,0x2d,0xb6,0x60,0x25,0x7e,0x34,0x0, 0x2, -+0xca,0x39,0xac,0x7e,0x2e,0x34,0x26,0xfa,0x6d,0x22,0x7e,0x30,0x2, 0xac,0x3f,0x2e, -+0x14,0x26,0xfa,0x6d,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0x7c,0xbf,0x12,0x33,0x1c,0xb, -+0xf0,0xb, 0xe0,0x12,0x3f,0xb2,0x38,0xcd,0x7a,0xf3,0x28,0x84,0xda,0x79,0x22,0x7c, -+0xba,0x7c,0x79,0x12,0x92,0xc0,0xb, 0x1a,0x30,0x22,0xca,0x3b,0x6d,0xee,0x7e,0xc3, -+0x2a,0x6e,0x7e,0xd3,0x2a,0x6d,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0x3, 0xe4,0xa1,0xa0, -+0x7e,0xb3,0x28,0x84,0x70,0x2, 0xa1,0xf, 0x7e,0xb3,0x2a,0x3, 0x60,0x2, 0x80,0x7f, -+0x7e,0xa3,0x26,0xfa,0x7e,0x73,0x26,0xfb,0x7a,0x71,0x24,0x6c,0xee,0x6d,0xff,0x6c, -+0xff,0xa, 0x47,0x80,0x20,0x12,0x2c,0x5f,0xbe,0x34,0x0, 0x96,0x8, 0x1d,0xb, 0xe0, -+0xbe,0xa0,0x0, 0x28,0x6, 0x7c,0xba,0x14,0x12,0x2d,0xa6,0x12,0x2f,0x3a,0x58,0x3, -+0x12,0x2d,0xa3,0x1b,0x44,0xbe,0x44,0x0, 0x0, 0x58,0xda,0xe5,0x24,0xa, 0x4b,0x80, -+0x1e,0x12,0x2c,0x5f,0xbe,0x34,0x0, 0x96,0x8, 0x21,0xb, 0xe0,0xbe,0xa0,0x0, 0x28, -+0x6, 0x7c,0xba,0x14,0x12,0x2d,0xa6,0x12,0x2f,0x3a,0x58,0x3, 0x12,0x2d,0xa3,0x7d, -+0x24,0xb, 0x24,0x7d,0x42,0xa, 0x3c,0xbd,0x23,0x48,0xd6,0xbe,0xe0,0x3, 0x50,0x2, -+0x80,0xd, 0xa, 0x2f,0x7d,0x3f,0x12,0x1e,0xee,0xbe,0x34,0x0, 0x28,0x8, 0x7, 0xe4, -+0x7a,0xb3,0x31,0xcd,0xa1,0xa0,0x6d,0xdd,0xbe,0xa0,0x0, 0x28,0x8, 0x7c,0xba,0x14, -+0x12,0x2d,0xb0,0x2d,0xd3,0xa, 0x3d,0x1b,0x34,0xa, 0xca,0xbd,0xc3,0x58,0x8, 0x7c, -+0xba,0x4, 0x12,0x2d,0xb0,0x2d,0xd3,0x7e,0x70,0x8, 0x80,0x2a,0x7e,0x50,0x2, 0xac, -+0x57,0x7d,0xc2,0x2e,0xc4,0x21,0x28,0x7d,0x1c,0x7a,0x31,0x82,0x7a,0x21,0x83,0xe4, -+0x93,0x1a,0xcb,0xbd,0xcd,0x8, 0xf, 0x7d,0xc2,0x2e,0xc4,0x21,0x29,0x7d,0x2c,0x12, -+0x87,0x7a,0x1a,0xcb,0x2d,0xec,0x7c,0x67,0x1b,0x70,0xa5,0xbe,0x0, 0xce,0x7c,0xba, -+0x12,0x2d,0xb0,0x12,0x21,0x48,0xbe,0x34,0xa, 0xf0,0x8, 0x4, 0x2e,0xe4,0x0, 0x28, -+0xbe,0xe4,0x0, 0xfa,0x28,0x4, 0x7e,0xe4,0x0, 0xfa,0x7e,0xb3,0x31,0xcd,0xa, 0x3b, -+0xbd,0x3e,0x50,0x8, 0x7d,0x3e,0x7c,0xb7,0x7a,0xb3,0x31,0xcd,0x7e,0xb3,0x31,0xcd, -+0xda,0x3b,0x22,0x7c,0xba,0x4, 0x7c,0x79,0x12,0x2c,0x63,0x2d,0xf3,0xb, 0xf0,0x22, -+0x7e,0x71,0x24,0x2, 0x2c,0x63,0x7c,0x7b,0x12,0x31,0xa2,0x9, 0xa2,0x27,0x72,0x7c, -+0xb7,0x54,0x7, 0xa, 0x3b,0x2e,0x34,0x0, 0x5e,0x12,0x97,0xb6,0x5c,0xba,0x22,0xca, -+0x3b,0x7f,0x40,0x7e,0xe3,0x28,0x84,0x6c,0xdd,0x7e,0xc0,0x1, 0x80,0x1a,0xa, 0x3d, -+0x2d,0x39,0x7d,0x28,0x7e,0x1b,0x60,0xa, 0x2c,0x7f,0x4, 0x2d,0x12,0x7e,0xb, 0x70, -+0xbc,0x76,0x40,0x2, 0x7c,0xdc,0xb, 0xc0,0xbc,0xec,0x38,0xe2,0xa, 0x3d,0x2d,0x39, -+0x7d,0x28,0x7e,0x1b,0xd0,0x6c,0xff,0x7e,0xc0,0x1, 0xe1,0x1d,0x75,0x2d,0x0, 0x6d, -+0x33,0x7a,0x35,0x2e,0x7a,0x35,0x25,0x7a,0x35,0x27,0x7e,0x18,0x1f,0x70,0x7a,0x1d, -+0x29,0x74,0xff,0x7e,0x34,0x1f,0x71,0x7e,0x24,0x0, 0x0, 0x7a,0x1b,0xb0,0x7e,0x1d, -+0x29,0x7a,0x1b,0xb0,0xe4,0x7e,0x1d,0x29,0x39,0xb1,0x0, 0x3, 0x7e,0x1d,0x29,0x39, -+0xb1,0x0, 0x2, 0x7e,0x1d,0x29,0x12,0x67,0xba,0x44,0x1, 0x7a,0x1b,0xb0,0x75,0x24, -+0x0, 0x80,0x6c,0x12,0xb7,0xcd,0x9, 0x93,0x26,0xfb,0xe5,0x24,0x12,0xc8,0x8a,0xbc, -+0xbc,0x78,0x5a,0x5, 0x2d,0xa, 0x3a,0x2e,0x35,0x25,0x7a,0x35,0x25,0xa, 0x39,0x2e, -+0x35,0x27,0x7a,0x35,0x27,0x12,0x2c,0x5f,0xbe,0x35,0x2e,0x8, 0x6, 0x12,0x2c,0x5f, -+0x7a,0x35,0x2e,0x7e,0x1d,0x29,0x7e,0x1b,0xb0,0xbc,0xba,0x28,0x3, 0x7a,0x1b,0xa0, -+0x7e,0x1d,0x29,0x29,0xb1,0x0, 0x2, 0xbc,0xba,0x50,0x4, 0x39,0xa1,0x0, 0x2, 0x7e, -+0x1d,0x29,0x29,0xb1,0x0, 0x1, 0xbc,0xb9,0x28,0x4, 0x39,0x91,0x0, 0x1, 0x7e,0x1d, -+0x29,0x29,0xb1,0x0, 0x3, 0xbc,0xb9,0x50,0x4, 0x39,0x91,0x0, 0x3, 0x5, 0x24,0xbe, -+0xe1,0x24,0x38,0x8f,0xe5,0x2d,0xbe,0xb0,0x0, 0x28,0x50,0x7e,0xd, 0x29,0x12,0x65, -+0xe4,0xe5,0x2d,0xa, 0x2b,0x7e,0x15,0x25,0x8d,0x12,0x7a,0x15,0x25,0x7e,0x35,0x27, -+0x8d,0x32,0x7a,0x35,0x27,0x7e,0x55,0x25,0x12,0x2f,0x32,0x19,0xa3,0x32,0x1c,0x7e, -+0x55,0x27,0x12,0x2f,0x32,0x19,0xa3,0x32,0x1d,0x7e,0x37,0x32,0x1a,0x4d,0x33,0x68, -+0x18,0x7e,0x55,0x25,0x7e,0x35,0x27,0x12,0x2c,0x63,0x7e,0x25,0x2e,0x7e,0x70,0x2, -+0xac,0x7f,0x2e,0x37,0x32,0x1a,0x1b,0x38,0x20,0xb, 0xf0,0xb, 0xc0,0xbc,0xdc,0x40, -+0x2, 0xc1,0xc, 0x12,0x64,0xb4,0x7c,0xbf,0xda,0x3b,0x22,0x7c,0xb8,0x7c,0x79,0x2, -+0x2c,0x63,0x7c,0xab,0x7e,0x70,0x2, 0xac,0x7f,0x22,0xa, 0x2d,0x1b,0x24,0xa, 0x3a, -+0xbd,0x32,0x22,0x12,0x95,0x8b,0x12,0x2c,0x6a,0x7a,0xb3,0x2a,0xc, 0x22,0x12,0x5f, -+0x80,0x12,0x88,0xc, 0x7e,0xb3,0x39,0x50,0xb4,0x1, 0x6b,0x12,0xbb,0x5a,0x7e,0x34, -+0x60,0xa5,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12,0x97,0x63,0x12,0x8a,0xb6,0x12,0x28, -+0x88,0x50,0xde,0x12,0x3f,0xb9,0x12,0x79,0xd3,0x7e,0xb3,0x39,0x4d,0xb4,0x1, 0x4, -+0xe4,0x12,0x4e,0xbe,0x12,0x2f,0xf3,0x12,0xa6,0x96,0x12,0x62,0xbb,0x40,0xc2,0x12, -+0x7e,0xc5,0x12,0x62,0xbb,0x40,0xba,0x12,0x2f,0x43,0x12,0x2a,0x29,0x12,0x0, 0x66, -+0x12,0x96,0x89,0x12,0x99,0x1, 0x12,0x72,0x2f,0x12,0x8c,0x3b,0x12,0x8f,0x54,0x12, -+0x99,0x9c,0x12,0x76,0xd7,0x12,0xc1,0x6, 0x12,0x4c,0x5e,0x12,0x62,0xa5,0x12,0x26, -+0x95,0x12,0x58,0x82,0x80,0x8b,0x12,0x2f,0xd8,0x2, 0x2f,0xcc,0x7e,0xb3,0x39,0x4d, -+0xb4,0x1, 0x4, 0xe4,0x2, 0x4e,0xbe,0x22,0x12,0x2f,0xe8,0x50,0xfb,0x22,0x7e,0x70, -+0x2, 0xac,0x79,0x9, 0xb3,0x1f,0x34,0x22,0x7e,0xb3,0x34,0x3a,0xb4,0x1, 0x2, 0xc3, -+0x22,0xd3,0x22,0x12,0x24,0x44,0xe4,0x7a,0xb3,0x3b,0x5d,0x2, 0x2f,0xfe,0xe4,0x7a, -+0xb3,0x28,0x93,0x12,0x31,0xdd,0x7e,0xb3,0x16,0x91,0xb4,0x1, 0x8, 0x7e,0x73,0x28, -+0x84,0x7a,0x73,0x28,0x92,0x7e,0x18,0x4, 0xfc,0x7a,0x1f,0x6, 0xf8,0x12,0xc8,0x81, -+0x12,0x30,0x46,0x12,0x78,0x2d,0x7e,0xb3,0x16,0x90,0xb4,0x1, 0x18,0x7e,0x73,0x26, -+0x83,0x7a,0x73,0x26,0xf3,0x7e,0x73,0x26,0x85,0x7a,0x73,0x26,0xf5,0x7e,0x73,0x26, -+0x84,0x7a,0x73,0x26,0xf4,0x22,0x7e,0x8, 0x26,0x86,0x7e,0x34,0x0, 0x3, 0xe4,0x12, -+0x21,0x16,0x7e,0x8, 0x26,0x89,0x7e,0x34,0x0, 0x3, 0x12,0x21,0x16,0x7a,0xb3,0x26, -+0x83,0x7a,0xb3,0x26,0x84,0x7a,0xb3,0x26,0x85,0x7a,0xb3,0x26,0xf0,0x7a,0xb3,0x26, -+0xf1,0x7a,0xb3,0x26,0xf2,0x7e,0x18,0x26,0x6f,0x12,0x31,0xb4,0x6c,0x55,0x12,0x31, -+0xc, 0x7a,0xb3,0x26,0x85,0x7e,0x18,0x26,0x5b,0x12,0x31,0xc4,0x6c,0x55,0x12,0x31, -+0xc, 0x7a,0xb3,0x26,0x84,0x6c,0x77,0x80,0x14,0x12,0x31,0x95,0x60,0x5, 0x3e,0x24, -+0x14,0x78,0xfb,0x12,0x31,0x9e,0x2e,0x24,0x26,0x86,0x12,0x31,0xa9,0x7e,0x63,0x26, -+0x84,0xbc,0x67,0x38,0xe4,0x6c,0x77,0x80,0x14,0x12,0x31,0x95,0x60,0x5, 0x3e,0x24, -+0x14,0x78,0xfb,0x12,0x31,0x9e,0x2e,0x24,0x26,0x89,0x12,0x31,0xa9,0x7e,0xa3,0x26, -+0x85,0xbc,0xa7,0x38,0xe4,0x7e,0xb3,0x26,0x84,0xa4,0x7a,0xb3,0x26,0x83,0x7e,0x18, -+0x26,0xe6,0x12,0x31,0xb4,0x7e,0x50,0x1, 0x12,0x31,0xc, 0x7a,0xb3,0x26,0xf2,0x7e, -+0x18,0x26,0xdc,0x12,0x31,0xc4,0x7e,0x50,0x1, 0x12,0x31,0xc, 0x7c,0xab,0x7a,0xa3, -+0x26,0xf1,0x7e,0xb3,0x26,0xf2,0xa4,0x7a,0xb3,0x26,0xf0,0x22,0xca,0x69,0xca,0xf8, -+0x7c,0x4b,0x6c,0xaa,0x6d,0xff,0x6c,0xff,0x80,0x70,0x7e,0xd0,0x2, 0xac,0xdf,0x7f, -+0x60,0x2d,0xd6,0xb, 0x6a,0xe0,0x4c,0x55,0x68,0x6, 0x6e,0xe4,0xff,0xff,0xb, 0xe4, -+0xbd,0x3e,0x58,0x54,0x4c,0xff,0x78,0x8, 0x6d,0x44,0x69,0xf0,0x0, 0x2, 0x80,0x1b, -+0x7c,0xb4,0x14,0xbc,0xbf,0x7f,0x56,0x78,0x9, 0x1b,0xb5,0xb, 0x5a,0x40,0x6d,0xff, -+0x80,0x9, 0x1b,0xb5,0xb, 0x5a,0x40,0x69,0xf6,0x0, 0x2, 0x4c,0x55,0x68,0xc, 0x6e, -+0x44,0xff,0xff,0xb, 0x44,0x6e,0xf4,0xff,0xff,0xb, 0xf4,0xbd,0x4e,0x58,0x19,0xbd, -+0xfe,0x18,0x15,0xa, 0xba,0x7e,0x6d,0x24,0x2d,0xdb,0x7a,0x6b,0xf0,0xb, 0xa0,0x90, -+0x60,0x9b,0xe4,0x93,0xbc,0xba,0x28,0x6, 0xb, 0xf0,0xbc,0x4f,0x38,0x8c,0x7c,0xba, -+0xda,0xf8,0xda,0x69,0x22,0x7c,0xb7,0x54,0x7, 0x7e,0x24,0x0, 0x1, 0x22,0x7c,0xa5, -+0x7c,0xb7,0xc4,0x23,0x54,0x1f,0xa, 0x2b,0x22,0x7e,0x29,0x60,0x4c,0x6a,0x7a,0x29, -+0x60,0xb, 0x70,0x22,0x7a,0x1d,0x24,0x7e,0xf, 0x6, 0xf8,0x7e,0xb3,0x2a,0x6e,0x7e, -+0x37,0x2a,0x53,0x22,0x7a,0x1d,0x24,0x7e,0xa3,0x2a,0x6e,0x74,0x2, 0xa4,0x7e,0xf, -+0x6, 0xf8,0x2d,0x15,0x7e,0xb3,0x2a,0x6d,0x7e,0x37,0x2a,0x51,0x22,0x6c,0x33,0x80, -+0x9, 0xe4,0xa, 0x33,0x19,0xb3,0x27,0x72,0xb, 0x30,0x90,0x60,0x9a,0xe4,0x93,0x12, -+0x31,0xa2,0xb, 0x24,0xa, 0x33,0xbd,0x32,0x48,0xe7,0xe4,0x7a,0xb3,0x28,0x84,0x7a, -+0xb3,0x28,0x85,0x6d,0x33,0x7a,0x37,0x28,0x86,0x7a,0x37,0x28,0x88,0x7a,0x37,0x28, -+0x8a,0x7a,0x37,0x28,0x8e,0x7e,0xd4,0x1f,0x36,0x5e,0xd4,0xff,0xfe,0x6d,0xcc,0x7e, -+0x1f,0x13,0x8a,0x7a,0x37,0x1f,0x76,0x7d,0x3d,0x7a,0x37,0x1f,0x7a,0x7e,0x34,0x15, -+0x9e,0x7a,0x37,0x1f,0x78,0x7e,0x73,0x2a,0x6d,0x7a,0x73,0x1f,0x73,0x7e,0x73,0x2a, -+0x6e,0x7a,0x73,0x1f,0x72,0x7e,0x37,0x2a,0x5c,0x7a,0x37,0x1f,0x7c,0x7e,0x37,0x2a, -+0x5e,0x7a,0x37,0x1f,0x7e,0x7e,0x37,0x2a,0x60,0x7a,0x37,0x1f,0x80,0x90,0x60,0x9a, -+0x93,0x7a,0xb3,0x1f,0x74,0x7e,0x73,0x3b,0x5e,0x7a,0x73,0x1f,0x75,0x7e,0x8, 0x1f, -+0x72,0x7e,0x18,0x1f,0x82,0x12,0x8, 0x0, 0x7e,0x73,0x1f,0x82,0x7a,0x73,0x28,0x84, -+0x7e,0x73,0x1f,0x83,0x7a,0x73,0x28,0x85,0x7e,0x37,0x1f,0x84,0x7a,0x37,0x28,0x86, -+0x7e,0x37,0x1f,0x86,0x7a,0x37,0x28,0x88,0x7e,0x37,0x1f,0x8c,0x7a,0x37,0x28,0x8a, -+0x7e,0x37,0x1f,0x8e,0x7d,0x23,0x7a,0x53,0x28,0x8c,0xa, 0x36,0x7a,0x73,0x28,0x8d, -+0x7e,0x37,0x1f,0x88,0x7a,0x37,0x28,0x8e,0x7e,0x37,0x1f,0x8a,0x7d,0x23,0x7a,0x53, -+0x28,0x90,0xa, 0x36,0x7a,0x73,0x28,0x91,0x6c,0x33,0x80,0x20,0x7c,0xb3,0x7e,0x70, -+0x1, 0x12,0x33,0x1f,0x74,0x2, 0xac,0xb3,0x49,0x45,0x15,0x9e,0xa, 0x38,0x7c,0x27, -+0x19,0x25,0x26,0xfa,0x7c,0x29,0x19,0x25,0x26,0xfb,0xb, 0x30,0x7e,0x23,0x28,0x84, -+0xbc,0x23,0x38,0xd8,0x6c,0x33,0x80,0x1b,0x74,0x2, 0xac,0xb3,0x7f,0x16,0x2d,0x35, -+0xb, 0x1a,0x40,0xa, 0x38,0x7c,0x27,0x19,0x25,0x27,0x36,0x7c,0x29,0x19,0x25,0x27, -+0x37,0xb, 0x30,0x7e,0x23,0x28,0x85,0xbc,0x23,0x38,0xdd,0x22,0x7e,0x70,0x1, 0x7c, -+0x67,0x7c,0x7b,0xc4,0x23,0x54,0x1f,0x7c,0xab,0x7c,0xb7,0x54,0x7, 0xa, 0x2b,0x2e, -+0x24,0x0, 0x5e,0x12,0x87,0x7a,0x7c,0x7b,0x4c,0x66,0x68,0xf, 0xa, 0x2a,0x2e,0x24, -+0x27,0x72,0x7e,0x29,0xb0,0x4c,0xb7,0x7a,0x29,0xb0,0x22,0x7c,0xb7,0x64,0xff,0xa, -+0x2a,0x2e,0x24,0x27,0x72,0x7e,0x29,0x70,0x5c,0x7b,0x7a,0x29,0x70,0x22,0x7c,0xab, -+0x7e,0xb3,0x3b,0x5b,0x70,0x1b,0x7e,0xb3,0x28,0xa8,0x70,0x15,0x12,0xc9,0x4d,0x68, -+0x10,0x7e,0xb3,0x2a,0x6b,0xbe,0xb0,0x1, 0x68,0x7, 0x7c,0xba,0x6c,0x77,0x2, 0x33, -+0x1f,0x22,0xca,0xd8,0xca,0x79,0xc2,0x0, 0x6d,0x88,0x7a,0x87,0x3a,0x84,0xe4,0x7a, -+0xb3,0x1f,0x58,0xe5,0x5a,0xbe,0xb0,0xff,0x50,0x2, 0x5, 0x5a,0x7e,0xb3,0x28,0x84, -+0x60,0xc, 0x12,0x9d,0xd6,0xb, 0x1a,0x80,0xbe,0x87,0x7, 0xfa,0x28,0xa, 0xc2,0x13, -+0x6d,0x88,0x7a,0x87,0x3a,0x45,0x81,0xb3,0x12,0x98,0x44,0x60,0x12,0x7e,0x34,0x62, -+0xe, 0x12,0xc9,0x16,0x7a,0x87,0x3a,0x3b,0x12,0x35,0x1d,0x7a,0x87,0x3a,0x45,0x7e, -+0x87,0x3a,0x3b,0x4d,0x88,0x68,0x6, 0x74,0x1, 0x7a,0xb3,0x28,0xa9,0x6c,0xff,0x80, -+0x77,0xe4,0xa, 0x3f,0x19,0xb3,0x1f,0x34,0x12,0x35,0x37,0x7e,0x8, 0x1f,0x52,0x7c, -+0xbd,0x7c,0x7e,0x12,0x35,0x8a,0x7d,0x93,0x7e,0x87,0x3a,0x45,0xbd,0x89,0x50,0x4, -+0x7a,0x97,0x3a,0x45,0x7e,0x87,0x3a,0x84,0xbd,0x89,0x50,0x4, 0x7a,0x97,0x3a,0x84, -+0xe5,0x5a,0xbe,0xb0,0x5, 0x38,0x1f,0x7e,0x8, 0x3a,0x47,0x12,0x35,0x44,0x50,0x7, -+0x12,0x35,0x2e,0xd2,0x0, 0x80,0x2f,0x7e,0x8, 0x3a,0x47,0x7e,0x18,0x1f,0x52,0x12, -+0x98,0x96,0x50,0x22,0x80,0x10,0x12,0x35,0x1d,0xbd,0x89,0x38,0x19,0x7e,0x8, 0x1f, -+0x52,0x12,0x97,0xcf,0x50,0x10,0x12,0x35,0x2e,0x7e,0x8, 0x1f,0x58,0x7e,0x18,0x1f, -+0x52,0x12,0x98,0x1e,0xd2,0x0, 0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0x81, -+0x30,0x0, 0x36,0x6c,0xff,0x80,0x1c,0x12,0x35,0x37,0x7e,0x8, 0x1f,0x58,0x12,0x35, -+0x44,0x40,0x9, 0xa, 0x3f,0x9, 0xb3,0x1f,0x34,0xb4,0x1, 0x5, 0x7c,0xbf,0x12,0x33, -+0x5e,0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xdc,0x75,0x5a,0x0, 0x7e,0x34, -+0x62,0xe, 0x12,0x23,0xc9,0x7a,0x37,0x3a,0x3b,0x7e,0x63,0x1f,0x58,0x7e,0x70,0x6, -+0xac,0x67,0xb, 0x34,0xca,0x39,0x7e,0x18,0x1f,0x58,0x7e,0x8, 0x3a,0x47,0x12,0x20, -+0xf1,0x1b,0xfd,0x7e,0x37,0x3a,0x3b,0x4d,0x33,0x78,0x39,0x90,0x62,0x9, 0xe4,0x93, -+0xa, 0x3b,0xbe,0x37,0x3a,0x45,0x38,0x43,0x7c,0x7b,0x1e,0x70,0xa, 0x37,0xbe,0x37, -+0x3a,0x84,0x38,0x37,0x90,0x60,0x51,0x12,0x35,0x25,0x7e,0x73,0x26,0xf7,0xa, 0x37, -+0xbd,0x32,0x8, 0x27,0x90,0x60,0x50,0x12,0x35,0x25,0x7e,0x73,0x26,0xf6,0xa, 0x37, -+0xbd,0x32,0x8, 0x17,0x6c,0xff,0x80,0x7, 0x7c,0xbf,0x12,0x33,0x5e,0xb, 0xf0,0x7e, -+0x73,0x28,0x84,0xbc,0x7f,0x38,0xf1,0xd2,0x0, 0x80,0x6, 0x6d,0x33,0x7a,0x37,0x3a, -+0x45,0xa2,0x0, 0x92,0x13,0x12,0x36,0xc2,0xda,0x79,0xda,0xd8,0x22,0x90,0x62,0x9, -+0xe4,0x93,0xa, 0x8b,0x22,0xe4,0x93,0x7c,0x7b,0x1e,0x70,0xa, 0x27,0x22,0x74,0x1, -+0xa, 0x8f,0x19,0xb8,0x1f,0x34,0x22,0x74,0x2, 0xac,0xbf,0x9, 0xd5,0x26,0xfa,0x9, -+0xe5,0x26,0xfb,0x22,0x7c,0xbd,0x7c,0x7e,0x7c,0x6b,0xc2,0x1, 0x6c,0xaa,0x80,0x30, -+0x7e,0x50,0x6, 0xac,0x5a,0x7f,0x70,0x2d,0xf2,0xb, 0xf4,0x29,0xb7,0x0, 0x2, 0xbc, -+0xb6,0x40,0x1b,0x7e,0x7b,0xb0,0xbc,0xb6,0x38,0x14,0x29,0xb7,0x0, 0x3, 0xbc,0xb7, -+0x40,0xc, 0x29,0xb7,0x0, 0x1, 0xbc,0xb7,0x38,0x4, 0xd2,0x1, 0x80,0x9, 0xb, 0xa0, -+0x7e,0xb, 0xb0,0xbc,0xba,0x38,0xc9,0xa2,0x1, 0x22,0xca,0x3b,0x7c,0xc7,0x7c,0xfb, -+0x7f,0x40,0x6d,0x33,0x7a,0x35,0x24,0x7e,0xa3,0x2a,0x6d,0x7e,0x73,0x2a,0x6e,0x4c, -+0xcc,0x78,0x5, 0x7e,0xc0,0x1, 0x80,0xd, 0x7c,0xb7,0x14,0xbc,0xbc,0x78,0x6, 0xa, -+0x6c,0x1b,0x65,0x7c,0xcd,0x4c,0xff,0x78,0x5, 0x7e,0xf0,0x1, 0x80,0xb, 0x7c,0xba, -+0x14,0xbc,0xbf,0x78,0x4, 0xa, 0x7f,0x1b,0x75,0x7f,0x4, 0x7e,0x34,0x0, 0x6, 0xe4, -+0x12,0x21,0x16,0x7e,0x73,0x2a,0x6d,0xa, 0x37,0x1b,0x34,0x7a,0x4b,0x70,0x7e,0x73, -+0x2a,0x6e,0xa, 0x37,0x1b,0x34,0x39,0x74,0x0, 0x1, 0x7c,0xec,0x80,0x1f,0x75,0x26, -+0x0, 0x7c,0xdf,0x80,0xd, 0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xa, 0x12,0x36,0xb7, -+0x1b,0xd0,0xbe,0xd0,0x0, 0x58,0xee,0xe5,0x26,0x60,0x7, 0x1b,0xe0,0xbe,0xe0,0x0, -+0x58,0xdc,0x7c,0xec,0x80,0x26,0x75,0x26,0x0, 0x1a,0x3f,0xb, 0x34,0x7c,0xd7,0x80, -+0xd, 0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xd, 0x12,0x36,0xb7,0xb, 0xd0,0x7e,0x73, -+0x2a,0x6d,0xbc,0x7d,0x18,0xeb,0xe5,0x26,0x60,0x7, 0x1b,0xe0,0xbe,0xe0,0x0, 0x58, -+0xd5,0x1a,0x3c,0xb, 0x34,0x7c,0xe7,0x80,0x1f,0x75,0x26,0x0, 0x7c,0xdf,0x80,0xd, -+0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xa, 0x12,0x36,0xb7,0x1b,0xd0,0xbe,0xd0,0x0, -+0x58,0xee,0xe5,0x26,0x60,0xa, 0xb, 0xe0,0x7e,0x73,0x2a,0x6e,0xbc,0x7e,0x18,0xd9, -+0x1a,0x3c,0xb, 0x34,0x7c,0xe7,0x80,0x24,0x75,0x26,0x0, 0x1a,0x6f,0xb, 0x64,0x80, -+0xd, 0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xd, 0x12,0x36,0xb7,0xb, 0xd0,0x7e,0x73, -+0x2a,0x6d,0xbc,0x7d,0x18,0xeb,0xe5,0x26,0x60,0xa, 0xb, 0xe0,0x7e,0x73,0x2a,0x6e, -+0xbc,0x7e,0x18,0xd4,0x7e,0x35,0x24,0x7d,0x23,0x39,0x54,0x0, 0x5, 0xda,0x3b,0x22, -+0x7c,0xbd,0x7c,0x7e,0x7f,0x4, 0x22,0x5, 0x26,0x7e,0x35,0x24,0xb, 0x34,0x7a,0x35, -+0x24,0x22,0x30,0x13,0x13,0x12,0x9f,0x4a,0x68,0x6, 0x7e,0xb3,0x3b,0x5b,0x60,0x8, -+0x7e,0x34,0xb, 0xb8,0x7a,0x37,0x3a,0x43,0x22,0xca,0xf8,0x6c,0xff,0x80,0x17,0x7c, -+0xbf,0x12,0x38,0x82,0xbe,0x37,0x2a,0x5c,0x58,0xa, 0x7c,0xbf,0x12,0x37,0x4, 0xac, -+0x7f,0x12,0x9f,0x67,0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xe1,0x12,0x2c, -+0x1d,0xda,0xf8,0x22,0x6c,0x77,0x12,0x33,0x1f,0x7e,0x70,0x2, 0x22,0xca,0xd8,0xca, -+0x79,0x7e,0x34,0x62,0x27,0x12,0x37,0xb5,0x12,0xa5,0xf8,0x50,0x2, 0xe1,0xb0,0x7e, -+0x34,0x62,0x2b,0x12,0x23,0xc9,0x7a,0x35,0x2a,0x90,0x62,0x26,0xe4,0x93,0x70,0x2, -+0xe1,0xb0,0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x7, 0x7e,0x34,0x62,0x29,0x12,0x37,0xb5, -+0x7e,0x37,0x28,0x8a,0xbe,0x34,0x4, 0x4c,0x8, 0x66,0x6c,0xdd,0x80,0x5a,0xc2,0x0, -+0x7c,0xbd,0x12,0x38,0x82,0x7a,0x35,0x26,0x7c,0xbd,0x7e,0x70,0x1, 0x12,0xa4,0xe3, -+0x7a,0x35,0x24,0x9e,0x35,0x26,0x7a,0x35,0x24,0x7e,0x35,0x26,0x3e,0x34,0x3e,0x34, -+0x12,0x9f,0x33,0x7a,0x35,0x28,0xbe,0x75,0x28,0x58,0x3, 0x7a,0x75,0x28,0x7e,0x35, -+0x28,0xbe,0x35,0x24,0x8, 0xa, 0x7e,0x35,0x2a,0xbe,0x35,0x26,0x8, 0x2, 0xd2,0x0, -+0x7c,0xbd,0x12,0xb9,0x97,0x50,0x2, 0xc2,0x0, 0x30,0x0, 0xa, 0x7c,0xbd,0x12,0x37, -+0x4, 0xac,0x7d,0x12,0x9f,0x67,0xb, 0xd0,0x7e,0x73,0x28,0x84,0xbc,0x7d,0x38,0x9e, -+0xda,0x79,0xda,0xd8,0x22,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x70,0x22,0x12,0xa5,0xe1, -+0x12,0x62,0xdb,0x12,0x9e,0x4d,0x12,0x37,0xd, 0x2, 0x37,0xcc,0xca,0x3b,0x12,0x2c, -+0x1d,0x7e,0xb3,0x28,0x84,0x60,0x6, 0x7e,0xb3,0x38,0x2d,0x60,0x9, 0xe4,0x7a,0xb3, -+0x38,0x2f,0x7a,0xb3,0x37,0xb4,0x7e,0xb3,0x38,0x2d,0x70,0x6b,0x6c,0x99,0x80,0x5f, -+0x74,0x2, 0xac,0xb9,0x9, 0x85,0x26,0xfa,0x9, 0xf5,0x26,0xfb,0x7c,0xb9,0x12,0xb9, -+0x97,0x40,0x4a,0x6c,0xee,0x80,0x3e,0x74,0x2, 0xac,0xbe,0x9, 0xd5,0x37,0xb5,0x9, -+0xc5,0x37,0xb6,0xa, 0x28,0xa, 0x3d,0x12,0x38,0x7a,0x78,0x27,0xa, 0x2f,0xa, 0x3c, -+0x12,0x38,0x7a,0x78,0x1e,0x7c,0xb9,0x12,0x38,0x82,0x7e,0x14,0x62,0x2b,0x12,0x5f, -+0xec,0xbd,0x32,0x58,0xe, 0x7c,0xb9,0x6c,0x77,0x12,0x33,0x1f,0x7c,0xb8,0x7c,0x7f, -+0x12,0x9f,0x6f,0xb, 0xe0,0x7e,0x73,0x38,0x2f,0xbc,0x7e,0x38,0xba,0xb, 0x90,0x7e, -+0x73,0x28,0x84,0xbc,0x79,0x38,0x99,0x7e,0x73,0x37,0xb4,0x7a,0x73,0x38,0x2f,0xa, -+0x37,0x3e,0x34,0xca,0x39,0x7e,0x18,0x37,0xf1,0x7e,0x8, 0x37,0xb5,0x12,0x20,0xf1, -+0x1b,0xfd,0xe4,0x7a,0xb3,0x38,0x2d,0xda,0x3b,0x22,0x9d,0x32,0x12,0x21,0x48,0x4d, -+0x33,0x22,0x7c,0xab,0x7e,0x70,0x2, 0xac,0x7a,0x9, 0xb3,0x26,0xfa,0x9, 0x73,0x26, -+0xfb,0x2, 0x2c,0x63,0xca,0x79,0x6c,0x88,0x80,0x70,0x74,0x2, 0xac,0xb8,0x9, 0xf5, -+0x26,0xfa,0x9, 0x75,0x26,0xfb,0x7a,0x71,0x24,0x7c,0xbf,0x12,0x3f,0x59,0x50,0x58, -+0x6c,0xee,0x80,0x4f,0xbc,0xe8,0x68,0x49,0x7e,0x70,0x2, 0xac,0x7e,0x12,0x9f,0x5a, -+0x6c,0x99,0x90,0x60,0xaa,0xe4,0x93,0x70,0x18,0x7e,0xb3,0x2a,0x70,0x14,0xbe,0xb1, -+0x26,0x78,0xe, 0xa, 0x2f,0x12,0x3c,0xd, 0xbe,0x34,0x0, 0x1, 0x18,0x3, 0x7e,0x90, -+0x1, 0xbe,0x90,0x1, 0x78,0x1b,0x7c,0xbe,0x12,0x38,0x82,0x7d,0xf3,0x7c,0xb8,0x12, -+0x38,0x82,0xbd,0x3f,0x8, 0x4, 0x7c,0xbe,0x80,0x2, 0x7c,0xb8,0x6c,0x77,0x12,0x33, -+0x1f,0xb, 0xe0,0x12,0x3f,0xb2,0x38,0xac,0xb, 0x80,0x7e,0x73,0x28,0x84,0xbc,0x78, -+0x38,0x88,0xda,0x79,0x22,0xca,0xd8,0xca,0x79,0x7e,0xa3,0x2a,0x6e,0x7e,0x47,0x28, -+0x99,0xe4,0x7a,0xb3,0x28,0xa6,0x7e,0xb3,0x26,0xf0,0xbe,0xb0,0x0, 0x28,0x4c,0x7e, -+0x73,0x28,0x85,0xbe,0x70,0x0, 0x28,0x43,0x6c,0xff,0x80,0x3b,0x7e,0x50,0x2, 0xac, -+0x5f,0x9, 0xd2,0x27,0x36,0x9, 0xe2,0x27,0x37,0x7e,0x50,0x2, 0xac,0x5e,0x49,0x12, -+0x4, 0xfc,0x6d,0x22,0x9e,0x27,0x2a,0x53,0xbd,0x12,0x58,0x19,0x12,0x3a,0x37,0x49, -+0x12,0x4, 0xfc,0x6d,0x22,0x9e,0x27,0x2a,0x51,0xbd,0x12,0x58,0x8, 0x74,0x1, 0x7a, -+0xb3,0x28,0xa6,0x80,0x6, 0xb, 0xf0,0xbc,0x7f,0x38,0xc1,0xe4,0x7a,0xb3,0x28,0xa7, -+0x7e,0xb3,0x26,0x83,0x70,0x40,0x12,0x9f,0x42,0x28,0x3b,0x6c,0xff,0x80,0x33,0x7e, -+0x50,0x2, 0xac,0x5f,0x9, 0xd2,0x26,0xfa,0x9, 0xe2,0x26,0xfb,0x12,0x3a,0x37,0x49, -+0x2, 0x5, 0x7a,0x6d,0x11,0x9d,0x14,0xbd,0x1, 0x48,0xd, 0x7e,0x10,0x2, 0xac,0x1e, -+0x49,0x20,0x5, 0x7a,0xbd,0x21,0x58,0x8, 0x74,0x1, 0x7a,0xb3,0x28,0xa7,0x80,0x6, -+0xb, 0xf0,0xbc,0x7f,0x38,0xc9,0x12,0x3a,0x40,0xe4,0x7a,0xb3,0x28,0xa9,0x7e,0x37, -+0x28,0x88,0x2e,0x37,0x28,0x86,0xbe,0x37,0x28,0x9f,0x28,0x6, 0x74,0x1, 0x7a,0xb3, -+0x28,0xa9,0x74,0x1, 0x7a,0xb3,0x28,0xaa,0x6c,0xff,0x80,0x1f,0x12,0x3a,0x2d,0x49, -+0x25,0x25,0xf7,0x7d,0x43,0x9d,0x42,0x7d,0x34,0x12,0x21,0x48,0xbe,0x37,0x28,0x9d, -+0x8, 0x7, 0xe4,0x7a,0xb3,0x28,0xaa,0x80,0xa, 0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc, -+0x7f,0x38,0xd9,0x6c,0xff,0x80,0x9, 0x12,0x3a,0x2d,0x59,0x35,0x25,0xf7,0xb, 0xf0, -+0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xef,0xda,0x79,0xda,0xd8,0x22,0x7c,0xbf,0x12, -+0x38,0x82,0x74,0x2, 0xac,0xbf,0x22,0xa, 0x1d,0xa, 0x2a,0x2d,0x21,0x3e,0x24,0x22, -+0xca,0xd8,0xca,0x79,0xc2,0x0, 0x6c,0xdd,0x7e,0x57,0x28,0x99,0x7d,0xf5,0x7e,0xe7, -+0x28,0x97,0x7e,0x37,0x3a,0x43,0x4d,0x33,0x68,0x4, 0x7d,0xf5,0xe, 0xf4,0x6c,0xff, -+0x7e,0xa3,0x2a,0x6e,0x7c,0x8a,0x7e,0xb3,0x28,0xa5,0x14,0x68,0x21,0x14,0x68,0x14, -+0x24,0xc2,0x68,0x8, 0x24,0xfb,0x68,0x16,0x24,0x45,0x78,0x10,0x7c,0xfa,0x7e,0x83, -+0x2a,0x6d,0x80,0xa, 0x7e,0x73,0x2a,0x6d,0x2c,0x87,0x80,0x2, 0x6c,0x88,0x6c,0x99, -+0x80,0xf, 0x7c,0xb9,0x12,0x38,0x82,0xbe,0x34,0x2, 0x58,0x8, 0x2, 0xb, 0xd0,0xb, -+0x90,0x7e,0x33,0x28,0x84,0xbc,0x39,0x38,0xe9,0xbe,0xd0,0x3, 0x40,0x2, 0x81,0x1, -+0x7e,0xa3,0x28,0x85,0xbe,0xa0,0x0, 0x38,0xb, 0xbe,0x30,0x0, 0x28,0x37,0x7e,0xb3, -+0x26,0x83,0x70,0x31,0x6c,0x99,0x80,0x29,0xa, 0x29,0xa, 0x3f,0x2d,0x32,0x3e,0x34, -+0x49,0x23,0x5, 0x7a,0xbd,0x2f,0x8, 0x17,0x49,0x3, 0x4, 0xfc,0xbd,0xe, 0x58,0xf, -+0x6d,0x33,0x9d,0x3e,0x12,0x9f,0x33,0xbd,0x3, 0x8, 0x4, 0xd2,0x0, 0x80,0x6, 0xb, -+0x90,0xbc,0x89,0x38,0xd3,0x6d,0xee,0x9e,0xe7,0x2a,0x4f,0xbe,0xe7,0x7, 0xf8,0x8, -+0x2, 0xc2,0x0, 0x30,0x0, 0x20,0x7e,0xb3,0x3b,0x5b,0x4, 0x7a,0xb3,0x3b,0x5b,0x7e, -+0x23,0x3b,0x5b,0xbe,0x20,0xa, 0x28,0x1d,0x74,0xa, 0x7a,0xb3,0x3b,0x5b,0x74,0x1, -+0x7a,0xb3,0x28,0xa8,0x80,0xf, 0x7e,0x23,0x3b,0x5b,0xbe,0x20,0x0, 0x28,0x6, 0x1e, -+0x20,0x7a,0x23,0x3b,0x5b,0x6c,0xee,0xbe,0x30,0x0, 0x38,0x5, 0xbe,0xa0,0x0, 0x28, -+0x69,0x7e,0xb3,0x28,0xa7,0xb4,0x1, 0x9, 0x7e,0xb3,0x28,0xaa,0xbe,0xb0,0x1, 0x68, -+0x59,0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x52,0x6c,0x99,0x80,0x1d,0x7e,0x70,0x2, 0xac, -+0x79,0x9, 0xa3,0x26,0xfa,0x9, 0xd3,0x26,0xfb,0x12,0x3c,0x6, 0xbe,0x34,0x0, 0x96, -+0x8, 0x5, 0x7e,0xe0,0x1, 0x80,0xa, 0xb, 0x90,0x7e,0xb3,0x28,0x84,0xbc,0xb9,0x38, -+0xdb,0x6c,0x99,0x80,0x1d,0x7e,0x70,0x2, 0xac,0x79,0x9, 0xa3,0x27,0x36,0x9, 0xd3, -+0x27,0x37,0x12,0x3c,0x6, 0xbe,0x34,0xff,0x6a,0x58,0x5, 0x7e,0xe0,0x1, 0x80,0xa, -+0xb, 0x90,0x7e,0xb3,0x28,0x85,0xbc,0xb9,0x38,0xdb,0x6c,0x99,0x80,0x17,0xa, 0xe9, -+0xa, 0x5f,0x2d,0x5e,0x3e,0x54,0x49,0x55,0x5, 0x7a,0xbd,0x5f,0x8, 0x5, 0x7e,0xe0, -+0x1, 0x80,0x6, 0xb, 0x90,0xbc,0x89,0x38,0xe5,0x4c,0xee,0x78,0x25,0x7e,0xb3,0x3b, -+0x5c,0x4, 0x7a,0xb3,0x3b,0x5c,0x7e,0x73,0x3b,0x5c,0xbe,0x70,0x5, 0x28,0x22,0x74, -+0x5, 0x7a,0xb3,0x3b,0x5c,0x7e,0xb3,0x28,0xa8,0x60,0x2, 0xd2,0x18,0x12,0xb2,0x80, -+0x80,0xf, 0x7e,0x73,0x3b,0x5c,0xbe,0x70,0x0, 0x28,0x6, 0x1e,0x70,0x7a,0x73,0x3b, -+0x5c,0xda,0x79,0xda,0xd8,0x22,0x7c,0xba,0x7c,0x7d,0x2, 0x2c,0x63,0xe5,0x25,0xa, -+0x3b,0x9d,0x32,0x2, 0x21,0x48,0x7e,0x30,0x64,0x7e,0x20,0x64,0x6c,0x11,0x80,0x4a, -+0xa, 0x31,0xb, 0x34,0x7c,0x7, 0x80,0x38,0x7e,0x70,0x2, 0xac,0x70,0x9, 0xb3,0x26, -+0xfa,0x12,0x3c,0x8b,0x9, 0xb3,0x26,0xfa,0x12,0x3c,0xf, 0x7c,0x97,0x7e,0x70,0x2, -+0xac,0x70,0x9, 0xb3,0x26,0xfb,0x12,0x3c,0x8b,0x9, 0xb3,0x26,0xfb,0x12,0x3c,0xf, -+0x7c,0x87,0xbc,0x39,0x28,0x2, 0x7c,0x39,0xbc,0x28,0x28,0x2, 0x7c,0x28,0xb, 0x0, -+0x7e,0xb3,0x28,0x84,0xbc,0xb0,0x38,0xc0,0xb, 0x10,0x7e,0xb3,0x28,0x84,0xbc,0xb1, -+0x38,0xae,0xa5,0xbb,0x64,0x2, 0x6c,0x33,0xa5,0xba,0x64,0x2, 0x6c,0x22,0xbc,0x23, -+0x28,0x4, 0x7c,0xa2,0x80,0x2, 0x7c,0xa3,0x7c,0xba,0x22,0xa, 0x2b,0x7e,0x70,0x2, -+0xac,0x71,0x22,0xca,0x3b,0x6c,0xff,0x12,0xc8,0xf2,0x7e,0xb3,0x16,0x91,0xb4,0x1, -+0x2, 0x80,0x2, 0xa1,0x7b,0x6c,0xcc,0xa1,0x6d,0x12,0x67,0xed,0xf5,0x27,0x9, 0xb3, -+0x26,0xfb,0xf5,0x28,0x75,0x25,0x2, 0x75,0x26,0x2, 0x7c,0xbc,0x12,0x3d,0x7e,0xd2, -+0x0, 0x12,0x3e,0xf9,0xe5,0x27,0x60,0xc, 0xa, 0x2e,0x1b,0x24,0xe5,0x27,0xa, 0x3b, -+0xbd,0x32,0x48,0x3, 0x75,0x25,0x1, 0xe5,0x28,0x60,0xc, 0xa, 0x2d,0x1b,0x24,0xe5, -+0x28,0xa, 0x3b,0xbd,0x32,0x48,0x3, 0x75,0x26,0x1, 0x75,0x24,0x0, 0x80,0x38,0xe5, -+0x24,0xbc,0xbc,0x68,0x30,0x12,0xb7,0xcd,0x7a,0xa1,0x29,0x9, 0xb3,0x26,0xfb,0xf5, -+0x2a,0xa, 0x2a,0xe5,0x27,0x12,0x3c,0xf, 0xbe,0x34,0x0, 0x3, 0x18,0x17,0xe5,0x2a, -+0xa, 0x2b,0xe5,0x28,0x12,0x3c,0xf, 0xbe,0x34,0x0, 0x3, 0x18,0x8, 0x75,0x25,0x1, -+0x75,0x26,0x1, 0x80,0x7, 0x5, 0x24,0x12,0x9f,0x52,0x38,0xc3,0xe5,0x27,0x7e,0x71, -+0x28,0x12,0xa8,0x1, 0x50,0x6, 0x12,0x3e,0xa9,0x12,0x4f,0xe9,0xe5,0x25,0x7e,0x71, -+0x26,0x7c,0x6c,0x7c,0x5f,0x12,0x92,0xd6,0x90,0x61,0x36,0xe4,0x93,0xb4,0x1, 0x16, -+0x7e,0x70,0x9, 0xac,0x7c,0x7d,0x13,0x2e,0x14,0x27,0x76,0x6d,0x0, 0x2e,0x34,0x27, -+0x78,0x6d,0x22,0x12,0x8a,0xa7,0x12,0x3e,0xa9,0xb, 0xf0,0xb, 0xc0,0x7e,0x73,0x28, -+0x84,0xbc,0x7c,0x28,0x2, 0x81,0xa9,0x7a,0xf3,0x28,0x84,0xda,0x3b,0x22,0xca,0x3b, -+0x7c,0x5b,0x7e,0x43,0x28,0x84,0xbe,0x40,0x1, 0x28,0x2, 0xc1,0x79,0x7e,0xa3,0x2a, -+0x6e,0x7e,0x70,0x2, 0xac,0x75,0x9, 0xd3,0x26,0xfa,0x9, 0xc3,0x26,0xfb,0x7c,0xbd, -+0x7c,0x7c,0x12,0x92,0xc0,0x7f,0x1, 0x90,0x60,0xaa,0xe4,0x93,0x70,0x12,0x7c,0xfc, -+0x7c,0x9d,0x7e,0x83,0x2a,0x70,0x7e,0xe3,0x2a,0x6f,0xa, 0xca,0x6d,0xbb,0x9d,0xbc, -+0xa, 0xa8,0x1b,0xa5,0xa, 0x5f,0xbd,0x5a,0x58,0x2, 0xc1,0x79,0xa, 0x59,0x1b,0x54, -+0xbe,0x54,0x0, 0x0, 0x48,0x4e,0x7c,0xb9,0x14,0x12,0x3e,0xd7,0x50,0x46,0x7c,0xb9, -+0x14,0x12,0x3e,0x7c,0xb, 0x1a,0xe0,0x7d,0x3b,0x12,0x3f,0x3b,0x8, 0x11,0x9d,0xae, -+0xbe,0xa4,0x0, 0x0, 0x58,0x4, 0x6d,0x55,0x80,0x2, 0x7d,0x5a,0x12,0x3f,0x33,0x7c, -+0xb8,0x24,0xfe,0xbc,0xbf,0x78,0x1d,0x90,0x60,0xaa,0xe4,0x93,0x70,0x4, 0x7d,0xfd, -+0x1b,0xf4,0x7d,0x5f,0x12,0x3e,0x83,0xb, 0x1a,0x30,0xbd,0x3a,0x8, 0x6, 0x12,0x3e, -+0x85,0x1b,0x1a,0xa0,0xa, 0xa9,0xb, 0xa4,0xa, 0x5e,0xbd,0xa5,0x58,0x4b,0x7c,0xb9, -+0x4, 0x12,0x3e,0xd7,0x50,0x43,0x7c,0xb9,0x4, 0x12,0x3e,0x7c,0xb, 0x1a,0xe0,0x7d, -+0x3c,0x12,0x3f,0x3b,0x8, 0x11,0x9d,0xae,0xbe,0xa4,0x0, 0x0, 0x58,0x4, 0x6d,0x55, -+0x80,0x2, 0x7d,0x5a,0x12,0x3f,0x33,0x7c,0xb8,0x24,0xfe,0xbc,0xbf,0x78,0x1a,0x90, -+0x60,0xaa,0xe4,0x93,0x70,0x4, 0x7d,0xfd,0x1b,0xf4,0x7d,0x5f,0x12,0x3e,0x83,0xb, -+0x1a,0x50,0xbd,0x5a,0x8, 0x3, 0x1b,0x1a,0xa0,0xda,0x3b,0x22,0x12,0x3e,0x8c,0x7d, -+0xd3,0x7d,0x5d,0x3e,0x54,0x7e,0x1f,0x13,0x8a,0x2d,0x35,0x22,0x7c,0x5b,0x7e,0x43, -+0x2a,0x6e,0x90,0x60,0xab,0xe4,0x93,0x7c,0xab,0x90,0x60,0xaa,0xe4,0x93,0x70,0x8, -+0x7c,0x75,0xac,0x74,0xa, 0x2a,0x2d,0x32,0x22,0x12,0x3f,0x51,0x60,0x28,0x6c,0x22, -+0x80,0x1c,0x7c,0xb2,0x12,0x3e,0xd7,0x50,0x13,0x7c,0xb2,0x12,0x3e,0x8c,0x7d,0x3, -+0x12,0x3f,0x49,0x49,0x55,0x3b,0x41,0x7d,0x40,0x12,0xc8,0xad,0xb, 0x20,0x7e,0x73, -+0x2a,0x75,0xbc,0x72,0x38,0xdc,0x22,0x7c,0xab,0x6c,0x77,0x80,0x11,0xa, 0x27,0x2e, -+0x24,0x60,0xac,0x12,0x87,0x7a,0xbc,0xba,0x78,0x2, 0xd3,0x22,0xb, 0x70,0x90,0x60, -+0xa7,0xe4,0x93,0xbc,0xb7,0x38,0xe6,0xc3,0x22,0x12,0x3f,0x51,0x60,0x34,0x6c,0x22, -+0x80,0x28,0x7c,0xb2,0x12,0x3e,0xd7,0x50,0x1f,0x7c,0xb2,0x12,0x3e,0x8c,0x3e,0x34, -+0x7e,0x7f,0x13,0x8a,0x2d,0xf3,0xb, 0x7a,0x30,0x12,0x3f,0x49,0x59,0x35,0x3b,0x41, -+0x30,0x0, 0x5, 0x6d,0x33,0x1b,0x7a,0x30,0xb, 0x20,0x7e,0x73,0x2a,0x75,0xbc,0x72, -+0x38,0xd0,0x22,0x2d,0x31,0x7d,0x20,0x1b,0x1a,0x50,0x22,0x3e,0x34,0x7f,0x40,0x2d, -+0x93,0xb, 0x4a,0xa0,0xbe,0xe4,0x0, 0x0, 0x22,0x7c,0xa3,0xb, 0x30,0x74,0x2, 0xa4, -+0x22,0x6c,0x33,0x90,0x60,0xa7,0xe4,0x93,0x22,0x7c,0xab,0x90,0x60,0xab,0xe4,0x93, -+0xbc,0xb7,0x78,0x9, 0x7c,0xba,0x12,0x3e,0xd7,0x50,0x2, 0xd3,0x22,0xc3,0x22,0xca, -+0xf8,0x7c,0xfb,0x7e,0x70,0x2, 0x12,0xa4,0xe3,0x7f,0x71,0x7c,0xbf,0x12,0x38,0x82, -+0x12,0xc6,0x97,0x7f,0x17,0x12,0x1f,0x8d,0x7c,0xb7,0xda,0xf8,0x22,0xca,0xd8,0xca, -+0x79,0x6c,0xff,0x6c,0xee,0x80,0xf, 0x7c,0xbe,0x12,0x3f,0x6f,0x7c,0xdb,0xbc,0xfd, -+0x58,0x2, 0x7c,0xfd,0xb, 0xe0,0x12,0x3f,0xb2,0x38,0xec,0x7c,0xbf,0xda,0x79,0xda, -+0xd8,0x22,0x7e,0x73,0x28,0x84,0xbc,0x7e,0x22,0x90,0x60,0xa7,0xe4,0x93,0x60,0x2b, -+0x6c,0x33,0x80,0x1f,0x7c,0xb3,0x12,0x3e,0xd7,0x40,0x16,0x7c,0xb3,0x12,0x3e,0x8c, -+0x7d,0x43,0x6d,0x55,0x7d,0x4, 0x3e,0x4, 0x7e,0x1f,0x13,0x8a,0x2d,0x30,0x1b,0x1a, -+0x50,0xb, 0x30,0x7e,0x23,0x2a,0x75,0xbc,0x23,0x38,0xd9,0x22,0x12,0x68,0x48,0x12, -+0x24,0xca,0x12,0x71,0x7e,0x12,0x23,0x1d,0x7e,0xb3,0x39,0x50,0x24,0xfd,0x68,0x9, -+0xb, 0xb1,0x78,0xf4,0x12,0x2f,0x4e,0x80,0xef,0x12,0x29,0xa4,0x80,0xea,0xca,0xf8, -+0x7c,0xab,0xbe,0xa0,0x34,0x38,0x2, 0x21,0x1f,0xbe,0xa0,0x35,0x78,0x6, 0x7e,0xb3, -+0x2b,0x10,0x41,0x3e,0xbe,0xa0,0x36,0x68,0x5, 0xbe,0xa0,0x37,0x78,0x1d,0x7e,0x35, -+0x8, 0x7d,0x23,0xb, 0x24,0x7a,0x25,0x8, 0x2e,0x37,0x36,0xac,0x7e,0x39,0xb0,0xbe, -+0xa0,0x37,0x68,0x2, 0x41,0x3e,0x75,0x1b,0x36,0x41,0x3e,0xbe,0xa0,0x38,0x68,0x5, -+0xbe,0xa0,0x39,0x78,0x1b,0x7e,0xf3,0x3a,0x8, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0x8, -+0xbe,0xa0,0x39,0x78,0x3, 0x75,0x1b,0x38,0xa, 0x3f,0x9, 0xb3,0x2b,0x21,0x41,0x3e, -+0xbe,0xa0,0x3a,0x68,0x5, 0xbe,0xa0,0x3b,0x78,0x1b,0x7e,0xf3,0x3a,0xa, 0x7c,0xbf, -+0x4, 0x7a,0xb3,0x3a,0xa, 0xbe,0xa0,0x3b,0x78,0x3, 0x75,0x1b,0x3a,0xa, 0x3f,0x9, -+0xb3,0x2b,0x44,0x41,0x3e,0xbe,0xa0,0xfb,0x78,0x6, 0x7e,0xb3,0x2b,0x12,0x41,0x3e, -+0xbe,0xa0,0x5e,0x78,0x26,0x7e,0xf, 0x3b,0x8, 0x69,0x30,0x0, 0x8e,0xa, 0x56,0x1e, -+0x54,0x1e,0x54,0x1e,0x54,0x5e,0x54,0x0, 0x1, 0x3, 0x3, 0x54,0xc0,0xa, 0x36,0x5e, -+0x34,0x0, 0x3, 0x7c,0xa7,0x4c,0xba,0x44,0x80,0x41,0x3e,0xbe,0xa0,0x3c,0x68,0x5, -+0xbe,0xa0,0x3d,0x78,0x1b,0x7e,0xf3,0x3a,0xc, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0xc, -+0xbe,0xa0,0x3d,0x78,0x3, 0x75,0x1b,0x3c,0xa, 0x3f,0x9, 0xb3,0x2a,0x7a,0x41,0x3e, -+0xbe,0xa0,0x3e,0x68,0x5, 0xbe,0xa0,0x3f,0x78,0x1b,0x7e,0xf3,0x3a,0xe, 0x7c,0xbf, -+0x4, 0x7a,0xb3,0x3a,0xe, 0xbe,0xa0,0x3f,0x78,0x3, 0x75,0x1b,0x3e,0xa, 0x3f,0x9, -+0xb3,0x2a,0x9d,0x41,0x3e,0xbe,0xa0,0x40,0x40,0xd, 0xbe,0xa0,0x4d,0x38,0x8, 0xa, -+0x3a,0x9, 0xb3,0x39,0xe4,0x41,0x3e,0xbe,0xa0,0x4e,0x68,0x5, 0xbe,0xa0,0x4f,0x78, -+0x1e,0x7e,0xf3,0x3a,0x29,0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0x29,0xbe,0xa0,0x4f,0x78, -+0x3, 0x75,0x1b,0x4e,0xa, 0x3f,0x2e,0x37,0x36,0xaa,0x7e,0x39,0xb0,0x41,0x3e,0xbe, -+0xa0,0x51,0x68,0x5, 0xbe,0xa0,0x52,0x78,0x28,0x7e,0x14,0x60,0x0, 0x6d,0x0, 0x2e, -+0x4, 0x0, 0xff,0x7e,0xb3,0x3a,0x34,0xa, 0x3b,0x6d,0x22,0x2f,0x10,0x7e,0x1b,0x70, -+0x4, 0x7a,0xb3,0x3a,0x34,0xbe,0xa0,0x52,0x78,0x3, 0x75,0x1b,0x51,0x7c,0xb7,0x41, -+0x3e,0xbe,0xa0,0x5c,0x68,0x5, 0xbe,0xa0,0x5d,0x78,0x1a,0x7e,0xf3,0x39,0xfd,0x7c, -+0xbf,0x4, 0x7a,0xb3,0x39,0xfd,0xbe,0xa0,0x5d,0x78,0x3, 0x75,0x1b,0x5c,0x7c,0xbf, -+0x12,0xb3,0xa, 0x41,0x3e,0xbe,0xa0,0x60,0x40,0xd, 0xbe,0xa0,0x6c,0x38,0x8, 0xa, -+0x3a,0x9, 0xb3,0x3a,0xc9,0x41,0x3e,0xbe,0xa0,0x6d,0x78,0x4, 0xe5,0xe, 0x80,0x7e, -+0xbe,0xa0,0xf4,0x68,0x5, 0xbe,0xa0,0xf5,0x78,0x18,0x7e,0x35,0xa, 0x7d,0x23,0xb, -+0x24,0x7a,0x25,0xa, 0x9, 0xb3,0x36,0xb2,0xbe,0xa0,0xf5,0x78,0x61,0x75,0x1b,0xf4, -+0x80,0x5c,0xbe,0xa0,0xf0,0x68,0x5, 0xbe,0xa0,0xf1,0x78,0x9, 0x7c,0x1a,0x2e,0x10, -+0x20,0xa5,0xe7,0x80,0x49,0xbe,0xa0,0xf2,0x68,0x5, 0xbe,0xa0,0xf3,0x78,0x1b,0x7e, -+0x15,0x10,0x3e,0x14,0x7e,0x1f,0x36,0xae,0x2d,0x31,0xb, 0x1a,0x30,0xbe,0xa0,0xf2, -+0x78,0x4, 0xa, 0x56,0x80,0x28,0x7d,0x53,0x80,0x24,0xbe,0xa0,0xf6,0x78,0x4, 0xe5, -+0xf, 0x80,0x1b,0xbe,0xa0,0xf7,0x78,0xd, 0x7e,0x34,0x62,0x48,0x7e,0x24,0x0, 0xff, -+0xb, 0x1a,0x50,0x80,0x9, 0xbe,0xa0,0xfd,0x78,0x3, 0xe4,0x80,0x1, 0xe4,0xda,0xf8, -+0x22,0x7c,0x7b,0x6c,0xaa,0x12,0x45,0x2e,0x78,0x9, 0x7c,0xb7,0x12,0x89,0x15,0x7c, -+0xab,0x80,0xa, 0xb4,0x4, 0x7, 0x7c,0xb7,0x12,0x40,0xe, 0x7c,0xab,0x7c,0xba,0x22, -+0x30,0x90,0x19,0xc2,0x90,0xe5,0x19,0x70,0x9, 0x75,0x19,0x1, 0xe5,0x91,0xf5,0x1b, -+0x80,0x11,0x7e,0x71,0x91,0xe5,0x1b,0x12,0x42,0x8b,0x5, 0x1b,0x30,0x91,0xb, 0xc2, -+0x91,0x5, 0x1b,0xe5,0x1b,0x12,0x42,0x41,0xf5,0x91,0x22,0x7c,0x6b,0x12,0x45,0x2e, -+0x78,0x5, 0x7c,0xb6,0x2, 0x88,0x6a,0xb4,0x4, 0x5, 0x7c,0xb6,0x2, 0x42,0xa0,0x22, -+0xca,0xf8,0x7c,0x6b,0xa5,0xbe,0x0, 0x9, 0x7c,0xb7,0x12,0x88,0x3f,0xd2,0x8, 0xa1, -+0x22,0xa5,0xbe,0x1, 0x3d,0x7a,0x73,0x39,0xe5,0xa5,0xbf,0xad,0x2, 0x80,0x2f,0xa5, -+0xbf,0xae,0x4, 0xd2,0x9, 0xa1,0x22,0xa5,0xbf,0xaa,0x5, 0x12,0xc9,0x4, 0x80,0x1e, -+0xa5,0xbf,0xab,0xa, 0x7e,0x34,0x5, 0x7a,0x7a,0x37,0x36,0xac,0x80,0x10,0xa5,0xbf, -+0xac,0x2, 0x80,0x2, 0xa1,0x22,0x7e,0x34,0x4, 0xfc,0x7a,0x37,0x36,0xac,0x6d,0x33, -+0x61,0x9e,0xbe,0x60,0x4, 0x40,0x20,0xbe,0x60,0x8, 0x38,0x1b,0x12,0x45,0x25,0xa5, -+0xbe,0x7, 0x7, 0x6d,0x33,0x7a,0x35,0xa, 0xa1,0x22,0xa5,0xbe,0x8, 0x2, 0x80,0x2, -+0xa1,0x22,0x12,0x0, 0x6e,0xa1,0x22,0xa5,0xbe,0xa, 0x9, 0x43,0xc, 0x20,0x7a,0x73, -+0x39,0xee,0xa1,0x22,0xa5,0xbe,0xb, 0x8, 0x12,0x45,0x25,0x12,0x7, 0xfb,0xa1,0x22, -+0xbe,0x60,0x1b,0x40,0x7, 0xbe,0x60,0x1c,0x38,0x2, 0x81,0xba,0xbe,0x60,0x1e,0x40, -+0xd, 0xbe,0x60,0x23,0x38,0x8, 0x12,0x45,0x27,0x43,0xc, 0x40,0xa1,0x22,0xbe,0x60, -+0x15,0x40,0x1a,0xbe,0x60,0x18,0x38,0x15,0x12,0x45,0x27,0xd2,0x8, 0xa5,0xbe,0x15, -+0x2, 0x80,0x2, 0xa1,0x22,0x74,0x7, 0x7a,0xb3,0x39,0xe8,0xa1,0x22,0xa5,0xbe,0x19, -+0x7, 0xe4,0x7a,0xb3,0x39,0xfd,0xa1,0x22,0xbe,0x60,0x24,0x40,0x7, 0xbe,0x60,0x2c, -+0x38,0x2, 0x81,0xba,0xa5,0xbe,0x2d,0x1b,0x12,0x45,0x27,0x20,0x9, 0x2, 0xa1,0x22, -+0x7e,0x63,0x3a,0x10,0x7c,0x46,0x6c,0x55,0xa, 0x37,0x2d,0x32,0x3e,0x34,0x7a,0x35, -+0x8, 0xa1,0x22,0xbe,0x60,0x2f,0x40,0xa, 0xbe,0x60,0x33,0x38,0x5, 0x43,0xc, 0x8, -+0x81,0xba,0xa5,0xbe,0x34,0xf, 0x43,0xc, 0x10,0xbe,0x70,0x64,0x38,0x2, 0x81,0xba, -+0x7e,0x70,0x64,0x81,0xba,0xbe,0x60,0x38,0x68,0x4, 0xa5,0xbe,0x39,0x21,0x43,0xc, -+0x1, 0x7e,0xf3,0x3a,0x9, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0x9, 0xa, 0x2f,0x19,0x72, -+0x2b,0x21,0xa5,0xbe,0x39,0x2, 0x80,0x2, 0xa1,0x22,0x75,0x1b,0x38,0xa1,0x22,0xbe, -+0x60,0x3a,0x68,0x4, 0xa5,0xbe,0x3b,0x21,0x43,0xc, 0x2, 0x7e,0xf3,0x3a,0xb, 0x7c, -+0xbf,0x4, 0x7a,0xb3,0x3a,0xb, 0xa, 0x2f,0x19,0x72,0x2b,0x44,0xa5,0xbe,0x3b,0x2, -+0x80,0x2, 0xa1,0x22,0x75,0x1b,0x3a,0xa1,0x22,0xa5,0xbe,0xfb,0x9, 0x43,0xc, 0x4, -+0x7a,0x73,0x2b,0x12,0xa1,0x22,0xa5,0xbe,0x50,0x6, 0x7a,0x73,0x3a,0x34,0xa1,0x22, -+0xbe,0x60,0x3c,0x68,0x4, 0xa5,0xbe,0x3d,0x21,0x43,0xc, 0x1, 0x7e,0xf3,0x3a,0xd, -+0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0xd, 0xa, 0x2f,0x19,0x72,0x2a,0x7a,0xa5,0xbe,0x3d, -+0x2, 0x80,0x2, 0xa1,0x22,0x75,0x1b,0x3c,0xa1,0x22,0xbe,0x60,0x3e,0x68,0x4, 0xa5, -+0xbe,0x3f,0x21,0x43,0xc, 0x1, 0x7e,0xf3,0x3a,0xf, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a, -+0xf, 0xa, 0x2f,0x19,0x72,0x2a,0x9d,0xa5,0xbe,0x3f,0x2, 0x80,0x2, 0xa1,0x22,0x75, -+0x1b,0x3e,0xa1,0x22,0xbe,0x60,0x40,0x40,0xd, 0xbe,0x60,0x42,0x38,0x8, 0x12,0x45, -+0x27,0x75,0xd, 0x1, 0x80,0xa, 0xa5,0xbe,0x43,0xb, 0x12,0x45,0x27,0x75,0xd, 0x2, -+0x12,0x45,0x36,0x80,0x7d,0xa5,0xbe,0x44,0x8, 0x12,0x45,0x27,0x12,0x47,0x2e,0x80, -+0x71,0xbe,0x60,0x45,0x68,0x4, 0xa5,0xbe,0x46,0x5, 0x12,0x45,0x27,0x80,0x63,0xbe, -+0x60,0x4e,0x68,0x4, 0xa5,0xbe,0x4f,0x20,0x43,0xd, 0x4, 0x7e,0xf3,0x3a,0x2a,0x7c, -+0xbf,0x4, 0x7a,0xb3,0x3a,0x2a,0xa, 0x2f,0x2e,0x27,0x36,0xaa,0x7a,0x29,0x70,0xa5, -+0xbe,0x4f,0x3f,0x75,0x1b,0x4e,0x80,0x3a,0xa5,0xbe,0x6d,0x5, 0x7a,0x71,0xe, 0x80, -+0x31,0xbe,0x60,0xf0,0x40,0x25,0xbe,0x60,0xf3,0x38,0x20,0x7c,0x16,0x2e,0x10,0x20, -+0x7c,0xb7,0xa5,0xf7,0xa5,0xbe,0xf3,0x1a,0x7e,0x15,0x12,0x7e,0x5, 0x10,0x3e,0x4, -+0x7e,0x1f,0x36,0xae,0x2d,0x30,0x1b,0x1a,0x10,0x80,0x7, 0xa5,0xbe,0xf6,0x3, 0x7a, -+0x71,0xf, 0xda,0xf8,0x22,0xd2,0x8, 0xa, 0x26,0x19,0x72,0x39,0xe4,0x22,0x7e,0xb3, -+0x39,0xe4,0xc4,0x54,0x7, 0x22,0x12,0x47,0xbf,0xb4,0x1, 0x14,0xca,0x39,0x7e,0x18, -+0x3a,0x24,0x7e,0x8, 0x25,0xee,0x12,0x20,0xf1,0x1b,0xfd,0x12,0x47,0x7, 0x80,0x12, -+0xca,0x39,0x7e,0x18,0x3a,0x24,0x7e,0x8, 0x2b,0x70,0x12,0x20,0xf1,0x1b,0xfd,0x12, -+0x47,0x25,0x2, 0x45,0x65,0x7a,0x1f,0x2a,0xfc,0x7a,0xf, 0x2a,0xf8,0x22,0x7a,0xb3, -+0x2b,0x0, 0x70,0x14,0x12,0x47,0x25,0x12,0x45,0x65,0x7e,0x18,0x6, 0x76,0x7a,0x1f, -+0x6, 0xf4,0x7e,0x18,0x4, 0x7e,0x80,0x10,0xb4,0x1, 0x11,0x12,0x47,0x7, 0x12,0x45, -+0x65,0x12,0xc8,0x81,0x7e,0x18,0x4, 0x0, 0x7a,0x1f,0x6, 0xf8,0x22,0x74,0x1, 0x12, -+0x0, 0x1e,0xe4,0x12,0x45,0x6e,0x12,0x45,0xb5,0xe4,0x12,0x0, 0x1e,0x74,0x1, 0x12, -+0x45,0x6e,0x2, 0x45,0xb5,0xca,0x3b,0x7e,0xd3,0x2a,0x73,0x7e,0xc3,0x2a,0x74,0x7e, -+0x8, 0x1f,0x44,0x12,0x86,0xf7,0x7e,0x8, 0x1f,0x8a,0x7e,0x34,0x0, 0x46,0x12,0x21, -+0x16,0x7e,0x8, 0x1f,0xd0,0x7e,0x34,0x0, 0xa, 0xe4,0x12,0x21,0x16,0x7e,0x8, 0x1f, -+0xda,0x7e,0x34,0x0, 0xa, 0x12,0x21,0x16,0x7e,0xf3,0x2a,0xfc,0x7e,0x18,0x2a,0xdc, -+0x7a,0x1d,0x24,0x7e,0x18,0x1f,0xd0,0x7a,0x1d,0x28,0x7c,0xbd,0x7c,0x7c,0x7e,0x8, -+0x2a,0xb9,0x12,0xbe,0x9e,0x6c,0xee,0x80,0x27,0xa, 0x3e,0x9, 0xa3,0x2a,0xdc,0xa, -+0x3a,0x12,0x97,0xb2,0x7c,0xab,0xbe,0xa0,0x1c,0x50,0x13,0xa, 0x3e,0x12,0x46,0xc9, -+0xa, 0x4a,0x19,0xb4,0x1f,0x44,0x7e,0xb3,0x2a,0xfb,0x19,0xb4,0x1f,0x8a,0xb, 0xe0, -+0xbc,0xce,0x38,0xd5,0x6c,0xee,0x80,0x24,0xa, 0x3e,0x9, 0xa3,0x2a,0xb9,0xbe,0xa0, -+0x23,0x50,0x17,0xa, 0x2e,0xa, 0x3c,0x2d,0x32,0x12,0x46,0xc9,0xa, 0x4a,0x19,0xb4, -+0x1f,0x60,0x7e,0xb3,0x2a,0xfb,0x19,0xb4,0x1f,0xa6,0xb, 0xe0,0xbc,0xde,0x38,0xd8, -+0x7e,0xb3,0x2a,0xfd,0x7e,0x8, 0x1f,0xe4,0x60,0x9, 0x7e,0x18,0x1f,0xd0,0x12,0xbb, -+0x8f,0x80,0x3, 0x12,0xbe,0x44,0x6c,0xee,0x7e,0x18,0x1f,0xe4,0x7a,0x1f,0x1f,0x34, -+0x74,0x2, 0xac,0xbe,0x49,0x35,0x1f,0xd0,0x7a,0x37,0x1f,0x38,0x74,0x2, 0xac,0xbe, -+0x49,0x35,0x1f,0xda,0x7a,0x37,0x1f,0x3a,0x7e,0x70,0xe, 0xac,0x7e,0x2e,0x34,0x1f, -+0x44,0x6d,0x22,0x7a,0x1f,0x1f,0x3c,0x7e,0x70,0xe, 0xac,0x7e,0x2e,0x34,0x1f,0x8a, -+0x7a,0x1f,0x1f,0x40,0x7e,0x8, 0x1f,0x34,0x7c,0xbf,0x7c,0x7e,0x12,0x8, 0xd1,0xb, -+0xe0,0xbe,0xe0,0x5, 0x40,0xb2,0xda,0x3b,0x22,0x2e,0x37,0x2a,0xfe,0x7e,0x39,0xb0, -+0x22,0x74,0x1, 0x7a,0xb3,0x39,0x50,0x12,0x6f,0xb6,0x12,0x14,0x2a,0x12,0xbd,0xb8, -+0xe4,0x12,0xa, 0x66,0x7e,0x24,0x3, 0xd4,0x12,0x50,0x32,0x74,0x1, 0x12,0x45,0x6e, -+0x12,0x85,0xc8,0x7e,0x34,0xd0,0xc, 0x12,0x1, 0xe, 0x12,0x45,0x9d,0x7e,0x34,0x0, -+0x1, 0x12,0xc8,0xbb,0x2, 0x12,0x6a,0x7e,0x1f,0x25,0xf2,0x7e,0xf, 0x25,0xee,0x22, -+0x7a,0xb3,0x2b,0x0, 0x70,0x5, 0x12,0x47,0x25,0x80,0x6, 0xb4,0x1, 0x6, 0x12,0x47, -+0x7, 0x12,0x45,0x65,0x22,0x7e,0x1f,0x2b,0x74,0x7e,0xf, 0x2b,0x70,0x22,0x12,0x47, -+0xbf,0xb4,0x1, 0x17,0xca,0x39,0x7e,0x18,0x25,0xee,0x7e,0x8, 0x3a,0x24,0x12,0x20, -+0xf1,0x1b,0xfd,0x12,0xc8,0xfb,0x12,0x47,0x7, 0x80,0x1a,0xca,0x39,0x7e,0x18,0x2b, -+0x70,0x7e,0x8, 0x3a,0x24,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x37,0x2b,0x76,0x7a,0x37, -+0x36,0xaa,0x12,0x47,0x25,0x2, 0x45,0x65,0xe5,0xd, 0x60,0x52,0xe5,0xd, 0x30,0xe0, -+0x6, 0x53,0xd, 0xfe,0x12,0x56,0xe7,0xe5,0xd, 0x30,0xe1,0x14,0x53,0xd, 0xfd,0x7e, -+0xb3,0x3a,0x28,0x70,0x4, 0x74,0x1, 0x80,0x1, 0xe4,0x12,0xc9,0x1e,0x12,0x87,0x0, -+0xe5,0xd, 0x30,0xe2,0x29,0x53,0xd, 0xfb,0xe4,0x7a,0xb3,0x3a,0x29,0x7e,0xb3,0x3a, -+0x28,0x70,0xa, 0x74,0x1, 0x12,0x0, 0x1e,0x12,0x47,0x25,0x80,0x7, 0xe4,0x12,0x0, -+0x1e,0x12,0x47,0x7, 0x12,0x45,0x65,0x7e,0xb3,0x2a,0xfc,0x2, 0x86,0x66,0x22,0x7e, -+0xb3,0x3a,0x28,0x7e,0x34,0x0, 0x4, 0x22,0x30,0x8, 0x3b,0xc2,0x8, 0x12,0x26,0x15, -+0x7e,0x73,0x39,0xe9,0x7a,0x73,0x2a,0x4d,0x7e,0x73,0x39,0xea,0x7a,0x73,0x2b,0x1d, -+0x7e,0x73,0x39,0xea,0x7a,0x73,0x2b,0x1, 0x7e,0xb3,0x39,0xeb,0x60,0x18,0x7e,0x34, -+0x0, 0x2, 0x12,0x49,0xbb,0x7e,0x34,0x0, 0x1, 0x12,0x49,0xbb,0x6d,0x33,0x12,0x49, -+0xbb,0xe4,0x7a,0xb3,0x39,0xeb,0x12,0x47,0x68,0x2, 0x48,0xc, 0xe5,0xc, 0x70,0x2, -+0x21,0x29,0xe5,0xc, 0x30,0xe0,0x10,0x53,0xc, 0xfe,0x12,0x81,0xe1,0x12,0x83,0xd1, -+0x7e,0x8, 0x2a,0x6d,0x12,0x9, 0xa1,0xe5,0xc, 0x30,0xe1,0x6, 0x53,0xc, 0xfd,0x12, -+0xbe,0x55,0xe5,0xc, 0x30,0xe2,0x32,0x53,0xc, 0xfb,0x7e,0xb3,0x2b,0x12,0x60,0x9, -+0x7e,0x8, 0x2a,0x6d,0x12,0x6, 0xba,0x80,0xb, 0x7e,0xb3,0x2b,0x65,0x7e,0x73,0x2b, -+0x64,0x12,0xb, 0xad,0x7e,0x73,0x2b,0x12,0x2e,0x70,0xff,0x92,0x1, 0x90,0x60,0x51, -+0xe4,0x93,0x9e,0xb3,0x2a,0x77,0x12,0xb, 0x1e,0xe5,0xc, 0x30,0xe3,0x45,0x53,0xc, -+0xf7,0x7e,0x73,0x3a,0x16,0x7a,0x73,0x2b,0xf, 0x12,0xab,0xd3,0x7a,0xb3,0x0, 0x5e, -+0xbe,0xb0,0xff,0x68,0xb, 0x43,0xc, 0x20,0x7e,0x73,0x0, 0x5e,0x7a,0x73,0x39,0xee, -+0x12,0x6c,0x17,0x12,0x4f,0xf7,0x7e,0x73,0x3a,0x17,0xbe,0x73,0x2b,0x62,0x68,0x6, -+0x7a,0x73,0x2b,0x62,0xd2,0x10,0x30,0x10,0x7, 0x12,0x6f,0xb4,0xe4,0x12,0xa, 0x66, -+0x12,0x6c,0xe8,0xe5,0xc, 0x30,0xe4,0xf, 0x53,0xc, 0xef,0x7e,0x43,0x3a,0x18,0x7e, -+0x50,0xa, 0xac,0x45,0x12,0x50,0x32,0xe5,0xc, 0x30,0xe6,0x4e,0x53,0xc, 0xbf,0x7e, -+0x73,0x3a,0x4, 0xbe,0x70,0x7, 0x28,0x6, 0x74,0x7, 0x7a,0xb3,0x3a,0x4, 0xa9,0xd5, -+0xcb,0x74,0xe, 0x12,0x49,0x2a,0x7c,0x7b,0x5e,0x70,0xf, 0x7e,0x63,0x3a,0x4, 0xa, -+0x26,0x2e,0x24,0x0, 0x3, 0x12,0x8b,0xb, 0x7c,0x65,0x4c,0x76,0x74,0xe, 0x12,0x49, -+0xb5,0x12,0x49,0x2a,0x12,0x4b,0xb1,0x7e,0x73,0x3a,0x7, 0x7a,0x73,0x2b,0x14,0x7e, -+0x73,0x3a,0x6, 0x7a,0x73,0x2b,0x1f,0x12,0xc9,0xd, 0xe5,0xc, 0x30,0xe5,0xa, 0x53, -+0xc, 0xdf,0x7e,0xb3,0x39,0xee,0x2, 0x50,0x80,0x22,0xf5,0xfd,0xe5,0xfe,0x22,0xca, -+0x79,0xa9,0xd5,0xcb,0x74,0x2, 0x7e,0x70,0x3f,0x12,0x49,0xb5,0x74,0xf, 0x12,0x49, -+0x2a,0x7c,0xfb,0x74,0xf, 0x7c,0x7f,0x5e,0x70,0xfe,0x12,0x49,0xb5,0x74,0xc, 0x12, -+0x49,0x2a,0x7c,0xfb,0x54,0x7f,0x68,0x8, 0x74,0xc, 0x7e,0x70,0xf8,0x12,0x49,0xb5, -+0x90,0x61,0x18,0xe4,0x93,0x7c,0xab,0xbe,0xa0,0x7, 0x38,0xb, 0x12,0x4f,0x3b,0x7c, -+0xb7,0xa, 0x7b,0xb, 0x75,0x80,0x16,0x90,0x61,0x17,0xe4,0x93,0xb4,0x1, 0xe, 0xbe, -+0xa0,0x7, 0x28,0x9, 0x12,0x4f,0x3b,0xa, 0x77,0x2e,0x74,0x0, 0x7, 0x74,0xe, 0x7c, -+0x7f,0x12,0x49,0xb5,0x74,0x7, 0x12,0x49,0x2a,0x7c,0xfb,0x5e,0xf0,0xfb,0x90,0x60, -+0x2, 0xe4,0x93,0xa, 0x3b,0x3e,0x34,0x3e,0x34,0x4c,0xf7,0x74,0x7, 0x7c,0x7f,0x12, -+0x4b,0xae,0xda,0x79,0x22,0xf5,0xfd,0x7a,0x71,0xfe,0x22,0xca,0xd8,0xca,0x79,0x7d, -+0xd3,0x90,0x60,0x50,0xe4,0x93,0x7c,0xfb,0x90,0x60,0x51,0xe4,0x93,0x7c,0x8b,0xa, -+0x38,0xa, 0xcf,0x2d,0xc3,0xb, 0xc4,0x7d,0x3c,0x7c,0xe7,0x12,0x26,0x86,0xa9,0xd0, -+0xc4,0xa9,0xd5,0xcb,0x74,0x7, 0x12,0x49,0x2a,0x7c,0x8b,0x74,0x7, 0x7e,0x70,0xf, -+0x12,0x4b,0xae,0x7e,0x54,0x0, 0x78,0x7e,0x1f,0x3b,0xc, 0x79,0x51,0x0, 0x6, 0x7e, -+0x54,0x0, 0x80,0x7e,0x1f,0x3b,0xc, 0x79,0x51,0x0, 0x8, 0x7e,0x54,0x0, 0xc, 0x7e, -+0x1f,0x3b,0xc, 0x79,0x51,0x0, 0x10,0xbe,0xd4,0x0, 0x2, 0x78,0xb, 0x7e,0x1f,0x3b, -+0xc, 0x12,0x4b,0xa6,0x44,0x1, 0x80,0x20,0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x44, -+0x8, 0x1b,0x1a,0x50,0x4d,0xdd,0x7e,0x1f,0x3b,0xc, 0x78,0x7, 0x12,0x4b,0xa6,0x54, -+0xfb,0x80,0x5, 0x12,0x4b,0xa6,0x44,0x4, 0x1b,0x1a,0x50,0x7e,0x1f,0x3b,0x8, 0x69, -+0xe1,0x0, 0x84,0x69,0x51,0x0, 0x90,0x7d,0xf5,0x2e,0x34,0x0, 0x90,0x5e,0xa0,0xf6, -+0x1b,0x1a,0x50,0x7e,0xb3,0x39,0x5a,0xbe,0xb0,0x6, 0x40,0x3, 0xb4,0xff,0xe, 0x12, -+0x4b,0xbb,0x54,0xe6,0x12,0x4b,0xb8,0x4e,0x54,0x1, 0xa4,0x80,0xc, 0x12,0x4b,0xbb, -+0x5e,0x54,0xfe,0xe6,0x12,0x4b,0xb8,0x44,0xa4,0x1b,0x1a,0x50,0xbe,0xd4,0x0, 0x2, -+0x78,0x2d,0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x5e,0x54,0x0, 0xf, 0x1b,0x1a,0x50, -+0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x44,0x50,0x1b,0x1a,0x50,0x7e,0x34,0x0, 0x2, -+0x12,0x4c,0x3f,0x12,0x4c,0x18,0x12,0x4b,0xf5,0x7a,0x37,0x36,0xb2,0x61,0x62,0x6c, -+0xdd,0x61,0x5c,0x4c,0xdd,0x78,0x4, 0x6c,0x99,0x80,0x2b,0xbc,0xfd,0x40,0x12,0xa, -+0xcd,0x9, 0x9c,0x2a,0xb8,0xbe,0x90,0x23,0x40,0x3, 0x7e,0x90,0x22,0xb, 0x90,0x80, -+0x15,0xa, 0x3f,0xa, 0xcd,0x9d,0xc3,0x9, 0x9c,0x2a,0xdb,0xbe,0x90,0x1c,0x40,0x3, -+0x7e,0x90,0x1b,0x2e,0x90,0x24,0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x5e,0x54,0x0, -+0xf, 0x1b,0x1a,0x50,0xa, 0xc9,0x3e,0xc4,0x3e,0xc4,0x3e,0xc4,0x3e,0xc4,0x7e,0x1f, -+0x3b,0xc, 0x12,0x4b,0xa6,0x4d,0x5c,0x1b,0x1a,0x50,0xe5,0xe, 0x60,0x7, 0xe5,0xe, -+0xbe,0xb0,0x64,0x28,0x6, 0x7e,0x34,0x0, 0x2, 0x80,0x4, 0xe5,0xe, 0xa, 0x3b,0x12, -+0x4c,0x3f,0x12,0x4c,0x18,0xbe,0xd4,0x0, 0x1, 0x78,0x10,0x12,0x4c,0x18,0x12,0x4b, -+0xf5,0x74,0x2, 0xac,0xbd,0x59,0x35,0x36,0xb4,0x80,0xf, 0x12,0x4b,0xf5,0xa, 0x5e, -+0xa, 0x2d,0x2d,0x25,0x3e,0x24,0x59,0x32,0x36,0xb4,0xb, 0xd0,0xbc,0xed,0x28,0x2, -+0x41,0xc3,0xa9,0xd5,0xcb,0x74,0x7, 0x7c,0x78,0x12,0x4b,0xae,0xa9,0xc0,0xc4,0x7e, -+0x1f,0x3b,0x8, 0x79,0xe1,0x0, 0x84,0x7e,0x1f,0x3b,0x8, 0x79,0xf1,0x0, 0x90,0x6d, -+0x33,0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, 0x6, 0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, -+0x8, 0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, 0x10,0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, -+0xe, 0xda,0x79,0xda,0xd8,0x22,0x2e,0x34,0x0, 0xe, 0xb, 0x1a,0x50,0x22,0x12,0x49, -+0xb5,0x75,0xfd,0xff,0xa9,0xc5,0xcb,0x22,0x1b,0x1a,0x50,0x7e,0x1f,0x3b,0x8, 0x2e, -+0x34,0x0, 0x84,0xb, 0x1a,0x50,0x22,0x6d,0x33,0x7e,0x8, 0x0, 0x24,0x7e,0x24,0x0, -+0x12,0x12,0x69,0x9f,0xe5,0x34,0x20,0xe7,0x1b,0xa9,0xd5,0xcb,0x74,0x3, 0x7e,0x71, -+0x27,0x12,0x49,0xb5,0x74,0xb, 0x7e,0x71,0x2f,0x12,0x49,0xb5,0x74,0xc, 0x7e,0x71, -+0x30,0x12,0x4b,0xae,0x22,0x7e,0xf, 0x3b,0xc, 0x69,0x30,0x0, 0xa, 0x7d,0x23,0x6d, -+0x33,0x69,0x10,0x0, 0xc, 0x6d,0x0, 0x2f,0x10,0x74,0x7, 0x1e,0x34,0x1e,0x24,0x50, -+0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,0x22,0x7e,0x34,0x0, 0x1, 0x7e,0xf, 0x3b,0xc, -+0x79,0x30,0x0, 0x4, 0x7e,0xf, 0x3b,0xc, 0x69,0x30,0x0, 0x12,0x5e,0x34,0x0, 0x1, -+0x68,0xf2,0x7e,0x34,0x0, 0x1, 0x79,0x30,0x0, 0x12,0x22,0x7e,0x34,0x0, 0x1, 0x7d, -+0x23,0x80,0x12,0x7e,0x30,0x4, 0x80,0x5, 0x74,0xfa,0x12,0x4f,0x4a,0x7c,0x23,0x1b, -+0x30,0xa5,0xba,0x0, 0xf3,0x7d,0x32,0x1b,0x24,0x4d,0x33,0x78,0xe6,0x22,0xca,0x3b, -+0x75,0x24,0x0, 0x6c,0xff,0x12,0x4f,0xe9,0x75,0x28,0x3, 0x6c,0xee,0x75,0x29,0x0, -+0x7e,0x48,0x29,0xbc,0x7e,0xb3,0x2a,0xb, 0x70,0xe, 0x7e,0xb3,0x2a,0x7, 0x70,0x8, -+0x7e,0xb3,0x2a,0x8, 0x70,0x2, 0xc1,0x90,0x30,0xb, 0x6, 0x7e,0x68,0x33,0x5f,0x80, -+0x4, 0x7e,0x68,0x33,0x21,0x7f,0x6, 0x12,0xc8,0xe0,0x7e,0x73,0x2a,0x4, 0x7a,0x6b, -+0x70,0x6c,0xdd,0xc1,0xf, 0x74,0x9, 0xac,0xbd,0x9, 0xc5,0x29,0xc, 0x7c,0xbc,0x54, -+0xf, 0x12,0xc8,0x8a,0xf5,0x28,0x7c,0xbc,0x54,0xf0,0xbe,0xb0,0x0, 0x28,0x2, 0xc1, -+0xd, 0xe5,0x28,0xbe,0xb0,0x3, 0x78,0x2, 0xc1,0xd, 0x7e,0x8, 0x0, 0x28,0x7c,0xbc, -+0x12,0xa1,0x2b,0x50,0x2, 0xc1,0xd, 0x74,0x9, 0xac,0xbd,0x9, 0xb5,0x29,0xd, 0xf5, -+0x25,0x74,0x9, 0xac,0xbd,0x9, 0xb5,0x29,0xe, 0xc4,0x54,0xf0,0xf5,0x26,0x7e,0x73, -+0x2a,0x4d,0xbc,0x7c,0x28,0x54,0x7e,0xb3,0x2a,0x9, 0x70,0x2a,0x75,0x2a,0xf, 0x7e, -+0x8, 0x0, 0x25,0xa, 0x3c,0x2e,0x34,0x33,0xd, 0x6d,0x22,0x74,0x1, 0x12,0x8f,0xd7, -+0x75,0x2a,0x20,0x7e,0x8, 0x0, 0x26,0xa, 0x3c,0x2e,0x34,0x33,0x17,0x6d,0x22,0x74, -+0x10,0x12,0x8f,0xd7,0x80,0xe, 0xa, 0x3c,0x9, 0xb3,0x33,0xd, 0xf5,0x25,0x9, 0xb3, -+0x33,0x17,0xf5,0x26,0xa, 0x3c,0x12,0xc8,0x8c,0xb4,0x1, 0xe, 0xe4,0xa, 0x3c,0x19, -+0xb3,0x33,0xd, 0x19,0xb3,0x33,0x17,0x12,0x4f,0xe9,0x7e,0xb3,0x2a,0x64,0xb4,0xff, -+0x13,0x75,0x25,0x0, 0x74,0x9, 0xac,0xbd,0x9, 0xb5,0x29,0xc, 0xbe,0xb0,0xff,0x68, -+0x3, 0x75,0x25,0x1, 0x7e,0x90,0x9, 0xac,0x9d,0x49,0xb4,0x29,0x8, 0x49,0xa4,0x29, -+0xa, 0xe5,0x28,0x60,0x5, 0xe5,0x28,0xb4,0x1, 0x2, 0x5, 0x29,0xe5,0x28,0xb4,0x1, -+0x2c,0x75,0x27,0x0, 0x80,0x1d,0x7e,0x71,0x27,0x74,0x9, 0xac,0x7b,0x9, 0xb3,0x33, -+0xa1,0x54,0xf, 0xbc,0xbc,0x78,0xa, 0x49,0xb3,0x33,0x9d,0x49,0xa3,0x33,0x9f,0x80, -+0xc, 0x5, 0x27,0x90,0x60,0x99,0xe4,0x93,0xbe,0xb1,0x27,0x38,0xd9,0x5e,0xb4,0xf, -+0xff,0x5e,0xa4,0xf, 0xff,0x9, 0x74,0x29,0xc, 0xa, 0x57,0xc4,0x54,0xf0,0x7c,0xab, -+0xe4,0x2d,0xa5,0xbe,0x70,0xff,0x68,0x16,0xe5,0x28,0xbe,0xb0,0x1, 0x68,0x2, 0x5, -+0x24,0xb, 0xf0,0xe5,0x28,0xa, 0x5b,0x12,0xbb,0xe9,0x2d,0xb5,0x80,0x4, 0x2e,0xb4, -+0xc0,0x0, 0x7e,0x70,0x6, 0xac,0x7e,0x7f,0x6, 0x2d,0x13,0x79,0xb0,0x0, 0x2, 0x7f, -+0x6, 0x2d,0x13,0x79,0xa0,0x0, 0x4, 0xe5,0x25,0x7f,0x6, 0x2d,0x13,0x39,0xb0,0x0, -+0x6, 0xe5,0x26,0x2d,0x3d,0x7d,0x2c,0x39,0xb1,0x0, 0x7, 0xb, 0xe0,0xb, 0xd0,0x7e, -+0x73,0x2a,0x4d,0xbc,0x7d,0x28,0x2, 0x81,0xa5,0xe5,0x24,0x39,0xb6,0x0, 0x1, 0x7e, -+0xb3,0x39,0x79,0xb4,0x1, 0x9, 0x7e,0xb3,0x2a,0x8, 0xb4,0x1, 0x49,0x80,0x44,0xbe, -+0xf0,0x0, 0x38,0x6, 0x7e,0xb3,0x2a,0x8, 0x60,0x3c,0x30,0xa, 0x28,0x12,0x4e,0xb9, -+0x7e,0x34,0x0, 0x1e,0x12,0x4c,0x3f,0x7e,0x10,0xa, 0x7e,0x34,0x0, 0x5, 0x12,0x4c, -+0x3f,0x30,0xa, 0x4, 0x1b,0x10,0x78,0xf2,0xe4,0x12,0x4e,0xbe,0x7e,0x34,0x0, 0x3, -+0x12,0x4c,0x3f,0xc2,0xa, 0xb2,0xb, 0xe5,0x29,0xbe,0xb0,0x0, 0x28,0x5, 0x75,0x18, -+0x0, 0xd2,0xa, 0x12,0x4e,0xb9,0x7e,0xb3,0x2a,0x7, 0x60,0x5, 0x7f,0x4, 0x12,0x71, -+0xfd,0xe4,0x7a,0xb3,0x2a,0xb, 0x7a,0xb3,0x2a,0x7, 0x7a,0xb3,0x2a,0x8, 0x80,0x4, -+0xe4,0x12,0x4e,0xbe,0x12,0x8f,0x3c,0xca,0x59,0x7e,0x18,0x29,0x8, 0x7e,0x8, 0x33, -+0x9d,0x12,0x20,0xf1,0x1b,0xfd,0x4c,0xff,0x78,0xc, 0x12,0x77,0xcf,0x7e,0x8, 0x33, -+0x9d,0x74,0xff,0x12,0x21,0x16,0xda,0x3b,0x22,0x12,0x4f,0x65,0x74,0x1, 0x70,0x3, -+0xd2,0x86,0x22,0xc2,0x86,0x22,0x12,0x4f,0xf0,0xc2,0x0, 0x12,0xba,0x85,0xc2,0x2, -+0x12,0x4f,0xa5,0xc2,0x0, 0x12,0x4f,0xfe,0xa9,0xd5,0xcb,0x74,0xf, 0x12,0x49,0x2a, -+0x7a,0x1b,0xb0,0x74,0xf, 0x6c,0x77,0x12,0x49,0xb5,0xe5,0xfc,0x7a,0xb, 0xb0,0x43, -+0xfc,0x10,0x2, 0x4b,0xb1,0x24,0xab,0x68,0x10,0x24,0xef,0x68,0x1c,0x24,0xde,0x68, -+0x26,0x24,0xde,0x78,0x2f,0x74,0x5, 0x80,0x2d,0x7e,0xb3,0x34,0x4f,0xb4,0x5, 0x2a, -+0x12,0x4c,0x3b,0x12,0xba,0x3d,0x2, 0x4f,0xd2,0x7e,0xb3,0x34,0x4f,0xb4,0x5, 0x1a, -+0x12,0x4c,0x3b,0x75,0xe9,0xff,0x22,0x7e,0xb3,0x34,0x4f,0xb4,0x5, 0xc, 0x12,0x4c, -+0x3b,0x2, 0x4f,0xcc,0x74,0x1, 0x7a,0xb3,0x34,0x4f,0x22,0xa, 0x3a,0x2e,0x34,0x0, -+0x3, 0x3e,0x34,0x3e,0x34,0x3e,0x34,0x3e,0x34,0x22,0x7c,0xab,0x80,0xe, 0x7e,0x70, -+0x3, 0x80,0x1, 0x0, 0x7c,0x67,0x1b,0x70,0xa5,0xbe,0x0, 0xf7,0x7c,0x6a,0x1b,0xa0, -+0xa5,0xbe,0x0, 0xea,0x22,0x7e,0xb3,0x3a,0x39,0x4, 0x7a,0xb3,0x3a,0x39,0xe5,0x1a, -+0xb4,0x1, 0x8, 0xe4,0x7a,0xb3,0x3a,0x39,0x75,0x1a,0x0, 0x7e,0x73,0x3a,0x39,0x7a, -+0x73,0x39,0x38,0x22,0x7c,0x6b,0xa9,0xd5,0xcb,0x74,0xf, 0x12,0x49,0xb5,0x7a,0x61, -+0xfc,0x12,0x4b,0xb1,0x12,0x6a,0xe2,0xd2,0x0, 0x12,0x4f,0xfe,0x12,0x4f,0xbf,0x12, -+0x14,0x13,0x2, 0x13,0xcb,0xa9,0xd0,0xce,0xa2,0x2, 0xa9,0x91,0xc9,0x22,0x30,0x1, -+0x6, 0x12,0x4f,0xbf,0x2, 0x13,0xcb,0x12,0x4f,0xf0,0xc2,0x2, 0x2, 0x4f,0xa5,0xd2, -+0x2, 0x12,0x4f,0xa5,0x74,0x1, 0x22,0xd2,0x1, 0x2, 0x4f,0xae,0x75,0xe7,0x6b,0x2, -+0x4f,0xd2,0xe4,0x7e,0x34,0xd7,0xfc,0x7e,0x24,0x0, 0xff,0x7a,0x1b,0xb0,0x7e,0x34, -+0xd7,0xfd,0x7a,0x1b,0xb0,0x75,0xe9,0xff,0x22,0x75,0x25,0x0, 0x75,0x26,0x0, 0x22, -+0xe4,0x12,0x14,0x13,0x2, 0x13,0xcb,0x7e,0x8, 0x2a,0x6d,0x2, 0xd, 0x72,0xa2,0x0, -+0xa9,0x97,0xc1,0xa2,0x0, 0xa9,0x97,0xc2,0x22,0x12,0xc9,0x4, 0x12,0xc8,0xfb,0x6d, -+0x33,0x7a,0x35,0xa, 0x12,0x50,0x5f,0x12,0x50,0x39,0x74,0x50,0x7a,0xb3,0x3a,0x18, -+0x7e,0x24,0x3, 0x20,0x12,0x50,0x32,0xe4,0x12,0xc8,0x78,0x6d,0x33,0x7a,0x37,0x3b, -+0x54,0x22,0x7d,0x32,0x74,0xfa,0x2, 0x13,0x5, 0x7e,0x73,0x2b,0x62,0x7a,0x73,0x3a, -+0x17,0x22,0xa2,0xe, 0xe4,0x33,0x7a,0xb3,0x3a,0x12,0x7e,0x73,0x3a,0x16,0xbe,0x73, -+0x2b,0xf, 0x68,0xa, 0xe5,0xc, 0x70,0x6, 0x12,0x50,0x5f,0x12,0x50,0x39,0x22,0x7e, -+0x73,0x2b,0xf, 0x7a,0x73,0x3a,0x16,0x7e,0x73,0x2b,0x1f,0x7a,0x73,0x3a,0x6, 0x7e, -+0x73,0x2b,0x20,0x7a,0x73,0x3a,0x5, 0x7e,0x73,0x2b,0x14,0x7a,0x73,0x3a,0x7, 0x22, -+0xca,0xd8,0xca,0x79,0x7c,0xdb,0x90,0x61,0xc5,0xe4,0x93,0x7c,0xab,0xbe,0xd0,0x80, -+0x78,0x18,0x7e,0xe0,0xff,0x6c,0xff,0x80,0xb, 0x12,0x50,0xf1,0x38,0x4, 0x7c,0xeb, -+0x7c,0xdf,0xb, 0xf0,0xbc,0xaf,0x38,0xf1,0x80,0x1a,0xbe,0xd0,0x81,0x78,0x15,0x6c, -+0xee,0x6c,0xff,0x80,0xb, 0x12,0x50,0xf1,0x40,0x4, 0x7c,0xeb,0x7c,0xdf,0xb, 0xf0, -+0xbc,0xaf,0x38,0xf1,0xbc,0xad,0x38,0x2, 0x6c,0xdd,0x7c,0xbd,0x12,0x6c,0x68,0x12, -+0x50,0x77,0x7e,0x73,0x2b,0x1f,0x7a,0x73,0x3a,0x6, 0x12,0x51,0xd, 0x7e,0x73,0x2b, -+0xf, 0x7a,0x73,0x3a,0x16,0x12,0x50,0x39,0x7a,0xd3,0x39,0xee,0xda,0x79,0xda,0xd8, -+0x22,0x7e,0x90,0x5, 0xac,0x9f,0x9, 0xb4,0x26,0x33,0xbc,0xbe,0x22,0x30,0x0, 0x3, -+0x12,0x50,0x77,0xa2,0x1, 0x92,0x2, 0x12,0x51,0xcc,0x2, 0x51,0xd, 0x7e,0x73,0x2b, -+0x20,0x7a,0x73,0x3a,0x5, 0x22,0x74,0x40,0x12,0x7e,0x2a,0x50,0x9, 0xd2,0x0, 0xd2, -+0x1, 0x12,0x50,0xfd,0x80,0x1c,0x74,0x1, 0x12,0x51,0x50,0x7e,0x43,0x3a,0x3, 0x7e, -+0x50,0x64,0xac,0x45,0x12,0x96,0xdd,0x7a,0xb3,0x2b,0x1f,0x7e,0xf, 0x3b,0x21,0x12, -+0x55,0xa2,0x12,0x51,0xd, 0x7e,0x73,0x2b,0x1f,0x7a,0x73,0x3a,0x6, 0x2, 0x50,0x77, -+0xca,0x3b,0x7c,0xdb,0xe4,0x7a,0xb3,0x2b,0x14,0x12,0x4f,0xf7,0x7e,0xc0,0xa, 0x12, -+0x56,0x75,0x30,0xf, 0xfd,0x74,0x1, 0x12,0x0, 0xe, 0x7e,0x1f,0x3b,0x21,0x12,0x96, -+0xfc,0x7d,0x73,0xbe,0x74,0xff,0xff,0x78,0x9, 0x12,0x51,0xc0,0x2e,0x34,0x0, 0x3, -+0x80,0x18,0xbe,0x74,0x80,0x0, 0x28,0x7, 0x12,0x51,0xc0,0xb, 0x35,0x80,0xb, 0xbe, -+0x74,0x40,0x0, 0x28,0xc, 0x12,0x51,0xc0,0xb, 0x34,0x1b,0xa, 0x30,0x1b,0xc0,0x78, -+0xbe,0xbe,0xd0,0x1, 0x78,0x9, 0x7e,0x1f,0x3b,0x21,0x12,0x95,0xda,0x7d,0x73,0x7e, -+0x1f,0x3b,0x10,0x69,0x31,0x0, 0x1a,0x7a,0x73,0x2b,0x14,0x7d,0x37,0xda,0x3b,0x22, -+0x7e,0xf, 0x3b,0x10,0x2e,0x14,0x0, 0x1a,0xb, 0xa, 0x30,0x22,0xca,0x3b,0x7e,0x34, -+0xff,0xff,0x7a,0x35,0x35,0x7e,0xb3,0x39,0xf9,0xf5,0x2a,0x7e,0xb3,0x2a,0x6d,0xf5, -+0x2b,0x7e,0xb3,0x2a,0x6e,0xf5,0x2c,0x7e,0xb3,0x2a,0x70,0xf5,0x2d,0x7e,0xb3,0x2a, -+0x6f,0xf5,0x2e,0x7e,0x34,0x27,0x10,0x7a,0x35,0x2f,0x7e,0x18,0x40,0x0, 0x7a,0x1d, -+0x31,0x12,0x56,0x6e,0x30,0xf, 0xfd,0x74,0x1, 0x12,0x0, 0xe, 0x7e,0x8, 0x34,0x0, -+0x12,0x56,0x66,0x6c,0xff,0x80,0x35,0x12,0x54,0x45,0x6c,0xee,0x80,0x19,0x7e,0x11, -+0x2c,0xac,0x1e,0x3e,0x4, 0x7e,0x30,0x2, 0xac,0x3f,0x2d,0x10,0x7e,0x1d,0x31,0x2d, -+0x31,0xb, 0x1a,0x10,0x12,0x54,0x4e,0xe5,0x2e,0xbc,0xbe,0x38,0xe1,0xe5,0x2e,0x12, -+0x54,0x5d,0x74,0x2, 0xac,0xbf,0x59,0x35,0x34,0x0, 0xb, 0xf0,0xe5,0x2d,0xbc,0xbf, -+0x38,0xc5,0x12,0x7f,0xdf,0x68,0xb, 0x7e,0x34,0x10,0x0, 0x12,0x54,0x83,0x59,0x35, -+0x33,0xfe,0x6c,0xff,0x80,0x74,0x12,0x54,0x45,0x6c,0xee,0x80,0x12,0x12,0x56,0x3f, -+0x1e,0x34,0x1e,0x24,0x50,0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,0x12,0x54,0x4c,0xe5, -+0x2a,0xbc,0xbe,0x38,0xe8,0xe5,0x2a,0x12,0x54,0x5d,0x74,0x4, 0xac,0xbf,0x59,0x35, -+0x3, 0x6f,0xe5,0x2a,0xbe,0xb1,0x2d,0x50,0x33,0x12,0x54,0x45,0x7e,0xe1,0x2a,0x80, -+0x12,0x12,0x56,0x3f,0x1e,0x34,0x1e,0x24,0x50,0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4, -+0x12,0x54,0x4c,0xe5,0x2d,0xbc,0xbe,0x38,0xe8,0xe5,0x2a,0xa, 0x3b,0x6d,0x22,0xe5, -+0x2d,0xa, 0x1b,0x6d,0x0, 0x9f,0x1, 0x12,0x54,0x61,0x80,0x4, 0x7e,0x34,0x10,0x0, -+0x74,0x4, 0xac,0xbf,0x59,0x35,0x3, 0x71,0xb, 0xf0,0xe5,0x2e,0xbc,0xbf,0x38,0x86, -+0xe5,0x2d,0xa, 0x1b,0x6d,0x0, 0x7e,0x18,0x0, 0x28,0x12,0x1f,0x3c,0x6c,0xff,0x80, -+0x2e,0x74,0x2, 0xac,0xbf,0x49,0x25,0x34,0x0, 0xa, 0x5f,0xad,0x53,0x7e,0x14,0x10, -+0x0, 0x9d,0x15,0xad,0x12,0x74,0xc, 0x1e,0x14,0x1e,0x4, 0x50,0x3, 0x4e,0x20,0x80, -+0x14,0x78,0xf4,0x7d,0x21,0x74,0x2, 0xac,0xbf,0x59,0x25,0x34,0x0, 0xb, 0xf0,0xe5, -+0x2d,0xbc,0xbf,0x38,0xcc,0xe5,0x2b,0xa, 0x1b,0x6d,0x0, 0x7e,0x18,0x0, 0x51,0x12, -+0x1f,0x3c,0x6c,0xff,0x80,0x5c,0x74,0x4, 0xac,0xbf,0x49,0x25,0x3, 0x6f,0xa, 0x1f, -+0xad,0x13,0x7e,0xf4,0x10,0x0, 0x9d,0xf1,0xad,0xf2,0x74,0xc, 0x1e,0xf4,0x1e,0xe4, -+0x50,0x4, 0x4e,0xf4,0x80,0x0, 0x14,0x78,0xf3,0x7d,0x2f,0x74,0x4, 0xac,0xbf,0x59, -+0x25,0x3, 0x6f,0xe5,0x2a,0xbe,0xb1,0x2d,0x50,0x26,0x74,0x4, 0xac,0xbf,0x49,0x25, -+0x3, 0x71,0x2e,0x14,0x10,0x0, 0xad,0x12,0x74,0xc, 0x1e,0x14,0x1e,0x4, 0x50,0x3, -+0x4e,0x20,0x80,0x14,0x78,0xf4,0x7d,0x21,0x74,0x4, 0xac,0xbf,0x59,0x25,0x3, 0x71, -+0xb, 0xf0,0xe5,0x2b,0xbc,0xbf,0x38,0x9e,0x7e,0x73,0x39,0xfb,0xa, 0x37,0x6d,0x22, -+0x74,0xc, 0x2f,0x11,0x14,0x78,0xfb,0x7e,0xf4,0x0, 0x64,0x7d,0x1f,0x12,0x1f,0x3a, -+0x7d,0xe3,0x7a,0xe5,0x35,0x7e,0x73,0x39,0xfc,0xa, 0x37,0x6d,0x22,0x74,0xc, 0x2f, -+0x11,0x14,0x78,0xfb,0x7d,0x1f,0x12,0x1f,0x3a,0x7d,0x63,0x6c,0xff,0x80,0x20,0x74, -+0x2, 0xac,0xbf,0x49,0x45,0x34,0x0, 0xbe,0x45,0x35,0x28,0x9, 0x7e,0x35,0x35,0x59, -+0x35,0x34,0x0, 0x80,0x8, 0xbd,0x46,0x50,0x4, 0x59,0x65,0x34,0x0, 0xb, 0xf0,0xe5, -+0x2d,0xbc,0xbf,0x38,0xda,0x6c,0xff,0x80,0x3a,0x74,0x4, 0xac,0xbf,0x49,0x45,0x3, -+0x6f,0xbe,0x45,0x35,0x28,0x9, 0x7e,0x35,0x35,0x59,0x35,0x3, 0x6f,0x80,0x8, 0xbd, -+0x46,0x50,0x4, 0x59,0x65,0x3, 0x6f,0x49,0x45,0x3, 0x71,0xbe,0x45,0x35,0x28,0x9, -+0x7e,0x35,0x35,0x59,0x35,0x3, 0x71,0x80,0x8, 0xbd,0x46,0x50,0x4, 0x59,0x65,0x3, -+0x71,0xb, 0xf0,0xe5,0x2b,0xbc,0xbf,0x38,0xc0,0x30,0x2, 0x6, 0x7e,0xd, 0x31,0x12, -+0x55,0xa2,0xda,0x3b,0x22,0x9f,0x11,0x7a,0x1f,0x24,0xf4,0x22,0x7d,0x13,0x6d,0x0, -+0x7e,0x1f,0x24,0xf4,0x2f,0x10,0x7a,0x1f,0x24,0xf4,0xb, 0xe0,0x22,0xa, 0x1b,0x6d, -+0x0, 0x7e,0x1f,0x24,0xf4,0x12,0x1f,0x3c,0x7a,0x1f,0x24,0xf4,0x7e,0x25,0x2f,0x74, -+0xc, 0x7d,0x13,0x7d,0x32,0x6d,0x22,0x60,0x5, 0x2f,0x11,0x14,0x78,0xfb,0xb, 0x14, -+0x2, 0x1f,0x3a,0x7e,0xa1,0x2c,0x74,0x2, 0xa4,0x22,0xca,0x3b,0x7e,0x8, 0x1f,0x34, -+0x12,0x56,0x66,0x7e,0x1f,0x33,0xf8,0x7a,0x1d,0x26,0x7e,0xb3,0x2a,0x74,0xf5,0x2d, -+0x7e,0xb3,0x3a,0xce,0xb4,0x1, 0x6, 0x7e,0x38,0x3a,0xd0,0x80,0x4, 0x7e,0x38,0x5, -+0xf8,0x6d,0x33,0x7a,0x35,0x2a,0x74,0x2, 0x12,0x0, 0x1e,0x7e,0xb3,0x3a,0xcf,0x70, -+0xe, 0x7e,0xb3,0x3a,0xcd,0x70,0x8, 0x74,0x1, 0x7a,0xb3,0x3a,0xcf,0xa1,0x5e,0x7e, -+0xb3,0x3a,0xcf,0x70,0x6, 0x74,0x1, 0x7a,0xb3,0x3a,0xcf,0x7e,0xb3,0x3a,0xce,0xb4, -+0x1, 0x17,0x75,0x2c,0x0, 0x80,0x9, 0x12,0x54,0x83,0x12,0x55,0x92,0x12,0x56,0x2e, -+0xe5,0x2d,0xbe,0xb1,0x2c,0x38,0xf0,0x80,0x1b,0x75,0x2c,0x0, 0x80,0xf, 0x12,0x54, -+0x83,0x12,0x55,0x92,0x3e,0x24,0x3e,0x24,0x1e,0x24,0x12,0x56,0x2e,0xe5,0x2d,0xbe, -+0xb1,0x2c,0x38,0xea,0x7e,0x34,0x61,0x59,0x12,0x23,0xc9,0x7a,0x35,0x2e,0x7e,0x18, -+0x1f,0x34,0x7f,0x1, 0x12,0x7a,0x3c,0x75,0x2c,0x0, 0x80,0x16,0x12,0x54,0x83,0x12, -+0x55,0x8b,0xbe,0x35,0x2a,0x8, 0x9, 0x12,0x54,0x83,0x12,0x55,0x8b,0x7a,0x35,0x2a, -+0x5, 0x2c,0xe5,0x2d,0xbe,0xb1,0x2c,0x38,0xe3,0x12,0x55,0x9a,0x40,0x25,0x7e,0xb3, -+0x3a,0xce,0xb4,0x1, 0x1e,0x5, 0x1f,0xe5,0x1f,0xbe,0xb0,0xa, 0x40,0x15,0x75,0x1f, -+0x0, 0xe5,0x2d,0xa, 0x3b,0x3e,0x34,0xca,0x39,0x7e,0x1d,0x26,0x7f,0x3, 0x12,0x20, -+0xf1,0x1b,0xfd,0x74,0x2, 0x12,0x0, 0x1e,0x12,0x55,0x9a,0x50,0xb, 0x74,0x2, 0x7a, -+0xb3,0x33,0xf7,0xe4,0x7a,0xb3,0x3a,0xcf,0xda,0x3b,0x22,0x49,0x35,0x1f,0x34,0x2, -+0x21,0x48,0x7f,0x13,0x2d,0x35,0xb, 0x1a,0x20,0x22,0x7e,0x37,0x2b,0x7, 0xbe,0x35, -+0x2a,0x22,0x12,0x55,0xac,0xb, 0x34,0x7a,0x73,0x2b,0x20,0x22,0xca,0x79,0x7f,0x10, -+0x9f,0x0, 0x12,0xc9,0x5d,0x4c,0xaa,0x78,0x6, 0x7e,0x34,0x0, 0x40,0x80,0x6c,0x6c, -+0x99,0x80,0x38,0xa, 0xe9,0x2e,0xe4,0x60,0xac,0x7d,0x7e,0x7a,0xf1,0x82,0x7a,0xe1, -+0x83,0xe4,0x93,0x7c,0x8b,0x90,0x60,0xaa,0xe4,0x93,0x70,0xe, 0x7e,0xf3,0x2a,0x6e, -+0xac,0xf8,0x7e,0xb3,0x2a,0x70,0xa, 0xfb,0x2d,0xf7,0x7d,0xef,0x3e,0xe4,0x7f,0x61, -+0x2d,0xde,0xb, 0x6a,0xd0,0x6d,0xcc,0x2f,0x6, 0xb, 0x90,0xbc,0xa9,0x38,0xc4,0xbe, -+0x8, 0x0, 0x0, 0x78,0x2, 0xb, 0xc, 0xa, 0x5a,0x6d,0x44,0x7f,0x10,0x7f,0x2, 0x12, -+0x1f,0x3c,0x7f,0x1, 0xb, 0xc, 0x7e,0x34,0xc4,0x0, 0x7e,0x24,0x0, 0x9, 0x12,0x1f, -+0x3c,0xbe,0x34,0x0, 0xfa,0x28,0x4, 0x7e,0x34,0x0, 0xfa,0xda,0x79,0x22,0x7e,0xd, -+0x26,0x2d,0x15,0xb, 0xa, 0x30,0x9d,0x32,0x59,0x35,0x1f,0x34,0x5, 0x2c,0x22,0x7e, -+0x11,0x2c,0xac,0x1f,0x3e,0x4, 0x7e,0x30,0x2, 0xac,0x3e,0x2d,0x10,0x7e,0x1d,0x31, -+0x2d,0x31,0xb, 0x1a,0x20,0x7a,0x27,0x24,0xf2,0x74,0x2, 0xac,0xbe,0x49,0x35,0x34, -+0x0, 0xad,0x23,0x74,0xc, 0x22,0x7e,0x34,0x0, 0x38,0xe4,0x2, 0x21,0x16,0x7e,0x8, -+0x2a,0x6d,0x12,0xd, 0x72,0xe4,0x12,0x0, 0xe, 0x74,0x1, 0x7e,0x70,0x99,0x12,0x13, -+0x61,0x2, 0x0, 0x4e,0xb4,0x3, 0x5, 0x12,0x56,0x94,0x80,0x2, 0xe4,0x22,0x12,0x56, -+0x79,0x74,0x1, 0x22,0x12,0x7f,0xc4,0xe4,0x12,0x0, 0xe, 0x7e,0x8, 0x2a,0x6d,0x2, -+0xd, 0x72,0x12,0x8a,0x51,0x38,0x2, 0xe4,0x22,0x12,0x8a,0x49,0x49,0x55,0x34,0x3b, -+0xbe,0xb0,0x2, 0x38,0x3, 0x2, 0x56,0xbb,0x2, 0x56,0x84,0x7e,0xd7,0x2b,0xd, 0xbe, -+0xb0,0x1, 0x28,0x2, 0xe4,0x22,0x12,0x89,0xe2,0x12,0x56,0xe7,0x7a,0xd7,0x2b,0xd, -+0x7e,0x73,0x2a,0xfa,0xa, 0x37,0x3e,0x34,0x3e,0x34,0xe4,0x7e,0x50,0x1, 0x12,0x13, -+0x36,0x12,0x57,0xbb,0x74,0x1, 0x22,0x7e,0x8, 0x2a,0x6d,0x2, 0x5, 0xb4,0xca,0x3b, -+0x7e,0xe3,0x2a,0x74,0x7e,0xf3,0x2a,0xfa,0x74,0x1, 0x7a,0xb3,0x2a,0xfa,0x12,0x56, -+0xe7,0x12,0xc8,0xb9,0x12,0x29,0x95,0x7e,0x17,0x2a,0xfe,0x6d,0x0, 0x12,0x21,0x16, -+0x7e,0xd0,0x7, 0x12,0x26,0x86,0x6c,0xcc,0x80,0x19,0x7e,0x34,0x0, 0x1, 0x7c,0xbd, -+0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb,0x7c,0x67,0x12,0xc8,0xd6,0x4c,0x76,0x7a,0x29, -+0x70,0xb, 0xc0,0x12,0x86,0xe8,0xa, 0x3c,0xbd,0x32,0x48,0xde,0x12,0x57,0xaa,0x30, -+0x1b,0xfd,0x12,0x87,0x83,0x7e,0xb3,0x2a,0x73,0x7c,0x7e,0x12,0x10,0xee,0x74,0x2, -+0x12,0x0, 0x1e,0x6c,0xcc,0x80,0x29,0x74,0x2, 0xac,0xbc,0x49,0x35,0x6, 0xfc,0xbe, -+0x34,0x15,0x40,0x50,0x19,0x7e,0x34,0x0, 0x1, 0x7c,0xbd,0x60,0x5, 0x3e,0x34,0x14, -+0x78,0xfb,0x7c,0xb7,0x64,0xff,0x12,0xc8,0xd6,0x5c,0x7b,0x7a,0x29,0x70,0xb, 0xc0, -+0x12,0x86,0xe8,0xa, 0x3c,0xbd,0x32,0x48,0xce,0x1b,0xd0,0xbe,0xd0,0x0, 0x58,0x83, -+0x12,0x85,0xe3,0x74,0x2, 0x12,0xc9,0x1e,0x12,0x86,0x66,0x74,0x2, 0x12,0x0, 0x1e, -+0x7a,0xf3,0x2a,0xfa,0x12,0x56,0xe7,0xda,0x3b,0x22,0x74,0x2, 0x12,0x0, 0x1e,0x7e, -+0xb3,0x2a,0xfc,0x12,0x86,0x66,0x74,0x2, 0x12,0x0, 0x1e,0x74,0x5, 0x7e,0x70,0x9b, -+0x12,0x13,0x61,0x12,0x57,0xcd,0x7e,0xb3,0x2a,0xfc,0x2, 0xe, 0x94,0x6c,0xaa,0x80, -+0x1e,0xa, 0x3a,0x9, 0x73,0x2a,0xdc,0x12,0x97,0xb2,0x7c,0x7b,0xa, 0x47,0x7e,0x50, -+0x2, 0xac,0x5a,0x7e,0xf, 0x3b,0x8, 0x2d,0x12,0x79,0x40,0x0, 0x48,0xb, 0xa0,0x7e, -+0x63,0x2a,0x74,0xbc,0x6a,0x38,0xda,0x22,0xca,0xd8,0xca,0x79,0x7e,0x73,0x2a,0x6e, -+0x7e,0xf3,0x2a,0x6d,0xac,0xf7,0x7d,0x37,0x3e,0x34,0x7e,0x8, 0x1f,0x34,0xe4,0x12, -+0x21,0x16,0x7e,0xb3,0x39,0xff,0xb4,0x1, 0x64,0x7e,0x73,0x3a,0x0, 0xbe,0x70,0x0, -+0x28,0x5b,0x6c,0xdd,0x80,0x3c,0x12,0x26,0x86,0x12,0x28,0x88,0x6d,0x33,0x80,0x28, -+0x7e,0x35,0x24,0x3e,0x34,0x49,0x33,0xd, 0xc8,0x12,0x21,0x48,0x7a,0x35,0x26,0x7e, -+0x35,0x24,0x7d,0x13,0x3e,0x14,0x49,0x21,0x1f,0x34,0xbe,0x25,0x26,0x58,0x7, 0x7e, -+0x25,0x26,0x59,0x21,0x1f,0x34,0xb, 0x34,0x7a,0x35,0x24,0xbe,0x75,0x24,0x38,0xd0, -+0xb, 0xd0,0x7e,0x73,0x3a,0x0, 0xbc,0x7d,0x38,0xbc,0x7d,0x37,0x3e,0x34,0xca,0x39, -+0x7e,0x18,0x1f,0x34,0x7e,0x8, 0xd, 0xc8,0x12,0x20,0xf1,0x1b,0xfd,0xda,0x79,0xda, -+0xd8,0x22,0x7e,0x8, 0x3a,0x3b,0x12,0x58,0xb9,0x7e,0x8, 0x3a,0x43,0x12,0x58,0xb9, -+0x12,0x58,0xce,0x12,0x58,0xd5,0x2, 0x58,0x99,0x7e,0x37,0x3a,0x3b,0xbe,0x34,0x0, -+0x0, 0x28,0x15,0x7e,0x73,0x3b,0x57,0xbe,0x70,0x5, 0x50,0xc, 0x7e,0xb3,0x39,0x79, -+0x70,0x6, 0x12,0x58,0xdc,0x12,0x5d,0x3e,0x22,0xb, 0xa, 0x30,0xe5,0x5d,0xa, 0x2b, -+0xbd,0x32,0x28,0x4, 0x9d,0x32,0x80,0x2, 0x6d,0x33,0x1b,0xa, 0x30,0x22,0x7e,0x8, -+0x2b,0xb7,0x2, 0x58,0xb9,0x7e,0x8, 0x3b,0x3f,0x2, 0x58,0xb9,0x6d,0x33,0x7a,0x37, -+0x3a,0xcb,0x22,0xca,0xf8,0x7e,0xa3,0x2a,0x2, 0x7e,0xb3,0x2a,0x3, 0xbe,0xa0,0x1, -+0x38,0x21,0xbe,0xb0,0x1, 0x38,0x1c,0x7e,0x47,0x28,0x86,0xbe,0x44,0x0, 0x1e,0x28, -+0x2, 0x80,0x10,0x7e,0xf3,0x2f,0x80,0x4c,0xff,0x68,0x17,0x7e,0x47,0x2b,0xb7,0x4d, -+0x44,0x78,0xf, 0x12,0x58,0xdc,0x74,0x1, 0x7a,0xb3,0x3a,0xcd,0x7a,0xb3,0x39,0x4e, -+0x80,0x35,0x4c,0xaa,0x78,0x36,0xb4,0x1, 0x33,0x7e,0x37,0x2b,0xb7,0x7a,0x37,0x2f, -+0x82,0x7e,0xb3,0x2f,0x80,0xb4,0x3, 0x1f,0x7e,0x37,0x2b,0xb7,0xbe,0x34,0x0, 0x0, -+0x28,0x15,0x74,0x4, 0x7a,0xb3,0x2f,0x80,0x7e,0x37,0x2f,0x98,0x7e,0x27,0x2f,0x9a, -+0x12,0x59,0xf4,0x21,0xed,0x80,0x0, 0x12,0xc3,0xe, 0x21,0xed,0x7e,0xc7,0x29,0x8, -+0x7e,0xd7,0x29,0xa, 0x4c,0xff,0x78,0x19,0x70,0x57,0xbe,0xa0,0x1, 0x78,0x52,0x7d, -+0x3c,0x7d,0x2d,0x12,0xc2,0xa9,0x12,0x59,0xf0,0x74,0x1, 0x7a,0xb3,0x2f,0x80,0x80, -+0x40,0xbe,0xf0,0x1, 0x78,0x2e,0x7e,0x27,0x2f,0x88,0x9e,0x27,0x2f,0x90,0x7e,0x14, -+0x62,0x8a,0x12,0x5a,0xad,0xbd,0x23,0x38,0x13,0x7e,0x27,0x2f,0x96,0x9e,0x27,0x2f, -+0x8e,0x7e,0x14,0x62,0x8c,0x12,0x5a,0xad,0xbd,0x23,0x28,0x15,0x74,0x3, 0x7a,0xb3, -+0x2f,0x80,0x80,0x5, 0xbe,0xf0,0x3, 0x78,0x8, 0x7a,0xc7,0x2f,0x98,0x7a,0xd7,0x2f, -+0x9a,0x7e,0xb3,0x2f,0x80,0x60,0x26,0x7d,0x3c,0x7d,0x2d,0x7e,0x17,0x2b,0xbb,0x7e, -+0x7, 0x2b,0xbd,0x12,0x5c,0xaa,0xa, 0x2b,0x7e,0x73,0x2f,0x7f,0xa, 0x37,0xbd,0x32, -+0x58,0xb, 0x12,0x59,0xf0,0x7a,0xc7,0x2b,0xbb,0x7a,0xd7,0x2b,0xbd,0xda,0xf8,0x22, -+0x7d,0x3c,0x7d,0x2d,0x7d,0x42,0x7d,0x13,0x7d,0x24,0x12,0x5f,0xc3,0x7d,0x31,0x12, -+0xaf,0x7d,0x2, 0x5a,0x5, 0x7e,0x3, 0x2f,0xa8,0xbe,0x0, 0xf0,0x50,0x2, 0x41,0x9e, -+0x41,0x93,0x6c,0x99,0x7e,0xb3,0x2f,0x7f,0xbe,0xb0,0x20,0x50,0x5, 0x4, 0x7a,0xb3, -+0x2f,0x7f,0x7e,0x1f,0x2b,0xbf,0x7a,0x1f,0x1f,0x34,0x7e,0x80,0x1, 0x80,0x49,0x74, -+0x4, 0xac,0xb8,0x49,0x35,0x2b,0xbf,0x49,0x25,0x2b,0xc1,0x7e,0x17,0x1f,0x34,0x7e, -+0x7, 0x1f,0x36,0x12,0x5c,0xaa,0x7c,0x1b,0x7e,0x3, 0x2f,0x7f,0xbc,0x1, 0x38,0x26, -+0xb, 0x90,0x7e,0x70,0x4, 0xac,0x78,0x2e,0x34,0x2b,0xbf,0x7e,0x14,0x1f,0x34,0x74, -+0x4, 0x12,0x1f,0xc1,0x7e,0x34,0x1f,0x34,0x7e,0x30,0x4, 0xac,0x39,0x2e,0x14,0x2b, -+0xbf,0x74,0x4, 0x12,0x1f,0xc1,0xb, 0x80,0x7e,0x3, 0x2f,0xa8,0xbc,0x8, 0x38,0xaf, -+0xa, 0x59,0xb, 0x54,0x7c,0xb, 0x7a,0x3, 0x2f,0xa8,0x7e,0x3, 0x2f,0x7f,0xbe,0x0, -+0x20,0x50,0xb, 0x7e,0x3, 0x2f,0xa8,0xbe,0x0, 0xec,0x40,0x2, 0x41,0x12,0x22,0x7d, -+0x34,0x9e,0x34,0x0, 0x40,0x7d,0x2e,0x9d,0x23,0x7e,0x14,0x61,0x49,0x7e,0x4, 0x0, -+0xff,0xb, 0xa, 0x30,0x22,0x7d,0xe3,0x9f,0x11,0x7e,0x14,0x61,0x43,0x12,0x5d,0xdc, -+0x90,0x61,0x35,0xe4,0x93,0x70,0x3, 0x7d,0x3e,0x22,0x90,0x61,0x36,0xe4,0x93,0xb4, -+0x1, 0x6, 0x7e,0x83,0x2a,0x6f,0x80,0x4, 0x7e,0x83,0x2a,0x70,0x12,0x92,0xb4,0xbe, -+0xe4,0x0, 0x3f,0x38,0x1e,0x7e,0x24,0x0, 0x3f,0x9d,0x2e,0x7e,0x14,0x61,0x47,0x12, -+0x5a,0xad,0x12,0x5b,0xee,0x90,0x61,0x45,0x12,0x5b,0xe5,0x48,0x2, 0x7f,0x10,0x9f, -+0x1, 0x7f,0x10,0x12,0xc9,0x5d,0xbe,0xa0,0x0, 0x28,0x36,0x7d,0x14,0x9e,0x14,0x0, -+0x3f,0xbd,0x1e,0x38,0x15,0x12,0x5c,0x96,0xbd,0x1e,0x40,0xe, 0x12,0x5a,0x9f,0x12, -+0x5b,0xd8,0x48,0x34,0x7f,0x10,0x1b,0x1c,0x80,0x2e,0x12,0x5c,0x96,0xbd,0x1e,0x50, -+0x31,0x7d,0x34,0x9e,0x34,0x0, 0x20,0x12,0x5a,0xa5,0x12,0x5b,0xee,0x7d,0x1f,0x80, -+0x1d,0x4c,0xaa,0x78,0x1d,0x12,0x5c,0x8f,0xbd,0x5e,0x38,0x16,0x12,0x5a,0x9f,0x12, -+0x5b,0xd8,0x48,0x4, 0x7f,0x10,0x1b,0x1c,0xa, 0xb, 0x7d,0x1f,0x9d,0x10,0x6d,0x0, -+0x2f,0x10,0xbe,0xe4,0x0, 0x3f,0x28,0x6f,0x12,0x5c,0x8f,0xbd,0x5e,0x28,0x68,0x7d, -+0xd4,0xb, 0xd4,0x1e,0xd4,0x7d,0x5d,0x1b,0x54,0xbd,0x5e,0x40,0xc, 0x7d,0x35,0x9d, -+0x3e,0x6d,0x22,0x7e,0x14,0x61,0x4b,0x80,0xa, 0x7d,0x3e,0x9d,0x3d,0x6d,0x22,0x7e, -+0x14,0x61,0x4d,0x7e,0x4, 0x0, 0xff,0xb, 0xa, 0x10,0x12,0x1f,0x31,0x12,0x5b,0xf2, -+0xbd,0x5e,0x7d,0x1f,0x40,0xc, 0x1e,0x14,0x1b,0x14,0x6d,0x0, 0x9f,0x1, 0x7f,0x10, -+0x80,0x6, 0x1e,0x14,0x6d,0x0, 0x2f,0x10,0x90,0x61,0x45,0x12,0x5b,0xe5,0x58,0x4, -+0x7f,0x10,0x80,0x13,0x90,0x61,0x46,0xe4,0x93,0xa, 0xb, 0x7d,0x1f,0x9d,0x10,0x6d, -+0x0, 0xbf,0x10,0x8, 0x2, 0x7f,0x10,0x22,0xad,0x32,0x6d,0x22,0x7c,0x76,0x7c,0x65, -+0x1a,0x24,0x90,0x61,0x46,0xe4,0x93,0xa, 0x1b,0x6d,0x0, 0xbf,0x10,0x22,0xad,0x32, -+0x6d,0x22,0x7c,0x76,0x7c,0x65,0x1a,0x24,0x22,0x7e,0x73,0x38,0x37,0x7a,0x73,0x38, -+0xad,0x7e,0x27,0x3b,0x1e,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad,0x1e,0x34,0xbd,0x32, -+0x50,0x6, 0x74,0x1, 0x7a,0xb3,0x38,0x37,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad,0xbd, -+0x32,0x50,0x8, 0xe4,0x7a,0xb3,0x38,0x35,0x12,0x5d,0x45,0x7e,0x37,0x38,0x3d,0xbd, -+0x32,0x50,0x4, 0x7a,0x27,0x38,0x3d,0x12,0xc9,0x45,0x38,0xa, 0x12,0xc9,0x3d,0x38, -+0x5, 0x12,0xc9,0x35,0x28,0x3d,0x12,0x5d,0x4c,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad, -+0x1e,0x34,0x1e,0x34,0xbd,0x32,0x28,0x21,0x7e,0xb3,0x38,0x35,0x4, 0x7a,0xb3,0x38, -+0x35,0x7e,0x73,0x38,0x35,0xbe,0x70,0x32,0x28,0x14,0x74,0x32,0x7a,0xb3,0x38,0x35, -+0x12,0xc8,0xcc,0x7a,0xb3,0x38,0xaa,0x80,0x5, 0xe4,0x7a,0xb3,0x38,0x35,0x7d,0x32, -+0x2, 0xa9,0x92,0x2, 0x5c,0x86,0x12,0x5d,0xa3,0xe4,0x7a,0xb3,0x38,0x43,0x22,0x7d, -+0x54,0x9e,0x54,0x0, 0x3f,0x22,0x7d,0x4, 0x9e,0x4, 0x0, 0x1f,0x7e,0xd4,0x60,0xd1, -+0x7e,0xc4,0x0, 0xff,0xb, 0x6a,0x10,0x2d,0x10,0x22,0x7d,0x51,0x7d,0x12,0x9d,0x35, -+0x12,0x21,0x48,0x7c,0xa7,0x12,0x5f,0x79,0x7c,0xb7,0xbc,0xba,0x50,0x3, 0x7c,0xba, -+0x22,0x22,0x7d,0x13,0x7e,0x54,0x62,0x58,0x12,0x5c,0xf1,0x50,0x21,0x7e,0x54,0x62, -+0x5a,0x12,0x5c,0xf1,0x28,0x18,0x7e,0x14,0x62,0x5c,0x12,0x5a,0xad,0xbd,0x32,0x50, -+0xd, 0x7e,0x14,0x62,0x5e,0x12,0x5a,0xad,0xbd,0x32,0x28,0x2, 0xe4,0x22,0x74,0x1, -+0x22,0x7e,0x44,0x0, 0xff,0xb, 0x2a,0x30,0xbd,0x31,0x22,0x12,0x5b,0xf9,0x2, 0x5d, -+0x1, 0x7e,0xb3,0x38,0x37,0x60,0xf, 0x74,0x1, 0x7a,0xb3,0x38,0x3f,0x7e,0xb3,0x38, -+0xad,0x70,0x3, 0x12,0x5d,0xad,0x7e,0xb3,0x38,0x3f,0xb4,0x1, 0xc, 0x74,0x3, 0x12, -+0x5d,0x35,0x12,0x23,0xc9,0x3e,0x34,0x80,0x7, 0xe4,0x12,0x5d,0x35,0x12,0x23,0xc9, -+0x7a,0x37,0x2a,0x62,0x22,0x7a,0xb3,0x30,0x27,0x7e,0x34,0x61,0x5b,0x22,0x74,0x1, -+0x7a,0xb3,0x39,0x4e,0x22,0x74,0x2, 0x7a,0xb3,0x38,0x37,0x22,0x7e,0xb3,0x38,0x43, -+0xb4,0x1, 0x3, 0x2, 0x5d,0x45,0x7e,0xb3,0x38,0xa9,0x4, 0x7a,0xb3,0x38,0xa9,0x7e, -+0xb3,0x38,0x37,0xb4,0x2, 0x18,0x7e,0xb3,0x38,0xa8,0x4, 0x7a,0xb3,0x38,0xa8,0xb4, -+0x1, 0x6, 0x74,0x1, 0x7a,0xb3,0x38,0xa9,0x74,0x1, 0x7a,0xb3,0x38,0x37,0x7e,0x73, -+0x38,0xa8,0xbe,0x70,0x3, 0x40,0xf, 0x74,0x1, 0x7a,0xb3,0x38,0x43,0x12,0x5d,0x45, -+0x12,0x5d,0xad,0x12,0x5d,0xa3,0x7e,0x73,0x38,0xa9,0xbe,0x70,0xa, 0x28,0x3, 0x2, -+0x5d,0xa3,0x22,0xe4,0x7a,0xb3,0x38,0xa9,0x7a,0xb3,0x38,0xa8,0x22,0xe4,0x7a,0xb3, -+0x38,0x35,0x6c,0xaa,0x80,0xd, 0x6d,0x44,0x7e,0x70,0xc, 0xac,0x7a,0x59,0x43,0x38, -+0x4c,0xb, 0xa0,0x12,0x5f,0xf4,0x38,0xee,0xe4,0x7a,0xb3,0x38,0x36,0x6d,0x33,0x7a, -+0x37,0x38,0x3d,0x7a,0x37,0x38,0x32,0x22,0x7e,0x14,0x62,0x8e,0x7e,0x4, 0x0, 0xff, -+0xb, 0xa, 0xf0,0x22,0xca,0xf8,0x6c,0xff,0x7e,0xb7,0x2f,0x9c,0x7e,0xc7,0x2f,0x9e, -+0x7e,0x97,0x2f,0x84,0x7e,0xd7,0x2f,0x86,0x7e,0xa7,0x2f,0x98,0x7e,0xe7,0x2f,0x9a, -+0xe4,0x7e,0x73,0x2f,0xa8,0x1b,0x70,0x7d,0x2b,0x7d,0x1c,0x12,0x5f,0x28,0x70,0x2, -+0xe1,0x1b,0x7e,0x73,0x2f,0xa8,0xbe,0x70,0xa, 0x28,0x13,0xe4,0x7e,0x70,0x9, 0x7e, -+0x27,0x2f,0xa0,0x7e,0x17,0x2f,0xa2,0x12,0x5f,0x28,0x70,0x2, 0xe1,0x1b,0x7e,0x73, -+0x2f,0xa8,0xbe,0x70,0x14,0x28,0x13,0xe4,0x7e,0x70,0x13,0x7e,0x27,0x2f,0xa4,0x7e, -+0x17,0x2f,0xa6,0x12,0x5f,0x28,0x70,0x2, 0xe1,0x1b,0x7e,0x34,0x62,0x72,0x12,0x5f, -+0x20,0xbd,0xfc,0x28,0x4c,0x7e,0x34,0x62,0x70,0x12,0x5f,0x20,0xbd,0xfb,0x50,0x41, -+0x7e,0xb3,0x2f,0x81,0x70,0x3b,0x7e,0x34,0x62,0x76,0x12,0x23,0xc9,0x12,0x5d,0xd8, -+0x7d,0x8f,0x9d,0x83,0xbe,0x87,0x2f,0x82,0x50,0x27,0x7e,0x34,0x62,0x74,0x12,0xc9, -+0x16,0x9d,0xf8,0xbe,0xf7,0x2f,0x82,0x28,0x18,0x7d,0xfc,0x3e,0xf4,0xbd,0xfb,0x40, -+0x2, 0xe1,0x1b,0xbd,0xa9,0x50,0x5, 0x7e,0xf0,0x20,0x80,0x7f,0x7e,0xf0,0x21,0x80, -+0x7a,0x7e,0x34,0x62,0x7a,0x12,0x5f,0x20,0xbd,0xfb,0x28,0x6f,0x7e,0x34,0x62,0x78, -+0x12,0x5f,0x20,0xbd,0xfc,0x50,0x64,0x7e,0xb3,0x2f,0x81,0x70,0x5e,0x7e,0x34,0x62, -+0x7e,0x12,0x23,0xc9,0x12,0x5d,0xd8,0x7d,0xaf,0x9d,0xa3,0xbe,0xa7,0x2f,0x82,0x50, -+0x4a,0x7e,0x34,0x62,0x7c,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0xa0,0x9d,0xfa,0xbe,0xf7, -+0x2f,0x82,0x28,0x37,0x7d,0xfb,0x3e,0xf4,0xbd,0xfc,0x50,0x2f,0xbd,0xed,0x50,0x5, -+0x7e,0xf0,0x22,0x80,0x26,0x12,0x5f,0xe4,0x49,0x35,0x2b,0xbb,0x49,0x15,0x2b,0xbd, -+0x49,0x25,0x2b,0xab,0x49,0x5, 0x2b,0xad,0x9d,0x10,0xbe,0x14,0x0, 0x20,0x18,0x8, -+0x9d,0x32,0xbe,0x34,0x0, 0x10,0x58,0x3, 0x7e,0xf0,0x23,0x7c,0xbf,0xda,0xf8,0x22, -+0x7e,0x24,0x0, 0xff,0xb, 0x1a,0xf0,0x22,0x7d,0x41,0x7d,0x2, 0x7c,0x37,0x7c,0x2b, -+0x74,0x4, 0xac,0xb2,0x49,0x35,0x2b,0xbf,0x49,0xf5,0x2b,0xc1,0x74,0x4, 0xac,0xb3, -+0x49,0x25,0x2b,0xbf,0x49,0x55,0x2b,0xc1,0x12,0x8f,0x29,0x7d,0x3f,0x9d,0x35,0x12, -+0x21,0x48,0x9d,0x34,0x12,0x21,0x48,0x7e,0x54,0x62,0x6a,0x7e,0x44,0x0, 0xff,0xb, -+0x2a,0x20,0xbd,0x32,0x50,0x11,0x12,0x5f,0x79,0x7e,0x14,0x62,0x6a,0x12,0x5f,0xec, -+0xbd,0x32,0x50,0x3, 0x74,0x1, 0x22,0xe4,0x22,0x7d,0x31,0x9d,0x30,0x2, 0x21,0x48, -+0x12,0xc8,0x76,0x12,0x58,0xdc,0x7a,0x37,0x3b,0x54,0x12,0x5f,0x9f,0x12,0x28,0x6e, -+0x2, 0x5f,0x93,0x74,0x3, 0x7a,0xb3,0x2f,0xa9,0xe4,0x7a,0xb3,0x30,0x4, 0x22,0x7e, -+0x34,0xd, 0xac,0x12,0x26,0x8a,0x12,0x84,0xd5,0x12,0x7d,0xf0,0x2, 0x5f,0xaf,0x30, -+0x12,0x10,0x12,0x7e,0x2e,0x50,0x3, 0x12,0x6d,0x9e,0x12,0x7d,0x6c,0x12,0xb1,0x2c, -+0xc2,0x12,0x22,0x7e,0xa3,0x2f,0xa8,0xbe,0xa0,0xf0,0x50,0x17,0x74,0x4, 0xa4,0x59, -+0x35,0x2b,0xbf,0x12,0x5f,0xe4,0x59,0x25,0x2b,0xc1,0x7e,0xb3,0x2f,0xa8,0x4, 0x7a, -+0xb3,0x2f,0xa8,0x22,0x7e,0xa3,0x2f,0xa8,0x74,0x4, 0xa4,0x22,0x7e,0x4, 0x0, 0xff, -+0xb, 0xa, 0x20,0x22,0x90,0x61,0xc5,0xe4,0x93,0xbc,0xba,0x22,0x74,0x12,0x22,0xff, -+0x70,0x8f,0x1, 0xfe,0x79,0x86,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x46,0x54,0x53,0x35,0x58,0x34,0x36,0x50,0x30,0x30,0x31,0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x15,0xea,0x30,0x30,0x31,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x10,0x17,0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, -+0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf, 0xe, 0xd, 0xc, -+0xb, 0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x5, 0x0, 0x4, 0xff,0x23,0x1c,0x2, 0xdf,0x2, 0x6, 0x2, 0x4, 0x1e,0x10,0x0, -+0x4, 0x0, 0x64,0xd, 0xac,0x0, 0xc8,0x1, 0x1, 0x0, 0x0, 0x16,0xf, 0x0, 0x0, 0x0, -+0x0, 0x2, 0x94,0x2, 0xf6,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2c,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, -+0xb0,0x0, 0x14,0x1, 0x19,0x18,0x1, 0xf4,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, -+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x78,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, -+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, -+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, -+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x0, 0x4, 0x2d,0x20,0x1, 0x20,0x2, 0x0, 0x0, -+0x0, 0x0, 0x1, 0xf4,0xd5,0x40,0x10,0x17,0x27,0x10,0x25,0x6, 0x80,0x10,0x25,0x6, -+0x78,0x8, 0x10,0x4, 0x20,0x1, 0x0, 0x2, 0xf6,0x2a,0x2a,0x1, 0xa0,0x1, 0xa0,0x0, -+0xc0,0x0, 0xc0,0x4, 0x0, 0x42,0x42,0x2, 0x60,0x2, 0x60,0x0, 0xb2,0x0, 0xb2,0x0, -+0xc8,0x0, 0xb4,0x0, 0xa0,0x0, 0x96,0x0, 0x96,0x0, 0x96,0xa, 0x0, 0x1, 0x7c,0x1, -+0x5, 0xb, 0x1e,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22,0x12,0x0, 0x1, 0x54,0x1, 0x0, 0x15, -+0x1, 0x79,0x1, 0x14,0x0, 0x0, 0x1, 0x1, 0xf, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x96,0x2, 0x26,0x0, 0x50,0x0, 0x2e, -+0x0, 0x4, 0x0, 0x4, 0x1, 0x4, 0x1, 0x90,0x0, 0xc8,0x0, 0x50,0x1, 0xf4,0x0, 0x96, -+0x1, 0x2c,0x1, 0x2c,0x4, 0x18,0x2, 0x2d,0xd5,0x20,0x20,0x2, 0x2f,0xda,0x20,0x28, -+0x2, 0x30,0xdb,0x20,0x41,0x2, 0x40,0xfb,0x30,0x18,0x2, 0x2d,0xd5,0x20,0x18,0x2, -+0x2d,0xd5,0x20,0x18,0x2, 0x2d,0xd5,0x20,0x18,0x2, 0x2d,0xd5,0x20,0x4, 0x5, 0x25, -+0x26,0x27,0x28,0x29,0x4, 0x0, 0x70,0x1, 0x2c,0x64,0x0, 0xc8,0x1, 0x5e,0x0, 0x64, -+0x0, 0x64,0x0, 0x96,0x0, 0x64,0xb, 0xb8,0x8, 0x5, 0x6, 0x80,0x1, 0x90,0x1, 0x2c, -+0x1, 0xc2,0x3, 0x20,0xf, 0xa0,0x1, 0x3, 0x20,0x4, 0xb0,0x3, 0x20,0x1, 0x2, 0x2, -+0x4, 0x4, 0x6, 0x40,0x1, 0x2c,0x1, 0x18,0x1, 0x90,0x1, 0x90,0x1, 0x90,0x1, 0x90, -+0x1, 0x2c,0x1, 0x90,0x1, 0x7c,0x1, 0x7c,0x0, 0x50,0x0, 0x46,0x0, 0x78,0x0, 0x78, -+0x0, 0x78,0x1, 0x18,0x1, 0x18,0xa, 0x5, 0x0, 0x50,0x2, 0xa6,0x0, 0x50,0x3, 0xb0, -+0x0, 0x32,0x1, 0xf4,0x1, 0xf4,0x3, 0x20,0x0, 0xc8,0x0, 0x2f,0x0, 0x1e,0x0, 0x80, -+0x0, 0xbd,0x0, 0x80,0x0, 0x3c,0x3, 0xe8,0x1, 0x0, 0x0, 0x5e,0x0, 0x3c,0x3, 0xe8, -+0x0, 0x20,0x2, 0xd6,0x0, 0x0, 0x4, 0x0, 0x0, 0x64,0x0, 0xa0,0x0, 0xa0,0x13,0x88, -+0x1, 0x2c,0x0, 0xa0,0x0, 0xa0,0x10,0x0, 0xc, 0x0, 0xa, 0xe, 0x5, 0x7, 0x7, 0xa, -+0x6, 0x6, 0xc, 0x64,0xc8,0x7e,0x73,0x28,0x93,0x7a,0x73,0x28,0x94,0x7e,0x73,0x2a, -+0x2, 0x7a,0x73,0x2a,0x3, 0xe4,0x7a,0xb3,0x2a,0x6, 0x22,0xc2,0x0, 0x7e,0xb3,0x16, -+0x91,0x60,0x6, 0x7e,0xb3,0x16,0x90,0x70,0x7, 0x12,0x62,0xd3,0x28,0x2, 0xd2,0x0, -+0xa2,0x0, 0x22,0x7e,0x73,0x28,0x84,0xbe,0x70,0x1, 0x22,0xca,0x3b,0x7e,0x77,0x2a, -+0x5c,0x12,0xa5,0xa8,0x7d,0x63,0x3e,0x34,0x3e,0x34,0x7e,0xe4,0x0, 0xa, 0x12,0x63, -+0x69,0x7e,0xb3,0x28,0xa8,0x60,0xf, 0x7e,0x37,0x38,0x30,0xbd,0x36,0x48,0x7, 0x3e, -+0x34,0x3e,0x34,0x12,0x63,0x69,0xbe,0x64,0x4, 0x4c,0x8, 0xf, 0x12,0xa5,0xf8,0x50, -+0x6, 0x7e,0xb3,0x28,0xa8,0x60,0x4, 0x74,0xa, 0x80,0x13,0x7e,0xb3,0x28,0xa8,0x60, -+0xc, 0x7e,0xb3,0x38,0x2e,0xbe,0xb0,0x0, 0x28,0x8, 0x14,0x80,0x1, 0xe4,0x7a,0xb3, -+0x38,0x2e,0x7e,0xe7,0x2a,0x5c,0x7d,0x3e,0x12,0x4f,0x43,0x7e,0x53,0x38,0x2e,0xbe, -+0x50,0x0, 0x28,0x12,0xbd,0x3f,0x58,0x4, 0x7d,0xf3,0x80,0x6, 0xbd,0xef,0x8, 0x2, -+0x7d,0xfe,0x7a,0xf7,0x2a,0x5c,0x12,0x62,0xd3,0x28,0x3, 0x12,0x36,0xd9,0x7a,0x67, -+0x38,0x30,0x7a,0x77,0x2a,0x5c,0xda,0x3b,0x22,0x7d,0x2e,0x12,0x1e,0xee,0x7d,0xf3, -+0x22,0xca,0x79,0xc2,0x0, 0x7e,0xf0,0x3, 0x12,0x64,0x88,0x7e,0xe3,0x2a,0x3, 0x7e, -+0x34,0x1f,0x34,0x7a,0x37,0x32,0x1a,0x12,0x62,0xd3,0x38,0x2, 0x81,0x4d,0x12,0x65, -+0x1, 0x92,0xd, 0x12,0x64,0x56,0x7c,0xbf,0x12,0xb3,0xd1,0x4c,0xee,0x68,0xe, 0x7e, -+0xa3,0x31,0xf7,0x4c,0xaa,0x78,0xa, 0x7e,0xb3,0x31,0xf8,0x70,0x4, 0xd2,0x0, 0x80, -+0x25,0xbe,0xe0,0x1, 0x28,0xb, 0xe5,0x1d,0xbe,0xb0,0x8, 0x28,0x4, 0xd2,0x0, 0x80, -+0x15,0xd2,0x0, 0x7e,0xb3,0x28,0x84,0xbc,0xbe,0x78,0xb, 0x20,0xd, 0x8, 0x4c,0xaa, -+0x78,0x4, 0x6c,0xff,0xc2,0x0, 0x20,0x0, 0x5, 0x7c,0xbf,0x12,0xb3,0xd1,0x7e,0x8, -+0x31,0xfc,0x12,0x2d,0xcf,0x7a,0xb3,0x31,0xfb,0xbe,0xb3,0x28,0x84,0x50,0x3d,0x7e, -+0x33,0x31,0xfb,0x80,0x29,0x7e,0x70,0x2, 0xac,0x73,0x9, 0x23,0x32,0x1c,0x9, 0x13, -+0x32,0x1d,0x2e,0x37,0x32,0x1a,0xb, 0x38,0x50,0x7e,0x93,0x2a,0x6e,0xac,0x92,0xa, -+0x31,0x2d,0x43,0x12,0xc8,0xad,0x7c,0xb3,0x7e,0x70,0x1, 0x12,0x33,0x1f,0x7c,0x3, -+0x1b,0x30,0xa5,0xb8,0x0, 0xcf,0x74,0x1, 0x7a,0xb3,0x31,0xf9,0x7e,0xa3,0x31,0xfb, -+0x7a,0xa3,0x28,0x84,0x74,0x2, 0xa4,0xca,0x59,0x7e,0x18,0x32,0x1c,0x7e,0x8, 0x26, -+0xfa,0x12,0x20,0xf1,0x1b,0xfd,0x12,0x3c,0x16,0xf5,0x1d,0x80,0x6, 0x75,0x1d,0x64, -+0x12,0xb9,0x8b,0xda,0x79,0x22,0x6c,0xaa,0x12,0x64,0xf5,0x12,0x64,0x81,0x7e,0xb, -+0xb0,0x54,0xfe,0x12,0x64,0x7e,0x7e,0xb, 0xb0,0x54,0x7, 0x12,0x64,0x7e,0x7e,0xb, -+0xb0,0x54,0xfb,0x7a,0xb, 0xb0,0xb, 0xa0,0xbe,0xa0,0x1e,0x40,0xdb,0x22,0x7a,0xb, -+0xb0,0x7f,0x1, 0x2e,0x14,0x0, 0x5, 0x22,0x12,0x67,0xdc,0x28,0x8, 0x7e,0xb3,0x28, -+0x84,0x70,0x2, 0xf5,0x1c,0x7e,0xb3,0x28,0x84,0x70,0x18,0xe5,0x1c,0xbe,0xb0,0xfa, -+0x50,0x2, 0x5, 0x1c,0xe5,0x1c,0xbe,0xb0,0x5, 0x40,0x8, 0xe4,0x7a,0xb3,0x32,0x58, -+0x75,0x1c,0xfa,0x22,0x6c,0xaa,0x12,0x64,0xf5,0x29,0x81,0x0, 0x5, 0x7c,0x98,0x5e, -+0x90,0x1, 0x3e,0x90,0x12,0x64,0x81,0x7c,0xb8,0x54,0xfd,0x4c,0xb9,0x7a,0xb, 0xb0, -+0x29,0xb1,0x0, 0x5, 0x30,0xe0,0x16,0x30,0xe2,0x13,0xc4,0x23,0x54,0x1f,0xb4,0x1, -+0xc, 0x7f,0x1, 0xb, 0x16,0x7e,0xb, 0xb0,0x1e,0xb0,0x7a,0xb, 0xb0,0xb, 0xa0,0xbe, -+0xa0,0x1e,0x40,0xc2,0x22,0x7e,0x70,0x6, 0xac,0x7a,0x2e,0x34,0x32,0x59,0x6d,0x22, -+0x22,0xca,0x3b,0x7e,0xe3,0x28,0x84,0x6c,0xdd,0x6c,0xff,0x74,0x6, 0xac,0xbd,0x12, -+0x67,0xcf,0x30,0xe0,0x37,0x6c,0xcc,0x80,0x27,0x12,0x67,0xed,0x7a,0xb3,0x1f,0x70, -+0x9, 0xa3,0x26,0xfb,0x7a,0xa3,0x1f,0x71,0x7f,0x7, 0x12,0x65,0x57,0x50,0xf, 0x7f, -+0x7, 0x7e,0xb3,0x1f,0x71,0x6c,0x77,0x12,0x65,0x5a,0x50,0x2, 0xb, 0xf0,0xb, 0xc0, -+0xbc,0xec,0x38,0xd5,0xbe,0xf0,0x2, 0x40,0x3, 0xd3,0x80,0x8, 0xb, 0xd0,0xbe,0xd0, -+0x1e,0x40,0xb6,0xc3,0xda,0x3b,0x22,0x7e,0x70,0x1, 0x7c,0x87,0x7c,0x9b,0x29,0xa0, -+0x0, 0x3, 0x29,0x60,0x0, 0x1, 0x7e,0x70,0x1, 0xbe,0x80,0x1, 0x78,0x7, 0x29,0xa0, -+0x0, 0x2, 0x7e,0xb, 0x60,0xa, 0x7, 0xa, 0x29,0x2d,0x2, 0xa, 0x16,0xbd,0x1, 0x48, -+0xc, 0xa, 0x17,0xa, 0x3a,0x2d,0x31,0xbd,0x23,0x18,0x2, 0xd3,0x22,0xc3,0x22,0xca, -+0x3b,0x12,0x67,0xe4,0x75,0x54,0x0, 0x7e,0xa1,0x54,0x74,0x6, 0xa4,0x12,0x67,0xcf, -+0x30,0xe1,0x2e,0x7f,0x7, 0x7c,0xbc,0x12,0x65,0xde,0x50,0x25,0x7f,0x7, 0x7c,0xbe, -+0x12,0x65,0x57,0x50,0x1c,0x7f,0x7, 0x7c,0xbd,0x6c,0x77,0x12,0x65,0x5a,0x50,0x11, -+0x7f,0x7, 0x7c,0xbf,0x6c,0x77,0x12,0x65,0x5a,0x50,0x6, 0x29,0xb7,0x0, 0x4, 0x80, -+0xa, 0x5, 0x54,0xe5,0x54,0xbe,0xb0,0x1e,0x40,0xbd,0xe4,0xda,0x3b,0x22,0x7e,0x70, -+0x1, 0x2, 0x65,0x5a,0xca,0x79,0x7f,0x70,0x7e,0xb4,0xff,0xff,0x6c,0xee,0xc2,0x1, -+0xc2,0x2, 0x29,0x67,0x0, 0x2, 0x7e,0x7b,0x70,0xbc,0x76,0x78,0xe, 0x29,0x67,0x0, -+0x3, 0x29,0x77,0x0, 0x1, 0xbc,0x76,0x78,0x2, 0xd2,0x2, 0x6c,0xff,0x12,0x67,0xc2, -+0x6d,0xaa,0x29,0xb6,0x0, 0x5, 0x20,0xe1,0x2, 0xc1,0x9e,0x7f,0x6, 0x7e,0x7b,0xb0, -+0x12,0x65,0xde,0x50,0x2d,0x7f,0x6, 0x29,0xb7,0x0, 0x2, 0x12,0x65,0xde,0x50,0x22, -+0x7f,0x6, 0x29,0xb7,0x0, 0x1, 0x6c,0x77,0x12,0x65,0x5a,0x50,0x15,0x7f,0x6, 0x29, -+0xb7,0x0, 0x3, 0x6c,0x77,0x12,0x65,0x5a,0x50,0x8, 0x7c,0xef,0xd2,0x1, 0x6d,0xbb, -+0x80,0x55,0x7e,0x6b,0x70,0xa, 0x27,0x7e,0x7b,0x70,0x12,0x67,0xb1,0x2d,0xa3,0x29, -+0x76,0x0, 0x2, 0xa, 0x27,0x29,0x77,0x0, 0x2, 0x12,0x67,0xb1,0x2d,0xa3,0x29,0x76, -+0x0, 0x1, 0xa, 0x27,0x29,0x77,0x0, 0x1, 0x12,0x67,0xb1,0x2d,0xa3,0x29,0x76,0x0, -+0x3, 0xa, 0x27,0x29,0x77,0x0, 0x3, 0x12,0x67,0xb1,0x2d,0xa3,0xbd,0xab,0x50,0x4, -+0x7d,0xba,0x7c,0xef,0xbe,0xa4,0x0, 0x4, 0x38,0x4, 0xd2,0x1, 0x80,0x9, 0xb, 0xf0, -+0xbe,0xf0,0x1e,0x50,0x2, 0xc1,0xd, 0x20,0x1, 0xb, 0x20,0x2, 0x8, 0xbe,0xb4,0x0, -+0x8, 0x50,0x2, 0xd2,0x1, 0x20,0x1, 0x2, 0xe1,0x5f,0x74,0x6, 0xac,0xbe,0x12,0x67, -+0xc6,0x29,0x76,0x0, 0x5, 0x7c,0xb7,0xc4,0x23,0x54,0x1f,0xbe,0xb0,0x1f,0x50,0x16, -+0x7f,0x6, 0x2e,0x14,0x0, 0x5, 0x7c,0x67,0x2e,0x60,0x8, 0x5e,0x60,0xf8,0x5e,0x70, -+0x7, 0x4c,0x76,0x7a,0xb, 0x70,0x20,0x2, 0x11,0x29,0xb6,0x0, 0x4, 0xbe,0xb0,0xfa, -+0x50,0x8, 0x7f,0x16,0xb, 0x36,0x4, 0x7a,0x1b,0xb0,0x29,0x67,0x0, 0x3, 0x29,0x76, -+0x0, 0x3, 0xbc,0x76,0x28,0x6, 0x29,0x76,0x0, 0x3, 0x80,0x4, 0x29,0x77,0x0, 0x3, -+0x39,0x76,0x0, 0x3, 0x29,0x67,0x0, 0x2, 0x29,0x76,0x0, 0x2, 0xbc,0x76,0x28,0x6, -+0x29,0x76,0x0, 0x2, 0x80,0x4, 0x29,0x77,0x0, 0x2, 0x39,0x76,0x0, 0x2, 0x29,0x67, -+0x0, 0x1, 0x29,0x76,0x0, 0x1, 0xbc,0x76,0x50,0x6, 0x29,0x76,0x0, 0x1, 0x80,0x4, -+0x29,0x77,0x0, 0x1, 0x39,0x76,0x0, 0x1, 0x7e,0x7b,0x60,0x7e,0x6b,0x70,0xbc,0x76, -+0x50,0x5, 0x7e,0x6b,0x70,0x80,0x3, 0x7e,0x7b,0x70,0x7a,0x6b,0x70,0x80,0x31,0x6c, -+0xff,0x74,0x6, 0xac,0xbf,0x9, 0xb5,0x32,0x5e,0x30,0xe1,0x7, 0xb, 0xf0,0xbe,0xf0, -+0x1e,0x40,0xee,0xbe,0xf0,0x1e,0x50,0x33,0x74,0x1, 0x39,0xb7,0x0, 0x4, 0x12,0x67, -+0xc2,0x7e,0x34,0x0, 0x6, 0xca,0x39,0x7f,0x17,0x7f,0x6, 0x12,0x20,0xf1,0x1b,0xfd, -+0x12,0x67,0xb8,0x44,0x1, 0x7a,0x1b,0xb0,0x12,0x67,0xb8,0x44,0x2, 0x7a,0x1b,0xb0, -+0x30,0x2, 0x8, 0x12,0x67,0xb8,0x44,0x4, 0x7a,0x1b,0xb0,0xda,0x79,0x22,0x7e,0x39, -+0x70,0xa, 0x37,0x9d,0x32,0x2, 0x21,0x48,0x7f,0x16,0x2e,0x34,0x0, 0x5, 0x7e,0x1b, -+0xb0,0x22,0x74,0x6, 0xac,0xbf,0x7d,0xd5,0x2e,0xd4,0x32,0x59,0x6d,0xcc,0x22,0x7d, -+0xf5,0x2e,0xf4,0x32,0x59,0x6d,0xee,0x29,0xb7,0x0, 0x5, 0x22,0x7e,0x73,0x2a,0x3, -+0xbe,0x70,0x0, 0x22,0x7c,0xf5,0x7c,0xe6,0x7c,0xd7,0x7c,0xcb,0x22,0x7e,0x70,0x2, -+0xac,0x7c,0x9, 0xb3,0x26,0xfa,0x22,0x7e,0x37,0x3b,0x25,0xb, 0x34,0x7a,0x37,0x3b, -+0x25,0x7e,0x37,0x3b,0x27,0xbe,0x37,0x3b,0x25,0x28,0x3, 0x2, 0x68,0xf, 0x22,0xe5, -+0x9a,0x60,0x5, 0xd2,0x9c,0xa9,0xd6,0xdf,0x22,0x2, 0x67,0xf7,0xca,0x7b,0xca,0x6b, -+0xca,0x5b,0xca,0x4b,0xca,0x2b,0xca,0x1b,0xca,0xb, 0xc0,0xd0,0xc0,0x83,0xc0,0x82, -+0x12,0x68,0x19,0xd0,0x82,0xd0,0x83,0xd0,0xd0,0xda,0xb, 0xda,0x1b,0xda,0x2b,0xda, -+0x4b,0xda,0x5b,0xda,0x6b,0xda,0x7b,0x32,0xe4,0x12,0x6a,0xb1,0x12,0xba,0xfc,0x12, -+0x26,0x86,0x12,0x6f,0xf8,0x12,0x49,0x2f,0x12,0xba,0x33,0x12,0xbb,0x13,0x12,0x0, -+0xa, 0x12,0xbb,0x1f,0x12,0x6a,0x3c,0x12,0xbb,0x2f,0xd2,0xaf,0x12,0xba,0x8e,0x12, -+0x68,0x96,0x12,0x4b,0xc7,0x12,0x6a,0xe2,0x7e,0x8, 0x3b,0x29,0x12,0x6a,0x8b,0x90, -+0x60,0x50,0xe4,0x93,0xca,0xb8,0x90,0x60,0x51,0xe4,0x93,0x7c,0x7b,0x7e,0x24,0xff, -+0xff,0xda,0xb8,0x2, 0x12,0x34,0xd2,0xc8,0x43,0xed,0xf, 0xc2,0xea,0x75,0xb3,0x13, -+0xa9,0xd1,0xb4,0xa9,0xc0,0xb4,0x12,0x6a,0x2c,0xe4,0x12,0x68,0xb9,0x2, 0x68,0xb0, -+0xa9,0xc5,0xca,0xe4,0x7a,0xb3,0x3b,0x62,0x22,0xca,0xf8,0x7c,0xfb,0x74,0x2, 0x12, -+0x69,0x37,0x4c,0xff,0x78,0x5, 0x5e,0x70,0xdf,0x80,0x3, 0x4e,0x70,0x20,0x74,0x2, -+0x12,0x68,0xda,0xda,0xf8,0x22,0x74,0x6, 0x7d,0x30,0x7d,0x23,0x7c,0x6b,0xa, 0x14, -+0x7c,0x73,0x7d,0x52,0x7c,0xab,0x7e,0xb3,0x3b,0x62,0xb4,0xa5,0x42,0x12,0x69,0xd7, -+0x75,0xb5,0x1, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3, -+0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x61, -+0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x71,0xb5,0xa9,0x36,0xb3,0xfc,0xa9, -+0xc6,0xb3,0x7a,0xa1,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0xa9,0xd2,0xb4,0x22, -+0x74,0x4, 0x7d,0x30,0x2, 0x68,0xda,0x7c,0x6b,0x6c,0x77,0x6c,0xaa,0x7e,0xb3,0x3b, -+0x62,0xb4,0xa5,0x52,0x12,0x69,0xd7,0x75,0xb5,0x5, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6, -+0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36, -+0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x61,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75, -+0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc, -+0xa9,0xc6,0xb3,0x7e,0x71,0xb5,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3, -+0x7e,0xa1,0xb5,0xa9,0xd2,0xb4,0x7c,0x47,0x6c,0x55,0xa, 0x3a,0x4d,0x32,0x22,0x7d, -+0x42,0x7f,0x60,0x7d,0x3, 0x12,0x6a,0x2c,0x74,0x2, 0x12,0x69,0x37,0x7d,0xf3,0x4e, -+0xf4,0x0, 0x1, 0x4e,0xf4,0x0, 0xa, 0x12,0x69,0xd0,0x7a,0x45,0x36,0x7d,0x30,0x6d, -+0x22,0x7f,0x6, 0x12,0x69,0xe8,0x5e,0xf4,0xff,0xfd,0x12,0x69,0xd0,0x2, 0x68,0xb0, -+0x74,0x2, 0x7d,0x3f,0x2, 0x68,0xda,0xa9,0xc2,0xb4,0xa9,0xc6,0xb3,0x22,0x74,0x6, -+0x12,0x69,0x37,0x7d,0x3, 0x6c,0x11,0x22,0x12,0x69,0xf6,0x7e,0x35,0x36,0x12,0xbb, -+0x73,0xa9,0xd2,0xb4,0xd3,0x22,0x7d,0x52,0xf5,0x3a,0x7c,0xb6,0x7c,0xa5,0xa, 0x44, -+0xf5,0x39,0x7f,0x21,0xf5,0x38,0xa9,0xc2,0xb4,0x74,0xb, 0x12,0x6a,0x21,0xe5,0x3a, -+0x12,0x6a,0x21,0xe5,0x39,0x12,0x6a,0x21,0xe5,0x38,0x12,0x6a,0x21,0xe4,0x2, 0x6a, -+0x21,0xf5,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0xd3,0x22,0xa9,0xd5,0xca,0xa9, -+0xd1,0xea,0xa9,0xc1,0xea,0x74,0xa5,0x7a,0xb3,0x3b,0x62,0x22,0xe4,0x7a,0xb3,0x39, -+0xe4,0x7e,0x8, 0x33,0x21,0x12,0xc8,0xe0,0x7e,0x8, 0x33,0x5f,0x7e,0x34,0x0, 0x3e, -+0x12,0x21,0x16,0x7e,0x18,0x33,0x21,0x7a,0x1d,0x14,0x12,0x6a,0x6d,0x2, 0x6a,0x60, -+0x75,0x19,0x0, 0x75,0x1b,0x0, 0x7e,0xb3,0x39,0xe4,0xf5,0x91,0x22,0x2, 0x6a,0x70, -+0x90,0x60,0x0, 0xe4,0x93,0x54,0xfe,0x75,0x91,0x0, 0xc2,0x90,0xc2,0x91,0xc2,0xc9, -+0x54,0xfe,0xf5,0x92,0xd2,0xe8,0xc2,0xc0,0xd2,0xad,0x22,0xd2,0xc9,0x75,0xf2,0x30, -+0x75,0xf3,0x80,0x75,0xf4,0xc, 0x75,0xf5,0x1, 0x6c,0xaa,0xe5,0xf5,0x54,0x80,0xb4, -+0x80,0xf9,0xe5,0xf6,0x12,0xb0,0xd3,0xb, 0xa0,0xbe,0xa0,0xd, 0x40,0xed,0xc2,0xc9, -+0x22,0xa9,0xc4,0xca,0xa9,0xc5,0xca,0xbe,0xb0,0x8, 0x50,0x3, 0x12,0x83,0xc8,0xa9, -+0xd0,0xce,0xa9,0xc0,0xc9,0xd2,0x2, 0x12,0x4f,0xa5,0xa9,0xc2,0xea,0x75,0xc1,0x6, -+0x75,0xc2,0xc, 0xd2,0x0, 0x12,0x4f,0xfe,0xa9,0xc1,0xc4,0xa9,0xd2,0xc4,0xa9,0xc2, -+0xe1,0x22,0xca,0xf8,0xa2,0xaf,0xe4,0x33,0x7c,0xfb,0xd2,0x0, 0x12,0xba,0x85,0xa9, -+0xd0,0xcb,0xc2,0xaf,0xa9,0xd0,0x9e,0x75,0x9d,0x0, 0xa9,0xd0,0x9e,0x75,0x9c,0x20, -+0xa9,0xd0,0x9e,0xa9,0xd4,0x9e,0xa9,0xd0,0xcd,0x74,0x41,0x12,0x4f,0x4a,0xa9,0xd0, -+0x9e,0xa9,0xd7,0x9e,0x2e,0xf0,0xff,0x92,0xaf,0xda,0xf8,0x22,0x7e,0x23,0x2b,0xf, -+0x7e,0x33,0x3a,0x15,0x7e,0x34,0x60,0xd6,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x0, 0xac, -+0x23,0x2d,0x10,0xbe,0x14,0x0, 0xa, 0x50,0x4, 0x7e,0x14,0x0, 0xa, 0x7e,0x63,0x2b, -+0x10,0xbe,0x14,0xf, 0x3c,0x40,0x4, 0x7e,0x14,0xf, 0x3c,0xbe,0x14,0x7, 0x8, 0x40, -+0x3, 0xe4,0x80,0x21,0xbe,0x14,0x3, 0x84,0x40,0x16,0x90,0x61,0x1b,0xe4,0x93,0x7c, -+0x7b,0xbe,0x70,0x1, 0x28,0x4, 0x74,0x1, 0x80,0xb, 0x7a,0x73,0x2b,0x10,0x80,0x9, -+0x90,0x61,0x1b,0xe4,0x93,0x7a,0xb3,0x2b,0x10,0x7e,0x73,0x2b,0x10,0xbc,0x76,0x68, -+0x2, 0xd2,0x10,0x7e,0x24,0x1, 0xf4,0x7d,0x31,0x8d,0x32,0x7c,0x17,0xbe,0x10,0x7, -+0x28,0x3, 0x7e,0x10,0x7, 0x7e,0x1f,0x3b,0x8, 0x69,0x51,0x0, 0x86,0x54,0x1f,0xa, -+0x1, 0x12,0xa4,0x47,0x3e,0x4, 0x2d,0x5, 0x79,0x1, 0x0, 0x86,0x6d,0x0, 0x7e,0x34, -+0xb8,0x0, 0x7e,0x24,0x0, 0xb, 0x2, 0x1f,0x8d,0x7e,0xa3,0x0, 0x5e,0xbe,0xa0,0xff, -+0x68,0x48,0xbe,0xa3,0x3, 0xfb,0x68,0x42,0x74,0x5, 0xa4,0x12,0x6f,0x88,0x12,0x6c, -+0xb, 0x12,0x6f,0x4a,0x12,0x6c,0xb, 0x12,0x6f,0x41,0x12,0x7e,0x2e,0x50,0x9, 0x7e, -+0xb3,0x0, 0x5e,0x12,0x6f,0x53,0x80,0x6, 0x12,0x6c,0xb, 0x12,0x6e,0x45,0x12,0x6c, -+0x17,0x12,0x6e,0x3e,0x7e,0x73,0x2b,0x14,0xa, 0x37,0x7e,0xf, 0x3b,0x10,0x79,0x30, -+0x0, 0x1a,0x7e,0x73,0x0, 0x5e,0x7a,0x73,0x3, 0xfb,0x22,0x7e,0xa3,0x0, 0x5e,0x74, -+0x5, 0xa4,0x22,0x7a,0xb3,0x2b,0xf, 0x12,0x6b,0x1c,0x7a,0x37,0x2b,0x1b,0x22,0x12, -+0x6c,0x13,0x30,0x10,0xa, 0x12,0x6f,0xb4,0x30,0x0, 0x4, 0xe4,0x12,0xa, 0x66,0x30, -+0x0, 0x9, 0x12,0x6f,0xc6,0x12,0x6c,0xeb,0x2, 0x7f,0x43,0x22,0x7e,0xb, 0x70,0x7a, -+0x73,0x2b,0xf, 0x29,0x70,0x0, 0x4, 0x7a,0x73,0x2b,0x62,0x29,0x70,0x0, 0x1, 0x7a, -+0x73,0x2b,0x14,0x29,0x70,0x0, 0x3, 0x7a,0x73,0x2b,0x20,0x12,0x6c,0x17,0x12,0x6e, -+0x3e,0xd2,0x0, 0xc2,0x1, 0x2, 0x50,0xfd,0xca,0xf8,0x7c,0xfb,0x74,0x5, 0xac,0xbf, -+0x12,0x6f,0x88,0x12,0x6f,0x4a,0x12,0x6e,0x45,0x12,0x6f,0x41,0x7a,0xf3,0x0, 0x5e, -+0x7c,0xbf,0x12,0x6f,0x53,0x12,0x6c,0x17,0x74,0x5, 0xac,0xbf,0x9, 0xb5,0x26,0x37, -+0x12,0x6f,0x9b,0x12,0x6c,0xeb,0x12,0x23,0x2f,0xe4,0x7a,0xb3,0x16,0x91,0xda,0xf8, -+0x22,0x7e,0xb3,0x38,0x34,0x60,0x6, 0x14,0x7a,0xb3,0x38,0x34,0x22,0x12,0xa9,0x57, -+0x90,0x61,0xc5,0xe4,0x93,0xbe,0xb0,0x4, 0x28,0x3, 0x12,0x6c,0xeb,0x7e,0xb3,0x39, -+0x34,0x70,0xe, 0x7e,0xb3,0x3b,0x61,0xb4,0x1, 0x7, 0xe4,0x12,0x6c,0x68,0x12,0xc8, -+0xcc,0x12,0x5c,0xfb,0x12,0xaa,0xa1,0x7e,0xa3,0x39,0x34,0x7a,0xa3,0x3b,0x61,0xbe, -+0xb0,0xff,0x68,0x3, 0x2, 0x6c,0x68,0x22,0x12,0x6f,0x91,0x7e,0xb3,0x2b,0xf, 0xca, -+0x3b,0x7c,0xeb,0x6c,0xff,0x7e,0x34,0x60,0xd6,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0xc0, -+0x7e,0x73,0x3a,0x15,0xa, 0xb7,0x7e,0xb3,0x2b,0x10,0xf5,0x36,0x12,0xc9,0x2d,0xbe, -+0xd0,0x4, 0x38,0x5, 0xe4,0x7a,0xb3,0x38,0x40,0xa, 0x3e,0xad,0x3b,0x7d,0xa3,0x2d, -+0xac,0x75,0x35,0x0, 0x7e,0xa3,0x38,0x40,0xbc,0xad,0x40,0x2, 0x80,0x19,0xbe,0xa0, -+0x0, 0x28,0x19,0x74,0x5, 0xa4,0x9, 0x75,0x26,0x33,0xbc,0x7e,0x78,0xe, 0x7c,0xbd, -+0x14,0xbe,0xb3,0x38,0x40,0x78,0x5, 0xe4,0x7a,0xb3,0x38,0x40,0x7e,0xc3,0x38,0x40, -+0x80,0x41,0x7e,0xb3,0x38,0x40,0x4, 0x7a,0xb3,0x38,0x40,0x7e,0x90,0x5, 0xac,0x9c, -+0x9, 0xa4,0x26,0x33,0xbc,0xae,0x68,0x29,0xe5,0x35,0xa, 0xdb,0x19,0xcd,0x38,0x44, -+0xa, 0x9a,0xad,0x9b,0x2d,0x9c,0x7e,0xa1,0x35,0x7c,0xba,0x4, 0xf5,0x35,0x7c,0xba, -+0x7d,0x39,0x7d,0x2a,0x7e,0x31,0x36,0x12,0x10,0x0, 0xb, 0xf0,0xbe,0xf0,0x3, 0x50, -+0x6, 0xb, 0xc0,0xbc,0xdc,0x38,0xbb,0x7a,0xf3,0x38,0x41,0xda,0x3b,0x22,0xca,0xf8, -+0x6c,0xff,0x80,0x34,0x7e,0x73,0x0, 0x5e,0xbc,0x7f,0x68,0x2a,0x7e,0x30,0x5, 0xac, -+0x3f,0x12,0x6e,0x1a,0xca,0x39,0x7e,0x30,0x38,0xac,0x3f,0x12,0x6e,0x33,0x12,0x20, -+0xf1,0x1b,0xfd,0x7e,0x34,0x0, 0x8c,0xca,0x39,0x7e,0x30,0x8c,0xac,0x3f,0x12,0x6e, -+0x28,0x12,0x20,0xf1,0x1b,0xfd,0xb, 0xf0,0x90,0x61,0xc5,0xe4,0x93,0xbc,0xbf,0x38, -+0xc3,0x7e,0x23,0x0, 0x5e,0x7e,0x30,0x5, 0xac,0x23,0x12,0x6e,0x1a,0xca,0x39,0x7e, -+0x23,0x0, 0x5e,0x7e,0x30,0x38,0xac,0x23,0x12,0x6e,0x33,0x12,0x20,0xf1,0x1b,0xfd, -+0x7e,0x34,0x0, 0x8c,0xca,0x39,0x7e,0x23,0x0, 0x5e,0x7e,0x30,0x8c,0xac,0x23,0x12, -+0x6e,0x28,0x12,0x20,0xf1,0x1b,0xfd,0xda,0xf8,0x22,0x2e,0x14,0x26,0x33,0x6d,0x0, -+0x12,0x6c,0x3c,0x7e,0x34,0x0, 0x38,0x22,0x2e,0x14,0x1, 0x3f,0x6d,0x0, 0x7e,0x18, -+0x3, 0x6f,0x22,0x2e,0x14,0x0, 0x5f,0x6d,0x0, 0x7e,0x18,0x34,0x0, 0x22,0x7e,0x8, -+0x2a,0x6d,0x2, 0x3, 0x8b,0x9, 0x75,0x26,0x35,0x7a,0x73,0x2b,0x1f,0x22,0xca,0x3b, -+0x7a,0xd, 0x2f,0x7c,0xcb,0x7e,0xb3,0x2b,0x1d,0xf5,0x33,0x7e,0xb3,0x2b,0xf, 0xf5, -+0x34,0x7e,0xd3,0x2b,0x14,0x7e,0xe3,0x2b,0x1f,0x7e,0xf3,0x2b,0x20,0x7e,0x34,0x0, -+0x38,0xca,0x39,0x7e,0x18,0x34,0x0, 0x7e,0x8, 0x24,0xf2,0x12,0x20,0xf1,0x1b,0xfd, -+0x7e,0x34,0x0, 0x8c,0xca,0x39,0x7e,0x18,0x3, 0x6f,0x7e,0x8, 0x25,0x2a,0x12,0x20, -+0xf1,0x1b,0xfd,0x7c,0xbc,0x12,0x6f,0x53,0x74,0x1, 0x7a,0xb3,0x2b,0x1d,0x74,0x5, -+0xac,0xbc,0x12,0x6f,0x4a,0x74,0x5, 0xac,0xbc,0x12,0x6e,0x45,0x74,0x5, 0xac,0xbc, -+0x12,0x6f,0x41,0x74,0x5, 0xac,0xbc,0x9, 0x75,0x26,0x37,0xbe,0x73,0x2b,0x62,0x68, -+0x6, 0x7a,0x73,0x2b,0x62,0xd2,0x10,0xc2,0x0, 0x12,0xb1,0xb1,0x12,0x6c,0x1f,0x12, -+0x56,0x6e,0x30,0xf, 0xfd,0x74,0x1, 0x12,0x0, 0xe, 0x7e,0x14,0x40,0x0, 0x7d,0x31, -+0x7e,0x2f,0x13,0x86,0x7d,0x25,0x7e,0x4, 0xd, 0xc8,0x12,0x7b,0xeb,0x12,0xc8,0x6c, -+0x7a,0x55,0x35,0x7e,0xd, 0x2f,0x7e,0x18,0xd, 0xc8,0x12,0xb0,0x29,0x12,0xb0,0xdd, -+0xe5,0x33,0x7a,0xb3,0x2b,0x1d,0xe5,0x34,0x7a,0xb3,0x2b,0xf, 0x7a,0xd3,0x2b,0x14, -+0x7a,0xe3,0x2b,0x1f,0x7a,0xf3,0x2b,0x20,0x7e,0x34,0x0, 0x38,0xca,0x39,0x7e,0x18, -+0x24,0xf2,0x7e,0x8, 0x34,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x0, 0x8c,0xca, -+0x39,0x7e,0x18,0x25,0x2a,0x7e,0x8, 0x3, 0x6f,0x12,0x20,0xf1,0x1b,0xfd,0xda,0x3b, -+0x22,0x9, 0x75,0x26,0x36,0x7a,0x73,0x2b,0x20,0x22,0x9, 0x75,0x26,0x34,0x7a,0x73, -+0x2b,0x14,0x22,0xca,0xf8,0x7c,0xfb,0x7e,0x34,0x0, 0x38,0xca,0x39,0xac,0x7f,0x2e, -+0x34,0x0, 0x5f,0x6d,0x22,0x7e,0x8, 0x34,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34, -+0x0, 0x8c,0xca,0x39,0xac,0x7f,0x2e,0x34,0x1, 0x3f,0x6d,0x22,0x7e,0x8, 0x3, 0x6f, -+0x12,0x20,0xf1,0x1b,0xfd,0xda,0xf8,0x22,0x9, 0x75,0x26,0x33,0x7a,0x73,0x2b,0xf, -+0x22,0x12,0x6f,0xc6,0x74,0x1, 0x7a,0xb3,0x38,0x34,0x22,0x7e,0xa3,0x2b,0x62,0xbc, -+0xab,0x68,0x6, 0x7a,0xb3,0x2b,0x62,0xd2,0x10,0x30,0x10,0x7, 0x12,0x6f,0xb4,0xe4, -+0x2, 0xa, 0x66,0x22,0xc2,0x10,0x7e,0x8, 0x2a,0x6d,0x12,0x3, 0x8b,0x7e,0x8, 0x2a, -+0x6d,0x74,0x3, 0x2, 0x11,0x7a,0x7e,0x8, 0x38,0x48,0x7e,0x34,0x0, 0x60,0xe4,0x12, -+0x21,0x16,0x6c,0xaa,0x7e,0x44,0xff,0xff,0x7e,0x70,0xc, 0xac,0x7a,0x59,0x43,0x38, -+0x4a,0x59,0x43,0x38,0x52,0xb, 0xa0,0xbe,0xa0,0x8, 0x40,0xe8,0x7e,0x8, 0x38,0x36, -+0x7e,0x34,0x0, 0xd, 0xe4,0x2, 0x21,0x16,0xa9,0xd0,0x99,0xa9,0xc6,0xdf,0x22,0x7e, -+0x34,0x0, 0x4, 0xca,0x39,0x7e,0x34,0x61,0x2d,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x2b, -+0x70,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x2a,0xe, 0x7a,0x37,0x2b,0x76,0xe4,0x7a, -+0xb3,0x2b,0x74,0x7a,0xb3,0x2b,0x75,0x7e,0x34,0x0, 0x4, 0xca,0x39,0x12,0x70,0x4d, -+0x7e,0x8, 0x25,0xee,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x2b,0x78,0x7a,0x37,0x25, -+0xf4,0xe4,0x7a,0xb3,0x25,0xf2,0x74,0x1, 0x7a,0xb3,0x25,0xf3,0x22,0x7e,0x34,0x61, -+0x29,0x7e,0x24,0x0, 0xff,0x22,0xe4,0x7a,0xb3,0x39,0xe4,0x7a,0xb3,0x39,0xe5,0x90, -+0x60,0x50,0x93,0x7a,0xb3,0x39,0xe6,0x90,0x60,0x51,0xe4,0x93,0x7a,0xb3,0x39,0xe7, -+0xe4,0x7a,0xb3,0x39,0xe8,0x90,0x60,0x99,0x93,0x7a,0xb3,0x39,0xe9,0xe4,0x7a,0xb3, -+0x39,0xea,0x7a,0xb3,0x39,0xeb,0x90,0x61,0xc4,0x93,0x7a,0xb3,0x39,0xed,0x7e,0x34, -+0x61,0x4f,0x12,0x23,0xc9,0x1e,0x34,0x1e,0x34,0x7a,0x73,0x39,0xf1,0x7e,0x34,0x61, -+0x55,0x12,0x23,0xc9,0x1e,0x34,0x1e,0x34,0x7a,0x73,0x39,0xf2,0x74,0x64,0x7a,0xb3, -+0x3a,0x3, 0x90,0x61,0x18,0xe4,0x93,0x7a,0xb3,0x3a,0x4, 0x90,0x61,0x17,0xe4,0x93, -+0x7a,0xb3,0x39,0xf0,0x90,0x61,0x19,0xe4,0x93,0x7a,0xb3,0x3a,0x6, 0x90,0x61,0x24, -+0xe4,0x93,0x7a,0xb3,0x3a,0x5, 0x90,0x61,0x1d,0xe4,0x93,0x7a,0xb3,0x3a,0x7, 0x90, -+0x61,0x25,0xe4,0x93,0x7a,0xb3,0x3a,0x2, 0xe4,0x7a,0xb3,0x39,0xfd,0x74,0xfa,0x7a, -+0xb3,0x39,0xfb,0x74,0x1e,0x7a,0xb3,0x39,0xfc,0x74,0x1, 0x7a,0xb3,0x39,0xfa,0x74, -+0x17,0x7a,0xb3,0x39,0xf9,0x74,0x1, 0x7a,0xb3,0x39,0xfe,0xe4,0x7a,0xb3,0x39,0xff, -+0x7a,0xb3,0x3a,0x0, 0x7e,0x8, 0x3a,0x8, 0x7e,0x34,0x0, 0x2c,0x12,0x21,0x16,0x7e, -+0x34,0x60,0xd6,0x12,0x23,0xc9,0xa, 0x36,0x7a,0x73,0x3a,0x13,0x7e,0x34,0x60,0xd6, -+0x12,0x23,0xc9,0x7a,0x73,0x3a,0x14,0x90,0x60,0xd4,0x93,0x7a,0xb3,0x3a,0x15,0x90, -+0x60,0xd5,0xe4,0x93,0x7a,0xb3,0x3a,0x16,0x7e,0x34,0x0, 0x4, 0xca,0x39,0x12,0x70, -+0x4d,0x7e,0x8, 0x3a,0x24,0x12,0x20,0xf1,0x1b,0xfd,0x74,0x5, 0x7a,0xb3,0x3a,0x31, -+0x74,0x1, 0x7a,0xb3,0x3a,0x28,0x7e,0x34,0x0, 0x28,0xca,0x39,0x7e,0x34,0x61,0xd5, -+0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x26,0x33,0x12,0x20,0xf1,0x1b,0xfd,0x22,0x12,0x70, -+0x56,0x12,0x7f,0xfa,0x12,0x0, 0x42,0x12,0xc8,0x81,0x7e,0x18,0x4, 0x0, 0x7a,0x1f, -+0x6, 0xf8,0x7e,0xf, 0x6, 0xf8,0x7e,0x1f,0x6, 0xf4,0x12,0x84,0x40,0x7e,0x18,0x8, -+0xa, 0x7a,0x1f,0x13,0x86,0x7e,0x18,0xd, 0xc8,0x7a,0x1f,0x13,0x8a,0x7e,0xf, 0x13, -+0x8a,0x7e,0x1f,0x13,0x86,0x12,0x84,0x1d,0x12,0x84,0x1a,0x12,0x25,0x78,0x12,0x77, -+0x91,0x12,0x71,0xd5,0x2, 0x71,0xc7,0xe4,0x7a,0xb3,0x34,0x38,0x7a,0xb3,0x34,0x39, -+0x7a,0xb3,0x34,0x3a,0x22,0x12,0x77,0xcf,0x7e,0x24,0x0, 0x3, 0xad,0x32,0x7e,0x8, -+0x28,0xae,0x74,0xff,0x12,0x21,0x16,0x12,0xa1,0xfc,0x7e,0x8, 0x29,0xbc,0x12,0x71, -+0xfd,0x7e,0x8, 0x2a,0x2, 0x7e,0x34,0x0, 0xb, 0xe4,0x2, 0x21,0x16,0x6c,0xaa,0x80, -+0x20,0x74,0x3, 0x12,0xb0,0xd3,0x7f,0x10,0x2d,0x34,0x39,0xb1,0x0, 0xa, 0x12,0x74, -+0xc9,0x7f,0x70,0x2d,0xf3,0x79,0x47,0x0, 0x14,0x2d,0x31,0x79,0x41,0x0, 0x28,0xb, -+0xa0,0x12,0x72,0x27,0x38,0xdb,0x22,0x90,0x60,0x99,0xe4,0x93,0xbc,0xba,0x22,0xca, -+0xf8,0x7e,0x68,0x29,0xbc,0x6c,0xaa,0x80,0x19,0x7e,0x70,0xff,0x12,0x74,0xe4,0xe4, -+0xa, 0x4a,0x19,0xb4,0x1f,0x34,0x74,0xff,0x19,0xb4,0x1f,0x46,0x19,0xb4,0x1f,0x50, -+0xb, 0xa0,0x12,0x72,0x27,0x38,0xe2,0x7e,0x73,0x2a,0x2, 0xa5,0xbf,0x0, 0x23,0x7e, -+0xb3,0x3b,0x5f,0x70,0x2, 0x81,0x3e,0x6c,0xaa,0x80,0x10,0x7e,0x44,0x7f,0xff,0x12, -+0x74,0xee,0x79,0x40,0x0, 0x14,0x12,0x74,0xdb,0xb, 0xa0,0x12,0x72,0x27,0x38,0xeb, -+0x81,0x3e,0x7e,0xb3,0x3b,0x5f,0x70,0x3d,0xbe,0x70,0x0, 0x28,0x38,0x6c,0xaa,0x80, -+0x2a,0x7e,0x90,0x9, 0xac,0x9a,0x49,0x34,0x28,0xae,0x12,0x74,0xee,0x79,0x30,0x0, -+0x14,0x49,0x34,0x28,0xb0,0x7f,0x6, 0x2d,0x12,0x79,0x30,0x0, 0x28,0x74,0x1, 0xa, -+0x3a,0x19,0xb3,0x1f,0x34,0x19,0xa4,0x28,0xb2,0xb, 0xa0,0x7e,0xb3,0x2a,0x2, 0xbc, -+0xba,0x38,0xce,0x81,0x3e,0x6c,0xaa,0x80,0x17,0x12,0x74,0xc9,0x3e,0x34,0x59,0x43, -+0x15,0x4e,0x59,0x43,0x15,0x50,0x59,0x43,0x15,0x76,0x59,0x43,0x15,0x78,0xb, 0xa0, -+0x12,0x72,0x27,0x38,0xe4,0x6c,0xaa,0x80,0x3d,0x6c,0xff,0x80,0x32,0x7e,0x70,0x2, -+0xac,0x7f,0x7f,0x6, 0x2d,0x13,0x69,0x30,0x0, 0x14,0xbe,0x34,0x7f,0xff,0x68,0x1d, -+0xa, 0x4f,0x9, 0xb4,0x1f,0x50,0xb4,0xff,0x14,0x12,0x74,0xd3,0x59,0x32,0x15,0x4e, -+0x69,0x30,0x0, 0x28,0x59,0x32,0x15,0x50,0x12,0x74,0xf8,0x80,0x7, 0xb, 0xf0,0x12, -+0x74,0xc1,0x38,0xc9,0xb, 0xa0,0x7e,0xb3,0x3b,0x5f,0xbc,0xba,0x38,0xbb,0x6c,0xaa, -+0x80,0x24,0xa, 0x3a,0x9, 0xb3,0x1f,0x46,0xb4,0xff,0x19,0x6c,0xff,0x80,0x10,0xa, -+0x4f,0x9, 0xb4,0x1f,0x50,0xb4,0xff,0x5, 0x12,0x74,0xf8,0x80,0x7, 0xb, 0xf0,0x12, -+0x74,0xc1,0x38,0xeb,0xb, 0xa0,0x12,0x72,0x27,0x38,0xd7,0x6c,0xaa,0x80,0x1a,0x7e, -+0x70,0x9, 0xac,0x7a,0x49,0x43,0x28,0xae,0x12,0x74,0xd3,0x59,0x42,0x15,0x76,0x49, -+0x33,0x28,0xb0,0x59,0x32,0x15,0x78,0xb, 0xa0,0x7e,0xb3,0x2a,0x2, 0xbc,0xba,0x38, -+0xde,0x7e,0x34,0x15,0x4e,0x7a,0x37,0x1f,0x40,0x7e,0x34,0x15,0x76,0x7a,0x37,0x1f, -+0x42,0x7e,0x34,0x15,0x9e,0x7a,0x37,0x1f,0x44,0x7e,0x73,0x3b,0x5f,0x7a,0x73,0x1f, -+0x3e,0x7e,0x73,0x2a,0x2, 0x7a,0x73,0x1f,0x3f,0x7e,0x8, 0x1f,0x3e,0x12,0x4, 0xad, -+0x6c,0xaa,0x80,0x59,0x7e,0x70,0xff,0x6c,0xff,0x80,0x19,0x7e,0x50,0x2, 0xac,0x5f, -+0x49,0x12,0x15,0x9e,0xa, 0x2a,0xbd,0x21,0x78,0x8, 0xa, 0x3f,0x9, 0x73,0x1f,0x46, -+0x80,0x7, 0xb, 0xf0,0x12,0x74,0xc1,0x38,0xe2,0xbe,0x70,0xff,0x68,0x2d,0x12,0x74, -+0xe4,0x74,0x1, 0xa, 0x47,0x19,0xb4,0x1f,0x34,0x7e,0x90,0x9, 0xac,0x9a,0x49,0x24, -+0x28,0xae,0x7e,0x30,0x2, 0xac,0x37,0x2d,0x1d,0x7d,0xc, 0x79,0x20,0x0, 0x14,0x49, -+0x44,0x28,0xb0,0x7e,0x50,0x2, 0xac,0x57,0x12,0x74,0xdb,0xb, 0xa0,0x7e,0x63,0x2a, -+0x2, 0xbc,0x6a,0x38,0x9f,0x6c,0xaa,0x80,0x20,0xa, 0x3a,0x9, 0xb3,0x1f,0x34,0xbe, -+0xb0,0x1, 0x68,0x13,0x12,0x74,0xc9,0x7f,0x6, 0x2d,0x13,0x79,0x40,0x0, 0x14,0x2d, -+0x3d,0x7d,0x2c,0x79,0x41,0x0, 0x28,0xb, 0xa0,0x12,0x72,0x27,0x38,0xdb,0x7e,0xf3, -+0x2a,0x2, 0x7a,0xf3,0x3b,0x5f,0x6c,0xaa,0x80,0x68,0xa, 0x3a,0x9, 0xb3,0x1f,0x34, -+0xb4,0x1, 0x2c,0x12,0x74,0xba,0x29,0xb1,0x0, 0xa, 0xb4,0x1, 0x6, 0x74,0x3, 0x39, -+0xb1,0x0, 0xa, 0x12,0x74,0xba,0x29,0x31,0x0, 0xa, 0xa5,0xbb,0x3, 0x6, 0xe4,0x7a, -+0x1b,0xb0,0x80,0x32,0xa5,0xbb,0x0, 0x2e,0x74,0x2, 0x7a,0x1b,0xb0,0x80,0x27,0x12, -+0x74,0xba,0x29,0xb1,0x0, 0xa, 0xbe,0xb0,0x2, 0x68,0x2, 0x70,0x14,0x74,0x1, 0x7a, -+0x1b,0xb0,0x7c,0x2f,0xb, 0xf0,0x7e,0x30,0x9, 0xac,0x23,0x19,0xa1,0x28,0xb2,0x80, -+0x5, 0x74,0x3, 0x7a,0x1b,0xb0,0x12,0x74,0xba,0x7e,0x1b,0xb0,0x39,0xb1,0x0, 0xa, -+0xb, 0xa0,0x12,0x72,0x27,0x38,0x93,0xda,0xf8,0x22,0xa, 0x3a,0x2d,0x3d,0x7d,0x2c, -+0x22,0x90,0x60,0x99,0xe4,0x93,0xbc,0xbf,0x22,0x7e,0x44,0x7f,0xff,0x7e,0x70,0x2, -+0xac,0x7a,0x22,0x7e,0x50,0x2, 0xac,0x5a,0x3e,0x24,0x22,0x7f,0x6, 0x2d,0x12,0x79, -+0x40,0x0, 0x28,0x22,0x7e,0x50,0x9, 0xac,0x5a,0x19,0x72,0x28,0xb2,0x22,0x7e,0x50, -+0x2, 0xac,0x5a,0x7f,0x6, 0x2d,0x12,0x22,0xa, 0x3a,0x19,0xf3,0x1f,0x46,0x74,0x1, -+0x19,0xb4,0x1f,0x50,0x22,0xca,0xd8,0xca,0x79,0x70,0xc, 0x7e,0x8, 0x30,0x3d,0x12, -+0x76,0x61,0x74,0xff,0x12,0x21,0x16,0x6c,0xff,0xc1,0x4e,0x7e,0x50,0x9, 0xac,0x5f, -+0x49,0xd2,0x29,0x62,0x1e,0xd4,0x1e,0xd4,0x1e,0xd4,0x1e,0xd4,0x49,0xc2,0x29,0x64, -+0x1e,0xc4,0x1e,0xc4,0x1e,0xc4,0x1e,0xc4,0x9, 0xe2,0x29,0x66,0x2e,0x24,0x28,0xae, -+0x12,0x25,0x6c,0x1b,0x28,0x30,0x7e,0x50,0x9, 0xac,0x5f,0x2e,0x24,0x28,0xb0,0x12, -+0x25,0x6c,0x1b,0x28,0x30,0x74,0x9, 0xac,0xbf,0x19,0xe5,0x28,0xb2,0x74,0x9, 0xac, -+0xbf,0x9, 0x75,0x29,0x67,0x19,0x75,0x28,0xb3,0x74,0x9, 0xac,0xbf,0x9, 0x75,0x29, -+0x68,0x19,0x75,0x28,0xb4,0x7c,0xae,0x5e,0xa0,0xf, 0xa, 0x2a,0x12,0x76,0x61,0xbd, -+0x23,0x48,0x2, 0xc1,0x4c,0x7c,0xea,0xa, 0x3e,0x9, 0xb3,0x29,0xbc,0xbe,0xb0,0x3, -+0x78,0x2, 0xc1,0x4c,0xb4,0x1, 0x7, 0x74,0xff,0x12,0x76,0x5a,0xc1,0x4c,0xa, 0x3e, -+0x9, 0x13,0x30,0x3d,0xa5,0xb9,0xff,0x38,0x74,0x1, 0x12,0x76,0x5a,0x74,0x9, 0xac, -+0xbf,0x59,0xd5,0x28,0xae,0x74,0x9, 0xac,0xbf,0x59,0xc5,0x28,0xb0,0x6c,0xdd,0x12, -+0x8f,0xcd,0x7e,0x50,0x9, 0xac,0x5d,0x7e,0x30,0x1b,0xac,0x3e,0x2d,0x12,0x2e,0x14, -+0x30,0x47,0x74,0x9, 0x12,0x1f,0xc1,0xb, 0xd0,0xbe,0xd0,0x3, 0x78,0xe1,0x80,0x6c, -+0xbe,0x10,0x3, 0x40,0x4, 0xe4,0x12,0x76,0x5a,0xa, 0x3e,0x9, 0x3, 0x30,0x3d,0x7e, -+0x10,0x9, 0xac,0x1, 0x7e,0x30,0x1b,0xac,0x3e,0x7d,0xb1,0x2d,0xb0,0x59,0xdb,0x30, -+0x47,0x59,0xcb,0x30,0x49,0x7e,0xb3,0x2a,0x9, 0x70,0x13,0xe4,0x12,0x76,0x72,0x12, -+0x76,0x69,0x74,0x1, 0x7e,0x30,0x1b,0xac,0x3e,0x12,0x76,0x72,0x80,0x1d,0x49,0x3b, -+0x30,0x47,0x12,0x76,0x69,0xa, 0x3e,0x9, 0x43,0x30,0x3d,0x7e,0x50,0x9, 0xac,0x45, -+0x7e,0x70,0x1b,0xac,0x7e,0x2d,0x32,0x49,0x33,0x30,0x49,0x74,0x9, 0xac,0xbf,0x59, -+0x35,0x28,0xb0,0xa, 0x3e,0x2e,0x34,0x30,0x3d,0x12,0xb7,0xc5,0xb, 0xf0,0x12,0x74, -+0xc1,0x28,0x2, 0xa1,0x1b,0xda,0x79,0xda,0xd8,0x22,0xa, 0x3e,0x19,0xb3,0x30,0x3d, -+0x22,0x90,0x60,0x99,0xe4,0x93,0xa, 0x3b,0x22,0x74,0x9, 0xac,0xbf,0x59,0x35,0x28, -+0xae,0x22,0x2e,0x14,0x30,0x47,0x6d,0x0, 0x7c,0xab,0x6d,0x33,0x6c,0x55,0x4c,0xaa, -+0x7e,0x90,0x9, 0x78,0xd, 0xac,0x95,0x7f,0x70,0x2d,0xf4,0xb, 0x7a,0x40,0x2d,0x34, -+0x80,0xc, 0xac,0x95,0x7f,0x70,0x2d,0xf4,0x69,0x47,0x0, 0x2, 0x2d,0x34,0xb, 0x50, -+0xbe,0x50,0x3, 0x40,0xd9,0x7e,0x24,0x0, 0x3, 0x8d,0x32,0x22,0x7c,0xab,0x7e,0x8, -+0x29,0xbc,0x12,0x72,0x27,0x28,0x1f,0xa, 0x3a,0x7f,0x70,0x2d,0xf3,0x7e,0x7b,0xb0, -+0xb4,0x2, 0x4, 0x74,0x1, 0x80,0x2, 0x74,0x3, 0x7a,0x7b,0xb0,0x74,0x3, 0x2d,0x31, -+0x7d,0x20,0x39,0xb1,0x0, 0xa, 0x22,0xca,0xd8,0xca,0x79,0x7e,0x34,0x61,0x43,0x7e, -+0x24,0x0, 0xff,0xb, 0x1a,0x40,0x90,0x61,0x35,0xe4,0x93,0x70,0x2, 0xe1,0x83,0x90, -+0x60,0xa7,0xe4,0x93,0x70,0x2, 0xe1,0x83,0x6c,0xff,0xe1,0x7c,0x7e,0x70,0x9, 0xac, -+0x7f,0x9, 0xe3,0x29,0xc, 0x5e,0xe0,0xf, 0x49,0xc3,0x29,0xa, 0x7e,0x14,0x60,0xd1, -+0x12,0x5f,0xec,0x2d,0x24,0xbd,0xc2,0x40,0x42,0x49,0xd3,0x29,0x8, 0x7d,0x3d,0x12, -+0xa8,0x1b,0x7c,0xdb,0x90,0x60,0xa7,0xe4,0x93,0xbc,0xbd,0x38,0xe, 0x7d,0x34,0x1b, -+0x34,0x12,0x77,0x88,0x7c,0xbe,0x12,0x76,0xac,0x80,0x3f,0x7e,0x70,0x2, 0xac,0x7d, -+0x2e,0x34,0x60,0xc5,0x12,0x91,0x1c,0x74,0x9, 0xac,0xbf,0x59,0xd5,0x29,0x8, 0x7e, -+0x34,0x60,0xcf,0x12,0x23,0xc9,0x12,0x77,0x88,0x80,0x1f,0xbd,0xc4,0x40,0x1b,0x7d, -+0x54,0x2e,0x54,0x0, 0xa, 0xbd,0xc5,0x40,0x5, 0x7c,0xbe,0x12,0x76,0xac,0x7d,0xc4, -+0x1b,0xc4,0x74,0x9, 0xac,0xbf,0x59,0xc5,0x29,0xa, 0xb, 0xf0,0x12,0x74,0xc1,0x28, -+0x2, 0xc1,0xfc,0xda,0x79,0xda,0xd8,0x22,0x74,0x9, 0xac,0xbf,0x59,0x35,0x29,0xa, -+0x22,0x7e,0x8, 0x26,0x5b,0x7e,0x34,0x2, 0x3a,0xe4,0x12,0x21,0x16,0x90,0x60,0x9c, -+0x93,0xa, 0x3b,0x3e,0x34,0x7e,0x8, 0x26,0x8c,0x74,0xff,0x12,0x21,0x16,0x90,0x60, -+0x9c,0xe4,0x93,0xa, 0x3b,0x3e,0x34,0x7e,0x8, 0x26,0xb4,0x74,0xff,0x12,0x21,0x16, -+0x90,0x60,0x9a,0x12,0x77,0xd2,0x7e,0x8, 0x27,0x76,0x74,0xff,0x2, 0x21,0x16,0x90, -+0x60,0x99,0xe4,0x93,0x7c,0x7b,0x74,0x9, 0xac,0x7b,0x22,0x6d,0x33,0x6c,0xaa,0x80, -+0x14,0xa, 0x2a,0x9, 0xb2,0x2a,0xdc,0x54,0x1, 0x78,0x5, 0x4e,0x70,0x1, 0x80,0x3, -+0x4e,0x70,0x10,0xb, 0xa0,0x7e,0x53,0x2a,0x74,0xbc,0x5a,0x38,0xe4,0x6c,0xaa,0x80, -+0x1f,0xa, 0x2a,0x9, 0xb2,0x2a,0xb9,0xbe,0xb0,0xd, 0x38,0x5, 0x4e,0x70,0xc0,0x80, -+0xd, 0xbe,0xb0,0x1b,0x38,0x5, 0x4e,0x60,0x8, 0x80,0x3, 0x4e,0x60,0x50,0xb, 0xa0, -+0x12,0x78,0x26,0x38,0xdc,0x22,0x7e,0xb3,0x2a,0x73,0xbc,0xba,0x22,0xca,0x3b,0x7e, -+0xb4,0x7f,0xff,0x7d,0xab,0x7d,0x8b,0x6d,0x22,0x7d,0x32,0x7d,0x9b,0x75,0x24,0x0, -+0x6c,0x99,0x7e,0x78,0x4, 0xfc,0x7e,0x8, 0x5, 0x7a,0xe4,0x7a,0xb3,0x8, 0x8, 0x7a, -+0xb3,0x8, 0x9, 0x7a,0xb3,0x26,0xf6,0x7a,0xb3,0x26,0xf8,0x7a,0xb3,0x26,0xf7,0x7a, -+0xb3,0x26,0xf9,0x6c,0xaa,0x80,0x5f,0x12,0x79,0x9c,0xb, 0x6a,0xc0,0xbd,0xca,0x58, -+0x2, 0x7d,0xac,0xbd,0xc3,0x8, 0x2, 0x7d,0x3c,0x2d,0x71,0x7d,0x60,0xb, 0x3a,0xd0, -+0xbd,0xd9,0x58,0x2, 0x7d,0x9d,0x7e,0x67,0x2a,0x53,0x7e,0x74,0x0, 0x3, 0xad,0x76, -+0xbd,0xc7,0x8, 0x2, 0x5, 0x24,0x12,0x79,0x89,0xb, 0x3a,0xd0,0xbd,0xcd,0x8, 0xb, -+0x7e,0xb3,0x26,0xf7,0x4, 0x7a,0xb3,0x26,0xf7,0x80,0x19,0x12,0x79,0x92,0xb, 0x3a, -+0xc0,0x6e,0xd4,0xff,0xff,0xb, 0xd4,0xbd,0xcd,0x58,0x9, 0x7e,0xb3,0x26,0xf9,0x4, -+0x7a,0xb3,0x26,0xf9,0xb, 0xa0,0x7e,0xb3,0x2a,0x74,0xbc,0xba,0x38,0x99,0x7a,0xa7, -+0x7, 0xfe,0x7a,0x37,0x8, 0x2, 0xe5,0x24,0x7a,0xb3,0x8, 0x9, 0x7a,0x97,0x8, 0x6, -+0x12,0x79,0x81,0x2d,0xf5,0x6c,0xaa,0x80,0x50,0x12,0x79,0x9c,0xb, 0x6a,0xd0,0xbd, -+0xd8,0x58,0x2, 0x7d,0x8d,0xbd,0xd2,0x8, 0x2, 0x7d,0x2d,0x7e,0x67,0x2a,0x51,0x7e, -+0x74,0x0, 0x3, 0xad,0x76,0xbd,0xd7,0x8, 0x2, 0xb, 0x90,0x12,0x79,0x89,0xb, 0x3a, -+0xc0,0xbd,0xdc,0x8, 0xb, 0x7e,0xb3,0x26,0xf6,0x4, 0x7a,0xb3,0x26,0xf6,0x80,0x17, -+0x12,0x79,0x92,0xb, 0x3a,0xd0,0x6d,0x99,0x9d,0x9c,0xbd,0xd9,0x58,0x9, 0x7e,0xb3, -+0x26,0xf8,0x4, 0x7a,0xb3,0x26,0xf8,0xb, 0xa0,0x12,0x78,0x26,0x38,0xab,0x7a,0x87, -+0x7, 0xfc,0x7a,0x27,0x8, 0x0, 0x7a,0x93,0x8, 0x8, 0x12,0x79,0x81,0x2d,0x15,0x6c, -+0xaa,0x80,0xe, 0x12,0xc7,0xac,0xb, 0x7a,0x90,0xbd,0x9b,0x58,0x2, 0x7d,0xb9,0xb, -+0xa0,0x12,0x78,0x26,0x38,0xed,0x7a,0xb7,0x8, 0x4, 0xbd,0x8a,0x58,0x2, 0x7d,0xa8, -+0x7a,0xa7,0x7, 0xf8,0xbd,0x32,0x58,0x2, 0x7d,0x32,0x7a,0x37,0x7, 0xfa,0xda,0x3b, -+0x22,0x7e,0xa3,0x2a,0x74,0x74,0x2, 0xa4,0x22,0x7e,0x74,0x62,0x10,0x7e,0x64,0x0, -+0xff,0x22,0x7e,0xf0,0x2, 0xac,0xfa,0x2d,0x7f,0x7d,0x6e,0x22,0x7e,0xf0,0x2, 0xac, -+0xfa,0x7f,0x67,0x2d,0xd7,0x22,0xca,0x3b,0x7f,0x31,0x7a,0xd, 0x24,0x7e,0x35,0x28, -+0x7a,0x35,0x2e,0x7e,0xd, 0x24,0x7f,0x13,0x12,0x7a,0x3c,0x7e,0x35,0x28,0x7a,0x35, -+0x2a,0x12,0x79,0x81,0x7e,0xd, 0x24,0x2d,0x15,0x7f,0x13,0x2d,0x35,0x12,0x7a,0xf6, -+0xda,0x3b,0x22,0x7e,0x37,0x2a,0x4f,0x1e,0x34,0x7a,0x35,0x28,0x7e,0x8, 0x4, 0xfc, -+0x7e,0x18,0x4, 0x0, 0x12,0x79,0xa6,0x7e,0x37,0x28,0x99,0xe, 0x34,0x7a,0x35,0x28, -+0x7e,0x8, 0x5, 0x7a,0x7e,0x18,0x4, 0x7e,0x12,0x79,0xa6,0x12,0x7a,0x15,0x12,0xa6, -+0x1e,0x2, 0x7a,0x4, 0xe4,0x7a,0xb3,0x3b,0x5e,0x7e,0xb3,0x28,0xa8,0x60,0x5, 0xe4, -+0x7a,0xb3,0x3b,0x5e,0x22,0xca,0x3b,0x7e,0xf3,0x2a,0x6e,0x12,0xc8,0xf2,0x6c,0xcc, -+0x80,0x13,0x7c,0x7c,0xac,0x7f,0x3e,0x34,0x7e,0xf, 0x13,0x8a,0x2d,0x13,0x7c,0xbd, -+0x12,0xa6,0xa6,0xb, 0xc0,0xbc,0xec,0x38,0xe9,0xda,0x3b,0x22,0xca,0x3b,0x7f,0x61, -+0x7f,0x50,0x7e,0x73,0x2a,0x6e,0xa, 0x37,0x3e,0x34,0xca,0x39,0x7f,0x16,0x7f,0x5, -+0x12,0x20,0xf1,0x1b,0xfd,0x6c,0xdd,0x12,0x7d,0x37,0x7a,0xb3,0x1f,0x6c,0x6c,0xcc, -+0x80,0x4a,0x12,0x7a,0xe5,0x78,0x43,0x74,0x2, 0xac,0xbc,0x7f,0x16,0x2d,0x35,0xb, -+0x1a,0xe0,0x7d,0x3f,0x12,0x21,0x48,0x7d,0x13,0x7d,0x3e,0x12,0x21,0x48,0xbd,0x31, -+0x58,0x2, 0x7d,0xfe,0xbe,0xe5,0x2e,0x8, 0x5, 0x7e,0xe5,0x2e,0x80,0xb, 0x6d,0x33, -+0x9e,0x35,0x2e,0xbd,0x3e,0x8, 0x2, 0x7d,0xe3,0x7d,0x3e,0x1a,0x26,0x1a,0x24,0x2f, -+0x41,0x7e,0xb3,0x1f,0x6c,0x4, 0x7a,0xb3,0x1f,0x6c,0xb, 0xc0,0x7e,0x73,0x2a,0x70, -+0xbc,0x7c,0x38,0xae,0x7e,0x73,0x1f,0x6c,0x4c,0x77,0x68,0x1d,0x12,0x7d,0x54,0x8, -+0x2, 0x7d,0x7f,0x6c,0xcc,0x80,0xa, 0x12,0x7a,0xe5,0x78,0x3, 0x12,0x7d,0x3f,0xb, -+0xc0,0x7e,0x73,0x2a,0x70,0xbc,0x7c,0x38,0xee,0xb, 0xd0,0xbe,0xd0,0x2, 0x50,0x2, -+0x41,0x57,0xda,0x3b,0x22,0xa, 0xec,0x9, 0x7e,0x2a,0xdc,0xa, 0x37,0x5e,0x34,0x0, -+0x1, 0xa, 0xed,0xbd,0x3e,0x22,0xca,0x3b,0x7f,0x61,0x7f,0x50,0x7e,0x14,0x23,0xd, -+0x7e,0x4, 0x0, 0xff,0x69,0x30,0x0, 0x2, 0xb, 0xa, 0x20,0x7a,0x1d,0x2c,0x7e,0x73, -+0x2a,0x6d,0xa, 0x37,0x3e,0x34,0xca,0x39,0x7f,0x16,0x7f,0x5, 0x12,0x20,0xf1,0x1b, -+0xfd,0x6c,0xdd,0x12,0x7d,0x37,0x7a,0xb3,0x1f,0x34,0x6c,0xcc,0x80,0x4f,0x12,0x7b, -+0xdb,0x40,0x48,0x12,0x7b,0xd1,0x50,0x43,0x74,0x2, 0xac,0xbc,0x7f,0x16,0x2d,0x35, -+0xb, 0x1a,0x10,0x7d,0x3f,0x12,0x21,0x48,0x7d,0x3, 0x7d,0x31,0x12,0x21,0x48,0xbd, -+0x30,0x58,0x2, 0x7d,0xf1,0xbe,0x15,0x2a,0x8, 0x5, 0x7e,0x15,0x2a,0x80,0xb, 0x6d, -+0x0, 0x9e,0x5, 0x2a,0xbd,0x1, 0x8, 0x2, 0x7d,0x10,0x7d,0x31,0x1a,0x26,0x1a,0x24, -+0x2f,0x41,0x7e,0xb3,0x1f,0x34,0x4, 0x7a,0xb3,0x1f,0x34,0xb, 0xc0,0x12,0x7b,0xca, -+0x38,0xac,0x7e,0x73,0x1f,0x34,0x4c,0x77,0x68,0x34,0x12,0x7d,0x54,0x8, 0x2, 0x7d, -+0x7f,0xbe,0x75,0x2a,0x8, 0x5, 0x7e,0x75,0x2a,0x80,0xb, 0x6d,0xee,0x9e,0xe5,0x2a, -+0xbd,0xe7,0x8, 0x2, 0x7d,0x7e,0x6c,0xcc,0x80,0xf, 0x12,0x7b,0xdb,0x40,0x8, 0x12, -+0x7b,0xd1,0x50,0x3, 0x12,0x7d,0x3f,0xb, 0xc0,0x12,0x7b,0xca,0x38,0xec,0xb, 0xd0, -+0xbe,0xd0,0x3, 0x50,0x2, 0x61,0x23,0xda,0x3b,0x22,0x7e,0x73,0x2a,0x6f,0xbc,0x7c, -+0x22,0x7c,0x1d,0x2e,0x10,0x2d,0xa5,0xe7,0xbc,0xab,0x22,0xa, 0xec,0x9, 0xae,0x2a, -+0xb9,0x7c,0x1d,0x2e,0x10,0x2c,0xa5,0xe7,0xbc,0xab,0x22,0x7e,0xb3,0x2a,0x6d,0xca, -+0x3b,0x7c,0xdb,0x7a,0x5, 0x39,0x7d,0x71,0x7a,0x25,0x37,0x7a,0x35,0x35,0x12,0x7e, -+0x2e,0x50,0x7c,0x6c,0xcc,0x80,0x11,0x7e,0x73,0x2a,0x6e,0x12,0x7d,0x16,0x12,0x7c, -+0xfc,0x7e,0x34,0x34,0x0, 0x12,0x7d,0x1f,0x12,0x7b,0xca,0x38,0xea,0x6c,0xcc,0x80, -+0x58,0x7e,0xa3,0x2a,0x6e,0x7c,0x7a,0x12,0x7d,0x16,0x75,0x3b,0x0, 0x80,0x27,0x7e, -+0xb3,0x39,0xf9,0xbe,0xb1,0x3b,0x7e,0x70,0x4, 0x28,0x8, 0xac,0x7c,0x49,0x43,0x3, -+0x6f,0x80,0x6, 0xac,0x7c,0x49,0x43,0x3, 0x71,0x7e,0x71,0x3b,0x74,0x2, 0xac,0x7b, -+0x59,0x43,0x34,0x50,0x5, 0x3b,0x7e,0xb3,0x2a,0x70,0xbe,0xb1,0x3b,0x38,0xd0,0x12, -+0x7f,0xdf,0x68,0xb, 0x7e,0x34,0x10,0x0, 0x74,0x2, 0xa4,0x59,0x35,0x34,0x4e,0x12, -+0x7c,0xfc,0x7e,0x34,0x34,0x50,0x12,0x7d,0x1f,0xbc,0xdc,0x38,0xa4,0x80,0x2c,0x7a, -+0xd3,0x25,0xb6,0x7e,0x73,0x2a,0x70,0x7a,0x73,0x25,0xb7,0xe4,0x7a,0xb3,0x25,0xb9, -+0x74,0x6, 0x7a,0xb3,0x25,0xb8,0x7a,0x77,0x25,0xba,0x7a,0x77,0x25,0xbe,0x7e,0x8, -+0x25,0xb6,0x7e,0x73,0x2b,0x1f,0xa, 0x37,0x12,0xe, 0x37,0x7d,0x37,0x12,0x8a,0x5a, -+0x7e,0x35,0x39,0x7a,0x37,0x25,0xbe,0xe4,0x7a,0xb3,0x25,0xb8,0x12,0x7d,0xd, 0x7a, -+0xd3,0x25,0xb6,0x7e,0xb3,0x2b,0x1d,0x70,0xf, 0xe4,0x7a,0xb3,0x25,0xb9,0x7a,0x77, -+0x25,0xba,0x7e,0x34,0x0, 0x20,0x80,0x16,0x74,0x1, 0x7a,0xb3,0x25,0xb9,0x7e,0x35, -+0x35,0x7a,0x37,0x25,0xba,0x7e,0x35,0x37,0x7a,0x37,0x25,0xbc,0x6d,0x33,0x7a,0x37, -+0x25,0xc0,0x7e,0x8, 0x25,0xb6,0x12,0xd, 0x7, 0xda,0x3b,0x22,0x74,0xc, 0x7a,0xb3, -+0x25,0xb8,0x74,0x1, 0x7a,0xb3,0x25,0xb6,0xe4,0x7a,0xb3,0x25,0xb9,0x7e,0x73,0x2a, -+0x6e,0x7a,0x73,0x25,0xb7,0x22,0xac,0x7c,0x3e,0x34,0x7d,0xf7,0x2d,0xf3,0x22,0x7a, -+0x37,0x25,0xba,0x7d,0x3f,0x7a,0x37,0x25,0xbc,0x7a,0x37,0x25,0xbe,0x7e,0x8, 0x25, -+0xb6,0x12,0x7, 0x9b,0xb, 0xc0,0x22,0x7e,0xf4,0x7f,0xff,0x9f,0x44,0xe4,0x22,0x74, -+0x2, 0xac,0xbc,0x7f,0x16,0x2d,0x35,0xb, 0x1a,0xe0,0x9d,0xe7,0x7f,0x15,0x2d,0x35, -+0x1b,0x1a,0xe0,0x22,0xa, 0x17,0x6d,0x0, 0x7f,0x14,0x12,0x1f,0x8d,0x7d,0x73,0x12, -+0x21,0x48,0x7d,0xe3,0x7d,0x3f,0x12,0x21,0x48,0xbd,0x3e,0x22,0x7e,0xf, 0x13,0x8a, -+0x7e,0x18,0x8, 0xa, 0xca,0x3b,0x7a,0x1d,0x2a,0x7f,0x30,0x12,0xc8,0x6c,0x7a,0x55, -+0x32,0x7e,0xb3,0x2b,0x1d,0xf5,0x2f,0xe4,0x7a,0xb3,0x2b,0x1d,0x7f,0x3, 0x7e,0x1d, -+0x2a,0x12,0x84,0x1d,0x12,0x7f,0xc4,0x12,0x4f,0xf7,0x75,0x2e,0x0, 0x12,0x56,0x75, -+0x30,0xf, 0xfd,0x74,0x1, 0x12,0x7e,0x73,0x7e,0x14,0x40,0x0, 0x7d,0x21,0x7d,0x7, -+0x12,0x7b,0xeb,0x12,0x7e,0x7b,0x6d,0x33,0x80,0x19,0x7e,0x35,0x30,0x3e,0x34,0x7f, -+0x3, 0x2d,0x13,0xb, 0xa, 0x20,0x7e,0xd, 0x2a,0x2d,0x13,0x12,0x85,0xcf,0x7e,0x35, -+0x30,0xb, 0x34,0x7a,0x35,0x30,0x7e,0x35,0x32,0xbe,0x35,0x30,0x38,0xdc,0x5, 0x2e, -+0xe5,0x2e,0xbe,0xb0,0x1, 0x40,0xb6,0xe5,0x2f,0x7a,0xb3,0x2b,0x1d,0xda,0x3b,0x22, -+0x7e,0xb3,0x2b,0x1e,0x70,0x1f,0x12,0x26,0x86,0x12,0x2f,0xe8,0x50,0xfb,0x12,0x7d, -+0x6c,0x12,0x7e,0x16,0x20,0x12,0x3, 0x12,0xb1,0x2c,0x74,0x2, 0x7a,0xb3,0x2b,0x1e, -+0xe4,0x7a,0xb3,0x16,0x91,0x22,0x12,0x7e,0x2e,0x50,0x3, 0xd2,0x12,0x22,0xc2,0x12, -+0x22,0x12,0xa8,0xd2,0x12,0x7e,0x3f,0x2, 0x7e,0x16,0x7a,0xb3,0x2b,0x20,0x7e,0xb3, -+0x39,0x50,0xb4,0x3, 0x8, 0x7e,0xb3,0x39,0xfa,0x70,0x2, 0xc3,0x22,0xd3,0x22,0x7e, -+0x8, 0x24,0xf2,0x7e,0x34,0x0, 0xc, 0xe4,0x12,0x21,0x16,0x12,0x7f,0xf1,0x12,0x7f, -+0xe8,0xa9,0xd1,0xcb,0x12,0x7e,0x73,0x7a,0x37,0x24,0xf6,0x7e,0x1f,0x3b,0x21,0x7a, -+0x37,0x24,0xf8,0x7e,0x1f,0x13,0x86,0x7a,0x37,0x24,0xfa,0x6d,0x33,0x12,0x7f,0xcd, -+0x2, 0xd, 0x7, 0x12,0x0, 0xe, 0x7e,0x1f,0x13,0x86,0x22,0x7e,0xa3,0x2a,0x6e,0xa, -+0x3a,0x3e,0x34,0x7e,0x8, 0x13,0x8e,0xe4,0x12,0x21,0x16,0x90,0x60,0x93,0x93,0xa, -+0x3b,0x7e,0xb3,0x2a,0x71,0xa, 0x2b,0x2d,0x23,0xa, 0x3a,0xad,0x32,0x7d,0x43,0x6c, -+0x77,0x80,0x1d,0xa, 0x27,0x2d,0x24,0x12,0x7f,0xd6,0xb, 0xa, 0x0, 0x7e,0x30,0x2, -+0xac,0x37,0x2e,0x14,0x13,0x8e,0xb, 0x18,0x20,0x2d,0x20,0x1b,0x18,0x20,0xb, 0x70, -+0xbc,0xa7,0x38,0xdf,0x22,0x12,0x39,0x15,0x12,0x9b,0xef,0x12,0x7f,0x1f,0x7e,0xb3, -+0x39,0x4e,0xb4,0x1, 0x1e,0x7e,0x34,0x61,0xc0,0x12,0x7f,0xbc,0x7e,0x24,0x0, 0x5, -+0xad,0x12,0x7a,0x17,0x28,0xa1,0x7e,0x14,0x61,0xc2,0x12,0x5a,0xad,0xad,0x32,0x7a, -+0x37,0x28,0xa3,0x7e,0xb3,0x3b,0x60,0x60,0x7, 0x14,0x7a,0xb3,0x3b,0x60,0x80,0x6, -+0x7e,0xb3,0x28,0xac,0x60,0x9, 0x12,0x7e,0x21,0x12,0x7f,0x43,0x12,0xb9,0xb9,0x7e, -+0xb3,0x28,0xad,0x60,0x9, 0x12,0xc0,0x5, 0x12,0xbf,0xb4,0x2, 0x7f,0x60,0x22,0x12, -+0xb1,0xba,0x60,0x17,0x12,0x7f,0x3c,0x7e,0x37,0x28,0xa1,0x3e,0x34,0x7a,0x37,0x28, -+0xa1,0x7e,0x37,0x28,0xa3,0x3e,0x34,0x7a,0x37,0x28,0xa3,0x22,0x74,0x1, 0x7a,0xb3, -+0x28,0xad,0x22,0x12,0xa9,0x57,0x6d,0x33,0x7a,0x37,0x38,0xab,0x6c,0xaa,0x80,0x5, -+0x12,0x7f,0xae,0xb, 0xa0,0x12,0x5f,0xf4,0x38,0xf6,0xe4,0x7a,0xb3,0x38,0x40,0x22, -+0x6c,0xaa,0x80,0x44,0x7e,0x70,0xc, 0xac,0x7a,0x12,0xc8,0x94,0xbe,0x34,0x3, 0xe8, -+0x8, 0x5, 0x12,0x7f,0xae,0x80,0x2f,0x7e,0x50,0xc, 0xac,0x5a,0x49,0x32,0x38,0x52, -+0x49,0x12,0x38,0x4e,0xbd,0x13,0x28,0xf, 0x7d,0x2, 0x2e,0x4, 0x38,0x52,0x7d,0x13, -+0xb, 0x15,0x1b,0x8, 0x10,0x80,0xf, 0xbe,0x34,0x0, 0x2, 0x28,0x9, 0x2e,0x24,0x38, -+0x52,0x1b,0x35,0x1b,0x28,0x30,0xb, 0xa0,0x12,0x5f,0xf4,0x38,0xb7,0x22,0x7e,0x50, -+0xc, 0xac,0x5a,0x49,0x32,0x38,0x4e,0x59,0x32,0x38,0x52,0x22,0x7e,0x24,0x0, 0xff, -+0xb, 0x1a,0x10,0x22,0x74,0x1, 0x12,0x14,0x13,0xe4,0x2, 0x0, 0x1e,0x7a,0x37,0x24, -+0xfc,0x7e,0x8, 0x24,0xf2,0x22,0x3e,0x24,0x7e,0xf, 0x3b,0x21,0x2d,0x12,0x22,0x90, -+0x60,0xaa,0xe4,0x93,0xbe,0xb0,0x1, 0x22,0x7e,0x73,0x2a,0x6d,0x7a,0x73,0x24,0xf2, -+0x22,0x7e,0x73,0x2a,0x6e,0x7a,0x73,0x24,0xf3,0x22,0xca,0xd8,0xca,0x79,0x90,0x60, -+0x50,0xe4,0x93,0x7c,0xdb,0x90,0x60,0x51,0xe4,0x93,0x7c,0xeb,0x7e,0x73,0x2a,0x74, -+0xbc,0x7e,0x28,0x4, 0x7c,0xf7,0x80,0x2, 0x7c,0xfe,0x7a,0xd3,0x2a,0x6d,0x7a,0xe3, -+0x2a,0x6e,0x7a,0xd3,0x2a,0x71,0x7a,0xe3,0x2a,0x72,0x7a,0xd3,0x2a,0x73,0x7a,0xe3, -+0x2a,0x74,0x90,0x60,0xa8,0xe4,0x93,0x7c,0xab,0x7a,0xa3,0x2a,0x77,0x90,0x60,0xa9, -+0xe4,0x93,0xa, 0x2b,0xa, 0x3d,0x9d,0x32,0x7c,0xb7,0x7a,0xb3,0x2a,0x6f,0xa, 0x2a, -+0xa, 0x3e,0x9d,0x32,0x7a,0x73,0x2a,0x70,0x90,0x60,0x91,0xe4,0x93,0x7a,0xb3,0x2a, -+0x78,0x90,0x60,0x94,0xe4,0x93,0x7a,0xb3,0x2a,0x79,0xa, 0x3d,0xca,0x39,0x7e,0x34, -+0x60,0x52,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x2a,0x7a,0x12,0x20,0xf1,0x1b,0xfd,0xa, -+0x3f,0xca,0x39,0x7e,0x34,0x60,0x75,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x2a,0x9d,0x12, -+0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x0, 0x23,0xca,0x39,0x7e,0x34,0x60,0xd8,0x7e,0x24, -+0x0, 0xff,0x7e,0x8, 0x2b,0x21,0x12,0x20,0xf1,0x1b,0xfd,0x12,0x81,0xe1,0x12,0x83, -+0xd1,0x90,0x60,0xaa,0xe4,0x93,0x70,0x8, 0x7a,0xd3,0x2a,0x75,0x7a,0xe3,0x2a,0x76, -+0x12,0x6f,0xff,0x74,0x1, 0x12,0x45,0x6e,0xe4,0x7a,0xb3,0x2b,0x1, 0x7a,0xb3,0x2b, -+0x2, 0x12,0x77,0xdb,0x7a,0x37,0x2b,0xd, 0x74,0x3, 0x7a,0xb3,0x2b,0x3, 0xe4,0x7a, -+0xb3,0x2b,0x4, 0x74,0x2, 0x7a,0xb3,0x2b,0x5, 0x7e,0x34,0x61,0x59,0x12,0x23,0xc9, -+0x7a,0x37,0x2b,0x7, 0x74,0x4, 0x7a,0xb3,0x2b,0x6, 0x7e,0x34,0x0, 0xf, 0x7a,0x37, -+0x2b,0x9, 0x7e,0x34,0x20,0x5f,0x7a,0x37,0x2b,0xb, 0x90,0x61,0x1a,0xe4,0x93,0x7a, -+0xb3,0x2b,0x62,0x90,0x61,0x1b,0xe4,0x93,0x7a,0xb3,0x2b,0x10,0x90,0x61,0x1c,0xe4, -+0x93,0x7a,0xb3,0x2b,0x11,0x74,0x4, 0x7a,0xb3,0x2b,0x13,0x90,0x60,0xd5,0xe4,0x93, -+0x12,0x6c,0x13,0xe4,0x7a,0xb3,0x2b,0x1d,0x7a,0xb3,0x2b,0x1e,0x7e,0x34,0x61,0x22, -+0x12,0x23,0xc9,0x7a,0x37,0x2b,0x19,0x90,0x60,0xd3,0x93,0x7a,0xb3,0x2b,0x12,0x90, -+0x61,0x24,0xe4,0x93,0x7a,0xb3,0x2b,0x20,0x90,0x61,0x19,0xe4,0x93,0x7a,0xb3,0x2b, -+0x1f,0x7e,0x34,0x61,0x1e,0x12,0x23,0xc9,0x7a,0x37,0x2b,0x15,0x7e,0x34,0x61,0x20, -+0x12,0x23,0xc9,0x7a,0x37,0x2b,0x17,0x90,0x61,0x1d,0xe4,0x93,0x7a,0xb3,0x2b,0x14, -+0x7e,0x34,0x0, 0x30,0x7a,0x37,0x2b,0x6a,0x74,0x5, 0x7a,0xb3,0x2b,0x67,0x7e,0x34, -+0x0, 0x5, 0x7a,0x37,0x2b,0x68,0xe4,0x7a,0xb3,0x2b,0x66,0x7e,0x34,0x4, 0x6d,0x7a, -+0x37,0x2b,0x6c,0x74,0x1, 0x7a,0xb3,0x2b,0x63,0x74,0x6, 0x7a,0xb3,0x2b,0x64,0xe4, -+0x7a,0xb3,0x2b,0x65,0x74,0x1, 0x7a,0xb3,0x2b,0x60,0xe4,0x7a,0xb3,0x2b,0x61,0x7e, -+0x34,0x20,0x93,0x7a,0x37,0x2b,0x6e,0xa, 0x3e,0xca,0x39,0x7e,0x34,0x60,0xfb,0x7e, -+0x24,0x0, 0xff,0x7e,0x8, 0x2b,0x44,0x12,0x20,0xf1,0x1b,0xfd,0xda,0x79,0xda,0xd8, -+0x22,0x12,0x82,0x77,0x12,0x82,0x43,0x90,0x60,0x50,0xe4,0x93,0xa, 0x3b,0x7d,0x13, -+0x2e,0x14,0x2a,0x7a,0x6d,0x0, 0x9, 0xb3,0x2a,0x79,0x12,0x82,0x2a,0xa, 0x3b,0x7d, -+0x13,0x2e,0x14,0x2b,0x21,0x6d,0x0, 0x9, 0xb3,0x2b,0x20,0x12,0x82,0x2a,0xa, 0x1b, -+0x2e,0x14,0x2a,0x7c,0x12,0x82,0x37,0xe5,0x25,0x12,0x82,0x2e,0xa, 0x1b,0x2e,0x14, -+0x2b,0x23,0x12,0x82,0x37,0xe5,0x24,0x2, 0x21,0x16,0x7e,0x34,0x0, 0x2, 0x12,0x21, -+0x16,0x90,0x60,0x50,0xe4,0x93,0x22,0x6d,0x0, 0x90,0x60,0x91,0xe4,0x93,0xa, 0x3b, -+0x1b,0x35,0x22,0x6c,0xaa,0x6c,0x99,0x80,0xc, 0xa, 0xf9,0x9, 0xbf,0x2a,0x7a,0xbc, -+0xba,0x68,0x7, 0xb, 0x90,0x12,0x82,0x6f,0x38,0xef,0x12,0x82,0x6f,0x68,0x7, 0xb, -+0xa0,0xbe,0xa0,0x23,0x40,0xdf,0x7a,0xb, 0xa0,0x74,0x6e,0x7a,0x1b,0xb0,0x22,0x90, -+0x60,0x50,0xe4,0x93,0xbc,0xb9,0x22,0x7e,0x8, 0x0, 0x25,0x7e,0x18,0x0, 0x24,0x22, -+0x12,0x82,0xac,0x12,0x83,0x2b,0x75,0xcd,0x0, 0xa9,0xd6,0xeb,0xa9,0xd7,0xcd,0xc2, -+0xce,0x12,0x82,0x77,0x12,0x4e,0xc6,0x74,0x1, 0x12,0x82,0xe4,0xa9,0xc6,0xeb,0xa9, -+0xc7,0xcd,0xd2,0xce,0xe5,0x25,0x7e,0x71,0x24,0x2, 0x4f,0x84,0x74,0x81,0x7a,0xb3, -+0x3b,0x52,0x22,0x80,0x1d,0x12,0x82,0xac,0x12,0x83,0x34,0x68,0x5, 0xc2,0x1, 0x12, -+0x4f,0xae,0x7e,0xb3,0x34,0x3a,0xbe,0xb0,0x2, 0x68,0x18,0x20,0x1a,0x15,0xe4,0x12, -+0x82,0xe4,0x20,0x93,0xe0,0x12,0x82,0xac,0xa9,0xd1,0xcd,0xa9,0xc5,0xea,0x74,0x2, -+0x2, 0x82,0xe4,0x22,0x7c,0xab,0x7e,0xb3,0x3b,0x52,0xb4,0x81,0x38,0x4c,0xaa,0x78, -+0x5, 0xa9,0xd0,0x87,0x80,0x29,0xbe,0xa0,0x1, 0x78,0xf, 0xc2,0xaf,0xa9,0xd0,0xce, -+0xa9,0xc7,0xc9,0xa9,0xd1,0x87,0xd2,0xaf,0x80,0x15,0xbe,0xa0,0x2, 0x78,0x16,0xc2, -+0xaf,0x20,0x93,0x9, 0xa9,0xd0,0xce,0xa9,0xd7,0xc9,0xa9,0xd1,0x87,0xd2,0xaf,0x0, -+0x0, 0x0, 0x0, 0x0, 0x0, 0xe4,0x7a,0xb3,0x3b,0x52,0x22,0x12,0x83,0x34,0x68,0xfb, -+0x20,0x93,0xfd,0x22,0x7e,0xb3,0x34,0x3a,0xbe,0xb0,0x1, 0x22,0x74,0xc8,0x7a,0xb3, -+0x3b,0x56,0xc2,0x1a,0x80,0xa, 0x12,0x82,0xb3,0x30,0x1a,0x4, 0x75,0xe9,0xff,0x22, -+0x12,0x83,0x34,0x68,0xf1,0x22,0xd2,0x0, 0x80,0x12,0x30,0x0, 0xc, 0x12,0x83,0x34, -+0x68,0x7, 0xc2,0x0, 0xc2,0x1, 0x12,0x4f,0xae,0x12,0x82,0xb3,0x30,0x1a,0xeb,0x22, -+0x74,0x1, 0x12,0x83,0x8f,0x20,0x1a,0x6, 0x12,0x83,0x56,0x12,0x4f,0xc7,0x7e,0xb3, -+0x34,0x3a,0xb4,0x1, 0x6, 0x12,0x83,0x3c,0x12,0x4f,0xc7,0xe4,0x2, 0x83,0x8f,0xbe, -+0xb0,0x8, 0x50,0x3, 0x12,0x83,0xc8,0x22,0x30,0x1b,0x5, 0xc2,0x1, 0x12,0x4f,0xae, -+0xa9,0xd1,0xcd,0xa9,0xc5,0xea,0x30,0x1a,0x3, 0x20,0x1b,0x14,0x12,0x82,0xac,0xa9, -+0xd0,0xce,0xa9,0xc4,0xc9,0x74,0x2, 0x12,0x82,0xe4,0xa9,0xd0,0xce,0xa9,0xd4,0xc9, -+0xa9,0xc1,0xcd,0xd2,0x1, 0x2, 0x4f,0xae,0xa, 0x5b,0x2e,0x54,0x0, 0x8, 0xf5,0xcc, -+0x22,0xca,0xf8,0x7e,0x73,0x2a,0x78,0xa, 0x47,0x7e,0x73,0x2a,0x71,0xa, 0x57,0x2d, -+0x54,0x7e,0xa3,0x2a,0x73,0xbc,0xab,0x28,0x2, 0x7c,0xba,0x7e,0xf3,0x2a,0x72,0x7e, -+0xa3,0x2a,0x74,0xbc,0xaf,0x28,0x2, 0x7c,0xfa,0x75,0x25,0x12,0x7e,0x8, 0x2a,0xb9, -+0x7e,0x18,0x2a,0x7a,0x12,0xd, 0xd9,0x75,0x25,0x12,0x7e,0x8, 0x2a,0xdc,0x7e,0x18, -+0x2a,0x9d,0x7c,0xbf,0x12,0xf, 0x9c,0xda,0xf8,0x22,0x2, 0x23,0xd1,0x7f,0x60,0x7e, -+0xa3,0x2a,0x6d,0x7e,0xb3,0x2a,0x6e,0xa4,0x7d,0xf5,0x3e,0xf4,0x7f,0x1, 0x7d,0x3f, -+0xe4,0x12,0x21,0x16,0x7f,0x6, 0x7d,0x3f,0x12,0x21,0x16,0x7a,0xb3,0x16,0x91,0x22, -+0x7f,0x70,0x7e,0x33,0x2a,0x74,0xa, 0x43,0x7e,0x33,0x2a,0x73,0xa, 0x53,0x2d,0x54, -+0x3e,0x54,0x7c,0xab,0xe4,0x7a,0xb3,0x16,0x90,0x7f,0x1, 0xa, 0x3a,0x12,0x21,0x16, -+0x7f,0x7, 0xa, 0x3a,0x2, 0x21,0x16,0xca,0xd8,0xca,0x79,0x7c,0xfb,0x7f,0x51,0x7f, -+0x40,0x7f,0x15,0x12,0x84,0x40,0x12,0x85,0xc8,0x7e,0xe0,0x1, 0x12,0x57,0xbb,0x30, -+0x1b,0xfd,0x74,0x2, 0x12,0x0, 0x1e,0x7f,0x4, 0x12,0x85,0xd8,0x74,0x2, 0x12,0x0, -+0x1e,0x6c,0xdd,0x80,0x18,0x74,0x2, 0xac,0xbd,0x7f,0x14,0x2d,0x35,0xb, 0x1a,0x20, -+0x74,0x2, 0xac,0xbd,0x7f,0x5, 0x2d,0x15,0x12,0x85,0xcf,0xb, 0xd0,0x7e,0x73,0x2a, -+0x74,0xa, 0x7, 0x7e,0x63,0x2a,0x73,0xa, 0x16,0x2d,0x10,0xa, 0x2d,0xbd,0x21,0x48, -+0xd4,0x1b,0xe0,0x78,0xb7,0x7f,0x5, 0x7c,0xbf,0x2e,0x73,0x2a,0x73,0x12,0x85,0x36, -+0xda,0x79,0xda,0xd8,0x22,0x7e,0xb3,0x2b,0x2, 0x70,0x41,0x12,0x2f,0xe8,0x50,0xfb, -+0xe4,0x6c,0x77,0x6c,0x66,0x12,0x85,0x1d,0x7e,0x8, 0x6, 0xfc,0x7e,0x1f,0x6, 0xf4, -+0x7e,0xb3,0x2b,0x72,0x12,0x84,0x67,0x74,0x1, 0x7e,0x70,0x1, 0x7e,0x60,0x1, 0x12, -+0x85,0x1d,0x7e,0x8, 0x7, 0x7a,0x7e,0x1f,0x6, 0xf4,0x7e,0xb3,0x25,0xf0,0x12,0x84, -+0x67,0x74,0x2, 0x7a,0xb3,0x2b,0x2, 0xe4,0x7a,0xb3,0x16,0x90,0x22,0x7c,0x96,0x7c, -+0xa7,0x12,0x45,0x6e,0x7c,0xba,0x12,0x13,0xfc,0x74,0xa, 0x12,0x4f,0x4a,0x7c,0xb9, -+0x12,0x0, 0x1e,0x2, 0x56,0xee,0xca,0xd8,0xca,0x79,0x7c,0xf7,0x7f,0x70,0x12,0xbf, -+0x62,0x7c,0xeb,0x6c,0xdd,0x80,0x20,0x74,0x2, 0xac,0xbd,0x7f,0x67,0x2d,0xd5,0xb, -+0x6a,0x30,0x6d,0x22,0x74,0x4, 0x2f,0x11,0x14,0x78,0xfb,0xa, 0x1e,0x6d,0x0, 0x12, -+0x1f,0x3c,0x1b,0x6a,0x30,0xb, 0xd0,0xbc,0xfd,0x38,0xdc,0xda,0x79,0xda,0xd8,0x22, -+0xca,0x79,0x7f,0x51,0x7f,0x40,0x7e,0xa3,0x2a,0x74,0xa, 0x3a,0x7e,0xa3,0x2a,0x73, -+0xa, 0x7a,0x2d,0x73,0x7e,0xd, 0x2a,0x7c,0x7f,0x12,0x85,0x36,0xa, 0x3f,0x3e,0x34, -+0xca,0x39,0x7e,0x1d,0x2a,0x7f,0x4, 0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xb3,0x2b,0x1, -+0xb4,0x1, 0x22,0x6c,0xaa,0x80,0x1a,0x7e,0x70,0x2, 0xac,0x7a,0x7f,0x5, 0x2d,0x13, -+0xb, 0xa, 0x20,0x7f,0x4, 0x2d,0x13,0xb, 0xa, 0x30,0x9d,0x32,0x1b,0xa, 0x30,0xb, -+0xa0,0xbc,0xfa,0x38,0xe2,0xda,0x79,0x22,0x7e,0x8, 0x2a,0x6d,0x2, 0x0, 0x2e,0xb, -+0xa, 0x30,0x2d,0x32,0x1b,0xa, 0x30,0x22,0x7e,0xb3,0x2a,0x73,0x7e,0x73,0x2a,0x74, -+0x2, 0x10,0xee,0xca,0xd8,0xca,0x79,0x7e,0xf0,0xa, 0x74,0x1, 0x7a,0xb3,0x2a,0xfa, -+0x12,0x29,0x95,0x7c,0xe7,0x80,0x62,0x12,0x26,0x86,0x12,0x57,0xaa,0x30,0x1b,0xfd, -+0x12,0x87,0x83,0x12,0x85,0xd8,0x74,0x2, 0x12,0x0, 0x1e,0x6c,0xdd,0x80,0x3d,0x7e, -+0x50,0x2, 0xac,0x5d,0x49,0x32,0x6, 0xfc,0xbe,0x34,0x14,0x78,0x50,0x14,0xa, 0x1d, -+0x2e,0x17,0x2a,0xfe,0x7e,0x19,0xb0,0xbe,0xb0,0x0, 0x28,0x1e,0x14,0x7a,0x19,0xb0, -+0x80,0x18,0xbe,0x34,0x19,0x28,0x28,0x10,0xa, 0x3d,0x12,0x46,0xc9,0xbe,0xb0,0xff, -+0x68,0x8, 0x4, 0x7a,0x39,0xb0,0x80,0x2, 0x1b,0xe0,0xb, 0xd0,0x12,0x86,0xe8,0xa, -+0x3d,0xbd,0x32,0x48,0xba,0x4c,0xee,0x68,0x8, 0x7c,0xaf,0x1b,0xf0,0x4c,0xaa,0x78, -+0x96,0xda,0x79,0xda,0xd8,0x22,0xca,0x79,0x7c,0xfb,0x7e,0x8, 0x24,0xf2,0x12,0x86, -+0xf7,0x7e,0xa3,0x2a,0x73,0x7e,0x73,0x2a,0x74,0x6c,0xee,0x80,0x1d,0xa, 0x2e,0x9, -+0x62,0x2a,0xdc,0xa, 0x26,0x12,0x87,0x76,0x7c,0x6b,0xbe,0x60,0x1c,0x50,0x9, 0xa, -+0x2e,0x12,0x86,0xde,0x19,0xb2,0x24,0xf2,0xb, 0xe0,0xbc,0x7e,0x38,0xdf,0x6c,0xee, -+0x80,0x1a,0xa, 0x2e,0x9, 0x62,0x2a,0xb9,0xbe,0x60,0x23,0x50,0xd, 0xa, 0x1e,0xa, -+0x27,0x2d,0x21,0x12,0x86,0xde,0x19,0xb2,0x25,0xe, 0xb, 0xe0,0xbc,0xae,0x38,0xe2, -+0x6c,0xee,0x7e,0x30,0xe, 0xac,0x3e,0x2e,0x14,0x24,0xf2,0x6d,0x0, 0x7c,0xbf,0x7c, -+0x7e,0x12,0x11,0xba,0xb, 0xe0,0xbe,0xe0,0x5, 0x40,0xe7,0xda,0x79,0x22,0x2e,0x27, -+0x2a,0xfe,0x7e,0x29,0xb0,0xa, 0x26,0x22,0x7e,0x73,0x2a,0x74,0xa, 0x37,0x7e,0x53, -+0x2a,0x73,0xa, 0x25,0x2d,0x23,0x22,0x7e,0x34,0x0, 0x46,0x74,0x3f,0x2, 0x21,0x16, -+0xca,0x79,0x7c,0xfb,0x7e,0x8, 0x1f,0x34,0x12,0x86,0xf7,0x7e,0xa3,0x2a,0x73,0x7e, -+0x63,0x2a,0x74,0x6c,0xee,0x80,0x1e,0xa, 0x2e,0x9, 0x72,0x2a,0xdc,0xbe,0x70,0x1c, -+0x50,0x11,0xa, 0x27,0x12,0x87,0x76,0x7c,0x7b,0x7e,0xb3,0x2a,0xfb,0xa, 0x27,0x19, -+0xb2,0x1f,0x34,0xb, 0xe0,0xbc,0x6e,0x38,0xde,0x6c,0xee,0x80,0x17,0xa, 0x3e,0x9, -+0x73,0x2a,0xb9,0xbe,0x70,0x23,0x50,0xa, 0x7e,0x63,0x2a,0xfb,0xa, 0x27,0x19,0x62, -+0x1f,0x50,0xb, 0xe0,0xbc,0xae,0x38,0xe5,0x6c,0xee,0x7e,0x30,0xe, 0xac,0x3e,0x2e, -+0x14,0x1f,0x34,0x6d,0x0, 0x7c,0xbf,0x7c,0x7e,0x12,0x11,0xf8,0xb, 0xe0,0xbe,0xe0, -+0x5, 0x40,0xe7,0xda,0x79,0x22,0x2e,0x24,0x20,0xab,0x7a,0x51,0x82,0x7a,0x41,0x83, -+0xe4,0x93,0x22,0x74,0x2, 0x12,0x0, 0x1e,0x7e,0x8, 0x6, 0xfc,0x22,0xb4,0xeb,0x5, -+0xe4,0x7a,0xb3,0x3a,0x3a,0x7e,0x73,0x3a,0x3a,0xa, 0x27,0x2e,0x24,0x0, 0x6, 0x12, -+0x87,0x7a,0x7c,0xab,0x7c,0xb7,0x4, 0x7a,0xb3,0x3a,0x3a,0xb4,0x3, 0xb, 0xe4,0x7a, -+0xb3,0x3a,0x3a,0x6d,0x33,0x7a,0x37,0x3a,0x37,0x75,0x1b,0xeb,0x7c,0xba,0x22,0x7e, -+0xa3,0x2f,0xa8,0x7e,0x70,0x4, 0xac,0x7a,0xb, 0x34,0xbe,0x37,0x3a,0x35,0x40,0x39, -+0x7e,0x37,0x3a,0x35,0xb, 0x34,0x7a,0x37,0x3a,0x35,0xbe,0x34,0x0, 0x1, 0x78,0x5, -+0x7e,0xb3,0x39,0x7c,0x22,0xbe,0x34,0x0, 0x2, 0x78,0x3, 0x7c,0xba,0x22,0xbe,0x34, -+0x0, 0x2, 0x50,0x9, 0x7d,0x23,0x1b,0x25,0x9, 0xb2,0x3b,0x4b,0x22,0x9e,0x34,0x0, -+0x3, 0x2e,0x37,0x2b,0xb9,0x7e,0x39,0xb0,0x22,0x74,0xff,0x22,0x7e,0xa3,0x39,0xe3, -+0x7c,0xba,0x4, 0x7a,0xb3,0x39,0xe3,0x7a,0xa3,0x39,0x3a,0x22,0xca,0x7b,0xca,0x2b, -+0xca,0x1b,0xca,0xb, 0xc0,0x83,0xc0,0x82,0x12,0x42,0x60,0xd0,0x82,0xd0,0x83,0xda, -+0xb, 0xda,0x1b,0xda,0x2b,0xda,0x7b,0x32,0xa9,0xc0,0x93,0x75,0x19,0x0, 0x32,0x7a, -+0xb3,0x39,0xe4,0xc4,0x54,0x7, 0xbe,0xb0,0x4, 0x68,0x3, 0xb4,0x2, 0x4, 0x74,0x3, -+0x80,0x7, 0x60,0x3, 0xb4,0x1, 0x7, 0x74,0x1, 0x7a,0xb3,0x39,0x50,0x22,0x74,0x1, -+0x7a,0xb3,0x39,0x50,0xe4,0x7a,0xb3,0x39,0xe4,0x22,0x7c,0xa7,0x7c,0x3b,0xa5,0xbb, -+0x0, 0x7, 0x7c,0xba,0x12,0x88,0x3f,0x80,0x2c,0xbe,0x30,0xeb,0x68,0x4, 0xa5,0xbb, -+0xec,0x9, 0x7c,0xb3,0x7c,0x7a,0x12,0x88,0xd9,0x80,0x1a,0xbe,0x30,0x80,0x40,0x15, -+0xbe,0x30,0xdf,0x38,0x10,0x7c,0xb3,0x24,0x80,0x7c,0x7a,0x12,0x88,0xb5,0xa5,0xbb, -+0x8f,0x3, 0x75,0x1a,0x1, 0xa5,0xbb,0xfc,0x5, 0x7c,0xba,0x2, 0x4e,0xf5,0x74,0x1, -+0x7a,0xb3,0x34,0x4f,0x22,0x7c,0x6b,0x2e,0x60,0xdd,0x68,0x1c,0x2e,0x60,0xfd,0x68, -+0x17,0x1b,0x61,0x68,0x13,0x2e,0x60,0xfa,0x68,0xe, 0x1b,0x60,0x68,0xa, 0x80,0x0, -+0xa, 0x2b,0x19,0x72,0x39,0x29,0xd2,0x11,0x22,0xbe,0xb0,0xeb,0x68,0x3, 0xb4,0xec, -+0x33,0x7e,0x27,0x3a,0x37,0x4d,0x22,0x78,0xe, 0xa5,0xbf,0xaa,0xa, 0x7e,0x24,0x0, -+0x1, 0x7a,0x27,0x3a,0x37,0x15,0x1b,0x7e,0x27,0x3a,0x37,0xbe,0x24,0x0, 0x1, 0x78, -+0x10,0xa5,0xbf,0x9, 0x6, 0x7e,0x34,0x0, 0x2, 0x80,0x2, 0x6d,0x33,0x7a,0x37,0x3a, -+0x37,0x75,0x1b,0xea,0x22,0x7c,0xab,0x4c,0xaa,0x78,0x5, 0x7e,0xb3,0x39,0xe4,0x22, -+0xbe,0xa0,0x3, 0x38,0x23,0x75,0x1e,0x0, 0x30,0xb, 0x6, 0x7e,0x18,0x33,0x21,0x80, -+0x4, 0x7e,0x18,0x33,0x5f,0x7a,0x1d,0x14,0x30,0xa, 0x2b,0xbe,0xa0,0x2, 0x78,0x26, -+0xe5,0x18,0x70,0x22,0x5, 0x18,0x80,0x1e,0xbe,0xa0,0x5e,0x38,0x26,0x75,0x1e,0x0, -+0x30,0xa, 0x13,0xbe,0xa0,0x21,0x78,0x7, 0xe5,0x18,0xb4,0x1, 0x2, 0x5, 0x18,0xe5, -+0x18,0xb4,0x2, 0x2, 0xc2,0xa, 0xa, 0x1a,0x7e,0x1d,0x14,0x2d,0x31,0x1b,0x34,0x7e, -+0x1b,0xb0,0x22,0xbe,0xa0,0xd3,0x68,0x5, 0xbe,0xa0,0xd4,0x78,0x12,0xbe,0xa0,0xd3, -+0x78,0x8, 0x6d,0x33,0x7a,0x37,0x3a,0x35,0x80,0x2, 0x15,0x1b,0x2, 0x87,0xbf,0xbe, -+0xa0,0xeb,0x68,0x5, 0xbe,0xa0,0xec,0x78,0x5, 0x7c,0xba,0x2, 0x87,0x8d,0xbe,0xa0, -+0x80,0x40,0xc, 0xbe,0xa0,0xdf,0x38,0x7, 0xa, 0x3a,0x9, 0xb3,0x38,0xa9,0x22,0xbe, -+0xa0,0xfc,0x78,0x5, 0x7e,0xb3,0x39,0x50,0x22,0xbe,0xa0,0xfd,0x78,0x17,0x6c,0xaa, -+0x7e,0xb3,0x28,0xa8,0x60,0x3, 0x4e,0xa0,0x1, 0x7e,0xb3,0x38,0x3f,0x60,0x3, 0x4e, -+0xa0,0x2, 0x7c,0xba,0x22,0xbe,0xa0,0xfe,0x78,0x5, 0x7e,0xb3,0x2b,0xf, 0x22,0x74, -+0xff,0x22,0x7c,0xab,0x12,0x47,0x10,0x7c,0xba,0x12,0x13,0xfc,0x2, 0x0, 0x1e,0x30, -+0x1b,0x8, 0x74,0x5, 0x7e,0x70,0x99,0x12,0x13,0x61,0x7e,0xb3,0x34,0x3a,0xb4,0x1, -+0x47,0x12,0x8a,0x49,0x49,0x35,0x34,0x3b,0x49,0x15,0x34,0x3d,0x6d,0x0, 0xbe,0x8, -+0x0, 0x0, 0x68,0x12,0xbe,0x70,0x0, 0x40,0xd, 0xbe,0x70,0x2, 0x38,0x8, 0x74,0x2, -+0x12,0x0, 0x1e,0x12,0x85,0xd8,0x7e,0xb3,0x34,0x39,0x4, 0x7a,0xb3,0x34,0x39,0x12, -+0x8a,0x51,0x28,0xe, 0x12,0x56,0xa2,0xb4,0x1, 0x4, 0x74,0x1, 0x80,0x6, 0x74,0x3, -+0x80,0x2, 0x74,0x2, 0x7a,0xb3,0x34,0x3a,0x22,0x7e,0xa3,0x34,0x39,0x74,0x4, 0xa4, -+0x22,0x7e,0x73,0x34,0x38,0xbe,0x73,0x34,0x39,0x22,0x7d,0xf3,0x6d,0xee,0x6c,0x99, -+0x80,0x3c,0x7c,0xb9,0x12,0x3e,0x8c,0x7d,0xd3,0x7d,0xcd,0x3e,0xc4,0x7f,0x57,0x2d, -+0xbc,0xb, 0x5a,0x10,0x1a,0x2, 0x1a,0x0, 0x7e,0x83,0x2b,0x20,0xa, 0x98,0x6d,0x88, -+0x7f,0x10,0x7f,0x4, 0x12,0x1f,0x20,0x74,0x6, 0x7f,0x1, 0x1e,0x14,0x1e,0x4, 0x50, -+0x3, 0x4e,0x20,0x80,0x14,0x78,0xf4,0x7d,0xc1,0x1b,0x5a,0xc0,0xb, 0x90,0x7e,0x83, -+0x2a,0x75,0xbc,0x89,0x38,0xbc,0x22,0x7f,0x20,0xb, 0x2a,0x10,0xb, 0x1a,0x0, 0x1b, -+0x2a,0x0, 0x1b,0x1a,0x10,0x22,0x7e,0x34,0x39,0x29,0x30,0x11,0x4b,0xc2,0x11,0x9, -+0x53,0x0, 0x2, 0x12,0x8b,0x9, 0x7a,0x27,0x2a,0x4f,0x9, 0x53,0x0, 0x3, 0x12,0x8b, -+0x9, 0x7a,0x27,0x2a,0x51,0x9, 0x53,0x0, 0x4, 0x12,0x8b,0x9, 0x7a,0x27,0x2a,0x53, -+0x7e,0x39,0x50,0xa, 0x25,0x3e,0x24,0x3e,0x24,0x7a,0x27,0x2a,0x5a,0x9, 0x53,0x0, -+0x1, 0xa, 0x25,0x3e,0x24,0x3e,0x24,0x7a,0x27,0x2a,0x5c,0x9, 0x73,0x0, 0x5, 0xa, -+0x37,0x12,0x4f,0x41,0x7a,0x37,0x2a,0x62,0x22,0xa, 0x25,0x3e,0x24,0x3e,0x24,0x3e, -+0x24,0x3e,0x24,0x22,0x7c,0x67,0x7c,0x7b,0xa5,0xbf,0x0, 0x17,0xbe,0x60,0x0, 0x28, -+0xf, 0x74,0x1, 0x7a,0xb3,0x2a,0x7, 0xe4,0x7a,0xb3,0x2a,0x9, 0x7a,0xb3,0x2a,0xa, -+0x2, 0x8b,0x83,0xa5,0xbe,0x0, 0x1d,0x6c,0xaa,0x80,0xe, 0x7e,0x60,0xff,0x7e,0x50, -+0x9, 0xac,0x5a,0x19,0x62,0x29,0x66,0xb, 0xa0,0x12,0x72,0x27,0x38,0xed,0x74,0x1, -+0x7a,0xb3,0x2a,0x6, 0x6c,0xaa,0x80,0x26,0x7e,0x30,0x9, 0xac,0x3a,0x2e,0x14,0x28, -+0xae,0xb, 0x18,0x20,0x12,0x8b,0xb, 0x1b,0x18,0x20,0x7e,0x30,0x9, 0xac,0x3a,0x2e, -+0x14,0x28,0xb0,0xb, 0x18,0x20,0x12,0x8b,0xb, 0x1b,0x18,0x20,0xb, 0xa0,0xbc,0x7a, -+0x38,0xd6,0x22,0x12,0x8b,0x9c,0x7e,0x8, 0x30,0x28,0xe4,0x12,0x21,0x16,0x90,0x60, -+0x99,0x12,0x8b,0xa0,0x7e,0x8, 0x30,0x5, 0xe4,0x2, 0x21,0x16,0x90,0x60,0x99,0xe4, -+0x93,0x7c,0x7b,0x74,0x2, 0xac,0x7b,0x22,0xca,0x79,0x7e,0xf3,0x2a,0x2, 0x7e,0xe3, -+0x2a,0x3, 0x7c,0xbf,0x7c,0x7e,0x12,0x8b,0x14,0x7c,0xbf,0x12,0x9f,0xc8,0x4c,0xee, -+0x78,0x17,0x12,0x8f,0x3c,0xca,0x59,0x7e,0x18,0x28,0xae,0x7e,0x8, 0x29,0x62,0x12, -+0x20,0xf1,0x1b,0xfd,0x12,0x8b,0xfa,0x80,0xe, 0x7e,0xb3,0x2a,0x9, 0x70,0x8, 0x12, -+0x8b,0xfa,0x7c,0xbf,0x12,0x8c,0x47,0x7c,0xbf,0x12,0x75,0x5, 0xbe,0xf0,0x0, 0x28, -+0x6, 0x74,0x1, 0x7a,0xb3,0x2a,0xb, 0xda,0x79,0x22,0x7e,0xa3,0x2a,0x2, 0x6c,0x77, -+0x80,0x34,0x7e,0x90,0x9, 0xac,0x97,0x9, 0x64,0x29,0x66,0xa, 0x26,0x9, 0xb2,0x29, -+0xbc,0x70,0x21,0x7e,0x30,0x1, 0x7e,0x50,0x9, 0xac,0x56,0x19,0x32,0x2f,0xad,0x49, -+0x14,0x28,0xae,0x59,0x12,0x2f,0xae,0x49,0x14,0x28,0xb0,0x59,0x12,0x2f,0xb0,0xe4, -+0x19,0xb2,0x2f,0xb2,0xb, 0x70,0xbc,0xa7,0x38,0xc8,0x22,0x7e,0xb3,0x39,0x79,0x70, -+0x3, 0x12,0x8c,0xcb,0x2, 0x8b,0xa8,0xca,0x3b,0x7c,0xfb,0x6c,0xee,0x80,0x6d,0x6c, -+0xdd,0x80,0x16,0x74,0x9, 0xac,0xbd,0x9, 0x65,0x29,0x66,0x74,0x9, 0xac,0xbe,0x9, -+0x75,0x28,0xb2,0xbc,0x67,0x68,0x7, 0xb, 0xd0,0x12,0x8c,0xc3,0x38,0xe5,0x12,0x8c, -+0xc3,0x28,0x4d,0x74,0x9, 0xac,0xbd,0x9, 0xc5,0x29,0x66,0x12,0x8f,0x1d,0x74,0x9, -+0xac,0xbd,0x12,0x8f,0x47,0x9d,0x32,0x12,0x21,0x48,0x2d,0x31,0x7a,0x35,0x24,0xa, -+0x3c,0x9, 0xb3,0x29,0xbc,0xb4,0x1, 0xe, 0x6d,0x33,0x74,0x2, 0xac,0xbc,0x59,0x35, -+0x30,0x5, 0x59,0x35,0x30,0x28,0x7e,0x35,0x24,0x7c,0xbd,0x7c,0x5e,0x7c,0x4c,0x12, -+0xa2,0x8, 0x7a,0x35,0x24,0x7c,0xbd,0x12,0x8e,0x84,0xb, 0xe0,0xbc,0xfe,0x38,0x8f, -+0xda,0x3b,0x22,0x90,0x60,0x99,0xe4,0x93,0xbc,0xbd,0x22,0xca,0x3b,0x6d,0x11,0x7e, -+0xe3,0x2a,0x2, 0x4c,0xee,0x78,0x23,0x6c,0xff,0x80,0x1a,0x74,0x2, 0xac,0xbf,0x12, -+0x8e,0x73,0x7e,0x70,0x9, 0xac,0x7f,0x19,0xa3,0x31,0x59,0x74,0x2, 0xa, 0x3f,0x19, -+0xb3,0x31,0xc3,0xb, 0xf0,0x12,0x74,0xc1,0x38,0xe1,0x12,0x99,0x60,0x7e,0x24,0x0, -+0x14,0xad,0x32,0x7d,0x43,0x2e,0x44,0x3, 0x20,0x6c,0xff,0xc1,0x4c,0x74,0x9, 0xac, -+0xbf,0x9, 0xd5,0x28,0xb2,0x5e,0xd0,0xf, 0x12,0x8c,0xc3,0x38,0x2, 0xc1,0x4a,0xa, -+0x1d,0x9, 0xb1,0x29,0xbc,0xbe,0xb0,0x1, 0x78,0x2, 0xc1,0x30,0x75,0x24,0x0, 0xc1, -+0x22,0x7e,0xa1,0x24,0x74,0x9, 0xa4,0x9, 0xc5,0x31,0x59,0xbc,0xcd,0x68,0x2, 0xc1, -+0x20,0x49,0x25,0x31,0x57,0x74,0x9, 0xac,0xbf,0x49,0x35,0x28,0xb0,0x9d,0x32,0x12, -+0x21,0x48,0x7d,0x3, 0x7e,0xa1,0x24,0x74,0x9, 0xa4,0x49,0x25,0x31,0x55,0x12,0x8f, -+0xbc,0x9d,0x32,0x12,0x21,0x48,0x2d,0x3, 0xa, 0x1c,0x9, 0xa1,0x31,0xc3,0xbe,0xa0, -+0x0, 0x28,0x17,0x7e,0x30,0x2, 0xac,0x3c,0x59,0x1, 0x31,0xaf,0xa, 0x1c,0x2e,0x14, -+0x31,0xc3,0x7c,0xba,0x14,0x7a,0x19,0xb0,0xc1,0x4a,0x74,0x2, 0xac,0xbc,0x49,0x15, -+0x31,0xaf,0xbe,0x14,0x0, 0x32,0x28,0x8, 0x7d,0x31,0x2d,0x34,0xbd,0x30,0x40,0x20, -+0xbe,0x14,0x0, 0x32,0x28,0x8, 0xbe,0x4, 0x0, 0x32,0x28,0x2, 0x80,0x6c,0x7d,0x31, -+0x2e,0x34,0x0, 0x32,0xbd,0x30,0x50,0x8, 0xbe,0x14,0x0, 0x32,0x28,0x2, 0x80,0x5a, -+0xbe,0x4, 0x0, 0xa0,0x28,0x50,0xa, 0x1d,0x9, 0xb1,0x29,0xbc,0x70,0x4, 0x74,0x3, -+0x80,0x2, 0x74,0x1, 0xa, 0x1d,0x19,0xb1,0x29,0xbc,0x74,0x3, 0xa, 0x1c,0x19,0xb1, -+0x29,0xc6,0xbe,0xe0,0x0, 0x28,0x63,0x1b,0xe0,0x12,0x8f,0xcd,0x7e,0x14,0x1f,0x34, -+0x74,0x9, 0x12,0x1f,0xc1,0x7e,0x70,0x9, 0xac,0x7e,0x12,0x8f,0xc5,0xac,0x3f,0x12, -+0x8e,0x7b,0x7e,0x34,0x1f,0x34,0x7e,0x30,0x9, 0xac,0x3e,0x12,0x8e,0x7b,0x1b,0xf0, -+0x74,0x2, 0xac,0xbc,0x80,0x4, 0x74,0x2, 0xac,0xbc,0x59,0x5, 0x31,0xaf,0x80,0x2a, -+0x5, 0x24,0x90,0x60,0x99,0xe4,0x93,0xbe,0xb1,0x24,0x28,0x2, 0xa1,0x31,0x80,0x1a, -+0x6d,0x11,0x74,0x2, 0xac,0xbd,0x12,0x8e,0x73,0x7e,0x30,0x9, 0xac,0x3d,0x19,0xa1, -+0x31,0x59,0x74,0x2, 0xa, 0x1d,0x19,0xb1,0x31,0xc3,0xb, 0xf0,0xbc,0xef,0x28,0x2, -+0xa1,0xd, 0xe4,0x7a,0xb3,0x16,0x92,0x90,0x60,0x99,0x12,0x8f,0x40,0xca,0x59,0x7e, -+0x18,0x28,0xae,0x7e,0x8, 0x31,0x55,0x12,0x20,0xf1,0x1b,0xfd,0x7a,0xe3,0x2a,0x2, -+0xda,0x3b,0x22,0x59,0x15,0x31,0xaf,0x7e,0xa0,0xff,0x22,0x2e,0x14,0x28,0xae,0x74, -+0x9, 0x2, 0x1f,0xc1,0x2, 0x8e,0x87,0xca,0xd8,0xca,0x79,0x7c,0xd4,0x7c,0xe5,0x7c, -+0xfb,0x7c,0xbd,0x12,0xa1,0x7f,0x7d,0xf3,0x7c,0xbe,0x7c,0x7d,0x12,0xa3,0x18,0x7d, -+0x3, 0x74,0x9, 0xac,0xbf,0x12,0x8f,0x47,0x12,0x8f,0x29,0x12,0x8f,0x31,0x7d,0x13, -+0x5d,0x10,0x7e,0x70,0x9, 0xac,0x7f,0x49,0xe3,0x29,0x62,0x74,0x9, 0xac,0xbe,0x49, -+0x25,0x28,0xae,0xbd,0x2e,0x28,0xf, 0x7d,0x53,0x2e,0x54,0x29,0x62,0x7d,0x2e,0x2d, -+0x21,0x1b,0x58,0x20,0x80,0x9, 0x2e,0x34,0x29,0x62,0x9d,0xe1,0x1b,0x38,0xe0,0x74, -+0x9, 0xac,0xbf,0x12,0x8f,0x1d,0x12,0x8f,0x31,0x7d,0x13,0x5d,0x10,0x7e,0x50,0x9, -+0xac,0x5f,0x49,0x32,0x29,0x64,0x74,0x9, 0xac,0xbe,0x49,0x5, 0x28,0xb0,0xbd,0x3, -+0x28,0xd, 0x7d,0x2, 0x2e,0x4, 0x29,0x64,0x2d,0x13,0x1b,0x8, 0x10,0x80,0x9, 0x2e, -+0x24,0x29,0x64,0x9d,0x31,0x1b,0x28,0x30,0xda,0x79,0xda,0xd8,0x22,0x49,0x25,0x29, -+0x64,0x74,0x9, 0xac,0xbe,0x49,0x35,0x28,0xb0,0x9d,0x32,0x12,0x21,0x48,0x7d,0x13, -+0x22,0x7d,0x3f,0xad,0x31,0x7c,0x76,0x7c,0x65,0xa, 0x24,0x22,0x90,0x60,0x99,0xe4, -+0x93,0x7c,0xab,0x74,0x9, 0xa4,0x22,0x49,0x25,0x29,0x62,0x74,0x9, 0xac,0xbe,0x49, -+0x35,0x28,0xae,0x22,0xca,0xf8,0x7e,0xa3,0x2a,0x2, 0x4c,0xaa,0x78,0x11,0x7e,0xb3, -+0x2a,0x3, 0xbe,0xb0,0x0, 0x28,0x13,0x74,0x1, 0x7a,0xb3,0x2a,0x7, 0x80,0xb, 0xbe, -+0xa0,0x0, 0x28,0x6, 0x74,0x1, 0x7a,0xb3,0x2a,0xb, 0x12,0x8f,0x3c,0xca,0x59,0x7e, -+0x18,0x28,0xae,0x7e,0x8, 0x29,0x8, 0x12,0x20,0xf1,0x1b,0xfd,0x90,0x61,0x35,0xe4, -+0x93,0xbe,0xb0,0x0, 0x28,0x23,0x6c,0xff,0x80,0x1a,0x12,0x8f,0xbc,0x12,0x90,0x19, -+0x74,0x9, 0xac,0xbf,0x59,0x35,0x29,0x8, 0x49,0x35,0x28,0xb0,0x12,0x5a,0xb5,0x12, -+0x77,0x88,0xb, 0xf0,0x12,0x74,0xc1,0x38,0xe1,0xda,0xf8,0x22,0x74,0x9, 0xac,0xbf, -+0x49,0x35,0x28,0xae,0x22,0x2e,0x34,0x28,0xae,0x7e,0x30,0x9, 0x22,0x7e,0x70,0x9, -+0xac,0x7f,0x2e,0x34,0x28,0xae,0x22,0x7c,0x9b,0x7f,0x71,0x7e,0x7b,0x80,0x4c,0x88, -+0x78,0x7, 0x7e,0xb, 0x90,0x7a,0x7b,0x90,0x22,0xa, 0x28,0x7e,0xb, 0x80,0xa, 0x38, -+0x9d,0x32,0x12,0x21,0x48,0xe5,0x2a,0xa, 0x2b,0xbd,0x32,0x8, 0x15,0x7e,0x7b,0xa0, -+0x7e,0xb, 0xb0,0xbc,0xba,0x7c,0xba,0x28,0x4, 0x2c,0xb9,0x80,0x2, 0x9c,0xb9,0x7a, -+0x7b,0xb0,0x7e,0x7b,0x70,0x7a,0xb, 0x70,0x22,0x7d,0xc3,0x7e,0x34,0x61,0x37,0x12, -+0x91,0x1c,0x90,0x61,0x35,0xe4,0x93,0x70,0x3, 0x7d,0x3c,0x22,0x90,0x61,0x36,0xe4, -+0x93,0xb4,0x1, 0x6, 0x7e,0x83,0x2a,0x70,0x80,0x4, 0x7e,0x83,0x2a,0x6f,0x12,0x92, -+0xb4,0xbe,0xc4,0x0, 0x3f,0x38,0x21,0x7e,0xe4,0x0, 0x3f,0x9d,0xec,0x7e,0x34,0x61, -+0x3b,0x12,0x5f,0x20,0x12,0x91,0xf, 0x7f,0x71,0x12,0x90,0xfe,0xbf,0x71,0x40,0x2, -+0x7f,0x71,0x9f,0x17,0x7f,0x71,0x1, 0xfb,0x12,0x5c,0x8f,0xbd,0x5c,0x38,0x26,0x7d, -+0xec,0x9d,0xe5,0x7e,0x34,0x61,0x3d,0x12,0x5f,0x20,0x12,0x91,0xf, 0x7f,0x71,0x90, -+0x61,0x3a,0xe4,0x93,0xa, 0x3b,0xbf,0x71,0x40,0x4, 0x7f,0x71,0x1b,0x7c,0x12,0x91, -+0x6, 0x2f,0x71,0x80,0x66,0x7d,0xb4,0xb, 0xb4,0x1e,0xb4,0x7d,0x5b,0x1b,0x54,0xbd, -+0x5c,0x40,0xc, 0x7d,0xf5,0x9d,0xfc,0x6d,0xee,0x7e,0x34,0x61,0x3f,0x80,0xa, 0x7d, -+0xfc,0x9d,0xfb,0x6d,0xee,0x7e,0x34,0x61,0x41,0x12,0x7f,0xbc,0x7f,0x17,0x12,0x1f, -+0x31,0x7f,0x71,0x12,0x8f,0x35,0x7f,0x71,0xbd,0x5c,0x7d,0x3d,0x40,0xc, 0x1e,0x34, -+0x1b,0x34,0x6d,0x22,0x9f,0x17,0x7f,0x71,0x80,0x6, 0x1e,0x34,0x6d,0x22,0x2f,0x71, -+0x12,0x90,0xfe,0x6d,0x22,0xbf,0x71,0x50,0x4, 0x7f,0x71,0x80,0xe, 0x90,0x61,0x3a, -+0xe4,0x93,0x12,0x91,0x6, 0xbf,0x71,0x28,0x2, 0x7f,0x71,0x7d,0x3f,0x22,0x90,0x61, -+0x39,0xe4,0x93,0xa, 0x3b,0x22,0xa, 0x2b,0x7d,0x3d,0x9d,0x32,0x6d,0x22,0x22,0xad, -+0xfe,0x6d,0xee,0x7d,0x3f,0x7d,0x2e,0x7c,0x76,0x7c,0x65,0x22,0x7e,0x24,0x0, 0xff, -+0xb, 0x1a,0xd0,0x22,0xca,0x3b,0x7f,0x70,0x7c,0xe7,0x7c,0xdb,0x7e,0xc0,0x4, 0x7e, -+0xb3,0x2a,0x6d,0xf5,0x28,0x7e,0xb3,0x2a,0x6e,0xf5,0x27,0x7e,0x34,0x62,0xa, 0x12, -+0x91,0x1c,0x6c,0xff,0x12,0x92,0xbc,0x7f,0x51,0xe5,0x28,0xa, 0x3b,0x1b,0x34,0xa, -+0xcd,0xbd,0xc3,0x58,0x14,0xe5,0x27,0xa, 0x3b,0x1b,0x34,0xa, 0xce,0xbd,0xc3,0x58, -+0x8, 0x4c,0xee,0x68,0x4, 0x4c,0xdd,0x78,0x3, 0x4e,0xf0,0x10,0xb, 0x5a,0x30,0x7e, -+0x14,0x62,0xa, 0x12,0x5f,0xec,0xbd,0x32,0x8, 0xc, 0x7e,0x27,0x28,0x8a,0xbe,0x24, -+0x3, 0x20,0x8, 0x2, 0x41,0x7d,0xb, 0xa, 0xc0,0x1e,0xc4,0xbd,0x3c,0x8, 0xc, 0x7e, -+0xc7,0x28,0x8a,0xbe,0xc4,0x3, 0x20,0x58,0x2, 0x41,0x7d,0x6c,0xaa,0x7c,0x8d,0x80, -+0x1e,0x7c,0x9e,0xbe,0x80,0x0, 0x48,0x13,0x7e,0xb3,0x2a,0x6d,0xbc,0xb8,0x8, 0xb, -+0x12,0x2f,0x2b,0xbd,0x3d,0x58,0x14,0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0x1b,0x80,0x1a, -+0x2c,0x1a,0x3d,0x9d,0x32,0x1a,0xc8,0xbd,0xc3,0x18,0xd6,0xbc,0xca,0x18,0x5, 0x4e, -+0xf0,0x1, 0x41,0x7d,0x6c,0xaa,0x7c,0x8d,0x80,0x1e,0x7c,0x9e,0xbe,0x80,0x0, 0x48, -+0x13,0x7e,0xb3,0x2a,0x6d,0xbc,0xb8,0x8, 0xb, 0x12,0x2f,0x2b,0xbd,0x3d,0x58,0x14, -+0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0xb, 0x80,0x1a,0x2c,0x1a,0x3d,0x2d,0x32,0x1a,0xc8, -+0xbd,0xc3,0x48,0xd6,0xbc,0xca,0x18,0x5, 0x4e,0xf0,0x2, 0x80,0x70,0x6c,0xaa,0x7c, -+0x9e,0x80,0x1e,0x7c,0x8d,0xbe,0x90,0x0, 0x48,0x13,0x7e,0xb3,0x2a,0x6e,0xbc,0xb9, -+0x8, 0xb, 0x12,0x2f,0x2b,0xbd,0x3d,0x58,0x14,0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0x1b, -+0x90,0x1a,0x2c,0x1a,0x3e,0x9d,0x32,0x1a,0xc9,0xbd,0xc3,0x18,0xd6,0xbc,0xca,0x18, -+0x5, 0x4e,0xf0,0x4, 0x80,0x37,0x6c,0xaa,0x7c,0x9e,0x80,0x1e,0x7c,0x8d,0xbe,0x90, -+0x0, 0x48,0x13,0x7e,0xb3,0x2a,0x6e,0xbc,0xb9,0x8, 0xb, 0x12,0x2f,0x2b,0xbd,0x3d, -+0x58,0x14,0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0xb, 0x90,0x1a,0x2c,0x1a,0x3e,0x2d,0x32, -+0x1a,0xc9,0xbd,0xc3,0x48,0xd6,0xbc,0xca,0x18,0x3, 0x4e,0xf0,0x8, 0x4c,0xff,0x68, -+0x2e,0x7e,0x7b,0xb0,0xbc,0xbd,0x40,0x3, 0x7a,0x7b,0xd0,0x29,0xb7,0x0, 0x2, 0xbc, -+0xbd,0x38,0x4, 0x39,0xd7,0x0, 0x2, 0x29,0xb7,0x0, 0x1, 0xbc,0xbe,0x40,0x4, 0x39, -+0xe7,0x0, 0x1, 0x29,0xb7,0x0, 0x3, 0xbc,0xbe,0x38,0x4, 0x39,0xe7,0x0, 0x3, 0x7c, -+0xbf,0xda,0x3b,0x22,0x7e,0x90,0x40,0xac,0x89,0x1b,0x44,0x22,0x7c,0xbd,0x7c,0x7e, -+0x7e,0x13,0x2a,0x6e,0xac,0x1b,0x3e,0x4, 0x7e,0x30,0x2, 0xac,0x37,0x2d,0x10,0x7e, -+0x1f,0x13,0x8a,0x2d,0x31,0x22,0xca,0x3b,0x12,0x67,0xe4,0x74,0x9, 0xac,0xbf,0x7d, -+0xd5,0x2e,0xd4,0x27,0x76,0x6d,0xcc,0x7e,0x37,0x2a,0x66,0x7a,0x35,0x43,0xe4,0x39, -+0xb6,0x0, 0x6, 0x7e,0x70,0x2, 0xac,0x7e,0x9, 0xb3,0x26,0xfa,0xf5,0x31,0x9, 0xb3, -+0x26,0xfb,0xf5,0x32,0x7e,0x73,0x2a,0x6e,0x7c,0x6d,0x7e,0x8, 0x0, 0x35,0x12,0x95, -+0x30,0xf5,0x33,0xe5,0x31,0x7e,0x73,0x2a,0x6d,0x7c,0x6c,0x7e,0x8, 0x0, 0x34,0x12, -+0x95,0x30,0x7c,0xab,0xe5,0x34,0x7e,0x71,0x35,0x12,0x92,0xc0,0x7a,0x35,0x3f,0x7e, -+0x34,0x15,0x9e,0x7a,0x35,0x41,0x85,0x34,0x39,0x85,0x35,0x3a,0x7a,0xa1,0x3b,0x85, -+0x33,0x3c,0x7e,0xb3,0x2a,0x59,0xf5,0x3d,0x75,0x3e,0x0, 0x7e,0x8, 0x0, 0x39,0x12, -+0x95,0x83,0x7d,0x23,0x6d,0x33,0x7e,0x97,0x15,0xa0,0x6d,0x88,0x2f,0x41,0x7e,0x37, -+0x15,0xa2,0x6d,0x22,0x7d,0x3, 0x6d,0x11,0x7e,0x37,0x15,0xa4,0x2f,0x10,0x7a,0x1d, -+0x2b,0x7e,0x37,0x15,0xa6,0x7d,0x23,0x6d,0x33,0x7e,0xb7,0x15,0xa8,0x6d,0xaa,0x2f, -+0x51,0x7f,0x74,0xa, 0x4c,0xe5,0x31,0xa, 0x5b,0x9d,0x54,0xf5,0x2f,0x81,0x77,0xa, -+0x4d,0xe5,0x32,0xa, 0x5b,0x9d,0x54,0xf5,0x30,0x81,0x61,0xe5,0x2f,0xbe,0xb0,0x0, -+0x58,0x2, 0x81,0x5f,0x7e,0x73,0x2a,0x6d,0xbe,0x71,0x2f,0x18,0x2, 0x81,0x5f,0xe5, -+0x30,0xbe,0xb0,0x0, 0x58,0x2, 0x81,0x5f,0x7e,0x73,0x2a,0x6e,0xbe,0x71,0x30,0x18, -+0x2, 0x81,0x5f,0xe5,0x2f,0x7e,0x71,0x30,0x12,0x2c,0x63,0x7e,0x53,0x2a,0x59,0xa, -+0x25,0x9d,0x32,0x7a,0x35,0x37,0xbe,0x34,0x0, 0x0, 0x18,0x2, 0x81,0x5f,0x7e,0x35, -+0x43,0xbe,0x35,0x37,0x18,0xd, 0x7f,0x16,0x2e,0x34,0x0, 0x6, 0x7e,0x1b,0xb0,0x4, -+0x7a,0x1b,0xb0,0xe5,0x31,0xa, 0x2b,0xe5,0x2f,0x12,0x95,0x15,0x18,0xb, 0xe5,0x32, -+0xa, 0x2b,0xe5,0x30,0x12,0x95,0x15,0x8, 0x56,0xe5,0x2f,0x7e,0x71,0x30,0x7c,0x6e, -+0x12,0x96,0x2f,0xf5,0x36,0xb4,0x2, 0xc, 0x7e,0x35,0x37,0x7d,0x23,0xe, 0x24,0x9d, -+0x32,0x7a,0x35,0x37,0xe5,0x36,0xbe,0xb0,0x2, 0x68,0x5, 0xe5,0x36,0xb4,0x1, 0x2f, -+0x7e,0x45,0x37,0x7d,0x34,0x1a,0x26,0x1a,0x24,0xe5,0x2f,0x12,0x95,0x6, 0x7f,0x1, -+0x7e,0x1d,0x2b,0x9f,0x10,0x7a,0x1d,0x2b,0x7d,0x34,0x1a,0x26,0x1a,0x24,0xe5,0x30, -+0x12,0x95,0x6, 0x9f,0x51,0x12,0x95,0xd, 0x9f,0x41,0x12,0x95,0xd, 0x9f,0x71,0x5, -+0x30,0xa, 0x2d,0xe5,0x32,0xa, 0x3b,0x2d,0x32,0x1a,0x27,0xe5,0x30,0x1a,0x3b,0xbd, -+0x32,0x18,0x2, 0x61,0x9b,0x5, 0x2f,0xa, 0x2c,0xe5,0x31,0xa, 0x3b,0x2d,0x32,0x1a, -+0x27,0xe5,0x2f,0x1a,0x3b,0xbd,0x32,0x18,0x2, 0x61,0x8f,0xbe,0x48,0x0, 0x0, 0x78, -+0x2, 0xb, 0x4c,0xbe,0x78,0x0, 0x0, 0x78,0x2, 0xb, 0x7c,0x7e,0x1d,0x2b,0x7f,0x4, -+0x12,0x95,0x21,0x1b,0x6a,0x30,0x7f,0x15,0x7f,0x7, 0x12,0x95,0x21,0x79,0x36,0x0, -+0x2, 0x7e,0xb3,0x2a,0x65,0x60,0xd, 0x1e,0xf4,0x1e,0xe4,0x50,0x4, 0x4e,0xf4,0x80, -+0x0, 0x14,0x78,0xf3,0xbe,0x78,0x0, 0x7f,0x28,0x4, 0x7e,0x78,0x0, 0x7f,0x7d,0x3f, -+0x39,0x76,0x0, 0x5, 0x74,0x9, 0xac,0xbe,0x9, 0x75,0x27,0x7c,0x39,0x76,0x0, 0x6, -+0xbe,0x70,0xf, 0x28,0x6, 0x74,0xf, 0x39,0xb6,0x0, 0x6, 0x7e,0xa1,0x31,0x7e,0x70, -+0x9, 0xac,0x7f,0x19,0xa3,0x27,0x7d,0x7e,0xa1,0x32,0x7e,0x70,0x9, 0xac,0x7f,0x19, -+0xa3,0x27,0x7e,0xda,0x3b,0x22,0x1a,0x1b,0x1a,0x2, 0x2, 0x1f,0x20,0x7e,0x35,0x37, -+0x1a,0x26,0x1a,0x24,0x22,0x1a,0x3b,0x9d,0x32,0x12,0x21,0x48,0xbe,0x34,0x0, 0x1, -+0x22,0x74,0x6, 0x2f,0x11,0x14,0x78,0xfb,0x12,0x1f,0x3c,0x2e,0x18,0x0, 0x20,0x22, -+0xca,0xf8,0x7c,0xf6,0x7c,0x87,0x7c,0x9b,0xa, 0x2f,0x7d,0x32,0x3e,0x34,0xb, 0x34, -+0x7c,0xb7,0xbc,0xf9,0x38,0x14,0xa, 0xf8,0x1b,0xf4,0xa, 0x3f,0x9d,0xf3,0xa, 0x39, -+0xbd,0x3f,0x18,0x6, 0x7c,0xab,0xa, 0x39,0x80,0x1d,0xbc,0xf9,0x28,0xd, 0xa, 0x39, -+0xa, 0x5f,0x2d,0x53,0xb, 0x54,0x7c,0xab,0xe4,0x80,0x10,0xa, 0x3f,0xa, 0x58,0x2d, -+0x53,0xa, 0x39,0x9d,0x53,0x7c,0xab,0x9d,0x32,0x7c,0xb7,0x7a,0xb, 0xb0,0x7c,0xba, -+0xda,0xf8,0x22,0x12,0xc, 0x29,0x7e,0x37,0x15,0x9e,0x22,0x7e,0xa3,0x28,0x84,0xe4, -+0x7a,0xb3,0x30,0x1b,0x6c,0x33,0x80,0x3d,0x7e,0x70,0x2, 0xac,0x73,0x9, 0x23,0x26, -+0xfb,0x7e,0x10,0x1, 0x6c,0x0, 0x80,0x27,0xbc,0x3, 0x68,0x21,0x7e,0x70,0x2, 0xac, -+0x70,0x9, 0x93,0x26,0xfb,0xa, 0x29,0xa, 0x32,0x12,0x95,0x17,0x18,0x2, 0xb, 0x10, -+0xbe,0x10,0x2, 0x40,0x8, 0x74,0x2, 0x7a,0xb3,0x30,0x1b,0x80,0x6, 0xb, 0x0, 0xbc, -+0xa0,0x38,0xd5,0xb, 0x30,0xbc,0xa3,0x38,0xbf,0x22,0xca,0xf8,0x7e,0xf3,0x2a,0x70, -+0x7a,0x37,0x1f,0x3a,0x7e,0x34,0x15,0x9e,0x7a,0x37,0x1f,0x3c,0xe4,0x7a,0xb3,0x1f, -+0x34,0x7a,0xb3,0x1f,0x35,0x7e,0x73,0x2a,0x6f,0x7a,0x73,0x1f,0x36,0x7a,0xf3,0x1f, -+0x37,0x7a,0xb3,0x1f,0x38,0x7a,0xb3,0x1f,0x39,0x7e,0x8, 0x1f,0x34,0x12,0x95,0x83, -+0x6d,0x22,0x7d,0x3, 0x6d,0x11,0x7e,0x37,0x15,0xa0,0x2f,0x10,0x7e,0x33,0x1f,0x36, -+0x6d,0x0, 0x12,0x1f,0x3c,0xa, 0x1f,0x6d,0x0, 0x12,0x1f,0x3c,0xda,0xf8,0x22,0x7c, -+0xa6,0x7c,0x37,0x7c,0x2b,0xe4,0x6c,0x11,0x80,0x46,0xbc,0xa1,0x68,0x40,0x1a,0x41, -+0x3e,0x44,0x9, 0x4, 0x26,0xfb,0xa, 0x20,0xa, 0x33,0x9d,0x32,0x12,0x21,0x48,0x7c, -+0x7, 0x1a,0x41,0x3e,0x44,0x9, 0x74,0x26,0xfa,0xa, 0x27,0xa, 0x32,0x9d,0x32,0x12, -+0x21,0x48,0x7c,0x97,0xbe,0x90,0x1, 0x18,0x8, 0xbe,0x0, 0x1, 0x18,0x3, 0x74,0x1, -+0x22,0xbe,0x90,0x2, 0x18,0x8, 0xbe,0x0, 0x2, 0x18,0x3, 0x74,0x2, 0x22,0xb, 0x10, -+0x7e,0x83,0x28,0x84,0xbc,0x81,0x18,0xb2,0x22,0x2, 0x96,0x8c,0xca,0x79,0x6c,0xff, -+0x7e,0xd7,0x2a,0x5a,0x6c,0xee,0x80,0x35,0x7c,0xbe,0x12,0x38,0x82,0xbd,0x3d,0x48, -+0x2a,0x7c,0xbe,0x12,0x2d,0xb6,0x60,0x23,0x7e,0xc4,0x0, 0x9, 0xca,0xc9,0x7e,0x70, -+0x9, 0xac,0x7e,0x2e,0x34,0x27,0x76,0x6d,0x22,0x7e,0x30,0x9, 0xac,0x3f,0x2e,0x14, -+0x28,0xae,0x6d,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0xb, 0xf0,0xb, 0xe0,0x12,0x3f,0xb2, -+0x38,0xc6,0x7a,0x73,0x28,0x93,0x7a,0xf3,0x2a,0x2, 0xda,0x79,0x22,0x7d,0x13,0x7d, -+0x32,0x6d,0x22,0x74,0x6, 0x2f,0x11,0x14,0x78,0xfb,0xb, 0x14,0x12,0x1f,0x3a,0x7d, -+0x53,0xbe,0x54,0x0, 0xff,0x28,0x4, 0x7e,0x54,0x0, 0x40,0x22,0x7a,0x37,0x1f,0x38, -+0x7e,0x34,0x15,0xa8,0x7a,0x37,0x1f,0x3c,0x7e,0x34,0x15,0x9e,0x7a,0x37,0x1f,0x3a, -+0x7e,0x73,0x2a,0x6f,0x7a,0x73,0x1f,0x35,0x7e,0x73,0x2a,0x70,0x7a,0x73,0x1f,0x34, -+0x7e,0x37,0x2a,0x5c,0x7a,0x37,0x1f,0x3e,0x7e,0x37,0x2a,0x5e,0x7a,0x37,0x1f,0x40, -+0x7e,0x37,0x2a,0x60,0x7a,0x37,0x1f,0x42,0x74,0x1, 0x7a,0xb3,0x1f,0x36,0x7a,0xb3, -+0x1f,0x37,0x7e,0x8, 0x1f,0x34,0x7e,0x18,0x1f,0x44,0x12,0x8, 0x0, 0x7e,0x37,0x1f, -+0x4e,0x7e,0x27,0x1f,0x4a,0xbd,0x23,0x28,0x2, 0x7d,0x32,0x22,0x7e,0x34,0x61,0x59, -+0x2, 0x23,0xc9,0x7e,0xb3,0x39,0x4e,0x70,0x2e,0x7e,0x73,0x39,0x31,0xbe,0x70,0x10, -+0x40,0x2, 0x6c,0x77,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0x3, 0x7e,0x70,0x6, 0xa, 0x37, -+0x2e,0x34,0xf, 0xf0,0x12,0x97,0xb6,0x7c,0xab,0xe5,0x5d,0xa, 0x3b,0x2e,0x37,0x3a, -+0xcb,0x7a,0x37,0x3a,0xcb,0x80,0xc, 0x7e,0xa3,0x39,0x32,0xbe,0xa0,0x7f,0x28,0x3, -+0x7e,0xa0,0x7f,0x7c,0xba,0x2, 0x97,0xa8,0x75,0x5d,0x0, 0x7a,0xb3,0x3b,0x56,0xc2, -+0x1a,0x22,0x2e,0x34,0x20,0xab,0x7a,0x71,0x82,0x7a,0x61,0x83,0xe4,0x93,0x22,0x7e, -+0xb3,0x3a,0xce,0x70,0x4, 0x74,0x1, 0x80,0x1, 0xe4,0x7a,0xb3,0x3a,0xce,0x22,0x7f, -+0x20,0xc2,0x1, 0x7e,0x2b,0x60,0x29,0x72,0x0, 0x2, 0x9c,0x76,0x1a,0x37,0x12,0x21, -+0x48,0x7c,0x27,0x29,0x72,0x0, 0x1, 0x29,0x32,0x0, 0x3, 0x9c,0x37,0x1a,0x33,0x12, -+0x21,0x48,0x7c,0x37,0x1a,0x23,0x1a,0x32,0x9d,0x32,0x12,0x21,0x48,0x7c,0x67,0x7c, -+0x72,0xbc,0x32,0x58,0x2, 0x7c,0x73,0xbe,0x60,0x5, 0x18,0x5, 0xbe,0x70,0x6, 0x58, -+0x8, 0x7e,0x37,0x3a,0x3b,0x4d,0x33,0x68,0x2, 0xd2,0x1, 0xa2,0x1, 0x22,0x7f,0x60, -+0x7e,0x6b,0xa0,0xbe,0xa0,0xa, 0x50,0x1b,0x7e,0x14,0x0, 0x6, 0xca,0x19,0x74,0x6, -+0xa4,0x7f,0x6, 0x2d,0x15,0xb, 0x14,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x6b,0xb0,0x4, -+0x7a,0x6b,0xb0,0x22,0x6c,0xaa,0x7e,0x63,0x2a,0x6e,0x7e,0x73,0x2a,0x6d,0xac,0x76, -+0x7d,0x13,0x1e,0x14,0x7e,0x27,0x28,0x88,0x2e,0x27,0x28,0x86,0xbd,0x21,0x38,0xa, -+0x1e,0x34,0x1e,0x34,0xbe,0x37,0x28,0x86,0x50,0x29,0x90,0x60,0x51,0xe4,0x93,0x1e, -+0xb0,0xa, 0x2b,0x7e,0xb3,0x26,0xf7,0xa, 0x3b,0xbd,0x32,0x8, 0x16,0x90,0x60,0x50, -+0xe4,0x93,0x1e,0xb0,0xa, 0x2b,0x7e,0xb3,0x26,0xf6,0xa, 0x3b,0xbd,0x32,0x8, 0x3, -+0x7e,0xa0,0x1, 0x7c,0xba,0x22,0x7f,0x61,0x7f,0x50,0x7e,0x6b,0x90,0x80,0x1f,0x29, -+0x86,0x0, 0x1, 0x80,0xf, 0x7f,0x5, 0x7c,0xb9,0x7c,0x78,0x12,0x35,0x48,0x50,0x2, -+0xd3,0x22,0xb, 0x80,0x29,0x76,0x0, 0x3, 0xbc,0x78,0x50,0xe9,0xb, 0x90,0x29,0x76, -+0x0, 0x2, 0xbc,0x79,0x50,0xd9,0xc3,0x22,0x7e,0xa3,0x2a,0x3, 0xbe,0xa0,0x0, 0x38, -+0x2f,0xbe,0xa3,0x2a,0x2, 0x50,0x19,0x7e,0xb3,0x2a,0xc, 0xbe,0xb3,0x31,0xce,0x28, -+0x14,0x7e,0xb3,0x31,0xce,0x4, 0x7a,0xb3,0x31,0xce,0x7a,0xa3,0x2a,0x2, 0x80,0x5, -+0xe4,0x7a,0xb3,0x31,0xce,0x7e,0xb3,0x2a,0x2, 0x70,0x5, 0xe4,0x7a,0xb3,0x2a,0xb, -+0x22,0x12,0x99,0x7, 0x2, 0x98,0xc8,0x7e,0xb3,0x2a,0x2, 0x70,0x29,0x12,0x67,0xdc, -+0x28,0x24,0x7e,0xb3,0x30,0x3c,0x70,0x18,0x12,0x99,0x40,0x7e,0x73,0x2a,0x3, 0x7a, -+0x73,0x2a,0x2, 0x74,0x1, 0x7a,0xb3,0x2a,0x9, 0x7e,0xb3,0x30,0x3c,0x4, 0x80,0x1, -+0xe4,0x7a,0xb3,0x30,0x3c,0x22,0xe4,0x7a,0xb3,0x30,0x3c,0x7a,0xb3,0x2a,0x9, 0x22, -+0x7e,0x34,0x0, 0x3c,0xca,0x39,0x7e,0x18,0x38,0xb1,0x7e,0x8, 0x38,0xed,0x12,0x20, -+0xf1,0x1b,0xfd,0x7e,0x73,0x28,0x94,0x7a,0x73,0x38,0xb0,0x7a,0x73,0x28,0x93,0x22, -+0x7e,0x73,0x2a,0x3, 0xbe,0x73,0x2a,0x2, 0x78,0x17,0x7e,0x73,0x2a,0x2, 0xbe,0x70, -+0x1, 0x40,0xe, 0x7e,0x37,0x30,0x19,0xbe,0x34,0x0, 0x14,0x38,0xe, 0xb, 0x34,0x80, -+0x6, 0x7e,0x37,0x30,0x19,0x1e,0x34,0x7a,0x37,0x30,0x19,0x7e,0xb3,0x2a,0x2, 0x70, -+0x6, 0x6d,0x33,0x7a,0x37,0x30,0x19,0x7e,0x37,0x30,0x19,0x22,0x12,0x99,0xcd,0x2, -+0x99,0xa2,0x7e,0xb3,0x2a,0x9, 0x70,0x24,0x7e,0xa3,0x30,0x1b,0x4c,0xaa,0x78,0x3, -+0xe4,0x80,0x7, 0xbe,0xa0,0x2, 0x78,0x6, 0x74,0x3, 0x7a,0xb3,0x30,0x26,0x7e,0x73, -+0x30,0x27,0xbe,0x73,0x30,0x26,0x28,0x4, 0x7a,0x73,0x30,0x26,0x22,0xca,0x69,0xca, -+0xf8,0x7e,0xa3,0x2a,0x2, 0x7e,0x8, 0x29,0xbc,0x4c,0xaa,0x78,0x5, 0x12,0x5f,0x93, -+0x41,0xe1,0x6c,0x99,0x41,0xd6,0x7e,0x70,0x9, 0xac,0x79,0x9, 0x83,0x29,0xc, 0xbe, -+0x80,0xff,0x78,0x2, 0x41,0xd4,0xa, 0x28,0x7f,0x70,0x2d,0xf2,0x7e,0x7b,0xf0,0xbe, -+0xf0,0x2, 0x68,0x2, 0x41,0xb7,0x12,0x9a,0xf0,0x49,0x33,0x29,0x8, 0x12,0x9a,0xfa, -+0x7e,0x70,0x4, 0xac,0x78,0x49,0x23,0x31,0xd1,0x12,0x9a,0xe6,0x9d,0x32,0x12,0x21, -+0x48,0x7d,0xe3,0x7e,0x73,0x2f,0xa9,0xa, 0x27,0xbd,0x2f,0x28,0x54,0xbd,0x2e,0x28, -+0x50,0x12,0x9a,0xf0,0x7e,0xd0,0x9, 0xac,0xd9,0x59,0x26,0x29,0x8, 0x7e,0x50,0x4, -+0xac,0x58,0x49,0x22,0x31,0xd1,0x7e,0xd0,0x9, 0xac,0xd9,0x59,0x26,0x29,0xa, 0xbe, -+0xa0,0x0, 0x28,0x2, 0x1b,0xa0,0x4c,0xaa,0x78,0x7a,0x7e,0xb3,0x30,0x4, 0x4, 0x7a, -+0xb3,0x30,0x4, 0x7e,0x63,0x30,0x4, 0xbe,0x60,0x32,0x40,0x68,0xe4,0x7a,0xb3,0x30, -+0x4, 0x7e,0xb3,0x2f,0xa9,0xbe,0xb0,0x2, 0x50,0x5a,0x4, 0x7a,0xb3,0x2f,0xa9,0x80, -+0x53,0x7e,0x50,0x9, 0xac,0x59,0x49,0xd2,0x29,0x8, 0x7e,0xd0,0x4, 0xac,0xd8,0x59, -+0xd6,0x31,0xcf,0x49,0x22,0x29,0xa, 0x59,0x26,0x31,0xd1,0xbe,0x70,0x3, 0x40,0x4, -+0x74,0x2, 0x80,0x8, 0xbe,0x70,0x1, 0x28,0x7, 0x7c,0xb7,0x14,0x7a,0xb3,0x2f,0xa9, -+0xe4,0x7a,0xb3,0x30,0x4, 0x80,0x1d,0x4c,0xff,0x78,0x19,0x7e,0x70,0x9, 0xac,0x79, -+0x49,0x33,0x29,0x8, 0x7e,0x50,0x4, 0xac,0x58,0x59,0x32,0x31,0xcf,0x12,0x9a,0xe6, -+0x59,0x32,0x31,0xd1,0xb, 0x90,0x90,0x60,0x99,0xe4,0x93,0xbc,0xb9,0x28,0x2, 0x21, -+0xe6,0xda,0xf8,0xda,0x69,0x22,0x7e,0x70,0x9, 0xac,0x79,0x49,0x33,0x29,0xa, 0x22, -+0x7e,0x50,0x4, 0xac,0x58,0x49,0x22,0x31,0xcf,0x22,0x9d,0x32,0x12,0x21,0x48,0x7d, -+0xf3,0x22,0xca,0x3b,0x12,0x9f,0x3a,0x38,0x2, 0x61,0xc5,0x7e,0xc3,0x34,0x8b,0x4c, -+0xcc,0x78,0x3d,0x7a,0xb3,0x34,0x8b,0xe4,0x7a,0xb3,0x34,0x8d,0x6c,0xaa,0x80,0x26, -+0x12,0x9b,0xd0,0x7e,0x70,0x2, 0xac,0x7a,0x9, 0xd3,0x26,0xfa,0x9, 0xe3,0x26,0xfb, -+0x7a,0x49,0xd0,0x19,0xe4,0x0, 0x1, 0x74,0x1, 0x19,0xb4,0x0, 0x8, 0x12,0x9b,0xda, -+0x59,0x34,0x0, 0x2, 0xb, 0xa0,0x7e,0xb3,0x28,0x84,0xbc,0xba,0x38,0xd2,0x80,0x7b, -+0x7c,0xfc,0x6c,0xaa,0x80,0x31,0x12,0x9b,0xd0,0x7e,0x49,0xd0,0x9, 0xe4,0x0, 0x1, -+0x9, 0xb4,0x0, 0x8, 0x70,0x4, 0x1b,0xf0,0x80,0x1b,0x12,0x9b,0xda,0x7d,0x23,0x49, -+0x34,0x0, 0x2, 0x12,0x9a,0xfa,0xbe,0xf4,0x0, 0x23,0x8, 0x9, 0x74,0x5, 0x19,0xb4, -+0x0, 0x8, 0x75,0x5c,0x1, 0xb, 0xa0,0xbc,0xfa,0x38,0xcb,0x4c,0xff,0x78,0x2, 0x80, -+0x26,0x7e,0x73,0x34,0x8d,0xbe,0x70,0x4, 0x40,0x22,0x6c,0xaa,0x80,0xe, 0x12,0x9b, -+0xd0,0x9, 0xb4,0x0, 0x8, 0xbe,0xb0,0x5, 0x68,0x6, 0xb, 0xa0,0xbc,0xfa,0x38,0xee, -+0xbc,0xfa,0x78,0x3, 0x75,0x5c,0x0, 0x12,0x9b,0xe1,0x80,0xf, 0x7c,0xb7,0x4, 0x7a, -+0xb3,0x34,0x8d,0x80,0x6, 0x12,0x9b,0xe1,0x75,0x5c,0x0, 0xe5,0x5c,0xda,0x3b,0x22, -+0x7e,0x90,0x9, 0xac,0x9a,0x2e,0x44,0x34,0x8e,0x22,0x7c,0xbd,0x7c,0x7e,0x2, 0x2c, -+0x63,0xe4,0x7a,0xb3,0x34,0x8c,0x7a,0xb3,0x34,0x8b,0x7a,0xb3,0x34,0x8d,0x22,0x7e, -+0x90,0x1, 0x7e,0x94,0x61,0xc0,0x7e,0x84,0x0, 0xff,0xb, 0x4a,0x30,0x7a,0x37,0x28, -+0xa1,0x7e,0xb4,0x61,0xc2,0x7e,0xa4,0x0, 0xff,0xb, 0x5a,0x30,0x7a,0x37,0x28,0xa3, -+0x12,0x9d,0xd6,0xb, 0x1a,0x20,0x7e,0x14,0x61,0x4f,0x7e,0x4, 0x0, 0xff,0xb, 0xa, -+0xd0,0xe4,0x7a,0xb3,0x28,0xac,0x12,0x7f,0x3c,0x7e,0x34,0xff,0xfa,0xad,0x32,0x12, -+0x9f,0x33,0x7d,0xc3,0xe, 0x34,0x7e,0x27,0x7, 0xfe,0xbd,0x2c,0x58,0x1c,0x7e,0xc7, -+0x7, 0xfc,0xbd,0xc3,0x58,0x14,0x6d,0xcc,0x9e,0xc7,0x2a,0x5a,0xbe,0xc7,0x28,0x8e, -+0x8, 0x8, 0x12,0xb2,0x8a,0x60,0x3, 0x12,0x9d,0xdf,0x12,0x9f,0x8a,0x40,0x5, 0xe4, -+0x7a,0xb3,0x28,0xa8,0x12,0x9f,0x4a,0x68,0x6, 0x7e,0xb3,0x3b,0x5b,0x60,0x7, 0xe4, -+0x7a,0xb3,0x28,0xad,0x80,0x6f,0x12,0x9d,0x55,0x28,0x5, 0xe4,0x7a,0xb3,0x28,0xad, -+0x30,0x13,0x5, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0xa9,0x11,0x50,0xa, 0x12,0x7f,0x3c, -+0x12,0x9d,0x6e,0x7c,0x9b,0x80,0x17,0x7e,0xb3,0x26,0x84,0x70,0x11,0x7e,0xb3,0x26, -+0x85,0x70,0xb, 0x12,0x9d,0x55,0x28,0x6, 0x7e,0x90,0x3, 0x12,0x7f,0x3c,0x7e,0xc7, -+0x7, 0xfa,0xbe,0xc4,0x5, 0xdc,0x8, 0x17,0x12,0x9d,0x55,0x28,0x12,0x6d,0xcc,0x9d, -+0xcd,0xbe,0xc7,0x28,0x8e,0x58,0x8, 0x12,0x9d,0x60,0xe4,0x7a,0xb3,0x28,0xad,0xa, -+0x29,0xb, 0x4a,0x30,0xad,0x32,0x7a,0x37,0x28,0xa1,0xa, 0x29,0xb, 0x5a,0x30,0xad, -+0x32,0x7a,0x37,0x28,0xa3,0x12,0x9d,0x5d,0x50,0xd, 0xe4,0x7a,0xb3,0x28,0xad,0x12, -+0x9f,0x42,0x28,0x3, 0x12,0x9d,0x60,0x7e,0xc7,0x28,0x8a,0xbd,0xcd,0x8, 0x1f,0x7e, -+0x24,0x0, 0x2, 0x7d,0x3d,0x12,0x1e,0xee,0x6e,0x34,0xff,0xff,0xb, 0x34,0xbe,0x37, -+0x28,0x8e,0x58,0xa, 0x12,0x9d,0x5d,0x50,0x5, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0x9b, -+0x2, 0xb4,0x1, 0x5, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0x9d,0xf3,0x7e,0xb3,0x34,0x88, -+0xbe,0xb0,0x0, 0x28,0x1f,0x14,0x7a,0xb3,0x34,0x88,0x70,0x18,0xe4,0x7a,0xb3,0x28, -+0xad,0x12,0x9d,0xeb,0x7a,0xb3,0x16,0x91,0x7a,0xb3,0x16,0x90,0x7a,0xb3,0x28,0x84, -+0x7a,0xb3,0x26,0x83,0x22,0x7e,0x83,0x28,0x84,0xbe,0x80,0x0, 0x22,0xa2,0x16,0x22, -+0xe4,0x7a,0xb3,0x34,0x88,0x7a,0xb3,0x28,0xac,0x74,0x2, 0x2, 0x2a,0x20,0x7e,0xa0, -+0x1, 0x7e,0x47,0x7, 0xf8,0x12,0x9d,0xd6,0xb, 0x1a,0x0, 0x7e,0x34,0xff,0xfa,0xad, -+0x30,0x7e,0x14,0x0, 0x2, 0x12,0x9d,0xce,0x8, 0x12,0x7e,0xb3,0x28,0xac,0x60,0x7, -+0xe4,0x7a,0xb3,0x28,0xad,0x80,0x32,0x7e,0xa0,0x5, 0x80,0x2d,0x7e,0x34,0xff,0xfb, -+0x12,0x9d,0xcc,0x8, 0x5, 0x7e,0xa0,0x4, 0x80,0x1f,0x7e,0x34,0xff,0xfc,0x12,0x9d, -+0xcc,0x8, 0x5, 0x7e,0xa0,0x3, 0x80,0x11,0x7e,0x34,0xff,0xfd,0x12,0x9d,0xcc,0x8, -+0x5, 0x7e,0xa0,0x2, 0x80,0x3, 0x7e,0xa0,0x1, 0x7c,0xba,0x22,0xad,0x30,0x7d,0x21, -+0x12,0x1e,0xee,0xbd,0x34,0x22,0x7e,0x34,0x61,0x55,0x7e,0x24,0x0, 0xff,0x22,0x74, -+0x2, 0x7a,0xb3,0x34,0x88,0x12,0x9d,0xeb,0x2, 0x2a,0x20,0x74,0x1, 0x7a,0xb3,0x28, -+0xac,0xe4,0x22,0x7e,0x60,0x4, 0x7e,0x27,0x3b,0x54,0xbe,0x24,0x3, 0xe8,0x28,0x3, -+0x7e,0x60,0x8, 0x7e,0xb3,0x28,0xac,0xb4,0x1, 0x1a,0x7e,0x73,0x34,0x89,0xbc,0x76, -+0x50,0xf, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0x9d,0x60,0x7e,0xb3,0x34,0x89,0x4, 0x80, -+0x4, 0xe4,0x80,0x1, 0xe4,0x7a,0xb3,0x34,0x89,0x7e,0xb3,0x28,0xad,0xb4,0x1, 0x17, -+0x7e,0xa3,0x34,0x8a,0xbe,0xa0,0x5, 0x50,0xa, 0xe4,0x7a,0xb3,0x28,0xad,0x7c,0xba, -+0x4, 0x80,0x5, 0x74,0x5, 0x80,0x1, 0xe4,0x7a,0xb3,0x34,0x8a,0x22,0xca,0x3b,0x7e, -+0xb3,0x2a,0x74,0xf5,0x27,0x12,0x9d,0x5d,0x50,0x2, 0xc1,0xdf,0x6d,0x33,0x9e,0x37, -+0x2a,0x4f,0x3e,0x34,0xbe,0x37,0x7, 0xf8,0x18,0x75,0x7e,0xb3,0x16,0x92,0x70,0x6f, -+0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x65,0x7e,0x77,0x2a,0x51,0x7e,0x67,0x2a,0x53,0x75, -+0x24,0x0, 0x80,0x53,0xe5,0x24,0x12,0x2d,0xb6,0x60,0x4a,0x12,0x9e,0xe2,0x12,0x9f, -+0x5a,0x7e,0xb3,0x2a,0x3, 0xb4,0x1, 0xe, 0x90,0x60,0xab,0xe4,0x93,0xbe,0xb1,0x26, -+0x78,0x4, 0xe, 0x64,0xe, 0x74,0x7e,0xa1,0x26,0x74,0x2, 0xa4,0x49,0x35,0x4, 0xfc, -+0xbd,0x36,0x48,0x14,0xe5,0x25,0xa, 0x2b,0xe5,0x27,0xa, 0x3b,0x2d,0x32,0x3e,0x34, -+0x49,0x33,0x4, 0xfc,0xbd,0x37,0x58,0xd, 0xe5,0x24,0x6c,0x77,0x12,0x33,0x1f,0x12, -+0x9e,0xe2,0x12,0x9f,0x67,0x5, 0x24,0x12,0x9f,0x52,0x38,0xa8,0x12,0x9e,0xea,0xda, -+0x3b,0x22,0x7e,0x71,0x24,0x74,0x2, 0xac,0x7b,0x22,0x7e,0xa0,0x1, 0x7e,0x37,0x2a, -+0x4f,0x12,0x9f,0x3a,0x28,0x35,0x6d,0x22,0x9d,0x23,0xbe,0x27,0x7, 0xf8,0x58,0x2b, -+0x12,0x9f,0x33,0xbe,0x37,0x7, 0xfa,0x8, 0x22,0xe4,0x7a,0xb3,0x28,0x84,0x7e,0xb3, -+0x2a,0x3, 0x70,0x17,0x7e,0xb3,0x39,0x50,0xb4,0x1, 0x10,0x6c,0xaa,0x5, 0x5b,0xe5, -+0x5b,0xbe,0xb0,0x10,0x28,0x5, 0xd2,0x14,0x75,0x5b,0x0, 0x4c,0xaa,0x68,0x3, 0x75, -+0x5b,0x0, 0x22,0x7e,0x24,0x0, 0x2, 0x2, 0x1e,0xee,0x7e,0xb3,0x28,0x84,0xbe,0xb0, -+0x0, 0x22,0x7e,0x73,0x28,0x84,0xbe,0x70,0x0, 0x22,0x7e,0xb3,0x28,0xa8,0xbe,0xb0, -+0x1, 0x22,0x7e,0x73,0x28,0x84,0xbe,0x71,0x24,0x22,0x9, 0xb3,0x26,0xfa,0xf5,0x25, -+0x9, 0xb3,0x26,0xfb,0xf5,0x26,0x22,0x9, 0xb3,0x26,0xfa,0x9, 0x73,0x26,0xfb,0x7c, -+0x6b,0x7e,0xa3,0x37,0xb4,0x7e,0x50,0x2, 0xac,0x5a,0x19,0x62,0x37,0xf1,0x19,0x72, -+0x37,0xf2,0x7c,0xba,0x4, 0x7a,0xb3,0x37,0xb4,0x22,0xd2,0x0, 0x6c,0xaa,0x6c,0x77, -+0x80,0x1f,0x7e,0x63,0x2a,0x6e,0xa, 0x16,0xa, 0x27,0x2d,0x21,0x7c,0x65,0x7e,0x50, -+0x2, 0xac,0x56,0x49,0x22,0x5, 0x7a,0xbe,0x24,0xfe,0xc, 0x58,0x2, 0xb, 0xa0,0xb, -+0x70,0x7e,0xb3,0x2a,0x6d,0xbc,0xb7,0x38,0xd9,0xa, 0x2b,0x1e,0x24,0xa, 0x3a,0xbd, -+0x32,0x8, 0x2, 0xc2,0x0, 0xa2,0x0, 0x22,0xca,0xd8,0xca,0x79,0x7c,0xdb,0x90,0x60, -+0x99,0xe4,0x93,0x7c,0xfb,0x6c,0x11,0x80,0x21,0x7e,0x0, 0xff,0x74,0x9, 0xac,0xb1, -+0x19,0x5, 0x1f,0x38,0x7e,0x34,0x7f,0xff,0x74,0x9, 0xac,0xb1,0x59,0x35,0x1f,0x34, -+0x74,0x9, 0xac,0xb1,0x59,0x35,0x1f,0x36,0xb, 0x10,0xbc,0xf1,0x38,0xdb,0xe4,0x6c, -+0x77,0x7c,0x6d,0x12,0xa1,0x21,0x7c,0x7d,0x7c,0x6f,0x12,0xa1,0x21,0x6c,0x0, 0x80, -+0x39,0x6c,0xee,0x80,0x16,0x74,0x9, 0xac,0xbe,0x9, 0x65,0x1f,0x38,0x74,0x9, 0xac, -+0xb0,0x9, 0x75,0x28,0xb2,0xbc,0x76,0x68,0x6, 0xb, 0xe0,0xbc,0x1e,0x38,0xe6,0xbc, -+0x1e,0x78,0x15,0x7e,0x70,0x9, 0xac,0x70,0x12,0x8f,0xc5,0xac,0x31,0x2e,0x14,0x1f, -+0x34,0x74,0x9, 0x12,0x1f,0xc1,0xb, 0x10,0xb, 0x0, 0xbc,0xf0,0x38,0xc3,0x74,0x9, -+0xac,0xbf,0xca,0x59,0x7e,0x18,0x1f,0x34,0x7e,0x8, 0x29,0x62,0x12,0x20,0xf1,0x1b, -+0xfd,0xda,0x79,0xda,0xd8,0x22,0xca,0x3b,0x7c,0x46,0x7c,0xab,0x6c,0x66,0x21,0x9, -+0x7c,0x57,0x21,0x1, 0x7e,0xf0,0x9, 0xac,0xf6,0x9, 0x87,0x29,0x66,0x7c,0x98,0x7e, -+0xd0,0x9, 0xac,0xd5,0x9, 0xb6,0x28,0xb2,0xbc,0xb9,0x78,0x73,0xbe,0x90,0xff,0x68, -+0x6e,0x12,0xa1,0x19,0x2d,0xf7,0x39,0x87,0x0, 0x4, 0xa, 0xf9,0x9, 0xbf,0x29,0xbc, -+0x7e,0xf0,0x9, 0x70,0xc, 0xac,0xf5,0x7d,0x97,0x2e,0x94,0x28,0xae,0x6d,0x88,0x80, -+0xa, 0xac,0xf6,0x7d,0x97,0x2e,0x94,0x29,0x62,0x6d,0x88,0xb, 0x4a,0xd0,0x12,0xa1, -+0x19,0x2d,0xf7,0x1b,0x7a,0xd0,0x69,0xf4,0x0, 0x2, 0x7e,0xf0,0x9, 0xac,0xfa,0x7f, -+0x60,0x2d,0xd7,0x79,0xf6,0x0, 0x2, 0x7e,0xf0,0x9, 0xac,0xf5,0x9, 0x87,0x28,0xb3, -+0x12,0xa1,0x19,0x2d,0xf7,0x39,0x87,0x0, 0x5, 0x7e,0xf0,0x9, 0xac,0xf5,0x9, 0x87, -+0x28,0xb4,0x12,0xa1,0x19,0x2d,0xf7,0x39,0x87,0x0, 0x6, 0xb, 0xa0,0x80,0x8, 0xb, -+0x50,0xbc,0x45,0x28,0x2, 0x1, 0x74,0xb, 0x60,0x90,0x60,0x99,0xe4,0x93,0xbc,0xb6, -+0x28,0x2, 0x1, 0x70,0x7c,0xba,0xda,0x3b,0x22,0x7e,0xf0,0x9, 0xac,0xfa,0x7f,0x70, -+0x22,0x7e,0x8, 0x1f,0x34,0x12,0xa0,0x66,0x7c,0x1b,0x22,0x7c,0xab,0x7e,0xb, 0xb0, -+0x60,0x3, 0xb4,0x2, 0x31,0xa, 0x4a,0x9, 0x74,0x30,0x1c,0xbe,0x73,0x30,0x26,0x50, -+0xe, 0x7d,0x24,0x2e,0x24,0x30,0x1c,0x7c,0xb7,0x4, 0x7a,0x29,0xb0,0xd3,0x22,0xbe, -+0x73,0x30,0x26,0x40,0x9, 0xbe,0x70,0xff,0x68,0x4, 0xe4,0x7a,0xb, 0xb0,0x74,0xff, -+0x19,0xb4,0x30,0x1c,0x80,0x17,0xa, 0x3a,0x9, 0xb3,0x30,0x1c,0xbe,0xb0,0xff,0x68, -+0x7, 0xe4,0x19,0xb3,0x30,0x1c,0xd3,0x22,0xe4,0x19,0xb3,0x30,0x1c,0xc3,0x22,0xca, -+0xf8,0x7c,0xfb,0x7d,0xf3,0x7e,0x17,0x2a,0x62,0xbd,0x13,0x38,0x6, 0x7e,0x34,0x1, -+0x0, 0x80,0x15,0x6d,0x22,0x7c,0x56,0x7c,0x67,0x6c,0x77,0x12,0x1f,0x3a,0xbe,0x34, -+0x0, 0x8, 0x50,0x4, 0x7e,0x34,0x0, 0x8, 0x74,0x2, 0xac,0xbf,0x49,0x25,0x30,0x28, -+0xbd,0x2f,0x28,0x6, 0x49,0x35,0x30,0x5, 0x80,0x4, 0x59,0x35,0x30,0x5, 0x59,0xf5, -+0x30,0x28,0xbe,0x34,0x1, 0x0, 0x28,0x4, 0x7e,0x34,0x1, 0x0, 0xbe,0x34,0x0, 0x20, -+0x50,0x15,0x7e,0x50,0x9, 0xac,0x5f,0x9, 0xb2,0x2f,0xb2,0xb4,0x1, 0x9, 0x7e,0x34, -+0x1, 0x0, 0xe4,0x19,0xb2,0x2f,0xb2,0xbe,0x34,0x0, 0x40,0x28,0xc, 0x7e,0xa0,0x1, -+0x7e,0x50,0x9, 0xac,0x5f,0x19,0xa2,0x2f,0xb2,0xda,0xf8,0x22,0x7e,0x8, 0x30,0x1b, -+0x7e,0x34,0x0, 0xd, 0xe4,0x2, 0x21,0x16,0xca,0x3b,0x7c,0xab,0x7d,0x3, 0x7e,0x20, -+0x10,0x7d,0x30,0x7e,0x90,0x9, 0xac,0x95,0x9, 0x34,0x28,0xb4,0xbe,0x30,0x10,0x28, -+0x2, 0x7c,0x23,0xbe,0x20,0x18,0x28,0x3, 0x7e,0x20,0x18,0x49,0xe4,0x28,0xae,0xbe, -+0xe4,0x6, 0x50,0x40,0x20,0x7e,0x33,0x2a,0x6f,0x12,0xa3,0x4, 0xbd,0xef,0x38,0x15, -+0x49,0xe4,0x28,0xb0,0xbe,0xe4,0x6, 0x50,0x40,0xb, 0x7e,0x33,0x2a,0x70,0x12,0xa3, -+0x4, 0xbd,0xef,0x28,0x3, 0x7e,0x20,0x8, 0x7e,0xf0,0x10,0xac,0xf2,0xbd,0x70,0x40, -+0x5d,0x7e,0xf0,0x9, 0xac,0xf4,0x9, 0xb7,0x2f,0xb2,0x70,0x52,0x7e,0xd0,0x8, 0xac, -+0xd2,0xbd,0x60,0x50,0x3c,0x9, 0xb7,0x2f,0xab,0x70,0x1f,0x9, 0xb7,0x2f,0xac,0xbe, -+0xb0,0x0, 0x28,0xc, 0x7d,0x37,0x2e,0x34,0x2f,0xac,0x14,0x7a,0x39,0xb0,0x80,0x6, -+0x74,0x1, 0x19,0xb7,0x2f,0xab,0x6d,0x33,0x80,0x34,0x9, 0xb7,0x2f,0xac,0xbe,0xb0, -+0x14,0x50,0x2b,0x7d,0x37,0x2e,0x34,0x2f,0xac,0x4, 0x7a,0x39,0xb0,0x6d,0x33,0x80, -+0x1d,0xe4,0x19,0xb7,0x2f,0xac,0x19,0xb7,0x2f,0xab,0x6d,0x33,0x80,0x10,0x6c,0x33, -+0x7e,0xf0,0x9, 0xac,0xf4,0x19,0x37,0x2f,0xac,0xe4,0x19,0xb7,0x2f,0xab,0x7e,0x30, -+0x8, 0xac,0x23,0xbd,0x10,0x40,0x2a,0x7e,0x70,0x9, 0xac,0x7a,0x49,0x33,0x29,0x62, -+0x59,0x34,0x28,0xae,0x74,0x9, 0xa4,0x49,0x35,0x29,0x64,0x74,0x9, 0xac,0xb5,0x59, -+0x35,0x28,0xb0,0x7e,0xa0,0x1, 0x7e,0x70,0x9, 0xac,0x74,0x19,0xa3,0x2f,0xaa,0x6d, -+0x33,0xda,0x3b,0x22,0x7e,0xf0,0x40,0xac,0xf3,0x7d,0xf7,0x9e,0xf4,0x0, 0x65,0x3e, -+0xf4,0x3e,0xf4,0x3e,0xf4,0x3e,0xf4,0x22,0x7c,0x17,0x7c,0xab,0x7e,0x14,0xff,0xfc, -+0x7e,0x3, 0x2a,0x2, 0x7e,0x90,0x9, 0xac,0x91,0x9, 0xb4,0x2f,0xad,0xb4,0x1, 0x49, -+0xa5,0xb8,0x1, 0xc, 0xbe,0x14,0xff,0x0, 0x28,0x10,0x7e,0x14,0xff,0x0, 0x80,0xa, -+0xbe,0x14,0xff,0xe0,0x28,0x4, 0x7e,0x14,0xff,0xe0,0x49,0x34,0x2f,0xae,0x7e,0x50, -+0x9, 0xac,0x5a,0x49,0x22,0x28,0xae,0x12,0xa4,0x31,0x8, 0x3, 0x12,0xa4,0x3b,0x7e, -+0x70,0x9, 0xac,0x71,0x49,0x33,0x2f,0xb0,0x7e,0x50,0x9, 0xac,0x5a,0x49,0x22,0x28, -+0xb0,0x12,0xa4,0x31,0x8, 0x3, 0x12,0xa4,0x3b,0x7e,0x70,0x9, 0xac,0x7a,0x9, 0x3, -+0x28,0xb4,0xbe,0x0, 0xc, 0x28,0xc, 0xbe,0x14,0xff,0x80,0x28,0x26,0x7e,0x14,0xff, -+0x80,0x80,0x20,0xbe,0x0, 0x8, 0x28,0xc, 0xbe,0x14,0xff,0xe0,0x28,0x15,0x7e,0x14, -+0xff,0xe0,0x80,0xf, 0xbe,0x0, 0x6, 0x28,0xa, 0xbe,0x14,0xff,0xf0,0x28,0x4, 0x7e, -+0x14,0xff,0xf0,0x7e,0x50,0x9, 0xac,0x51,0x49,0x22,0x2f,0xae,0x49,0x33,0x28,0xae, -+0x12,0xa4,0x27,0x18,0x16,0x74,0x9, 0xac,0x1b,0x49,0x20,0x2f,0xb0,0x7e,0x70,0x9, -+0xac,0x7a,0x49,0x33,0x28,0xb0,0x12,0xa4,0x27,0x8, 0x4, 0x7e,0x14,0xff,0xfc,0x7e, -+0x50,0x9, 0xac,0x5a,0x49,0x2, 0x28,0xae,0xbe,0x4, 0x6, 0x50,0x40,0x32,0x7e,0x63, -+0x2a,0x6f,0x7e,0x70,0x40,0xac,0x67,0x9e,0x34,0x0, 0x65,0x12,0x4f,0x41,0xbd,0x3, -+0x38,0x1e,0x49,0x32,0x28,0xb0,0xbe,0x34,0x6, 0x50,0x40,0x14,0x7e,0x3, 0x2a,0x70, -+0x7e,0x10,0x40,0xac,0x1, 0x9e,0x4, 0x0, 0x65,0x12,0xa4,0x47,0xbd,0x30,0x28,0x4, -+0x7e,0x14,0xff,0xff,0x7d,0x31,0x22,0x9d,0x32,0x12,0x21,0x48,0xbe,0x34,0x4, 0x0, -+0x22,0x9d,0x32,0x12,0x21,0x48,0xbe,0x34,0x1, 0x0, 0x22,0x6c,0x0, 0x7e,0x70,0x9, -+0xac,0x71,0x19,0x3, 0x2f,0xad,0x22,0x3e,0x4, 0x3e,0x4, 0x3e,0x4, 0x3e,0x4, 0x22, -+0xca,0x79,0x6c,0xff,0x80,0x3c,0x9f,0x77,0x6d,0x33,0x12,0xa4,0xd0,0x6c,0xee,0x80, -+0x9, 0x7c,0xbf,0x7c,0x7e,0x12,0xa4,0xd9,0xb, 0xe0,0x7e,0x73,0x2a,0x6e,0xa, 0x17, -+0x1b,0x14,0xa, 0x2e,0xbd,0x21,0x48,0xe9,0xa, 0x17,0x6d,0x0, 0x1b,0xc, 0x7f,0x17, -+0x12,0x1f,0x8d,0x7f,0x71,0xbe,0x78,0x0, 0x0, 0x8, 0x5, 0x7d,0x3f,0x12,0xa4,0xd0, -+0xb, 0xf0,0x7e,0x73,0x2a,0x6d,0xbc,0x7f,0x38,0xbc,0x6c,0xff,0x80,0x27,0x7c,0xbf, -+0x12,0x38,0x82,0x7d,0x43,0x74,0x2, 0xac,0xbf,0x9, 0xa5,0x26,0xfa,0x74,0x2, 0xa4, -+0x49,0x55,0x1f,0x34,0x2e,0x57,0x2a,0x5a,0xbd,0x54,0x8, 0x7, 0x7c,0xbf,0x6c,0x77, -+0x12,0x33,0x1f,0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xd1,0xda,0x79,0x22, -+0x74,0x2, 0xac,0xbf,0x59,0x35,0x1f,0x34,0x22,0x12,0x2c,0x63,0x1a,0x26,0x1a,0x24, -+0x2f,0x71,0x22,0xca,0x79,0x7c,0xa7,0x7c,0x8b,0x7e,0xb3,0x2a,0x6f,0x7a,0xb3,0x1f, -+0x9a,0x7e,0xb3,0x2a,0x70,0x7a,0xb3,0x1f,0x9b,0x7e,0x70,0x2, 0xac,0x78,0x9, 0x93, -+0x26,0xfa,0x9, 0x83,0x26,0xfb,0x9f,0x77,0x1a,0x3a,0x1a,0x79,0x9d,0x73,0xa1,0x95, -+0x7a,0xf1,0x58,0xbe,0xf0,0x0, 0x58,0xe, 0x1a,0x3f,0x1a,0x29,0x9d,0x23,0x1a,0x39, -+0x2d,0x32,0x7c,0xb7,0xf5,0x58,0x7e,0xb3,0x1f,0x9a,0xbc,0xbf,0x18,0xe, 0x1a,0x39, -+0x1a,0x2f,0x9d,0x23,0x1a,0x39,0x9d,0x32,0x7c,0xb7,0xf5,0x58,0x1a,0x2a,0x1a,0x38, -+0x9d,0x32,0x7c,0xb7,0xf5,0x57,0x80,0x3d,0x85,0x57,0x59,0xe5,0x57,0xbe,0xb0,0x0, -+0x58,0x10,0xe5,0x57,0x1a,0x3b,0x1a,0x28,0x9d,0x23,0x1a,0x38,0x2d,0x32,0x7c,0xb7, -+0xf5,0x59,0x7e,0xb3,0x1f,0x9b,0xbe,0xb1,0x57,0x18,0x10,0x1a,0x38,0xe5,0x57,0x1a, -+0x2b,0x9d,0x23,0x1a,0x38,0x9d,0x32,0x7c,0xb7,0xf5,0x59,0xe5,0x58,0x7e,0x71,0x59, -+0x12,0xa4,0xd9,0x5, 0x57,0x1a,0x3a,0x1a,0x28,0x2d,0x23,0xe5,0x57,0x1a,0x3b,0xbd, -+0x32,0x8, 0xb5,0xb, 0xf0,0x1a,0x3a,0x1a,0x29,0x2d,0x23,0x1a,0x3f,0xbd,0x32,0x18, -+0x2, 0xa1,0x10,0x7f,0x17,0xda,0x79,0x22,0xca,0x3b,0x6d,0x44,0x7e,0xf3,0x28,0x84, -+0x6c,0xee,0x80,0x24,0x7c,0xbe,0x12,0x2d,0xb6,0x60,0x1b,0x74,0x2, 0xac,0xbe,0x9, -+0xd5,0x26,0xfa,0x9, 0xc5,0x26,0xfb,0x7c,0xbd,0x7c,0x7c,0x12,0x2c,0x63,0x7d,0xf3, -+0xbd,0x4f,0x58,0x2, 0x7d,0x4f,0xb, 0xe0,0xbc,0xfe,0x38,0xd8,0x7d,0x34,0xda,0x3b, -+0x22,0xe4,0x7a,0xb3,0x37,0xb4,0x7e,0xb3,0x28,0x84,0x60,0x6, 0x7e,0xb3,0x38,0x2d, -+0x60,0x5, 0xe4,0x7a,0xb3,0x38,0x2f,0x22,0x6c,0x99,0x6c,0x88,0x80,0xf, 0x7c,0xb8, -+0x12,0x38,0x82,0xbe,0x34,0x1, 0xf4,0x8, 0x2, 0xb, 0x90,0xb, 0x80,0x7e,0x73,0x28, -+0x84,0xbc,0x78,0x38,0xe9,0xbe,0x90,0x1, 0x38,0x2, 0xc3,0x22,0xd3,0x22,0x7e,0x63, -+0x2a,0x6e,0x90,0x60,0xa7,0xe4,0x93,0x60,0x6c,0xc2,0x15,0x6c,0x33,0x80,0x56,0x90, -+0x60,0xaa,0xe4,0x93,0x70,0x13,0x7c,0x96,0xac,0x93,0x90,0x60,0xab,0xe4,0x93,0xa, -+0x5b,0x1b,0x54,0x2d,0x45,0x7d,0xd4,0xb, 0xd4,0x7d,0x54,0x3e,0x54,0x7e,0x7f,0x13, -+0x8a,0x2d,0xf5,0xb, 0x7a,0x50,0xbe,0x57,0x2a,0x5a,0x8, 0x27,0x7c,0xb3,0x12,0x3e, -+0xd7,0x50,0x20,0x7d,0x5d,0x3e,0x54,0x7e,0x7f,0x13,0x8a,0x7f,0x57,0x2d,0xb5,0xb, -+0x5a,0xc0,0x7d,0x54,0x3e,0x54,0x2d,0xf5,0xb, 0x7a,0x50,0xbd,0x5c,0x8, 0x4, 0xd2, -+0x15,0x80,0xa, 0xb, 0x30,0x7e,0x73,0x2a,0x75,0xbc,0x73,0x38,0xa2,0x30,0x15,0x5, -+0xd2,0x0, 0x2, 0x3e,0xf9,0x22,0x90,0x60,0xa7,0xe4,0x93,0x60,0x8, 0x30,0x15,0x5, -+0x12,0x3e,0xa9,0xc2,0x15,0x22,0xca,0xd8,0xca,0x79,0x7c,0xfb,0x7f,0x70,0xc2,0x0, -+0x6c,0xdd,0x6d,0xdd,0x7e,0x34,0x23,0x11,0x7e,0x24,0x0, 0xff,0x7e,0x14,0x1f,0x34, -+0x74,0xc, 0x12,0x1f,0xe2,0x6d,0x11,0x7e,0x4, 0x7f,0xff,0x6c,0xee,0x80,0x13,0x12, -+0xa7,0xba,0x7d,0xc3,0xbd,0xdc,0x50,0x2, 0x7d,0xdc,0xbd,0xc, 0x28,0x2, 0x7d,0xc, -+0xb, 0xe0,0xbc,0xfe,0x38,0xe9,0xbe,0xd4,0x0, 0x1e,0x58,0xa, 0x7e,0xb3,0x28,0x94, -+0x70,0x4, 0x6d,0x33,0xe1,0xab,0xbe,0xd4,0x4, 0xb0,0x8, 0x2, 0xd2,0x0, 0x6c,0xee, -+0x74,0x4, 0xac,0xbe,0x49,0x45,0x1f,0x34,0xbd,0x4d,0x58,0x6, 0x49,0xd5,0x1f,0x36, -+0x80,0x7, 0xb, 0xe0,0xbe,0xe0,0x3, 0x40,0xe7,0xbe,0xe0,0x3, 0x78,0x4, 0x6d,0x33, -+0xe1,0xab,0xbd,0xd, 0x8, 0x5, 0x30,0x0, 0x2, 0x7d,0xd0,0x9f,0x55,0x6c,0xee,0x80, -+0xb, 0x12,0xa7,0xba,0x1a,0x26,0x1a,0x24,0x2f,0x51,0xb, 0xe0,0xbc,0xfe,0x38,0xf1, -+0xa, 0x1f,0x12,0xa7,0xb0,0x9f,0x55,0x6c,0xee,0x80,0x22,0x74,0x2, 0xac,0xbe,0x7f, -+0x17,0x2d,0x35,0xb, 0x1a,0x90,0x7d,0x39,0x12,0x21,0x48,0x7d,0xc3,0xbd,0x1c,0x28, -+0xa, 0x7d,0x39,0x1a,0x26,0x1a,0x24,0x2f,0x51,0xb, 0xd0,0xb, 0xe0,0xbc,0xfe,0x38, -+0xda,0x6d,0x11,0xbe,0xd0,0x0, 0x28,0x5, 0xa, 0x1d,0x12,0xa7,0xb0,0xbd,0x1d,0x8, -+0x4, 0x7d,0x1d,0x80,0xa, 0x6d,0x0, 0x9d,0xd, 0xbd,0x1, 0x8, 0x2, 0x7d,0x10,0x6c, -+0xee,0x80,0x12,0x74,0x2, 0xac,0xbe,0x7f,0x17,0x2d,0x35,0xb, 0x1a,0x0, 0x9d,0x1, -+0x1b,0x1a,0x0, 0xb, 0xe0,0xbc,0xfe,0x38,0xea,0x7d,0x31,0xda,0x79,0xda,0xd8,0x22, -+0x6d,0x0, 0x7f,0x15,0x12,0x1f,0x8d,0x7d,0x13,0x22,0x74,0x2, 0xac,0xbe,0x7f,0x17, -+0x2d,0x35,0xb, 0x1a,0x30,0x2, 0x21,0x48,0x7e,0xb3,0x2b,0x1d,0xb4,0x1, 0x31,0x12, -+0xc9,0x26,0x7e,0x1f,0x3b,0x21,0x7a,0x37,0x24,0xfa,0x7e,0x34,0xd, 0xc8,0x7a,0x37, -+0x24,0xf6,0x12,0x7f,0xe8,0x12,0x7f,0xf1,0xe4,0x7a,0xb3,0x24,0xf5,0x7e,0x34,0x0, -+0x20,0x7a,0x37,0x24,0xfc,0x7a,0xb3,0x24,0xf4,0x7e,0x8, 0x24,0xf2,0x2, 0xd, 0x7, -+0x22,0x7c,0xa7,0x7c,0x7b,0x90,0x60,0xaa,0xe4,0x93,0x60,0x2, 0x7c,0xa7,0x90,0x60, -+0xab,0xe4,0x93,0xbc,0xba,0x78,0x2, 0xd3,0x22,0xc3,0x22,0x6c,0xaa,0x80,0x23,0x7e, -+0x30,0x4, 0xac,0x3a,0x7d,0xf1,0x2e,0xf4,0x60,0xb1,0x7e,0xe4,0x0, 0xff,0xb, 0x7a, -+0x20,0xbd,0x23,0x38,0xb, 0x2e,0x14,0x60,0xb3,0x12,0x5f,0xec,0xbd,0x23,0x50,0xb, -+0xb, 0xa0,0x90,0x60,0xa7,0xe4,0x93,0xbc,0xba,0x38,0xd4,0x7c,0xba,0x22,0x12,0xa8, -+0x62,0x7e,0x14,0x62,0x7, 0x12,0x5f,0xec,0xbd,0x32,0x28,0x3, 0xd2,0x16,0x22,0xc2, -+0x16,0x22,0x6d,0x11,0xe4,0x12,0x0, 0x1e,0x6c,0xaa,0x80,0x5b,0x7e,0x10,0x2, 0xac, -+0x1a,0x7e,0x7f,0x33,0xf8,0x2d,0xf0,0x69,0x27,0x1, 0x0, 0x69,0x37,0x0, 0x80,0x9d, -+0x32,0x12,0x21,0x48,0xbd,0x31,0x28,0x16,0x7e,0x70,0x2, 0xac,0x7a,0x7e,0xf, 0x33, -+0xf8,0x2d,0x13,0x69,0x20,0x1, 0x0, 0x69,0x30,0x0, 0x80,0x12,0x8f,0x29,0x7e,0x10, -+0x2, 0xac,0x1a,0x7e,0x1f,0x33,0xf8,0x2d,0x30,0x69,0x1, 0x0, 0x80,0xbe,0x4, 0x7f, -+0xff,0x78,0x4, 0x7e,0x14,0x7f,0xff,0x69,0x1, 0x1, 0x0, 0xbe,0x4, 0x7f,0xff,0x78, -+0x4, 0x7e,0x14,0x7f,0xff,0xb, 0xa0,0x7e,0xb3,0x2a,0x74,0xbc,0xba,0x38,0x9d,0x7d, -+0x31,0x22,0x6c,0xaa,0x80,0x26,0x7e,0x50,0x2, 0xac,0x5a,0x49,0x12,0x5, 0xf8,0x49, -+0x32,0x4, 0x0, 0x2d,0x31,0x59,0x32,0x5, 0xf8,0x30,0x6, 0xe, 0x49,0x12,0x4, 0x7e, -+0x49,0x32,0x6, 0x76,0x2d,0x31,0x59,0x32,0x6, 0x76,0xb, 0xa0,0x7e,0xb3,0x2a,0x74, -+0xa, 0x3b,0x7e,0xb3,0x2a,0x73,0xa, 0x2b,0x2d,0x23,0xa, 0x3a,0xbd,0x32,0x48,0xc6, -+0x22,0xc2,0x0, 0x7e,0xa3,0x2a,0x70,0x7e,0xb3,0x26,0xf1,0x60,0x4, 0xd2,0x0, 0x80, -+0x33,0x7e,0x70,0x2, 0x80,0x22,0x7e,0x50,0x2, 0xac,0x57,0x49,0x12,0x4, 0xfc,0x7e, -+0xf4,0x61,0x59,0x7e,0xe4,0x0, 0xff,0xb, 0x7a,0x0, 0x6d,0x22,0x9d,0x20,0xbd,0x12, -+0x58,0x4, 0xd2,0x0, 0x80,0xe, 0xb, 0x70,0xa, 0x1a,0x9e,0x14,0x0, 0x3, 0xa, 0x27, -+0xbd,0x21,0x48,0xd2,0xa2,0x0, 0x22,0x7e,0x37,0x3b,0x1a,0x12,0x25,0x6f,0x7a,0x37, -+0x38,0xab,0x6c,0xaa,0x80,0x23,0x12,0x5f,0xf4,0x28,0x26,0xa, 0x4a,0x9, 0x64,0x38, -+0x44,0xbc,0x6b,0x50,0x12,0x7e,0x50,0x2, 0xac,0x5a,0x49,0x42,0x3b,0x14,0x7e,0x70, -+0xc, 0xac,0x67,0x59,0x43,0x38,0x4e,0xb, 0xa0,0x7e,0xb3,0x38,0x41,0xbc,0xba,0x38, -+0xd5,0x22,0x7d,0x23,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad,0x7e,0x14,0x0, 0x5, 0xad, -+0x13,0x1e,0x14,0xbd,0x12,0x50,0xd, 0x7e,0x33,0x38,0xaa,0xbe,0x30,0x8, 0x50,0x45, -+0x74,0x8, 0x80,0x3d,0x7d,0x13,0x3e,0x14,0xbd,0x12,0x50,0xd, 0x7e,0x33,0x38,0xaa, -+0xbe,0x30,0x6, 0x50,0x30,0x74,0x6, 0x80,0x28,0x7e,0x14,0x0, 0x3, 0xad,0x13,0x1e, -+0x14,0xbd,0x12,0x50,0xd, 0x7e,0x33,0x38,0xaa,0xbe,0x30,0x4, 0x50,0x17,0x74,0x4, -+0x80,0xf, 0xbd,0x32,0x50,0xf, 0x7e,0x73,0x38,0xaa,0xbe,0x70,0x2, 0x50,0x6, 0x74, -+0x2, 0x7a,0xb3,0x38,0xaa,0x7e,0xb3,0x38,0xaa,0xbe,0xb0,0x0, 0x28,0x1b,0x14,0x7a, -+0xb3,0x38,0xaa,0x74,0x1, 0x7a,0xb3,0x16,0x92,0x90,0x61,0xfd,0xe4,0x93,0xbe,0xb3, -+0x38,0xaa,0x50,0x5, 0xe4,0x7a,0xb3,0x16,0x91,0x22,0x7c,0x3b,0x7e,0x44,0xff,0xff, -+0x6c,0x22,0x80,0x2a,0x12,0xaa,0x93,0x68,0x23,0x7e,0x70,0xc, 0xac,0x72,0x12,0xc8, -+0x94,0x7d,0x23,0x7e,0x70,0xc, 0xac,0x72,0x59,0x23,0x38,0x50,0x49,0x3, 0x38,0x50, -+0x49,0x23,0x38,0x4c,0xbd,0x20,0x50,0x4, 0x59,0x3, 0x38,0x4c,0xb, 0x20,0xbc,0x32, -+0x50,0xd2,0x6c,0xaa,0x6c,0x22,0x80,0x18,0x12,0xaa,0x93,0x68,0x11,0x7e,0x70,0xc, -+0xac,0x72,0x49,0x3, 0x38,0x4c,0xbd,0x4, 0x50,0x4, 0x7d,0x40,0x7c,0xa2,0xb, 0x20, -+0xbc,0x32,0x50,0xe4,0x7e,0x37,0x38,0x32,0xbe,0x37,0x38,0xab,0x50,0x8, 0x7e,0x37, -+0x38,0xab,0x7a,0x37,0x38,0x32,0x12,0xab,0xc9,0x4d,0x33,0x78,0x3, 0x7e,0xa0,0xff, -+0x7c,0xba,0x22,0x7e,0x10,0x5, 0xac,0x12,0x9, 0xb0,0x26,0x33,0xbe,0xb3,0x2b,0xf, -+0x22,0xca,0xd8,0xca,0x79,0x7e,0xe0,0xff,0x12,0xaf,0xfa,0x7e,0xb3,0x38,0x39,0xb4, -+0x1, 0x8, 0x12,0x7e,0x21,0xe4,0x7a,0xb3,0x38,0x39,0x7e,0xb3,0x38,0x38,0x60,0x4, -+0x74,0xff,0x61,0xc4,0x7e,0xb3,0x38,0x37,0xb4,0x2, 0x2, 0x80,0x2, 0x61,0xb8,0x12, -+0xc9,0x45,0x38,0xc, 0x12,0xc9,0x3d,0x38,0x7, 0x12,0xc9,0x35,0x38,0x2, 0x61,0xb8, -+0x12,0xc9,0x2d,0xa, 0x3d,0x1b,0x34,0xbe,0x34,0x0, 0x3, 0x48,0x4, 0x74,0x3, 0x80, -+0x3, 0x7c,0xbd,0x14,0x12,0xaa,0x1a,0x7c,0xfb,0x7e,0xb3,0x38,0x36,0x4, 0x7a,0xb3, -+0x38,0x36,0x90,0x61,0xc5,0xe4,0x93,0x14,0x12,0xaa,0x1a,0x7c,0xab,0xbe,0xa0,0xff, -+0x68,0x2c,0xbe,0xf0,0xff,0x68,0x25,0x7e,0x30,0xc, 0xac,0x3f,0x49,0x21,0x38,0x4c, -+0x7e,0xf4,0x61,0xcc,0x7e,0xe4,0x0, 0xff,0xb, 0x7a,0x30,0xbd,0x23,0x28,0xf, 0x12, -+0xab,0xc9,0x3e,0x34,0xbd,0x23,0x28,0x6, 0x7c,0xfa,0x80,0x2, 0x7c,0xfa,0xbe,0xf0, -+0xff,0x78,0x11,0xe4,0x7a,0xb3,0x38,0x36,0x7a,0xb3,0x38,0x37,0x7a,0xb3,0x38,0x43, -+0x74,0xff,0x80,0x70,0x90,0x61,0xd4,0xe4,0x93,0xbe,0xb3,0x38,0x36,0x50,0x59,0x74, -+0xc, 0xac,0xbf,0x49,0x25,0x38,0x4c,0x7e,0x14,0x61,0xcc,0x12,0x5a,0xad,0xbd,0x23, -+0x50,0x3d,0x7e,0x34,0x61,0xd0,0x12,0x23,0xc9,0xbe,0x37,0x38,0x32,0x40,0xd, 0x7e, -+0x34,0x61,0xd2,0x12,0x23,0xc9,0xbe,0x37,0x38,0x3d,0x50,0x23,0x74,0x5, 0xac,0xbf, -+0x9, 0x75,0x26,0x33,0xbe,0x73,0x2b,0xf, 0x68,0x15,0x7c,0xef,0xbe,0xe0,0x4, 0x50, -+0x8, 0x12,0xab,0xd3,0xbe,0xb0,0x4, 0x40,0x6, 0x74,0x1, 0x7a,0xb3,0x38,0x39,0xe4, -+0x7a,0xb3,0x38,0x43,0x7a,0xb3,0x38,0x37,0xbe,0xe0,0xff,0x68,0x5, 0xe4,0x7a,0xb3, -+0x38,0x36,0x7c,0xbe,0xda,0x79,0xda,0xd8,0x22,0x7e,0x70,0xc, 0xac,0x7a,0x49,0x33, -+0x38,0x4c,0x22,0x7e,0xb3,0x2b,0xf, 0x7c,0xab,0x6c,0x77,0x7e,0x50,0x5, 0xac,0x57, -+0x9, 0x62,0x26,0x33,0xbc,0x6a,0x78,0x3, 0x7c,0xb7,0x22,0xb, 0x70,0xbe,0x70,0x4, -+0x40,0xe9,0x74,0xff,0x22,0x7c,0x2b,0x7e,0xb3,0x1f,0x33,0xbc,0x2b,0x68,0x55,0x12, -+0xab,0xd7,0x7c,0x3b,0x7c,0xb2,0x12,0xab,0xd7,0x7c,0xab,0xbe,0x30,0xff,0x68,0x44, -+0xbe,0xa0,0xff,0x68,0x3f,0x7e,0x70,0x4, 0xac,0x73,0xa, 0x2a,0x2d,0x32,0x2e,0x34, -+0x21,0x38,0x12,0x97,0xb6,0xbe,0xb0,0x2, 0x38,0x2a,0xa, 0x2b,0x7e,0x34,0x2, 0xe0, -+0xad,0x32,0x2e,0x34,0x16,0x93,0x6d,0x22,0x30,0x19,0x3, 0x2, 0xac,0x64,0x7e,0xb3, -+0x2b,0x1d,0xb4,0x1, 0xf, 0x12,0xc8,0x6c,0x7a,0x55,0x2a,0x7e,0x8, 0xd, 0xc8,0x74, -+0x1, 0x2, 0xac,0x95,0x22,0x7c,0xab,0x12,0xaf,0xf2,0xd2,0x19,0x7c,0xba,0x12,0xab, -+0xf5,0xc2,0x19,0x22,0x7c,0x7b,0x90,0x60,0x93,0xe4,0x93,0xa, 0x1b,0x7e,0x63,0x2a, -+0x71,0xa, 0x6, 0x2d,0x1, 0x7e,0x63,0x2a,0x6e,0xa, 0x16,0xad,0x10,0x7d,0x21,0x12, -+0x7f,0xd6,0xa, 0x26,0x7a,0x25,0x2a,0x74,0x1d,0xac,0x7b,0x2e,0x34,0x39,0x8c,0x6d, -+0x22,0xe4,0x2, 0xac,0x95,0x7c,0xab,0x6d,0x44,0x80,0x29,0x4c,0xaa,0x68,0x11,0x12, -+0xac,0xd8,0x60,0x5, 0x3e,0xe4,0x14,0x78,0xfb,0x12,0xac,0xcc,0x2d,0xfe,0x80,0xf, -+0x12,0xac,0xd8,0x60,0x5, 0x3e,0xe4,0x14,0x78,0xfb,0x12,0xac,0xcc,0x9d,0xfe,0x1b, -+0x6a,0xf0,0xb, 0x44,0x7e,0xf5,0x2a,0xbd,0xf4,0x38,0xd0,0x22,0x7d,0xf4,0x3e,0xf4, -+0x7f,0x60,0x2d,0xdf,0xb, 0x6a,0xf0,0x22,0x7f,0x71,0x2d,0xf4,0x7e,0x7b,0xb0,0x1a, -+0xeb,0x7f,0x61,0x2e,0xd5,0x2a,0x7e,0x6b,0xb0,0x22,0xca,0xf8,0x7e,0x45,0x24,0x7c, -+0xb9,0x7a,0xb3,0x3a,0x87,0x74,0xff,0x7a,0xb3,0x3a,0x86,0x6d,0x55,0x80,0x19,0x7d, -+0xf5,0x3e,0xf4,0x12,0xac,0xce,0x7d,0xe5,0x3e,0xe4,0x59,0xfe,0x1f,0x34,0x69,0xf6, -+0x0, 0x2, 0x59,0xfe,0x21,0x14,0xb, 0x54,0xbd,0x45,0x38,0xe3,0x7e,0x33,0x3a,0x87, -+0xbe,0x30,0x4, 0x38,0x2, 0xa1,0xac,0x69,0xf1,0x0, 0x1c,0x69,0x11,0x0, 0x1e,0xbd, -+0x1f,0x18,0x19,0x4d,0x11,0x78,0x4, 0x7e,0x14,0x0, 0x1, 0x7d,0x3f,0x7d,0x21,0x12, -+0x1e,0xee,0x7c,0xf7,0x74,0x40,0x7a,0xb3,0x3a,0x8a,0x80,0x43,0x4d,0xff,0x78,0x4, -+0x7e,0xf4,0x0, 0x1, 0x7d,0x31,0x7d,0x2f,0x12,0x1e,0xee,0x7c,0xf7,0x74,0x80,0x7a, -+0xb3,0x3a,0x8a,0x7d,0xf, 0x2d,0xf, 0xbd,0x1, 0x8, 0x24,0x1a,0x2, 0x1a,0x0, 0x7e, -+0x73,0x3a,0x8a,0xa, 0x37,0x6d,0x22,0x12,0x1f,0x20,0x7d,0x5f,0x1a,0x4a,0x1a,0x48, -+0x7d,0x1f,0x1a,0x2, 0x1a,0x0, 0x2f,0x2, 0x12,0x1f,0x3c,0x7a,0x73,0x3a,0x8a,0xbe, -+0xf0,0x5, 0x58,0x14,0x12,0xad,0xcb,0x12,0xc7,0xb6,0x12,0xad,0xcb,0x12,0xad,0xd4, -+0x12,0xad,0xcb,0x12,0xc6,0xf0,0x80,0xa, 0x74,0x7d,0x80,0x2, 0x74,0x7f,0x7a,0xb3, -+0x3a,0x86,0xe4,0x7a,0xb3,0x3a,0x87,0x7e,0x73,0x3b,0x51,0xbe,0x73,0x3a,0x86,0x48, -+0x6, 0x7e,0xb3,0x3a,0x88,0x80,0x1, 0xe4,0xda,0xf8,0x22,0x7e,0x8, 0x1f,0x34,0x7e, -+0x18,0x21,0x14,0x22,0xca,0x3b,0x7f,0x71,0x7e,0x60,0x1, 0xb, 0xa, 0x20,0xb, 0x7a, -+0x50,0x7c,0x4b,0x7a,0x53,0x22,0xf4,0x7a,0x43,0x23,0xe4,0x7e,0x70,0x1, 0x7e,0xa0, -+0x1, 0xc1,0xf5,0x7e,0x90,0x2, 0xac,0x9a,0x7f,0x60,0x2d,0xd4,0xb, 0x6a,0xd0,0x7d, -+0x7d,0x7c,0xbf,0xf5,0x26,0x7f,0x67,0x2d,0xd4,0xb, 0x6a,0x40,0xa, 0xd5,0xa, 0xbb, -+0x7d,0xab,0x9d,0xad,0x7d,0x7a,0x7c,0x8f,0xbe,0x80,0x0, 0x58,0x5, 0x6e,0x80,0xff, -+0xb, 0x80,0xa, 0xa4,0xa, 0x79,0x9d,0x7a,0xbe,0xf0,0x0, 0x58,0x5, 0x6e,0xf0,0xff, -+0xb, 0xf0,0xbe,0x80,0x2, 0x58,0x7, 0xbe,0xf0,0x2, 0x58,0x2, 0xc1,0xf3,0xbe,0x60, -+0x0, 0x18,0x2, 0xc1,0xdb,0xbe,0x70,0xec,0x28,0x2, 0xc1,0xff,0xbe,0x80,0x8, 0x58, -+0x5, 0xbe,0xf0,0x8, 0x48,0x61,0xa, 0xa7,0xb, 0xa4,0x7d,0x6a,0x7c,0x7d,0xa, 0xa5, -+0x2d,0xab,0x12,0xaf,0x43,0x19,0xba,0x22,0xf4,0xa, 0xd9,0xa, 0xa4,0x2d,0xad,0x12, -+0xaf,0x43,0x19,0xba,0x23,0xe4,0x9, 0xba,0x22,0xf4,0xa, 0xdb,0xa, 0xc5,0x2d,0xcd, -+0xe, 0xc4,0x7d,0x6c,0x7c,0xbd,0xa, 0xc7,0x19,0xbc,0x22,0xf3,0x9, 0xbc,0x23,0xe4, -+0xa, 0xcb,0xa, 0xa4,0x2d,0xac,0x12,0xaf,0x43,0x19,0xba,0x23,0xe3,0x2d,0xdb,0x12, -+0xaf,0x3a,0x19,0xbd,0x22,0xf5,0xa, 0xd9,0x12,0xaf,0x38,0x19,0xbd,0x23,0xe5,0xb, -+0xd5,0x7d,0x6d,0x7c,0x7d,0x80,0x24,0xbe,0x80,0x4, 0x58,0x5, 0xbe,0xf0,0x4, 0x48, -+0x1a,0xe5,0x26,0xa, 0xcb,0xa, 0xd5,0x12,0xaf,0x38,0x19,0xbd,0x22,0xf4,0xa, 0xc9, -+0xa, 0xd4,0x12,0xaf,0x38,0x19,0xbd,0x23,0xe4,0xb, 0x70,0xbe,0x70,0xf0,0x50,0x1f, -+0x7e,0x51,0x26,0x7c,0x49,0xe5,0x26,0xa, 0xd7,0x19,0xbd,0x22,0xf4,0x19,0x9d,0x23, -+0xe4,0xb, 0x70,0xb, 0xa0,0x7e,0xb3,0x3a,0x87,0xbc,0xba,0x28,0x2, 0xa1,0xf3,0x7a, -+0x73,0x3a,0x87,0x7e,0xa0,0x1, 0x80,0x25,0xa, 0x3a,0x9, 0xb3,0x22,0xf4,0xa, 0x2b, -+0x7e,0x70,0x2, 0xac,0x7a,0x7f,0x60,0x2d,0xd3,0x1b,0x6a,0x20,0xa, 0x2a,0x9, 0xb2, -+0x23,0xe4,0xa, 0x4b,0x2d,0x3f,0x7d,0x2e,0x1b,0x1a,0x40,0xb, 0xa0,0x7e,0xb3,0x3a, -+0x87,0xbc,0xba,0x38,0xd3,0xda,0x3b,0x22,0x2d,0xdc,0xe, 0xd4,0x7d,0x6d,0x7c,0xbd, -+0xa, 0xd7,0x22,0xe, 0xa4,0x7d,0x6a,0x7c,0xbd,0xa, 0xa7,0x22,0x12,0xaf,0xe9,0x7a, -+0x37,0x2f,0x9c,0x12,0xaf,0x74,0x7a,0x37,0x2f,0x9e,0x12,0x5d,0xe4,0x60,0x1, 0x22, -+0x7e,0x73,0x2f,0xa8,0xa, 0x37,0x7a,0x35,0x24,0x7e,0x8, 0x2b,0xbf,0x7e,0x18,0x2f, -+0x80,0x2, 0xac,0xea,0x7e,0x37,0x2f,0x96,0x9e,0x37,0x2f,0x8e,0x22,0x7e,0x17,0x2f, -+0x90,0xbd,0x13,0x28,0xa, 0x7a,0x37,0x2f,0x90,0x7a,0x27,0x2f,0x92,0x80,0x10,0x7e, -+0x17,0x2f,0x88,0xbd,0x13,0x50,0x8, 0x7a,0x37,0x2f,0x88,0x7a,0x27,0x2f,0x8a,0x7e, -+0x17,0x2f,0x8e,0xbd,0x12,0x28,0xa, 0x7a,0x27,0x2f,0x8e,0x7a,0x37,0x2f,0x8c,0x80, -+0x10,0x7e,0x17,0x2f,0x96,0xbd,0x12,0x50,0x8, 0x7a,0x27,0x2f,0x96,0x7a,0x37,0x2f, -+0x94,0x7e,0xb3,0x2f,0xa8,0xb4,0xa, 0xf, 0x12,0xaf,0xe9,0x7a,0x37,0x2f,0xa0,0x12, -+0xaf,0x74,0x7a,0x37,0x2f,0xa2,0x22,0xb4,0x14,0xe, 0x12,0xaf,0xe9,0x7a,0x37,0x2f, -+0xa4,0x12,0xaf,0x74,0x7a,0x37,0x2f,0xa6,0x22,0x7e,0x37,0x2f,0x88,0x9e,0x37,0x2f, -+0x90,0x22,0xa9,0xd1,0xcb,0x74,0x1, 0x2, 0x0, 0xe, 0x7e,0xb3,0x38,0x38,0xb4,0x1, -+0x27,0x7e,0xb3,0x38,0xae,0x4, 0x7a,0xb3,0x38,0xae,0x7e,0x73,0x38,0xae,0xbe,0x70, -+0x3, 0x40,0x15,0x12,0x7f,0x43,0x7e,0x73,0x38,0xae,0xbe,0x70,0x6, 0x40,0x9, 0xe4, -+0x7a,0xb3,0x38,0xae,0x7a,0xb3,0x38,0x38,0x22,0xca,0xf8,0x7f,0x71,0x6d,0xdd,0x6c, -+0xaa,0x7e,0xf0,0x80,0xc2,0x0, 0x6d,0x44,0x80,0x32,0x12,0xb0,0xca,0x12,0xa7,0xc2, -+0xbd,0x3d,0x48,0x26,0x12,0xb0,0xca,0xb, 0x1a,0x30,0xbe,0x34,0x0, 0x0, 0x8, 0x4, -+0xd2,0x0, 0x80,0x9, 0x12,0x21,0x48,0xbd,0x3d,0x68,0x2, 0xc2,0x0, 0x7d,0x34,0x3e, -+0x34,0x2d,0x3f,0x7d,0x2e,0x12,0xa7,0xc2,0x7d,0xd3,0xb, 0x44,0x7e,0xc5,0x35,0xbd, -+0xc4,0x38,0xc7,0x30,0x0, 0xc, 0x7e,0xf0,0x7f,0x80,0x7, 0xb, 0xa0,0xbe,0xa0,0x8, -+0x50,0x11,0x7c,0xba,0x7d,0x3d,0x60,0x5, 0xe, 0x34,0x14,0x78,0xfb,0xa, 0xcf,0xbd, -+0x3c,0x18,0xe8,0x7f,0x10,0x2e,0x35,0x35,0x7a,0x1b,0xa0,0x6d,0x44,0x80,0x21,0x7d, -+0x54,0x3e,0x54,0x7f,0x17,0x2d,0x35,0xb, 0x1a,0x30,0x7f,0x60,0x2e,0xd5,0x35,0x7e, -+0x6b,0xb0,0x60,0x5, 0xe, 0x34,0x14,0x78,0xfb,0x7c,0xb7,0x12,0xb0,0xd5,0xb, 0x44, -+0x7e,0x55,0x35,0xbd,0x54,0x38,0xd8,0xda,0xf8,0x22,0x7d,0xc4,0x3e,0xc4,0x7f,0x17, -+0x2d,0x3c,0x22,0xa, 0x4a,0x7f,0x10,0x2d,0x34,0x7a,0x1b,0xb0,0x22,0x90,0x60,0x93, -+0xe4,0x93,0xa, 0xb, 0x7e,0x73,0x2a,0x71,0xa, 0x17,0x2d,0x10,0x7e,0xa3,0x2a,0x6e, -+0xa, 0x3a,0xad,0x13,0x7d,0x21,0x6c,0x33,0x80,0x20,0xa, 0x3, 0x2d,0x2, 0x3e,0x4, -+0x7e,0x7f,0x3b,0x21,0x2d,0xf0,0xb, 0x7a,0x0, 0x7e,0x90,0x2, 0xac,0x93,0x49,0xf4, -+0x13,0x8e,0x9d,0xf, 0x59,0x4, 0x25,0xb6,0xb, 0x30,0xbc,0xa3,0x38,0xdc,0x7a,0x35, -+0x35,0x7e,0xf, 0x39,0x88,0x7e,0x18,0x25,0xb6,0x2, 0xb0,0x29,0xca,0x3b,0x7e,0xb3, -+0x2b,0xf, 0x7a,0xb3,0x1f,0x33,0x7e,0xf3,0x2b,0x62,0x12,0xab,0xd7,0x7c,0xdb,0xbe, -+0xd0,0xff,0x68,0x6a,0x6c,0xcc,0x12,0xb1,0xb1,0xf5,0x2a,0x7e,0x73,0x2b,0xf, 0xbe, -+0x71,0x2a,0x68,0x3c,0x7e,0x70,0x4, 0xac,0x7d,0xa, 0x2c,0x2d,0x32,0x2e,0x34,0x21, -+0x38,0x12,0x97,0xb6,0x7c,0xeb,0xbe,0xe0,0x2, 0x38,0x43,0xa, 0xe, 0x7e,0x14,0x2, -+0xe0,0xad,0x10,0x2e,0x14,0x16,0x93,0x6d,0x0, 0x7a,0xd, 0x2b,0x7e,0x70,0x1d,0xac, -+0x7e,0x2e,0x34,0x39,0x8c,0x6d,0x22,0x7a,0x1f,0x39,0x88,0x7c,0xbc,0x12,0x6e,0x4e, -+0xb, 0xc0,0xbe,0xc0,0x4, 0x40,0xaf,0x7e,0x73,0x2b,0x62,0xbc,0x7f,0x68,0x6, 0x7a, -+0xf3,0x2b,0x62,0xd2,0x10,0xd2,0x0, 0x7e,0xb3,0x1f,0x33,0x12,0x6c,0x1f,0xda,0x3b, -+0x22,0x74,0x5, 0xac,0xbc,0x9, 0xb5,0x26,0x33,0x22,0x6d,0x33,0x7d,0x23,0x7d,0x3, -+0x6c,0x33,0x80,0x45,0x6c,0x22,0x80,0x37,0x7e,0xb3,0x2a,0x6e,0xac,0xb3,0xa, 0x42, -+0x2d,0x54,0x7d,0x45,0x3e,0x44,0x7e,0x7f,0x13,0x8a,0x2d,0xf4,0xb, 0x7a,0x40,0xbe, -+0x44,0x0, 0x32,0x8, 0x8, 0xbe,0x44,0x2, 0x58,0x58,0x2, 0xb, 0x24,0xbe,0x44,0xff, -+0xce,0x58,0x8, 0xbe,0x44,0xfd,0xa8,0x8, 0x2, 0xb, 0x4, 0xb, 0x34,0xb, 0x21,0x7e, -+0x93,0x2a,0x6e,0xbc,0x92,0x38,0xc1,0xb, 0x31,0x7e,0xb3,0x2a,0x6d,0xbc,0xb3,0x38, -+0xb3,0x7e,0x54,0x0, 0x6, 0xad,0x53,0x7d,0x15,0x1e,0x14,0x1e,0x14,0x1e,0x14,0x12, -+0x25,0x71,0xbd,0x12,0x50,0x22,0xbd,0x30,0x28,0x1e,0xe4,0x7a,0xb3,0x3b,0x58,0x7e, -+0xb3,0x3b,0x59,0xbe,0xb0,0x5, 0x50,0x7, 0x4, 0x7a,0xb3,0x3b,0x59,0x80,0x3c,0xe4, -+0x7a,0xb3,0x3b,0x59,0x74,0x1, 0x80,0x2f,0xbd,0x10,0x50,0x22,0xbd,0x32,0x28,0x1e, -+0xe4,0x7a,0xb3,0x3b,0x59,0x7e,0xb3,0x3b,0x58,0xbe,0xb0,0x5, 0x50,0x7, 0x4, 0x7a, -+0xb3,0x3b,0x58,0x80,0x16,0xe4,0x7a,0xb3,0x3b,0x58,0x74,0x2, 0x80,0x9, 0xe4,0x7a, -+0xb3,0x3b,0x58,0x7a,0xb3,0x3b,0x59,0x7a,0xb3,0x3b,0x5a,0x7e,0xb3,0x3b,0x5a,0x22, -+0xe4,0x7a,0xb3,0x28,0xa8,0x7a,0xb3,0x3b,0x5b,0x22,0x6c,0x66,0x90,0x60,0xa7,0xe4, -+0x93,0xbe,0xb0,0x0, 0x28,0x71,0x90,0x60,0xaa,0xe4,0x93,0x70,0x6a,0x7e,0xb3,0x28, -+0xa8,0xb4,0x1, 0x63,0x7e,0x73,0x26,0xf2,0xbe,0x70,0x0, 0x28,0x5a,0x6c,0x33,0x80, -+0x4e,0xa, 0x23,0x9, 0x72,0x26,0xe6,0x7e,0xb3,0x2a,0x6e,0x14,0xbc,0x7b,0x78,0x3d, -+0x6c,0x22,0x80,0x27,0x7c,0xb2,0x7c,0x73,0x12,0x3f,0x59,0x50,0x1c,0xa, 0x22,0x7e, -+0x73,0x2a,0x6e,0xa, 0x7, 0x2d,0x2, 0x3e,0x4, 0x49,0x20,0x4, 0xfc,0x6d,0x0, 0x9e, -+0x7, 0x2a,0x4f,0xbd,0x20,0x58,0x2, 0xb, 0x60,0xb, 0x20,0x7e,0x73,0x2a,0x6d,0xbc, -+0x72,0x38,0xd1,0xbe,0x60,0x0, 0x28,0x3, 0x74,0x1, 0x22,0xe4,0x22,0xb, 0x30,0x7e, -+0x73,0x26,0xf2,0xbc,0x73,0x38,0xaa,0x74,0x1, 0x22,0x7c,0xab,0xbe,0xa0,0x0, 0x40, -+0x11,0x7e,0xb3,0x2a,0x6e,0xbc,0xba,0x28,0x9, 0x74,0x2, 0xa4,0x49,0x25,0x34,0x0, -+0x80,0x51,0x7e,0x13,0x2a,0x6e,0xbc,0x1a,0x38,0x1c,0x7e,0x3, 0x2a,0x6d,0xa, 0x10, -+0xa, 0x21,0x2d,0x12,0xa, 0x3a,0xbd,0x31,0x58,0xc, 0x9d,0x32,0x3e,0x34,0x3e,0x34, -+0x49,0x23,0x3, 0x6f,0x80,0x2d,0x7e,0x3, 0x2a,0x6d,0xa, 0x20,0xa, 0x11,0x7d,0x41, -+0x2d,0x42,0xa, 0x3a,0xbd,0x34,0x48,0x19,0x7e,0x10,0x2, 0xac,0x1, 0x2d,0x1, 0xbd, -+0x30,0x58,0xe, 0x9d,0x31,0x9d,0x32,0x3e,0x34,0x3e,0x34,0x49,0x23,0x3, 0x71,0x80, -+0x2, 0xe4,0x22,0x7e,0x34,0x0, 0x64,0xad,0x23,0x74,0xc, 0x1e,0x34,0x1e,0x24,0x50, -+0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,0x7c,0xb7,0x22,0xca,0xf8,0x80,0x38,0x7c,0xbf, -+0x12,0xb3,0xa, 0xa, 0x1b,0x7e,0x63,0x2a,0x6e,0x7e,0x70,0x2, 0xac,0x67,0x7e,0x10, -+0x2, 0xac,0x1f,0x2d,0x3, 0x7e,0x1f,0x13,0x8a,0x2d,0x30,0x12,0xb3,0xc9,0x9d,0x35, -+0x1b,0x1a,0x10,0xb, 0xf0,0x12,0xb3,0xc9,0x7e,0x73,0x2a,0x6e,0xa, 0x27,0x2d,0x25, -+0xa, 0x3f,0xbd,0x32,0x48,0xc8,0xda,0xf8,0x22,0x7e,0xa3,0x2a,0x6d,0x74,0x2, 0xa4, -+0x22,0xca,0x3b,0x7c,0xfb,0x75,0x3d,0x0, 0x7e,0xb3,0x2a,0x6f,0xf5,0x42,0x7e,0xb3, -+0x2a,0x70,0xf5,0x43,0x75,0x44,0x28,0x7e,0xd3,0x28,0x84,0xe4,0x7a,0xb3,0x31,0xfb, -+0x7a,0xb3,0x31,0xf7,0x7a,0xb3,0x31,0xf8,0x7e,0x8, 0x31,0xfc,0x12,0xb7,0xaa,0xe4, -+0x12,0x21,0x16,0x12,0xb7,0xaa,0x3e,0x34,0x7e,0x8, 0x32,0x1c,0xe4,0x12,0x21,0x16, -+0xbe,0xd0,0x2, 0x50,0x2, 0xe1,0xa7,0x6c,0xcc,0xe1,0xa1,0x12,0x67,0xed,0xf5,0x24, -+0x9, 0xb3,0x26,0xfb,0xf5,0x25,0x4c,0xcc,0x68,0x8, 0xa, 0x3c,0x9, 0xb3,0x31,0xfc, -+0x70,0xa, 0xa, 0x3c,0xb, 0x34,0xa, 0x2c,0x19,0x72,0x31,0xfc,0x7c,0xbd,0x14,0xbc, -+0xbc,0x78,0x2, 0xe1,0xa7,0xa, 0x5c,0xb, 0x54,0xf5,0x2e,0xe1,0x98,0x7e,0x71,0x2e, -+0x12,0xb7,0xd0,0x7a,0xa1,0x26,0x9, 0xb3,0x26,0xfb,0xf5,0x27,0xa, 0x2a,0xe5,0x24, -+0x12,0x3c,0xf, 0x7c,0xb7,0xf5,0x28,0xe5,0x27,0xa, 0x2b,0x12,0x3c,0xd, 0x7c,0xb7, -+0xf5,0x29,0xe5,0x28,0xbe,0xb0,0x5, 0x40,0x2, 0xe1,0x96,0xe5,0x29,0xbe,0xb0,0x5, -+0x40,0x2, 0xe1,0x96,0x12,0xb7,0xb1,0x12,0x65,0x8f,0x7a,0xb3,0x31,0xfa,0x85,0x25, -+0x54,0x85,0x26,0x55,0x85,0x27,0x56,0x7e,0x8, 0x0, 0x31,0x7e,0x18,0x0, 0x33,0xe5, -+0x24,0x12,0xb8,0xd0,0x75,0x3d,0x0, 0x6c,0xee,0x75,0x30,0x0, 0xe5,0x24,0x7e,0x71, -+0x25,0x12,0x2c,0x63,0x7a,0x35,0x35,0xe5,0x26,0x7e,0x71,0x27,0x12,0x2c,0x63,0x7a, -+0x35,0x37,0x7e,0x35,0x35,0xbe,0x35,0x37,0x8, 0x5, 0x7e,0x35,0x37,0x80,0x3, 0x7e, -+0x35,0x35,0x7a,0x35,0x3b,0xe, 0x34,0x7a,0x35,0x39,0xe5,0x28,0xbe,0xb0,0x1, 0x38, -+0x2c,0xe5,0x29,0xbe,0xb0,0x1, 0x38,0x25,0x7c,0xbf,0x30,0xe1,0x20,0xe5,0x26,0x7e, -+0x71,0x25,0x12,0x2c,0x63,0x7d,0x43,0xe5,0x24,0x7e,0x71,0x27,0x12,0x2c,0x63,0x2d, -+0x34,0xbe,0x35,0x39,0x18,0x2, 0xe1,0x31,0x75,0x30,0x1, 0xe1,0x31,0xe5,0x28,0xbe, -+0xb0,0x1, 0x38,0x9, 0xe5,0x29,0xbe,0xb0,0x1, 0x38,0x2, 0xe1,0x31,0xe5,0x28,0xbe, -+0xb0,0x5, 0x40,0x2, 0xe1,0x31,0xe5,0x29,0xbe,0xb0,0x5, 0x40,0x2, 0xe1,0x31,0x7c, -+0xbf,0x20,0xe0,0x2, 0xe1,0x31,0x6d,0x33,0x7a,0x35,0x4d,0x75,0x4f,0x0, 0x7a,0x35, -+0x50,0x75,0x52,0x0, 0xc2,0x2, 0xc2,0x3, 0xe5,0x26,0xbe,0xb1,0x24,0x28,0x4, 0xe5, -+0x24,0x80,0x2, 0xe5,0x26,0xf5,0x2a,0xe5,0x26,0xbe,0xb1,0x24,0x50,0x4, 0xe5,0x24, -+0x80,0x2, 0xe5,0x26,0xf5,0x2c,0xe5,0x27,0xbe,0xb1,0x25,0x28,0x4, 0xe5,0x25,0x80, -+0x2, 0xe5,0x27,0xf5,0x2b,0xe5,0x27,0xbe,0xb1,0x25,0x50,0x4, 0xe5,0x25,0x80,0x2, -+0xe5,0x27,0xf5,0x2d,0xe5,0x2c,0xbe,0xb1,0x2a,0x78,0x29,0xd2,0x2, 0xe5,0x2a,0x60, -+0x8, 0xe5,0x42,0x14,0xbe,0xb1,0x2a,0x78,0x2, 0xd2,0x3, 0xe5,0x2a,0xbe,0xb0,0x0, -+0x28,0x2, 0x15,0x2a,0xe5,0x42,0xa, 0x2b,0x1b,0x24,0xe5,0x2c,0xa, 0x3b,0xbd,0x32, -+0x58,0x2, 0x5, 0x2c,0xe5,0x2d,0xbe,0xb1,0x2b,0x78,0x29,0xd2,0x2, 0xe5,0x2b,0x60, -+0x8, 0xe5,0x43,0x14,0xbe,0xb1,0x2b,0x78,0x2, 0xd2,0x3, 0xe5,0x2b,0xbe,0xb0,0x0, -+0x28,0x2, 0x15,0x2b,0xe5,0x43,0xa, 0x2b,0x1b,0x24,0xe5,0x2d,0xa, 0x3b,0xbd,0x32, -+0x58,0x2, 0x5, 0x2d,0x85,0x2a,0x3e,0x80,0x5b,0x85,0x2b,0x3f,0x80,0x4d,0xe5,0x3e, -+0x7e,0x71,0x3f,0x12,0x2c,0x63,0x7a,0x35,0x40,0xe5,0x2a,0xbe,0xb1,0x3e,0x68,0x15, -+0xe5,0x2c,0xbe,0xb1,0x3e,0x68,0xe, 0xe5,0x2b,0xbe,0xb1,0x3f,0x68,0x7, 0xe5,0x2d, -+0xbe,0xb1,0x3f,0x78,0xd, 0x7e,0x35,0x40,0x2e,0x35,0x4d,0x7a,0x35,0x4d,0x5, 0x4f, -+0x80,0x17,0x5, 0x52,0x7e,0x35,0x40,0x2e,0x35,0x50,0x7a,0x35,0x50,0x7e,0x35,0x33, -+0xbe,0x35,0x40,0x58,0x2, 0x5, 0x3d,0xb, 0xe0,0x5, 0x3f,0xe5,0x2d,0xbe,0xb1,0x3f, -+0x50,0xac,0x5, 0x3e,0xe5,0x2c,0xbe,0xb1,0x3e,0x50,0x9e,0xe5,0x2c,0x7e,0x71,0x2b, -+0x12,0x2c,0x63,0x7e,0x45,0x4d,0x9d,0x43,0xe5,0x2a,0x7e,0x71,0x2d,0x12,0x2c,0x63, -+0x9d,0x43,0xe5,0x2a,0x7e,0x71,0x2b,0x12,0x2c,0x63,0x9d,0x43,0xe5,0x2c,0x7e,0x71, -+0x2d,0x12,0x2c,0x63,0x7d,0x23,0x7d,0x34,0x9d,0x32,0x7a,0x35,0x4d,0x7e,0x35,0x37, -+0x2e,0x35,0x35,0x7a,0x35,0x39,0x30,0x2, 0x10,0x20,0x3, 0xd, 0x7e,0x35,0x4d,0x9e, -+0x35,0x39,0x7a,0x35,0x4d,0x15,0x4f,0x15,0x4f,0xe5,0x4f,0xbe,0xb0,0x4, 0x28,0x6, -+0xe5,0x4f,0x24,0xfc,0xf5,0x4f,0x7e,0x35,0x4d,0xbe,0x34,0x0, 0x0, 0x58,0x5, 0x6d, -+0x33,0x7a,0x35,0x4d,0x75,0x44,0x28,0xe5,0x42,0x14,0xbe,0xb1,0x24,0x68,0xd, 0xbe, -+0xb1,0x26,0x68,0x8, 0xe5,0x24,0x60,0x4, 0xe5,0x26,0x70,0x8, 0x12,0xb7,0xbd,0x28, -+0x3, 0x75,0x44,0x2c,0x7e,0x15,0x50,0x1a,0x2, 0x1a,0x0, 0x7e,0x35,0x4d,0x1a,0x26, -+0x1a,0x24,0x2f,0x10,0xe5,0x44,0xa, 0x1b,0x6d,0x0, 0x12,0x1f,0x20,0x7f,0x71,0x7a, -+0x7d,0x45,0x7e,0x15,0x39,0x1a,0x2, 0x1a,0x0, 0x7e,0x35,0x31,0x1a,0x26,0x1a,0x24, -+0x12,0x1f,0x20,0xe5,0x52,0xa, 0xdb,0x6d,0xcc,0xe5,0x4f,0xa, 0x1b,0x6d,0x0, 0x2f, -+0x6, 0x12,0x1f,0x20,0x7a,0x1d,0x49,0xbf,0x71,0x8, 0x3, 0x75,0x30,0x2, 0xc2,0x1, -+0x20,0xc, 0xe, 0x12,0xb7,0xb1,0x12,0xb9,0x5f,0x92,0x1, 0x20,0x1, 0x3, 0x75,0x30, -+0x0, 0xe5,0x30,0xbe,0xb0,0x0, 0x28,0x5e,0xe5,0x30,0xa, 0x3b,0x2e,0x34,0x31,0xf6, -+0x12,0xb7,0xc5,0xe5,0x2e,0xa, 0x3b,0x9, 0xa3,0x31,0xfc,0x4c,0xaa,0x78,0xc, 0xa, -+0x2c,0x9, 0xb2,0x31,0xfc,0x19,0xb3,0x31,0xfc,0x80,0x3b,0xa, 0x2c,0x9, 0xb2,0x31, -+0xfc,0xf5,0x53,0xbc,0xba,0x28,0x3, 0x7a,0xa1,0x53,0x75,0x2f,0x0, 0x80,0x22,0x9, -+0x33,0x31,0xfc,0xe5,0x2f,0xa, 0x2b,0x9, 0x22,0x31,0xfc,0xbc,0x23,0x68,0xa, 0xa, -+0xc, 0x9, 0x30,0x31,0xfc,0xbc,0x23,0x78,0x6, 0xe5,0x53,0x19,0xb2,0x31,0xfc,0x5, -+0x2f,0xbe,0xd1,0x2f,0x38,0xd9,0x5, 0x2e,0xbe,0xd1,0x2e,0x28,0x2, 0x81,0x4d,0xb, -+0xc0,0xbc,0xdc,0x28,0x2, 0x81,0x1b,0xda,0x3b,0x22,0x90,0x60,0x9a,0x93,0xa, 0x3b, -+0x22,0xe5,0x24,0x7e,0x71,0x25,0x7e,0x61,0x26,0x7e,0x51,0x27,0x22,0x7e,0x73,0x31, -+0xfa,0xbe,0x70,0x5, 0x22,0x7e,0x39,0xb0,0x4, 0x7a,0x39,0xb0,0x22,0x7e,0x71,0x24, -+0x74,0x2, 0xac,0x7b,0x9, 0xa3,0x26,0xfa,0x22,0x7e,0x37,0x28,0x8a,0xbe,0x34,0x3, -+0xe8,0x8, 0xa, 0x12,0x3f,0x8d,0xbe,0xb0,0x8, 0x48,0x2, 0xd3,0x22,0xc3,0x22,0xca, -+0x3b,0x7c,0x45,0x7c,0x6, 0x7c,0x57,0x7c,0x1b,0x7e,0x34,0x4, 0xfc,0x7e,0xb3,0x26, -+0x83,0x7e,0xf3,0x2a,0x6e,0x7c,0x31,0x7c,0xe0,0x7c,0x25,0x7c,0xa4,0xbc,0x1, 0x50, -+0x4, 0x7c,0x30,0x7c,0xe1,0xbc,0x45,0x50,0x4, 0x7c,0x24,0x7c,0xa5,0xbe,0xb0,0x1, -+0x50,0x2, 0x1, 0xb8,0x7e,0x90,0x2, 0xac,0x9f,0x7e,0x50,0x2, 0xac,0x53,0x2d,0x24, -+0x2d,0x23,0xb, 0x28,0x20,0x7e,0x10,0x2, 0xac,0x1e,0x2d,0x4, 0x2d,0x3, 0xb, 0x8, -+0x40,0xa, 0x3, 0xb, 0x4, 0x7c,0x31,0x80,0x2a,0x7e,0xd0,0x2, 0xac,0xdf,0x7e,0x10, -+0x2, 0xac,0x13,0x2d,0x6, 0x12,0xb8,0xbc,0xbd,0xdb,0x58,0x15,0xad,0xf4,0xbd,0xdf, -+0x58,0xf, 0xbe,0x24,0x0, 0x0, 0x8, 0x9, 0xbe,0x44,0x0, 0x0, 0x8, 0x3, 0xc3,0x80, -+0x48,0xb, 0x30,0xbc,0xe3,0x38,0xd2,0x7e,0x50,0x2, 0xac,0x52,0x2d,0x23,0xb, 0x28, -+0x20,0x7e,0x90,0x2, 0xac,0x9a,0x2d,0x43,0xb, 0x48,0x40,0xa, 0x12,0xb, 0x14,0x80, -+0x23,0x7e,0x10,0x2, 0xac,0x13,0x12,0xb8,0xbc,0xbd,0xdb,0x58,0x15,0xad,0xf4,0xbd, -+0xdf,0x58,0xf, 0xbe,0x24,0x0, 0x0, 0x8, 0x9, 0xbe,0x44,0x0, 0x0, 0x8, 0x3, 0xc3, -+0x80,0x7, 0xb, 0x30,0xbc,0xa3,0x38,0xd9,0xd3,0xda,0x3b,0x22,0x2d,0x3, 0xb, 0x8, -+0x0, 0x7e,0xf4,0x0, 0x9, 0x7d,0xb2,0xad,0xbf,0x7e,0xd4,0x0, 0xa, 0xad,0xd0,0x22, -+0xca,0xf8,0x7c,0xfb,0x7f,0x61,0x7f,0x50,0x7e,0x34,0x22,0xe3,0x7e,0x24,0x0, 0xff, -+0x7e,0x14,0x1f,0x70,0x74,0x2a,0x12,0x1f,0xe2,0x7e,0x48,0x1f,0x70,0x12,0xb7,0xd9, -+0x92,0xc, 0x7c,0xbf,0x7e,0x71,0x54,0x12,0x2c,0x63,0x7d,0x43,0xe5,0x55,0x7e,0x71, -+0x56,0x12,0x2c,0x63,0x2d,0x34,0xe, 0x34,0x7f,0x4, 0x7e,0x50,0x7, 0xb, 0xa, 0x50, -+0xbd,0x53,0x58,0x10,0x69,0x30,0x0, 0x2, 0x1b,0x5a,0x30,0x69,0x30,0x0, 0x4, 0x1b, -+0x6a,0x30,0x80,0x8, 0x2e,0x14,0x0, 0x6, 0x1b,0x50,0x78,0xe1,0x12,0xb7,0xbd,0x28, -+0x2b,0xb, 0x5a,0x20,0x7e,0x34,0x0, 0xd, 0xad,0x32,0x7e,0x24,0x0, 0x10,0x12,0x1e, -+0xee,0x1b,0x5a,0x30,0xb, 0x6a,0x30,0x1a,0x26,0x1a,0x24,0x7e,0x14,0x0, 0xd, 0x12, -+0x1f,0x31,0x7e,0x8, 0x0, 0x10,0x12,0x1f,0x8d,0x1b,0x6a,0x30,0xda,0xf8,0x22,0x12, -+0xb7,0xef,0x92,0x4, 0x30,0x4, 0xc, 0x7e,0xb3,0x32,0x58,0xbe,0xb0,0xfa,0x50,0x11, -+0x4, 0x80,0xa, 0x7e,0xb3,0x32,0x58,0xbe,0xb0,0x0, 0x28,0x5, 0x14,0x7a,0xb3,0x32, -+0x58,0x7e,0xb3,0x32,0x58,0x70,0x2, 0xc3,0x22,0xd3,0x22,0x7e,0x8, 0x32,0x59,0x7e, -+0x34,0x0, 0xb4,0xe4,0x2, 0x21,0x16,0x7c,0x4b,0x74,0x2, 0xac,0xb4,0x9, 0x55,0x26, -+0xfa,0x9, 0x65,0x26,0xfb,0x7e,0x73,0x28,0x8c,0xbc,0x75,0x78,0xa, 0x7e,0x73,0x28, -+0x8d,0xbc,0x76,0x78,0x2, 0xd3,0x22,0xc3,0x22,0x6c,0xaa,0x80,0x1c,0x7e,0x50,0x2, -+0xac,0x5a,0x49,0x12,0x13,0xc6,0x49,0x32,0x13,0x8e,0xbd,0x31,0x28,0x9, 0x2e,0x24, -+0x13,0x8e,0x9d,0x31,0x1b,0x28,0x30,0xb, 0xa0,0x7e,0xb3,0x2a,0x6e,0xbc,0xba,0x38, -+0xdc,0x22,0xca,0x78,0xa9,0x31,0xe5,0x6, 0xa9,0xd5,0xea,0xa9,0xc5,0xea,0xa9,0x30, -+0xe5,0x19,0xa9,0xd0,0x9e,0xa9,0xd4,0x9e,0x5, 0x5d,0x7e,0x73,0x3b,0x56,0xbe,0x71, -+0x5d,0x38,0x2, 0xd2,0x1a,0xa9,0xd0,0x9e,0xa9,0xd7,0x9e,0xa9,0x34,0xe5,0x5, 0xa9, -+0xc4,0xcd,0xc2,0x95,0xa9,0x32,0xe5,0x3, 0xa9,0xc2,0xcd,0xa9,0x33,0xe5,0x3, 0xa9, -+0xc3,0xcd,0xa9,0x37,0xe5,0x3, 0xa9,0xc7,0xcd,0xa9,0x36,0xe5,0x3, 0xa9,0xc6,0xcd, -+0xda,0x78,0x32,0xc2,0x9a,0xa9,0xd4,0xa6,0xc2,0x88,0xd2,0xa8,0x22,0x7e,0x14,0xd7, -+0xe8,0x7e,0x4, 0x0, 0xff,0x7e,0x34,0x47,0x52,0x7e,0x24,0x55,0x50,0x79,0x30,0x0, -+0x2, 0x1b,0xa, 0x20,0x7e,0x34,0x45,0x20,0x7e,0x24,0x41,0x44,0x79,0x30,0x0, 0x6, -+0x79,0x20,0x0, 0x4, 0x7e,0x34,0x99,0x33,0x7e,0x24,0x66,0xcc,0x79,0x30,0x0, 0xa, -+0x79,0x20,0x0, 0x8, 0x7e,0x34,0x41,0x47,0x7e,0x24,0x46,0x4c,0x79,0x30,0x0, 0xe, -+0x79,0x20,0x0, 0xc, 0x22,0xa9,0xd0,0xce,0xa2,0x0, 0xa9,0x95,0xc9,0x22,0xa9,0xd5, -+0xcb,0x74,0x10,0x12,0x49,0x2a,0x7c,0x7b,0x12,0x4b,0xb1,0x30,0xe7,0x3, 0x7e,0x70, -+0x2, 0xd2,0xcd,0x7e,0x24,0x0, 0xef,0x7e,0xf, 0x3b,0x8, 0x79,0x20,0x0, 0x84,0x7e, -+0x24,0x20,0x5f,0x7e,0xf, 0x3b,0x8, 0x79,0x20,0x0, 0x82,0x7e,0x24,0x41,0x0, 0x7e, -+0xf, 0x3b,0x8, 0x79,0x20,0x0, 0x90,0x7c,0x67,0x6c,0x77,0x2e,0x34,0x0, 0xc1,0x7e, -+0xf, 0x3b,0x8, 0x79,0x30,0x0, 0x86,0x7e,0x34,0x29,0x90,0x7e,0xf, 0x3b,0x8, 0x79, -+0x30,0x0, 0x8a,0x7e,0x34,0x6a,0xd1,0x7e,0xf, 0x3b,0x8, 0x79,0x30,0x0, 0x8c,0x7e, -+0x34,0x3, 0x61,0x7e,0xf, 0x3b,0x8, 0x79,0x30,0x0, 0x8e,0x22,0xa9,0xc6,0xeb,0xa9, -+0xd6,0xac,0xa9,0xd6,0xec,0xd2,0x86,0xa9,0xc2,0xeb,0xa9,0xd2,0xac,0xa9,0xd2,0xec, -+0xd2,0x82,0x22,0x75,0x9a,0x2f,0xa9,0xd1,0x99,0xd2,0x9c,0xa9,0xd6,0xdf,0x22,0xc2, -+0x8e,0x43,0x89,0x20,0x75,0x8d,0x1, 0x75,0x8b,0x0, 0xd2,0x8e,0xd2,0xab,0x22,0x75, -+0xb7,0x0, 0x75,0xb8,0x0, 0x75,0xf7,0x0, 0x75,0xf8,0x0, 0xa9,0xd0,0xb7,0xd2,0xb8, -+0xa9,0xd5,0xb7,0xd2,0xbd,0xa9,0xd0,0xf7,0xd2,0xf8,0xa9,0xc1,0xb7,0xc2,0xb9,0xa9, -+0xc3,0xb7,0xc2,0xbb,0xa9,0xc6,0xb7,0xc2,0xbe,0x22,0x7e,0x37,0x3b,0x54,0xb, 0x34, -+0x7a,0x37,0x3b,0x54,0xbe,0x34,0xff,0x0, 0x40,0x8, 0x7e,0x34,0xff,0x0, 0x7a,0x37, -+0x3b,0x54,0x22,0x6d,0x22,0x80,0x13,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6, -+0xb3,0xe5,0xb5,0x7a,0xb, 0xb0,0xb, 0x14,0xb, 0x24,0xbd,0x32,0x38,0xe9,0x22,0x7f, -+0x71,0x69,0x37,0x0, 0x2, 0x7d,0x53,0x12,0xbb,0xe9,0xb, 0x7a,0x20,0x2d,0x25,0x1b, -+0xa, 0x20,0x69,0x27,0x0, 0x4, 0x7d,0x52,0xc4,0x54,0xf0,0x7c,0xab,0xe4,0x1e,0x34, -+0x1e,0x34,0x2d,0x35,0x79,0x30,0x0, 0x2, 0x69,0x37,0x0, 0x6, 0x7d,0x53,0x7c,0xab, -+0xe4,0x3e,0x54,0x3e,0x54,0x1e,0x24,0x1e,0x24,0x1e,0x24,0x1e,0x24,0x2d,0x25,0x79, -+0x20,0x0, 0x4, 0x69,0x27,0x0, 0x8, 0x7c,0x45,0x6c,0x55,0x12,0x25,0x6f,0x1e,0x34, -+0x1e,0x34,0x2d,0x32,0x79,0x30,0x0, 0x6, 0x22,0x3, 0x3, 0x54,0xc0,0x7c,0xab,0xe4, -+0x22,0x6d,0x33,0x90,0x60,0x91,0xe4,0x93,0xbe,0xb0,0x0, 0x28,0x3, 0x2, 0xbc,0xee, -+0x90,0x60,0x92,0xe4,0x93,0xbe,0xb0,0x0, 0x28,0x3, 0x2, 0xbc,0x55,0x22,0x12,0xaf, -+0xf2,0x7e,0x34,0xd, 0xc8,0x7e,0xb3,0x2a,0x6d,0x12,0xbc,0x2a,0x12,0xbb,0xf1,0x7a, -+0x37,0x3b,0x1e,0x74,0x1, 0x7a,0xb3,0x16,0x91,0x22,0x7a,0xb3,0x24,0xf2,0x7e,0x53, -+0x2a,0x6e,0x7a,0x53,0x24,0xf3,0x7a,0x37,0x24,0xfa,0xe4,0x7a,0xb3,0x24,0xf4,0x7a, -+0xb3,0x24,0xf5,0x7e,0x34,0x40,0x0, 0x7a,0x37,0x24,0xf6,0x7e,0x34,0x0, 0x20,0x12, -+0x7f,0xcd,0x2, 0xd, 0x7, 0xca,0xf8,0x6d,0xee,0x7d,0xfe,0x7e,0x83,0x2a,0x6e,0xa, -+0xd8,0x90,0x60,0x94,0xe4,0x93,0xb4,0xff,0x2f,0x7e,0x8, 0x13,0x8e,0x6c,0xaa,0x80, -+0x18,0x7e,0x70,0x2, 0xac,0x7a,0x49,0x23,0x13,0xfe,0x7f,0x50,0x2d,0xb3,0xb, 0x5a, -+0xc0,0x9d,0xc2,0x59,0xc3,0x13,0xc6,0xb, 0xa0,0xbc,0x8a,0x38,0xe4,0x90,0x60,0x92, -+0xe4,0x93,0x7c,0x9b,0x6d,0xdd,0x80,0x11,0x7e,0x8, 0x13,0xfe,0x90,0x60,0x92,0xe4, -+0x93,0xa, 0xcb,0x1b,0xc4,0x7d,0x3c,0x7c,0x97,0x6c,0xff,0x80,0x38,0x6c,0xaa,0x80, -+0x28,0xa, 0x3a,0x7d,0x23,0x2d,0x2e,0x3e,0x24,0x49,0xc2,0x13,0xfe,0x2d,0x3d,0x3e, -+0x34,0x2d,0x31,0x7d,0x20,0xb, 0x1a,0xb0,0x7d,0x3c,0x9d,0x3b,0x12,0x21,0x48,0x7d, -+0xa3,0xbd,0xfa,0x58,0x2, 0x7d,0xfa,0xb, 0xa0,0xbc,0x8a,0x38,0xd4,0xa, 0xc8,0x2d, -+0xec,0x2d,0xdc,0xb, 0xf0,0xbc,0x9f,0x38,0xc4,0x7d,0x3f,0xda,0xf8,0x22,0xca,0xf8, -+0x6d,0x44,0x7e,0xf3,0x2a,0x6e,0x90,0x60,0x93,0xe4,0x93,0xa, 0xfb,0x7e,0xb3,0x2a, -+0x6d,0xa, 0xeb,0x2d,0xef,0xa, 0xff,0xad,0xfe,0xa, 0xef,0x2d,0xef,0x90,0x60,0x94, -+0xe4,0x93,0xb4,0xff,0x31,0x7e,0x8, 0x13,0x8e,0x6c,0xaa,0x80,0x23,0xa, 0xda,0x2d, -+0xdf,0x3e,0xd4,0x7e,0x1f,0x3b,0x21,0x2d,0x3d,0xb, 0x1a,0xd0,0x7e,0x50,0x2, 0xac, -+0x5a,0x7f,0x50,0x2d,0xb2,0xb, 0x5a,0x30,0x9d,0x3d,0x59,0x32,0x13,0xc6,0xb, 0xa0, -+0xbc,0xfa,0x38,0xd9,0x80,0xa, 0x7d,0x5e,0x3e,0x54,0x7e,0xf, 0x3b,0x21,0x2d,0x15, -+0x6c,0xaa,0x80,0x2c,0xa, 0xea,0x2d,0xef,0x3e,0xe4,0x7e,0x1f,0x3b,0x21,0x2d,0x3e, -+0xb, 0x1a,0xe0,0x7e,0x70,0x2, 0xac,0x7a,0x2d,0x31,0x7d,0x20,0xb, 0x1a,0xd0,0x7d, -+0x3e,0x9d,0x3d,0x12,0x21,0x48,0x7d,0xc3,0xbd,0x4c,0x58,0x2, 0x7d,0x4c,0xb, 0xa0, -+0xbc,0xfa,0x38,0xd0,0x7d,0x34,0xda,0xf8,0x22,0x7e,0xb3,0x39,0x49,0x22,0x7c,0xab, -+0x9f,0x11,0x30,0x0, 0x22,0x6c,0x99,0x80,0x1a,0xa, 0xf9,0x2d,0xf1,0x7d,0xe0,0x7e, -+0x7b,0xb0,0x7e,0x78,0x0, 0x1, 0x60,0x5, 0x2f,0x77,0x14,0x78,0xfb,0x4d,0x3f,0x4d, -+0x2e,0xb, 0x90,0xbc,0xa9,0x38,0xe2,0x22,0xca,0xf8,0x90,0x60,0x51,0xe4,0x93,0x7c, -+0xfb,0x7e,0x8, 0x1f,0x34,0x12,0xbe,0x44,0x7e,0x8, 0x1f,0x3c,0x12,0xbe,0x4c,0xd2, -+0x0, 0x7e,0x8, 0x2a,0xdc,0x7c,0xbf,0x12,0xbd,0x8e,0x7e,0x8, 0x1f,0x34,0x7a,0xf, -+0x1f,0x58,0x7f,0x1, 0x7a,0x17,0x1f,0x5c,0x7d,0x32,0x7a,0x37,0x1f,0x5e,0x7e,0x18, -+0x1f,0x3c,0x7a,0x1f,0x1f,0x64,0x6c,0x77,0x80,0xe, 0x12,0xbe,0x94,0x50,0x7, 0x12, -+0xbe,0x8b,0x19,0x51,0x1f,0x3c,0xb, 0x70,0xbc,0xf7,0x38,0xee,0x12,0xbe,0x31,0xe4, -+0x12,0xbe,0x39,0xe4,0x12,0xc, 0x9b,0x6d,0x33,0x7a,0x37,0x1f,0x5c,0x7a,0x37,0x1f, -+0x5e,0x12,0xbe,0x31,0x74,0x1, 0x12,0xbe,0x39,0x74,0x1, 0x12,0xc, 0x9b,0xda,0xf8, -+0x22,0xa9,0xc6,0xea,0x7e,0x8, 0x1f,0x58,0x22,0x12,0xc, 0x9b,0xa9,0xd6,0xea,0x7e, -+0x8, 0x1f,0x58,0x22,0x7e,0x34,0x0, 0x8, 0xe4,0x2, 0x21,0x16,0x7e,0x34,0x0, 0x1c, -+0x74,0x3f,0x2, 0x21,0x16,0x7e,0x8, 0x1f,0x34,0x12,0xbe,0x4c,0x6c,0x77,0x80,0xe, -+0x12,0xbe,0x94,0x50,0x7, 0x12,0xbe,0x8b,0x19,0x51,0x1f,0x34,0xb, 0x70,0x7e,0x53, -+0x2a,0x6e,0xbc,0x57,0x38,0xea,0xa9,0xc6,0xea,0x7e,0x8, 0x1f,0x34,0xe4,0x12,0x11, -+0x38,0xa9,0xd6,0xea,0x7e,0x8, 0x1f,0x34,0x2, 0x11,0x38,0xa, 0x27,0x9, 0x52,0x2b, -+0x44,0xa, 0x16,0x22,0xa, 0x27,0x9, 0x62,0x2a,0xdc,0xbe,0x60,0x1c,0x22,0x7c,0x57, -+0x7c,0xab,0x6c,0x77,0x80,0x50,0xa, 0x47,0x7e,0x7d,0x24,0x2d,0xf4,0x7e,0x7b,0x60, -+0xa, 0x46,0x2e,0x44,0x20,0xab,0x7a,0x91,0x82,0x7a,0x81,0x83,0xe4,0x93,0x7c,0x6b, -+0xbe,0x60,0xd, 0x38,0x12,0x7e,0xd4,0x0, 0x1, 0x7c,0xb6,0x60,0x5, 0x3e,0xd4,0x14, -+0x78,0xfb,0x7e,0x7d,0x28,0x80,0x15,0x9e,0x60,0xe, 0x7e,0xd4,0x0, 0x1, 0x7c,0xb6, -+0x60,0x5, 0x3e,0xd4,0x14,0x78,0xfb,0x7e,0x7d,0x28,0xb, 0xf5,0xb, 0x7a,0x40,0x4d, -+0x4d,0x1b,0x7a,0x40,0xb, 0x70,0xbc,0x57,0x38,0xac,0x6c,0x77,0x80,0x58,0xa, 0x27, -+0x7f,0x70,0x2d,0xf2,0x7e,0x7b,0x60,0xbe,0x60,0xd, 0x38,0x11,0x12,0xbf,0x5b,0x60, -+0x5, 0x3e,0x44,0x14,0x78,0xfb,0x7e,0x7d,0x28,0xb, 0xf6,0x80,0x2f,0xbe,0x60,0x1b, -+0x38,0x16,0x9e,0x60,0xe, 0x12,0xbf,0x5b,0x60,0x5, 0x3e,0x44,0x14,0x78,0xfb,0x7e, -+0x7d,0x28,0x2e,0xf4,0x0, 0x6, 0x80,0x14,0x9e,0x60,0x1c,0x12,0xbf,0x5b,0x60,0x5, -+0x3e,0x44,0x14,0x78,0xfb,0x7e,0x7d,0x28,0x2e,0xf4,0x0, 0x8, 0xb, 0x7a,0x20,0x4d, -+0x24,0x1b,0x7a,0x20,0xb, 0x70,0xbc,0xa7,0x38,0xa4,0x22,0x7e,0x44,0x0, 0x1, 0x7c, -+0xb6,0x22,0x7c,0x7b,0xa5,0xbf,0x0, 0x3, 0x74,0x10,0x22,0xbe,0x70,0x4, 0x38,0x4, -+0x6c,0xaa,0x80,0x21,0xbe,0x70,0x8, 0x38,0x5, 0x7e,0xa0,0x1, 0x80,0x17,0xbe,0x70, -+0x10,0x38,0x5, 0x7e,0xa0,0x2, 0x80,0xd, 0xbe,0x70,0x20,0x38,0x5, 0x7e,0xa0,0x3, -+0x80,0x3, 0x7e,0xa0,0x4, 0xa, 0x47,0x3e,0x44,0x3e,0x44,0x3e,0x44,0x7c,0xba,0x60, -+0x5, 0x1e,0x44,0x14,0x78,0xfb,0x7c,0xb9,0x22,0x7a,0xb3,0x39,0x54,0x22,0x90,0x61, -+0x81,0xe4,0x93,0x22,0x7e,0x43,0x2a,0x6e,0x7e,0x53,0x2a,0x6d,0xac,0x54,0x7e,0x17, -+0x28,0xa1,0x12,0xc9,0x26,0x6d,0x0, 0x80,0x37,0x7d,0x40,0x3e,0x44,0x7e,0x7f,0x3b, -+0x21,0x2d,0xf4,0xb, 0x7a,0x30,0xbd,0x13,0x58,0x10,0x7d,0xf4,0x2e,0xf4,0x8, 0xa, -+0xb, 0xf8,0x50,0x9d,0x51,0x1b,0xf8,0x50,0x80,0x14,0x6d,0x55,0x9d,0x51,0xbd,0x53, -+0x8, 0xc, 0x2e,0x44,0x8, 0xa, 0xb, 0x48,0x50,0x2d,0x51,0x1b,0x48,0x50,0xb, 0x4, -+0xbd,0x20,0x38,0xc5,0x22,0x7e,0x27,0x28,0xa3,0x6d,0x11,0x9d,0x12,0x6c,0xaa,0x80, -+0x64,0x30,0x5, 0x2e,0x7e,0x90,0x2, 0xac,0x9a,0x49,0x34,0x5, 0xf8,0x49,0x4, 0x4, -+0x0, 0xbd,0x2, 0x8, 0x11,0x7e,0xb3,0x25,0xf6,0xb4,0x1, 0x16,0x7d,0xf2,0x2d,0xf3, -+0x59,0xf4,0x5, 0xf8,0x80,0xc, 0xbd,0x1, 0x58,0x8, 0x7d,0x3, 0x9d,0x2, 0x59,0x4, -+0x5, 0xf8,0x30,0x7, 0x2e,0x7e,0x90,0x2, 0xac,0x9a,0x49,0x34,0x6, 0x76,0x49,0x4, -+0x4, 0x7e,0xbd,0x2, 0x8, 0x11,0x7e,0xb3,0x25,0xf6,0xb4,0x1, 0x16,0x7d,0xf2,0x2d, -+0xf3,0x59,0xf4,0x6, 0x76,0x80,0xc, 0xbd,0x1, 0x58,0x8, 0x7d,0x3, 0x9d,0x2, 0x59, -+0x4, 0x6, 0x76,0xb, 0xa0,0x7e,0xb3,0x2a,0x74,0xa, 0xb, 0x7e,0xb3,0x2a,0x73,0xa, -+0x4b,0x2d,0x40,0xa, 0xa, 0xbd,0x4, 0x48,0x88,0x22,0x7c,0x7b,0xa, 0x57,0x9e,0x54, -+0x0, 0x20,0xe, 0x54,0xe, 0x54,0xe, 0x54,0xe, 0x54,0x7c,0xab,0x7c,0x67,0x5e,0x60, -+0xf0,0xa5,0xbe,0x20,0x1d,0x7c,0xb7,0x54,0xf, 0x7e,0x24,0x0, 0x1, 0x60,0x5, 0x3e, -+0x24,0x14,0x78,0xfb,0x7e,0x73,0x3b,0x4b,0xa, 0x47,0x5d,0x42,0x7e,0x73,0x39,0x7a, -+0x80,0x36,0xa5,0xbe,0x30,0x18,0x12,0xc0,0xfd,0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb, -+0x7e,0x53,0x3b,0x4c,0xa, 0x45,0x5d,0x43,0x7e,0x73,0x39,0x7b,0x80,0x1a,0x12,0xc0, -+0xfd,0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb,0xa, 0x2a,0x9, 0xb2,0x3b,0x4b,0xa, 0x4b, -+0x5d,0x43,0xa, 0x5a,0x9, 0x75,0x39,0x7c,0xa, 0x57,0x5d,0x54,0x22,0x7c,0xb7,0x54, -+0xf, 0x7e,0x34,0x0, 0x1, 0x22,0x7e,0xb3,0x39,0x79,0x70,0x6, 0x12,0xc1,0x3f,0x2, -+0xc2,0x98,0x12,0x58,0xe3,0x12,0xc2,0x9e,0x50,0xa, 0x12,0xaf,0x4c,0x7c,0x3b,0x12, -+0xc1,0x3f,0x80,0x5, 0x12,0xc1,0x45,0x7c,0x3b,0x4c,0x33,0x68,0x11,0x7c,0xb3,0x12, -+0xc0,0x8a,0x60,0xa, 0x7a,0x33,0x39,0x7c,0x74,0x1, 0x7a,0xb3,0x2a,0x8, 0x22,0xe4, -+0x7a,0xb3,0x2f,0x80,0x22,0xca,0xd8,0xca,0x79,0x6c,0xff,0x6d,0xdd,0x7d,0xed,0x7d, -+0xfd,0x7e,0xd3,0x2a,0x2, 0x7e,0xe3,0x2a,0x3, 0x7e,0xb3,0x3b,0x36,0x60,0x11,0x7e, -+0xc7,0x3b,0x3f,0x4d,0xcc,0x78,0x2, 0x41,0x39,0xbe,0xd0,0x1, 0x28,0x2, 0x41,0x39, -+0xbe,0xd0,0x1, 0x78,0x1d,0xbe,0xb0,0x4, 0x78,0x2, 0x41,0x39,0x7e,0xe7,0x29,0x8, -+0x7e,0xf7,0x29,0xa, 0x7d,0x3e,0x7d,0x2f,0x12,0x5c,0xc2,0xbe,0xb0,0x1, 0x78,0x2, -+0x41,0x39,0x7e,0xa3,0x3b,0x36,0x7c,0xba,0x14,0x68,0x29,0x14,0x68,0x54,0x14,0x68, -+0x23,0x14,0x78,0x2, 0x41,0x36,0xb, 0xb2,0x68,0x2, 0x41,0x39,0xbe,0xd0,0x1, 0x68, -+0x2, 0x41,0x48,0x4c,0xee,0x68,0x2, 0x41,0x48,0x74,0x1, 0x7a,0xb3,0x3b,0x36,0x12, -+0xc2,0x4f,0x80,0x65,0x4c,0xdd,0x78,0x1d,0xbe,0xa0,0x1, 0x78,0xc, 0x74,0x2, 0x7a, -+0xb3,0x3b,0x36,0x7e,0x34,0x62,0x64,0x80,0x54,0x74,0x4, 0x7a,0xb3,0x3b,0x36,0x7e, -+0x34,0x62,0x68,0x80,0x48,0x12,0xc2,0x58,0x90,0x62,0x57,0x12,0xc2,0x61,0x68,0x49, -+0x80,0x56,0xbe,0xd0,0x1, 0x78,0x51,0x4c,0xee,0x78,0x4d,0x12,0xc2,0x58,0x7e,0x34, -+0x62,0x60,0x12,0x23,0xc9,0x7e,0x14,0x62,0x64,0x7e,0x4, 0x0, 0xff,0xb, 0xa, 0xc0, -+0x9d,0xc3,0xbe,0xc7,0x3b,0x3f,0x40,0x21,0x90,0x62,0x56,0x12,0xc2,0x61,0x68,0x19, -+0x12,0xc2,0x4f,0x74,0x3, 0x7a,0xb3,0x3b,0x36,0x7e,0x34,0x62,0x64,0x12,0x23,0xc9, -+0x7a,0x37,0x3b,0x3f,0x80,0x12,0x7e,0xf0,0x24,0xe4,0x7a,0xb3,0x3b,0x36,0x6d,0x33, -+0x7a,0x37,0x3b,0x3f,0x7c,0xbf,0x80,0x2, 0x7c,0xbf,0xda,0x79,0xda,0xd8,0x22,0x7a, -+0xe7,0x3b,0x37,0x7a,0xf7,0x3b,0x39,0x22,0x7a,0xe7,0x3b,0x3b,0x7a,0xf7,0x3b,0x3d, -+0x22,0xe4,0x93,0xa, 0x3b,0x12,0xc2,0x6d,0xa, 0xdb,0x4d,0xdd,0x22,0x7d,0x13,0x3e, -+0x14,0x3e,0x14,0x3e,0x14,0x7e,0x37,0x3b,0x3b,0x9e,0x37,0x3b,0x37,0x12,0x21,0x48, -+0xbd,0x31,0x38,0x12,0x7e,0x37,0x3b,0x3d,0x9e,0x37,0x3b,0x39,0x12,0x21,0x48,0xbd, -+0x31,0x38,0x3, 0x74,0x1, 0x22,0xe4,0x22,0xe4,0x7a,0xb3,0x3b,0x36,0x22,0x7e,0xb3, -+0x2f,0x80,0xb4,0x4, 0x2, 0xd3,0x22,0xc3,0x22,0x7d,0xf2,0x7d,0xe3,0x7e,0x8, 0x2f, -+0x80,0x7e,0x34,0x0, 0x28,0xe4,0x12,0x21,0x16,0x7e,0x8, 0x2b,0xbf,0x7e,0x34,0x3, -+0xc0,0x12,0x21,0x16,0x7a,0xb3,0x39,0x7c,0x7e,0x34,0x62,0x8e,0x12,0x23,0xc9,0x7a, -+0x37,0x2b,0xb7,0x7a,0xe7,0x2f,0x84,0x7a,0xf7,0x2f,0x86,0x7a,0xe7,0x2f,0x88,0x7a, -+0xe7,0x2f,0x8c,0x7a,0xe7,0x2f,0x90,0x7a,0xe7,0x2f,0x94,0x7a,0xf7,0x2f,0x8a,0x7a, -+0xf7,0x2f,0x8e,0x7a,0xf7,0x2f,0x92,0x7a,0xf7,0x2f,0x96,0x7a,0xe7,0x2b,0xbb,0x7a, -+0xf7,0x2b,0xbd,0x7a,0xb3,0x2f,0xa8,0x74,0x2, 0x7a,0xb3,0x2f,0x7f,0x22,0x74,0xfe, -+0x7a,0xb3,0x39,0x7c,0xe4,0x7a,0xb3,0x2f,0x80,0x22,0xca,0x3b,0xf5,0x2a,0x7f,0x31, -+0x7a,0xd, 0x26,0xe4,0x7a,0xb3,0x22,0xf6,0x7a,0xb3,0x22,0xf7,0x7a,0xb3,0x22,0xf8, -+0x7e,0x34,0x3, 0xe8,0x7a,0x37,0x22,0xfd,0x74,0x3c,0x7a,0xb3,0x22,0xf5,0x75,0x2f, -+0x46,0x75,0x2b,0x0, 0xa1,0xb, 0x12,0xc6,0xa6,0x28,0x1e,0x7e,0x34,0x0, 0x44,0xca, -+0x39,0x7e,0x71,0x2b,0x74,0x44,0xac,0x7b,0x2e,0x34,0x14,0x3b,0x7e,0x24,0x0, 0xff, -+0x7e,0x8, 0x22,0xff,0x12,0x20,0xf1,0x1b,0xfd,0x6d,0x33,0x7a,0x37,0x22,0xf9,0x7a, -+0x35,0x30,0x7a,0x37,0x22,0xfb,0x7a,0x35,0x32,0x7a,0x35,0x34,0x7e,0x34,0x22,0xff, -+0x7a,0x35,0x36,0x7e,0x34,0x23,0x1f,0x7a,0x35,0x38,0x75,0x2c,0x0, 0x80,0x59,0xe5, -+0x2c,0xa, 0x3b,0x7e,0xd, 0x26,0x12,0xc6,0xae,0x2e,0x35,0x36,0x12,0x67,0xae,0x7d, -+0xd3,0x7e,0xc7,0x22,0xfb,0xbd,0xcd,0x58,0x4, 0x7a,0xd7,0x22,0xfb,0xe5,0x2c,0xa, -+0x3b,0x7f,0x3, 0x12,0xc6,0xae,0x2e,0x35,0x38,0x12,0x67,0xae,0x7d,0xc3,0x7e,0x35, -+0x32,0xbd,0x3c,0x58,0x3, 0x7a,0xc5,0x32,0x7e,0x37,0x22,0xf9,0x2d,0x3d,0x7a,0x37, -+0x22,0xf9,0x7d,0x3c,0x2e,0x35,0x30,0x7a,0x35,0x30,0x2d,0xcd,0x7e,0x35,0x34,0xbd, -+0x3c,0x58,0x3, 0x7a,0xc5,0x34,0x5, 0x2c,0xe5,0x2a,0xbe,0xb1,0x2c,0x38,0xa0,0xe5, -+0x2a,0xb4,0xa, 0x2a,0x7e,0x37,0x22,0xfb,0xbe,0x34,0x0, 0x40,0x48,0xb, 0x7e,0x25, -+0x32,0xbe,0x24,0x0, 0x40,0x48,0x2, 0xa1,0x9, 0xbe,0x34,0x0, 0x60,0x8, 0x2, 0xa1, -+0x9, 0x7e,0x35,0x32,0xbe,0x34,0x0, 0x60,0x8, 0x2, 0xa1,0x9, 0x80,0x28,0x7e,0x37, -+0x22,0xfb,0xbe,0x34,0x0, 0x20,0x8, 0xb, 0x7e,0x25,0x32,0xbe,0x24,0x0, 0x20,0x8, -+0x2, 0xa1,0x9, 0xbe,0x34,0x0, 0x30,0x8, 0x2, 0xa1,0x9, 0x7e,0x35,0x32,0xbe,0x34, -+0x0, 0x30,0x8, 0x2, 0xa1,0x9, 0x7e,0xa3,0x3a,0x89,0x74,0xc, 0xa4,0xbe,0x57,0x22, -+0xf9,0x58,0x2, 0xa1,0x9, 0x7e,0xa3,0x3a,0x8a,0x74,0xc, 0xa4,0xbe,0x55,0x30,0x58, -+0x2, 0xa1,0x9, 0x7e,0x15,0x36,0x6d,0x0, 0x7e,0x1d,0x26,0xe5,0x2a,0x12,0xc5,0x46, -+0x7a,0xb3,0x22,0xf4,0x7e,0x15,0x38,0x6d,0x0, 0x7f,0x13,0xe5,0x2a,0x12,0xc5,0x46, -+0xf5,0x2d,0x7e,0x73,0x22,0xf5,0xbe,0x73,0x22,0xf4,0x38,0x7d,0xbe,0x71,0x2d,0x38, -+0x78,0xe5,0x2d,0x7e,0x31,0x2d,0xac,0x3b,0x1a,0x2, 0x1a,0x0, 0x7e,0x73,0x22,0xf4, -+0xac,0x77,0x1a,0x26,0x1a,0x24,0x2f,0x10,0xe5,0x2d,0xa, 0x5b,0x6d,0x44,0x7e,0x33, -+0x22,0xf4,0xa, 0x13,0x6d,0x0, 0x2f,0x2, 0x12,0x1f,0x3c,0x7c,0xb7,0xf5,0x2e,0xe5, -+0x2f,0xbe,0xb1,0x2e,0x38,0x43,0x7e,0x37,0x22,0xfb,0x2e,0x35,0x32,0x2e,0x35,0x34, -+0x7a,0x35,0x3a,0xe5,0x2e,0xa, 0x2b,0x7e,0x34,0x0, 0x64,0x9d,0x32,0x3e,0x34,0x2e, -+0x35,0x3a,0x7a,0x35,0x3a,0x7e,0x37,0x22,0xfd,0xbe,0x35,0x3a,0x8, 0x1b,0x7e,0x35, -+0x3a,0x7a,0x37,0x22,0xfd,0xe5,0x2e,0x7a,0xb3,0x22,0xf7,0x7e,0x73,0x23,0x41,0x7a, -+0x73,0x22,0xf8,0xe5,0x2b,0x7a,0xb3,0x22,0xf6,0x5, 0x2b,0x12,0xc6,0xa6,0x28,0x2, -+0x61,0x46,0x7e,0xa3,0x22,0xf7,0xbe,0xa1,0x2f,0x40,0x20,0x7e,0xb3,0x22,0xf8,0xbe, -+0xb0,0x0, 0x28,0x17,0xbe,0xb0,0xff,0x50,0x12,0x7e,0x73,0x22,0xf6,0xa, 0x37,0xb, -+0x34,0x7a,0x73,0x3a,0x86,0x7a,0xb3,0x3a,0x88,0x80,0x6, 0x74,0x7c,0x7a,0xb3,0x3a, -+0x86,0x7c,0xba,0xda,0x3b,0x22,0xca,0x3b,0x7c,0xfb,0x7f,0x61,0x7f,0x40,0x9f,0x11, -+0x7f,0x51,0x7f,0x71,0x7a,0x1d,0x3c,0x7a,0x1d,0x40,0x7a,0x1d,0x44,0xbe,0xf0,0xa, -+0x78,0x6, 0x7e,0x54,0x1, 0x3c,0x80,0x4, 0x7e,0x54,0x2, 0x35,0x7a,0x57,0x23,0x43, -+0x6c,0xee,0x80,0x60,0xa, 0x5e,0x7f,0x14,0x12,0xc6,0x9e,0x7a,0x55,0x4a,0xa, 0x5e, -+0x7f,0x16,0x12,0xc6,0x9e,0x7a,0x55,0x48,0x7e,0x35,0x48,0x12,0xc6,0x97,0x2f,0x50, -+0x7e,0x65,0x4a,0x7d,0x16,0x1a,0x2, 0x1a,0x0, 0x2f,0x70,0x12,0xc6,0x97,0x12,0xc6, -+0x8d,0x7e,0x1d,0x3c,0x2f,0x10,0x7a,0x1d,0x3c,0x7d,0x16,0x1a,0x2, 0x1a,0x0, 0x7e, -+0x35,0x4a,0x12,0xc6,0x8d,0x7e,0x1d,0x40,0x2f,0x10,0x7a,0x1d,0x40,0x7e,0x15,0x4a, -+0x1a,0x2, 0x1a,0x0, 0x7e,0x35,0x48,0x12,0xc6,0x8d,0x7e,0x1d,0x44,0x2f,0x10,0x7a, -+0x1d,0x44,0xb, 0xe0,0xbc,0xfe,0x38,0x9c,0xa, 0xdf,0x6d,0xcc,0x7f,0x15,0x7f,0x6, -+0x12,0x1f,0x8d,0x7f,0x51,0x7f,0x17,0x7f,0x6, 0x12,0x1f,0x8d,0x7f,0x71,0x7e,0x94, -+0x0, 0x64,0x7e,0x1d,0x3c,0x7d,0x19,0x12,0x1f,0x31,0x7e,0x87,0x23,0x43,0x7d,0x18, -+0x7d,0xd8,0x1a,0x12,0x1a,0xc2,0x7f,0x6, 0x12,0x1f,0x8d,0x7a,0x1d,0x3c,0x7e,0x1d, -+0x40,0x7d,0x19,0x12,0x1f,0x31,0x7f,0x6, 0x12,0x1f,0x8d,0x7a,0x1d,0x40,0x7e,0x1d, -+0x44,0x7d,0x19,0x12,0x1f,0x31,0x7d,0x18,0x1a,0x2, 0x1a,0x0, 0x12,0x1f,0x8d,0x7a, -+0x1d,0x44,0x7f,0x15,0x7f,0x7, 0x12,0x1f,0x20,0x7e,0x6d,0x44,0x9f,0x61,0x7f,0x15, -+0x7f,0x5, 0x12,0x1f,0x20,0x7e,0x5d,0x3c,0x9f,0x51,0x7f,0x17,0x7f,0x7, 0x12,0x1f, -+0x20,0x7e,0x7d,0x40,0x9f,0x71,0xbe,0x58,0x0, 0x0, 0x68,0x6, 0xbe,0x78,0x0, 0x0, -+0x78,0x6, 0x7e,0x44,0x0, 0x64,0x80,0x18,0x7f,0x16,0x7d,0x19,0x12,0x1f,0x31,0x7f, -+0x5, 0x12,0x1f,0x8d,0x7f,0x6, 0x12,0x1f,0x20,0x7f,0x7, 0x12,0x1f,0x8d,0x7d,0x43, -+0xbe,0x44,0x0, 0x0, 0x18,0x2, 0x6d,0x44,0x7c,0xb9,0xda,0x3b,0x22,0x1a,0x26,0x1a, -+0x24,0x12,0x1f,0x20,0x7f,0x1, 0x22,0x7d,0x13,0x1a,0x2, 0x1a,0x0, 0x22,0x2d,0x35, -+0x7e,0x1b,0x70,0xa, 0x57,0x22,0x7e,0x73,0x3b,0x51,0xbe,0x71,0x2b,0x22,0x2d,0x13, -+0x7e,0xb, 0x50,0xa, 0x25,0x22,0xca,0x79,0x6c,0xaa,0x12,0xc7,0xac,0xb, 0x7a,0xf0, -+0x7d,0x7f,0x7c,0xbf,0xa, 0xfa,0x19,0xbf,0x3a,0x8b,0x7f,0x71,0x2d,0xf4,0xb, 0x7a, -+0x40,0x7c,0xb9,0xa, 0x4a,0x19,0xb4,0x3a,0xab,0xb, 0xa0,0xbe,0xa0,0x20,0x40,0xda, -+0x7e,0x8, 0x3a,0x8b,0x7e,0x18,0x3a,0xab,0x74,0x20,0x12,0xc3,0x1a,0xda,0x79,0x22, -+0xca,0x3b,0x7f,0x61,0x7f,0x50,0x7e,0x73,0x3a,0x87,0xbe,0x70,0x20,0x40,0x52,0x7e, -+0xf0,0x2, 0x80,0x3c,0xa, 0x3f,0x6d,0x22,0x74,0x5, 0x2f,0x11,0x14,0x78,0xfb,0x7e, -+0x33,0x3a,0x87,0xa, 0x13,0x6d,0x0, 0x12,0x1f,0x3c,0x7c,0xe7,0xbe,0xe0,0x2, 0x50, -+0x3, 0x7e,0xe0,0x2, 0xa, 0x6f,0x1b,0x64,0xa, 0x3e,0x1b,0x34,0x7c,0xc7,0x7f,0x5, -+0x7c,0xbd,0x12,0xc7,0x5a,0x7f,0x6, 0x7c,0xbd,0x7c,0x7c,0x12,0xc7,0x5a,0xb, 0xf0, -+0x7e,0x73,0x3a,0x87,0xbc,0x7f,0x50,0xbc,0x7f,0x5, 0x7f,0x16,0x12,0xc6,0xb6,0x80, -+0x6, 0x74,0x7e,0x7a,0xb3,0x3a,0x86,0xda,0x3b,0x22,0x7c,0x97,0x7c,0xab,0x7f,0x10, -+0x7e,0x30,0x2, 0xac,0x3a,0x2d,0x13,0x7d,0x2, 0xb, 0xa, 0x10,0x7e,0x10,0x2, 0xac, -+0x19,0x7f,0x71,0x2d,0xf0,0xb, 0x7a,0x0, 0x7c,0x21,0xa5,0xba,0x0, 0x14,0x1a,0x3, -+0x1b,0x7a,0x0, 0xbc,0x9a,0x68,0x24,0x6d,0x44,0x74,0x2, 0xa4,0x2d,0x35,0x1b,0x1a, -+0x40,0x22,0xbc,0x9a,0x68,0x15,0x1a,0x2, 0x1a,0x13,0x2d,0x10,0xe, 0x14,0x1b,0x7a, -+0x10,0x6d,0x11,0x74,0x2, 0xa4,0x2d,0x35,0x1b,0x1a,0x10,0x22,0x7e,0x90,0x2, 0xac, -+0x9a,0x7f,0x70,0x2d,0xf4,0x22,0xca,0xf8,0x7f,0x51,0x7f,0x40,0x7e,0x37,0x2f,0x90, -+0x7a,0x35,0x2a,0x7e,0x37,0x2f,0x8e,0x7a,0x35,0x2c,0x7e,0x37,0x2f,0x9c,0x7a,0x35, -+0x26,0x7e,0x37,0x2f,0x9e,0x7a,0x35,0x28,0x6c,0xff,0x80,0x1e,0x7e,0x34,0x0, 0x26, -+0x7e,0x14,0x0, 0x2f,0x74,0x9, 0x12,0x1f,0xc1,0x74,0x2, 0xac,0xbf,0x7f,0x4, 0x2d, -+0x15,0x7f,0x15,0x2d,0x35,0x12,0xc8,0x5, 0xb, 0xf0,0x7e,0x73,0x3a,0x87,0xbc,0x7f, -+0x38,0xda,0xda,0xf8,0x22,0x7f,0x71,0x7f,0x60,0x7e,0x35,0x2f,0xbe,0x34,0x0, 0x0, -+0x38,0x7, 0x7e,0x34,0x0, 0x1, 0x7a,0x35,0x2f,0x7e,0x35,0x31,0xbe,0x34,0x0, 0x0, -+0x38,0x7, 0x7e,0x34,0x0, 0x1, 0x7a,0x35,0x31,0xb, 0x6a,0x30,0x9e,0x35,0x33,0x6d, -+0x22,0x7e,0x33,0x3a,0x89,0x12,0xc8,0x5a,0x7e,0x15,0x2f,0x12,0x1f,0x3a,0x1b,0x6a, -+0x30,0xb, 0x7a,0x30,0x9e,0x35,0x35,0x6d,0x22,0x7e,0x33,0x3a,0x8a,0x12,0xc8,0x5a, -+0x7e,0x15,0x31,0x12,0x1f,0x3a,0x1b,0x7a,0x30,0x22,0xa, 0x13,0x6d,0x0, 0x2, 0x1f, -+0x20,0x74,0x1, 0x7a,0xb3,0x39,0xe8,0x7e,0x34,0x60,0xa3,0x22,0x7e,0xa3,0x2a,0x6e, -+0x7e,0xb3,0x2a,0x6d,0xa4,0x22,0x74,0x1, 0x7a,0xb3,0x2b,0x1, 0x7a,0xb3,0x2b,0x1d, -+0x22,0x7e,0x18,0x5, 0xf8,0x7a,0x1f,0x6, 0xf4,0x22,0xa, 0x3b,0x2d,0x39,0x7d,0x28, -+0x7e,0x1b,0xb0,0x22,0x49,0x23,0x38,0x52,0x49,0x33,0x38,0x4e,0x9d,0x32,0x2, 0x21, -+0x48,0xa, 0x47,0x7f,0x70,0x2d,0xf4,0x7e,0x7b,0x60,0xbc,0x6b,0x22,0x3e,0x44,0x7e, -+0x1f,0x13,0x8a,0x2d,0x34,0x1b,0x1a,0x50,0x22,0x6d,0x33,0xe4,0x6c,0x55,0x2, 0x13, -+0x36,0x6e,0x34,0xff,0xff,0xb, 0x34,0x7a,0x37,0x2a,0x5e,0x22,0xe4,0x7a,0xb3,0x38, -+0x37,0x7a,0xb3,0x38,0x3f,0x22,0xa, 0x2c,0x2e,0x27,0x2a,0xfe,0x7e,0x29,0x70,0x22, -+0x7e,0x34,0x0, 0x3e,0x74,0xff,0x2, 0x21,0x16,0x7a,0x37,0x2a,0x4f,0x7e,0x34,0x61, -+0x57,0x22,0x7e,0xe3,0x2a,0x6f,0x7e,0xd3,0x2a,0x70,0x22,0x7e,0x37,0x25,0xf4,0x7a, -+0x37,0x36,0xaa,0x22,0x7e,0x34,0xd, 0xc8,0x7a,0x37,0x36,0xac,0x22,0x7e,0x73,0x3a, -+0x5, 0x7a,0x73,0x2b,0x20,0x22,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x80,0x22,0x12,0x0, -+0x1e,0x7e,0xb3,0x2a,0xfc,0x22,0xa9,0xd1,0xcb,0xe4,0x2, 0x0, 0xe, 0x90,0x61,0xc5, -+0xe4,0x93,0x7c,0xdb,0x22,0x7e,0x73,0x26,0xf5,0xbe,0x70,0x0, 0x22,0x7e,0x73,0x26, -+0xf4,0xbe,0x70,0x0, 0x22,0x7e,0x73,0x28,0x92,0xbe,0x70,0x0, 0x22,0x7e,0xb3,0x39, -+0x79,0xbe,0xb0,0x1, 0x22,0x7e,0x73,0x2a,0x2, 0xbe,0x70,0x0, 0x22,0x90,0x60,0xa7, ++0x2, 0x20,0x7, 0x2, 0xb9,0xe2,0xeb,0xaa,0x8, 0x22,0x22,0x2, 0x0, 0x4a,0xb4,0x2, ++0x4, 0xa9,0xb7,0xea,0x22,0x24,0xff,0xa9,0x97,0xea,0x22,0x2, 0x68,0x1c,0xb4,0x2, ++0x4, 0xa9,0xb6,0xea,0x22,0x24,0xff,0xa9,0x96,0xea,0x22,0x2, 0x88,0x1c,0x7f,0x60, ++0xa9,0xc2,0xea,0x74,0x1, 0x12,0x13,0xcb,0x7f,0x6, 0x12,0x5, 0xb4,0x7f,0x6, 0x2, ++0x9, 0xa1,0x22,0x2, 0x88,0x38,0xe4,0x2, 0x2a,0x20,0x32,0x2, 0x0, 0x5a,0x12,0x10, ++0xa2,0x2, 0x13,0xae,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32,0x2, 0x0, 0x76,0x1, 0x2, ++0x4, 0x8, 0x10,0x20,0x40,0x80,0x2, 0x3c,0x93,0x32,0xff,0x2, 0x0, 0x69,0xb2,0x86, ++0x22,0xff,0xff,0x2, 0x10,0x52,0xca,0x7b,0xca,0x6b,0xca,0x5b,0xca,0x4b,0xca,0x2b, ++0xca,0x1b,0xca,0xb, 0xc0,0xd0,0xc0,0x83,0xc0,0x82,0xd2,0xf, 0x7e,0xf, 0x3b,0x10, ++0x69,0x30,0x0, 0x4, 0x7a,0x73,0x3b,0x20,0x7e,0x73,0x3b,0x20,0xa, 0x37,0x5e,0x34, ++0x0, 0x4, 0x68,0x4, 0xd2,0xe, 0x80,0x2, 0xc2,0xe, 0x7e,0x34,0x0, 0x1f,0x79,0x30, ++0x0, 0x4, 0xc2,0xc3,0x12,0x12,0xd3,0x12,0x89,0xef,0x7e,0x1f,0x3b,0x10,0x69,0x31, ++0x0, 0x2, 0x5e,0x34,0x0, 0x40,0x68,0x2e,0x6c,0xaa,0x7e,0x10,0x2, 0xac,0x1a,0x7e, ++0x1f,0x3b,0x10,0x7f,0x71,0x2d,0xf0,0x69,0x17,0x0, 0x9c,0x59,0x10,0x3b,0x14,0xb, ++0xa0,0xbe,0xa0,0x3, 0x78,0xe4,0x69,0x11,0x0, 0xa4,0x7a,0x17,0x3b,0x1c,0x69,0x31, ++0x0, 0xa2,0x7a,0x37,0x3b,0x1a,0xa9,0xc1,0xc4,0xd0,0x82,0xd0,0x83,0xd0,0xd0,0xda, ++0xb, 0xda,0x1b,0xda,0x2b,0xda,0x4b,0xda,0x5b,0xda,0x6b,0xda,0x7b,0x32,0x7d,0x13, ++0x7e,0x1f,0x33,0xfc,0x1b,0x1a,0x10,0xc2,0xc6,0xd2,0xee,0x22,0xff,0xff,0x54,0x2c, ++0xca,0x79,0x7f,0x50,0x7c,0xeb,0x7e,0x34,0x0, 0x24,0x7e,0x8, 0x0, 0x2c,0x7e,0x24, ++0x0, 0x2, 0x12,0x69,0x9f,0xe5,0x2c,0xbe,0xb0,0x0, 0x38,0x2, 0x21,0x4a,0xe5,0x2c, ++0xbe,0xb0,0x76,0x28,0x2, 0x21,0x4a,0x7e,0xe1,0x2c,0xbe,0xe0,0x76,0x38,0x2, 0x21, ++0x78,0x7e,0x34,0x1e,0x7a,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x5e,0x79,0x35,0x0, ++0x4, 0xbe,0xe0,0x81,0x68,0x2, 0x21,0x71,0x74,0x23,0x7a,0x5b,0xb0,0x74,0x1c,0x61, ++0x84,0x74,0x1, 0x7a,0x5b,0xb0,0x61,0x84,0x7c,0xbe,0x14,0xbe,0xb0,0x75,0x40,0x2, ++0x61,0x33,0x7e,0xa0,0x3, 0xa4,0x2e,0x54,0x1, 0x8c,0x89,0x54,0x2, 0x2, 0xfb,0x2, ++0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x2, 0xed,0x2, 0x2, ++0xfb,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x2, 0xfb, ++0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x25,0x2, 0x3, 0x33,0x2, 0x3, 0x9, 0x2, ++0x2, 0xfb,0x2, 0x3, 0x17,0x2, 0x3, 0x17,0x2, 0x2, 0xfb,0x2, 0x3, 0x33,0x2, 0x3, ++0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, ++0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, ++0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, ++0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, ++0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, ++0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, ++0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, ++0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, ++0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, ++0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, ++0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, ++0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, ++0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, ++0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, ++0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, ++0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33, ++0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, ++0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x3, 0x33,0x2, 0x2, 0xfb,0x41,0xfb,0x7e,0x34,0x1e, ++0x7a,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x17,0x61,0x3f,0x7e,0x34,0x1e,0x4e,0x79, ++0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x5e,0x61,0x3f,0x7e,0x34,0x1e,0x4e,0x79,0x35,0x0, ++0x2, 0x7e,0x34,0x1d,0xe7,0x61,0x3f,0x7e,0x34,0x1d,0xcb,0x79,0x35,0x0, 0x2, 0x7e, ++0x34,0x1d,0xfb,0x61,0x3f,0x7e,0x34,0x1e,0x3f,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e, ++0x26,0x61,0x3f,0x7e,0x34,0x1e,0x7a,0x79,0x35,0x0, 0x2, 0x7e,0x34,0x1e,0x5e,0x79, ++0x35,0x0, 0x4, 0xbe,0xe0,0x16,0x28,0x2, 0x61,0x4e,0x7c,0xfe,0x61,0x62,0x7e,0xf0, ++0x16,0xbe,0xe0,0x72,0x50,0x2, 0x61,0x62,0xa, 0x3e,0x9e,0x34,0x0, 0x72,0xb, 0x34, ++0x2c,0xf7,0x7e,0x70,0x3, 0xac,0x7f,0x7d,0x23,0x2e,0x24,0x1e,0x9e,0x7a,0x51,0x82, ++0x7a,0x41,0x83,0xe4,0x93,0x7a,0x5b,0xb0,0x2e,0x34,0x1e,0x9f,0x7a,0x71,0x82,0x7a, ++0x61,0x83,0xe4,0x93,0x39,0xb5,0x0, 0x1, 0xda,0x79,0x22,0xca,0x3b,0x7f,0x30,0x74, ++0x1, 0x12,0x14,0x13,0x29,0x73,0x0, 0xf3,0x2e,0x70,0xff,0x92,0x1, 0x29,0xb3,0x0, ++0xf4,0x12,0x13,0xe4,0x7f,0x3, 0x12,0xd, 0x72,0x7f,0x3, 0x12,0x6, 0xba,0x29,0x73, ++0x0, 0xa, 0xa, 0x37,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x24,0x29,0x73,0x0, 0xa3, ++0xa, 0x27,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24, ++0x69,0x33,0x0, 0xff,0x4d,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2, 0x29,0x73, ++0x0, 0xa, 0xa, 0x47,0x29,0x73,0x0, 0x5, 0xa, 0x57,0x9d,0x54,0xf5,0x35,0x29,0xb3, ++0x0, 0xa5,0x70,0xb, 0x29,0xb3,0x0, 0xf8,0x29,0x73,0x0, 0xf7,0x12,0xb, 0xad,0x29, ++0x73,0x0, 0xa5,0x2e,0x70,0xff,0x92,0x1, 0xe5,0x35,0x12,0xb, 0x1e,0x69,0x33,0x0, ++0xfd,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x28,0x69,0x23,0x0, 0xfb,0x3e,0x24,0x3e, ++0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x29,0x73,0x0, 0xfa,0xa, 0x37,0x2d, ++0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2a,0x29,0x73,0x0, 0xf9,0xa, 0x37,0x7e, ++0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2c,0x7e,0x34,0x0, 0x1, 0x7e,0xf, 0x3b,0x10,0x79, ++0x30,0x0, 0x34,0x7e,0x34,0x1, 0xb, 0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x2e,0x29, ++0x73,0x0, 0x5, 0xa, 0x37,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x10,0x69,0x33,0x0, ++0xa8,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x1c,0x69,0x33,0x0, 0xaa,0x7e,0xf, 0x3b, ++0x10,0x79,0x30,0x0, 0x1e,0x6c,0xaa,0x7e,0x50,0x2, 0xac,0x5a,0x69,0x13,0x1, 0x1, ++0x2d,0x12,0x7e,0x4, 0x0, 0xff,0xb, 0xa, 0x30,0x7e,0xf, 0x3b,0x10,0x2d,0x12,0x79, ++0x30,0x0, 0x44,0xb, 0xa0,0xbe,0xa0,0xc, 0x40,0xdd,0xda,0x3b,0x22,0xca,0xf8,0x7f, ++0x70,0x7e,0x7b,0xf0,0x29,0x77,0x0, 0x1, 0xbc,0x7f,0x28,0x2, 0x7c,0xf7,0x69,0x17, ++0x0, 0x6, 0x6d,0x0, 0x7e,0x34,0x0, 0xf2,0x74,0xff,0x12,0x21,0x16,0x7f,0x7, 0x12, ++0xe, 0xed,0xa9,0xd6,0xcb,0x6c,0xaa,0x80,0x2d,0x6c,0x77,0x80,0x1f,0x7e,0x10,0xb, ++0xac,0x1a,0xa, 0x17,0x2d,0x1, 0x3e,0x4, 0x69,0x17,0x0, 0x6, 0x2d,0x10,0x6d,0x0, ++0xb, 0xa, 0x20,0x6e,0x24,0xff,0xff,0x1b,0xa, 0x20,0xb, 0x70,0x29,0x67,0x0, 0x1, ++0xbc,0x67,0x38,0xd9,0xb, 0xa0,0x7e,0x7b,0x60,0xbc,0x6a,0x38,0xcc,0x69,0x37,0x0, ++0x6, 0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0x4, 0x7c,0x4f,0x6c,0x55,0xa, 0x3f,0x2d, ++0x32,0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0xc, 0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b, ++0x1a,0x10,0x7e,0x34,0x0, 0xd0,0x12,0xf, 0x45,0x6c,0xaa,0xbe,0xa0,0x4, 0x50,0x18, ++0x7e,0x70,0x4, 0xac,0x7a,0x7c,0xb7,0x7e,0x1f,0x3, 0xfc,0x69,0x41,0x0, 0x26,0x60, ++0x42,0x1e,0x44,0x14,0x78,0xfb,0x80,0x3b,0xbe,0xa0,0x8, 0x50,0x1b,0xa, 0x3a,0x1b, ++0x36,0x3e,0x34,0x3e,0x34,0x7c,0xb7,0x7e,0x1f,0x3, 0xfc,0x69,0x41,0x0, 0x28,0x60, ++0x22,0x1e,0x44,0x14,0x78,0xfb,0x80,0x1b,0xa, 0x3a,0x9e,0x34,0x0, 0x8, 0x3e,0x34, ++0x3e,0x34,0x7c,0xb7,0x7e,0x1f,0x3, 0xfc,0x69,0x41,0x0, 0x2a,0x60,0x5, 0x1e,0x44, ++0x14,0x78,0xfb,0x5e,0x44,0x0, 0xf, 0x7e,0x50,0x2, 0xac,0x5a,0x69,0x37,0x0, 0x6, ++0x2d,0x32,0x6d,0x22,0x1b,0x1a,0x40,0xb, 0xa0,0xbe,0xa0,0xb, 0x40,0x8d,0xa9,0xc6, ++0xcb,0xda,0xf8,0x22,0x29,0x70,0x0, 0x96,0x29,0x90,0x0, 0x98,0x29,0x60,0x0, 0x97, ++0x29,0x80,0x0, 0x8d,0xbe,0x80,0x4, 0x38,0x4, 0x6c,0xaa,0x80,0x21,0xbe,0x80,0x8, ++0x38,0x5, 0x7e,0xa0,0x1, 0x80,0x17,0xbe,0x80,0x10,0x38,0x5, 0x7e,0xa0,0x2, 0x80, ++0xd, 0xbe,0x80,0x20,0x38,0x5, 0x7e,0xa0,0x3, 0x80,0x3, 0x7e,0xa0,0x4, 0xbe,0x90, ++0x3, 0x28,0x3, 0x7e,0x90,0x3, 0xbe,0x80,0x3f,0x28,0x3, 0x7e,0x80,0x3f,0xbe,0x60, ++0x1, 0x28,0x3, 0x7e,0x60,0x1, 0xbe,0x70,0x2, 0x28,0x2, 0x6c,0x77,0xa, 0x28,0x3e, ++0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x7c,0x89,0x6c,0x99,0x3e,0x44,0x3e, ++0x44,0x3e,0x44,0x2d,0x42,0xa, 0x26,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x2d, ++0x24,0xa, 0x37,0x3e,0x34,0x3e,0x34,0x2d,0x32,0x7e,0x7f,0x33,0xfc,0x79,0x37,0x0, ++0x2, 0x29,0xb0,0x0, 0x8c,0x7c,0x4b,0x6c,0x55,0x29,0xb0,0x0, 0x8b,0xa, 0x3b,0x2d, ++0x32,0x7e,0x7f,0x3b,0x8, 0x79,0x37,0x0, 0x80,0x69,0x30,0x0, 0xa0,0x7e,0x7f,0x33, ++0xfc,0x79,0x37,0x0, 0xc, 0x69,0x30,0x0, 0x9e,0x5e,0x34,0xe0,0xf, 0x29,0xb0,0x0, ++0x8c,0xa, 0x2b,0x1b,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x2d,0x32,0x7e, ++0x7f,0x3b,0x8, 0x79,0x37,0x0, 0x82,0xa, 0x2a,0x3e,0x24,0x3e,0x24,0x3e,0x24,0x3e, ++0x24,0x29,0xb0,0x0, 0x99,0xa, 0x3b,0x2d,0x32,0x7e,0x7f,0x33,0xfc,0x79,0x37,0x0, ++0x6, 0x69,0x30,0x0, 0x9c,0x7e,0x7f,0x33,0xfc,0x79,0x37,0x0, 0x8, 0x69,0x30,0x0, ++0x9a,0x7e,0xf, 0x33,0xfc,0x79,0x30,0x0, 0xa, 0x22,0x7f,0x60,0x74,0x1, 0x12,0x14, ++0x13,0x29,0x36,0x0, 0xf5,0x29,0x26,0x0, 0xa3,0x29,0x16,0x0, 0xa4,0xbe,0x20,0x2, ++0x28,0x3, 0x7e,0x20,0x2, 0xbe,0x10,0x40,0x28,0x3, 0x7e,0x10,0x40,0x7e,0x34,0x0, ++0x4, 0x7c,0xb2,0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb,0x7c,0x7, 0xa, 0x31,0x7e,0x2f, ++0x3b,0x10,0x79,0x32,0x0, 0x12,0x7c,0x73,0xac,0x70,0xa, 0x21,0x12,0x1e,0xee,0x7c, ++0x27,0xa, 0x32,0x7e,0x2f,0x3b,0x10,0x79,0x32,0x0, 0x14,0x7c,0x73,0xac,0x70,0x29, ++0x26,0x0, 0xf6,0xa, 0x22,0xad,0x32,0xa, 0x21,0x8d,0x32,0x7d,0x43,0x7c,0x73,0xac, ++0x70,0xa, 0x21,0x12,0x1e,0xee,0x7c,0xa7,0x7c,0x2a,0x7c,0xb9,0x2c,0xab,0xbe,0xa0, ++0xc, 0x50,0x3, 0x7e,0xa0,0xc, 0xbe,0x20,0xc, 0x50,0x3, 0x7e,0x20,0xc, 0xa, 0x20, ++0xa, 0x31,0x12,0x1e,0xee,0x7d,0xe3,0xa, 0x3a,0xb, 0x34,0xad,0x3e,0xb, 0x34,0xbe, ++0x34,0x2, 0x0, 0x40,0x4, 0x7e,0x34,0x1, 0xff,0x29,0x46,0x0, 0xf7,0x7e,0x50,0x2, ++0xac,0x45,0xa, 0xf2,0xad,0xfe,0x2d,0x2f,0xb, 0x24,0xbe,0x24,0x2, 0x0, 0x40,0x4, ++0x7e,0x24,0x1, 0xff,0xa, 0x13,0x7e,0x7f,0x3b,0x10,0x79,0x17,0x0, 0xa, 0x1e,0x24, ++0x7c,0x45,0x6c,0x55,0x1e,0x34,0x2d,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0xc, ++0xa, 0x3a,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x22,0x22,0xa9,0xd6,0xcb,0x69,0x30, ++0x0, 0x4, 0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x4, 0x69,0x30,0x0, 0x6, 0x7e,0x2f, ++0x3, 0xfc,0x79,0x32,0x0, 0x6, 0x69,0x30,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc,0x79,0x32, ++0x0, 0x8, 0x7e,0xb, 0x70,0x7c,0x47,0x6c,0x55,0x29,0x70,0x0, 0x1, 0xa, 0x37,0x2d, ++0x32,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xc, 0x29,0x70,0x0, 0x2, 0xa, 0x37,0x7e, ++0xf, 0x3, 0xfc,0x79,0x30,0x0, 0xe, 0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10, ++0x7e,0x34,0x0, 0xe0,0x12,0xf, 0x45,0xa9,0xc6,0xcb,0x22,0xb2,0x82,0x22,0xff,0xff, ++0x7f,0x21,0xa9,0xd6,0xcb,0x69,0x30,0x0, 0x4, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, ++0x4, 0x69,0x30,0x0, 0x8, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0x6, 0x69,0x30,0x0, ++0x6, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0x8, 0x29,0x70,0x0, 0x1, 0x7c,0x47,0x6c, ++0x55,0x7e,0xb, 0x70,0xa, 0x37,0x2d,0x32,0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0xc, ++0x29,0x70,0x0, 0x2, 0xa, 0x37,0x1b,0x34,0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0xa, ++0x69,0x30,0x0, 0xa, 0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0xe, 0x69,0x30,0x0, 0xc, ++0x7e,0x7f,0x3, 0xfc,0x79,0x37,0x0, 0x10,0x69,0x30,0x0, 0xe, 0x7e,0x7f,0x3, 0xfc, ++0x79,0x37,0x0, 0x12,0x29,0x70,0x0, 0x3, 0x7c,0x27,0x6c,0x33,0x7e,0x1f,0x3, 0xfc, ++0x1b,0x1a,0x10,0x7e,0x34,0x0, 0xa0,0x12,0xf, 0x45,0x7e,0x1f,0x3, 0xfc,0x69,0x11, ++0x0, 0x1a,0x7a,0x2b,0x30,0x69,0x11,0x0, 0x1c,0x39,0x32,0x0, 0x1, 0x69,0x11,0x0, ++0x16,0x79,0x12,0x0, 0x2, 0x69,0x11,0x0, 0x18,0x79,0x12,0x0, 0x4, 0x69,0x11,0x0, ++0x22,0x79,0x12,0x0, 0x6, 0x69,0x11,0x0, 0x24,0x79,0x12,0x0, 0x8, 0x69,0x11,0x0, ++0x1e,0x79,0x12,0x0, 0xa, 0x69,0x31,0x0, 0x20,0x79,0x32,0x0, 0xc, 0xa9,0xc6,0xcb, ++0x22,0xca,0x3b,0x7c,0x57,0x7c,0x4b,0x5e,0x40,0x3, 0x69,0x30,0x0, 0x4, 0x5e,0x60, ++0x3f,0x6c,0xaa,0xa, 0x4a,0x69,0xf0,0x0, 0xa, 0x69,0xe0,0x0, 0x8, 0x2d,0xf4,0x7e, ++0x7b,0xb0,0xa, 0xfb,0x7d,0x4f,0x7c,0x89,0x6c,0x99,0x7d,0xf4,0xa, 0xea,0x69,0xd0, ++0x0, 0xe, 0x69,0xc0,0x0, 0xc, 0x2d,0xde,0x7e,0x6b,0xb0,0xa, 0x4b,0x2d,0x4f,0x7e, ++0xd0,0x28,0xac,0xd5,0x7e,0xf0,0x2, 0xac,0xfa,0x7d,0xd7,0x2d,0xd6,0x7e,0xf0,0xf0, ++0xac,0xf4,0x2d,0xd7,0x7e,0x7f,0x33,0xf8,0x2d,0xfd,0x79,0x47,0x1, 0x8c,0xb, 0xa0, ++0xbe,0xa0,0xe, 0x78,0xae,0x6c,0xaa,0x7e,0x90,0x2, 0xac,0x9a,0x69,0xf0,0x0, 0x2, ++0xb, 0xa, 0xe0,0x2d,0xf4,0xb, 0x7a,0x40,0x7e,0xd0,0x28,0xac,0xd5,0x7e,0xf0,0x2, ++0xac,0xfa,0x7d,0xd7,0x2d,0xd6,0x7e,0xf0,0xf0,0xac,0xf4,0x2d,0xd7,0x7e,0x7f,0x33, ++0xf8,0x2d,0xfd,0x79,0x47,0x1, 0x80,0xb, 0xa0,0xbe,0xa0,0x4, 0x40,0xc9,0x7e,0x90, ++0xf0,0xac,0x94,0x74,0x28,0xac,0xb5,0x7d,0xf5,0x2d,0xf4,0x7e,0x2f,0x33,0xf8,0x2d, ++0x5f,0x79,0x32,0x1, 0x88,0x69,0x30,0x0, 0x6, 0x7e,0x30,0xf0,0xac,0x34,0x74,0x28, ++0xac,0x5b,0x2d,0x21,0x7e,0xf, 0x33,0xf8,0x2d,0x12,0x79,0x30,0x1, 0x8a,0xda,0x3b, ++0x22,0x29,0x60,0x0, 0xb, 0xa, 0x46,0x29,0x60,0x0, 0x4, 0xa, 0x26,0x2d,0x24,0x7c, ++0x65,0x29,0xb0,0x0, 0x6, 0xbc,0xb6,0x28,0x2, 0x7c,0x6b,0x29,0x70,0x0, 0x5, 0x29, ++0xb0,0x0, 0x7, 0xbc,0xb7,0x28,0x2, 0x7c,0x7b,0x6c,0xaa,0x6d,0x22,0x7e,0x90,0x2, ++0xac,0x9a,0x7e,0x7f,0x3b,0x8, 0x2d,0xf4,0x79,0x27,0x0, 0x2, 0xb, 0xa0,0xbe,0xa0, ++0x23,0x78,0xea,0x6c,0xaa,0x80,0x55,0xa, 0x2a,0x7f,0x70,0x2d,0xf2,0x29,0x57,0x0, ++0x4c,0xbe,0x50,0x23,0x50,0x23,0x29,0x47,0x0, 0xb4,0xa, 0xd4,0x7d,0x4d,0x7c,0x89, ++0x6c,0x99,0x7d,0xd4,0x7e,0x90,0x2, 0xac,0x95,0x7e,0x7f,0x3b,0x8, 0x2d,0xf4,0xb, ++0xf5,0xb, 0x7a,0x40,0x4d,0x4d,0x1b,0x7a,0x40,0xa, 0x4a,0x7f,0x70,0x2d,0xf4,0x29, ++0x47,0x0, 0x4c,0xa, 0xd4,0x7e,0x90,0x2, 0xac,0x9a,0x7e,0x7f,0x3b,0x8, 0x2d,0xf4, ++0xb, 0xf5,0xb, 0x7a,0x40,0x4d,0x4d,0x1b,0x7a,0x40,0xb, 0xa0,0xbc,0x6a,0x38,0xa7, ++0x6c,0xaa,0x80,0x1d,0xa, 0x2a,0x7f,0x70,0x2d,0xf2,0x29,0x67,0x0, 0x6f,0xa, 0x46, ++0x7e,0x50,0x2, 0xac,0x5a,0x7e,0x7f,0x3b,0x8, 0x2d,0xf2,0x79,0x47,0x0, 0x48,0xb, ++0xa0,0xbc,0x7a,0x38,0xdf,0x22,0x7c,0x7b,0x7e,0x7f,0x3b,0x10,0x69,0x47,0x0, 0xc, ++0x6c,0x88,0x3e,0x44,0x69,0x7, 0x0, 0xa, 0x69,0x57,0x0, 0x2, 0x1e,0x54,0x1e,0x54, ++0x1e,0x54,0x1e,0x54,0x1e,0x54,0x1e,0x54,0x1e,0x54,0x5e,0x54,0x0, 0x3, 0x7e,0x14, ++0x0, 0x4, 0x70,0x2, 0x41,0x9b,0x3e,0x14,0x14,0x78,0xfb,0x7c,0xa3,0xa, 0xda,0xad, ++0xd0,0x7d,0xcd,0x6d,0x11,0x79,0x17,0x0, 0x8c,0x7c,0xb7,0x70,0x2, 0x41,0xb4,0x1e, ++0xd4,0x14,0x78,0xfb,0xbe,0xd4,0x1, 0x0, 0x38,0x2, 0x41,0xc2,0x7e,0xd4,0x1, 0x0, ++0x41,0xce,0xbe,0xd4,0x0, 0x10,0x40,0x2, 0x41,0xce,0x7e,0xd4,0x0, 0x10,0x7d,0x3d, ++0x12,0x12,0x9f,0xa, 0x1b,0x7e,0x1f,0x3b,0x10,0x79,0x11,0x0, 0x90,0x7e,0x1f,0x3b, ++0x10,0x79,0xd1,0x0, 0x8e,0x7e,0x7f,0x3b,0x10,0x69,0x37,0x0, 0x8, 0xad,0x3c,0x8d, ++0x3d,0x79,0x37,0x0, 0x92,0x7e,0x14,0x0, 0x6, 0x7e,0x1f,0x3b,0x10,0x79,0x11,0x0, ++0x94,0x7d,0x24,0x9d,0x20,0xa, 0x3a,0xad,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, ++0x96,0x7e,0x34,0x0, 0x10,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x98,0x22,0x7c,0x5b, ++0x7e,0xf, 0x3b,0x10,0x69,0x40,0x0, 0x22,0x30,0x1, 0x6b,0x6d,0xff,0x7d,0x3f,0xbe, ++0x50,0x10,0x28,0x2e,0x7e,0x54,0xff,0xff,0x79,0x50,0x0, 0x42,0x9e,0x50,0x10,0x6c, ++0xaa,0x80,0x11,0x7e,0xe4,0x0, 0x1, 0x7c,0xba,0x60,0x5, 0x3e,0xe4,0x14,0x78,0xfb, ++0x2d,0x3e,0xb, 0xa0,0xbc,0x5a,0x38,0xeb,0x7e,0x6f,0x3b,0x10,0x79,0x36,0x0, 0x40, ++0x80,0x25,0x79,0xf0,0x0, 0x40,0x6c,0xaa,0x80,0x11,0x7e,0xf4,0x0, 0x1, 0x7c,0xba, ++0x60,0x5, 0x3e,0xf4,0x14,0x78,0xfb,0x2d,0x3f,0xb, 0xa0,0xbc,0x5a,0x38,0xeb,0x7e, ++0x7f,0x3b,0x10,0x79,0x37,0x0, 0x42,0x7d,0x34,0x2e,0x34,0x0, 0xc, 0x7e,0x7f,0x3b, ++0x10,0x79,0x37,0x0, 0x16,0x22,0x6d,0x33,0x79,0x30,0x0, 0x40,0x7e,0xf, 0x3b,0x10, ++0x79,0x30,0x0, 0x42,0x7e,0x1f,0x3b,0x10,0x79,0x41,0x0, 0x16,0x22,0x7c,0x17,0x7c, ++0x3b,0x6d,0x33,0x7e,0x2f,0x3b,0x10,0x79,0x32,0x0, 0x40,0x7e,0x2f,0x3b,0x10,0x79, ++0x32,0x0, 0x42,0x7e,0x7f,0x3b,0x10,0x69,0x57,0x0, 0x12,0x7c,0xab,0x69,0x37,0x0, ++0x2, 0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x5e, ++0x34,0x0, 0x3, 0x7c,0xb7,0x7e,0x44,0x0, 0x4, 0x60,0x5, 0x3e,0x44,0x14,0x78,0xfb, ++0x7c,0x29,0xa, 0x22,0xa, 0x3a,0x12,0x1e,0xee,0xa, 0x23,0x2d,0x32,0x7c,0xb7,0x7c, ++0x61,0x6c,0x77,0xa, 0xb, 0x1e,0x4, 0x2d,0x3, 0x79,0x7, 0x0, 0xc, 0x7c,0x73,0xac, ++0x72,0xa, 0x2a,0x12,0x1e,0xee,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x16,0x6d,0x33, ++0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x22,0x22,0xa9,0xd6,0xcb,0x69,0x30,0x0, 0x6, ++0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x4, 0x69,0x30,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc, ++0x79,0x32,0x0, 0x8, 0x29,0x70,0x0, 0x2, 0x7c,0x47,0x6c,0x55,0x29,0x70,0x0, 0x3, ++0xa, 0x37,0x2d,0x32,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xc, 0x7e,0xb, 0x70,0x7c, ++0x47,0x29,0x70,0x0, 0x1, 0xa, 0x37,0x2d,0x32,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, ++0xa, 0x29,0x70,0x0, 0x4, 0xa, 0x37,0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xe, 0x29, ++0xb0,0x0, 0x5, 0x54,0x1, 0x7c,0x2b,0x6c,0x33,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10, ++0x7e,0x34,0x0, 0xc0,0x12,0xf, 0x45,0xa9,0xc6,0xcb,0x22,0xca,0x79,0x7c,0xab,0x5e, ++0xa0,0x3, 0x6c,0x77,0x7e,0x50,0x2, 0xac,0x57,0x69,0xd0,0x0, 0xe, 0x69,0xc0,0x0, ++0xc, 0x2d,0xd2,0x29,0x66,0x0, 0x1, 0xa, 0xf6,0x7d,0x4f,0x7c,0x89,0x6c,0x99,0x7d, ++0xf4,0x7e,0x6b,0x60,0xa, 0x46,0x2d,0x4f,0x7e,0xf0,0xf0,0xac,0xfa,0x2d,0x27,0x7e, ++0x7f,0x33,0xf8,0x2d,0xf2,0x79,0x47,0x2, 0x54,0xb, 0x70,0xbe,0x70,0xe, 0x40,0xc4, ++0x69,0x40,0x0, 0x4, 0x7e,0xf0,0xf0,0xac,0xfa,0x7e,0x1f,0x33,0xf8,0x2d,0x37,0x79, ++0x41,0x2, 0x50,0x69,0x30,0x0, 0x6, 0x74,0xf0,0xa4,0x7e,0xf, 0x33,0xf8,0x2d,0x15, ++0x79,0x30,0x2, 0x52,0xda,0x79,0x22,0xa9,0xd6,0xcb,0xc2,0x1c,0x69,0x30,0x0, 0x4, ++0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x4, 0x69,0x30,0x0, 0x6, 0x7e,0x2f,0x3, 0xfc, ++0x79,0x32,0x0, 0x6, 0x69,0x30,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc,0x79,0x32,0x0, 0x8, ++0x7e,0xb, 0x70,0x7c,0x47,0x6c,0x55,0x29,0x70,0x0, 0x1, 0xa, 0x37,0x2d,0x32,0x7e, ++0x2f,0x3, 0xfc,0x79,0x32,0x0, 0xc, 0x29,0x70,0x0, 0x2, 0xa, 0x37,0x7e,0x2f,0x3, ++0xfc,0x79,0x32,0x0, 0xe, 0x29,0xb0,0x0, 0x3, 0x54,0x1, 0xa, 0x5b,0x7c,0xab,0xe4, ++0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x50,0x69,0x30,0x0, 0xa, 0x12,0xf, 0x45,0xa9,0xc6, ++0xcb,0x22,0x69,0x30,0x0, 0xae,0x7e,0x2f,0x3b,0x10,0x79,0x32,0x0, 0x6, 0x29,0x50, ++0x0, 0xa6,0xa, 0x55,0x7d,0x23,0x1e,0x24,0x9d,0x25,0x7e,0x2f,0x3b,0x10,0x79,0x22, ++0x0, 0x18,0x7d,0x23,0x1e,0x24,0x1b,0x25,0x7e,0x2f,0x3b,0x10,0x79,0x22,0x0, 0x38, ++0x69,0x20,0x0, 0xfd,0x1e,0x34,0x9d,0x32,0x9e,0x34,0x0, 0xa, 0x7e,0x2f,0x3b,0x10, ++0x79,0x32,0x0, 0x26,0x29,0x70,0x0, 0xa7,0xa, 0x37,0x7e,0x2f,0x3b,0x10,0x79,0x32, ++0x0, 0x1a,0x29,0x70,0x0, 0xb, 0xa, 0x27,0x29,0x70,0x0, 0x4, 0x2d,0x32,0x7e,0x2f, ++0x3b,0x10,0x79,0x32,0x0, 0x8, 0x2, 0x9, 0xa1,0xca,0x3b,0xf5,0x24,0x7f,0x41,0x7f, ++0x30,0xe5,0x25,0x7e,0x8, 0x0, 0x26,0x12,0x1, 0x20,0xe5,0x24,0xbe,0xb0,0x23,0x28, ++0x3, 0x75,0x24,0x23,0x6c,0xaa,0x80,0x36,0xa, 0x3a,0x2d,0x39,0x7d,0x28,0x7e,0x1b, ++0xb0,0xbe,0xb1,0x26,0x40,0xd, 0x74,0x23,0xa, 0x4a,0x7f,0x3, 0x2d,0x14,0x7a,0xb, ++0xb0,0x80,0x19,0x7e,0x1b,0xb0,0xa, 0x3b,0x2e,0x35,0x28,0x7a,0x71,0x82,0x7a,0x61, ++0x83,0xe4,0x93,0xa, 0x4a,0x7f,0x13,0x2d,0x34,0x7a,0x1b,0xb0,0xb, 0xa0,0xe5,0x24, ++0xbc,0xba,0x38,0xc4,0xda,0x3b,0x22,0xa9,0xd6,0xcb,0x69,0x20,0x0, 0x4, 0x7e,0x2f, ++0x3, 0xfc,0x79,0x22,0x0, 0x4, 0x69,0x20,0x0, 0x8, 0x7e,0x2f,0x3, 0xfc,0x79,0x22, ++0x0, 0x8, 0x7e,0xb, 0x50,0xa, 0x55,0x7c,0xab,0xe4,0x29,0x50,0x0, 0x1, 0xa, 0x25, ++0x2d,0x25,0x7e,0x2f,0x3, 0xfc,0x79,0x22,0x0, 0xc, 0x29,0x50,0x0, 0x2, 0xa, 0x25, ++0x7e,0xf, 0x3, 0xfc,0x79,0x20,0x0, 0xe, 0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0xa, ++0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10,0x7e,0x34,0x0, 0x40,0x12,0xf, 0x45, ++0xa9,0xc6,0xcb,0x22,0x7c,0xab,0x7e,0x34,0x0, 0x1, 0x7e,0xf, 0x33,0xfc,0x79,0x30, ++0x0, 0xe, 0xc2,0x1b,0xe4,0x7a,0xb3,0x33,0xf7,0x5e,0xa0,0x3, 0xa, 0x1a,0x3e,0x14, ++0x7e,0x1f,0x3b,0x8, 0x1b,0x1a,0x10,0x7e,0xf, 0x3b,0x8, 0x2e,0x14,0x0, 0x84,0xb, ++0xa, 0x30,0x4e,0x70,0x20,0x1b,0xa, 0x30,0x74,0x1, 0x12,0x13,0x8b,0x7e,0xf, 0x33, ++0xfc,0xb, 0xa, 0x30,0x4e,0x70,0xc, 0x1b,0xa, 0x30,0xa9,0xd3,0xcd,0x7e,0xf, 0x33, ++0xfc,0xb, 0x15,0xb, 0xa, 0x30,0x4e,0x70,0x1, 0x1b,0xa, 0x30,0x22,0x7f,0x10,0xa9, ++0xd6,0xcb,0x69,0x11,0x0, 0x2, 0x7e,0x2f,0x3, 0xfc,0x79,0x12,0x0, 0x4, 0x69,0x11, ++0x0, 0x4, 0x7e,0x2f,0x3, 0xfc,0x79,0x12,0x0, 0x6, 0x69,0x11,0x0, 0x6, 0x7e,0x2f, ++0x3, 0xfc,0x79,0x12,0x0, 0x8, 0x7e,0x1b,0x30,0xa, 0x3, 0x7e,0x14,0x1, 0x0, 0xad, ++0x10,0x29,0x71,0x0, 0x1, 0xa, 0x37,0x2d,0x31,0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, ++0xc, 0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10,0x7e,0x34,0x0, 0x60,0x12,0xf, ++0x45,0xa9,0xc6,0xcb,0x22,0xa9,0xd7,0xcb,0x7d,0x23,0x4e,0x50,0x1, 0x7e,0xf, 0x3, ++0xfc,0xb, 0xa, 0x30,0x4d,0x32,0x1b,0xa, 0x30,0x80,0x1e,0x7e,0xf, 0x3, 0xfc,0xb, ++0xa, 0x30,0x7d,0x23,0x5e,0x24,0x0, 0x8, 0xbe,0x24,0x0, 0x8, 0x78,0xb, 0xa9,0xd7, ++0xcb,0x4e,0x70,0x4, 0x1b,0xa, 0x30,0xd2,0x1c,0x7e,0xf, 0x3, 0xfc,0xb, 0xa, 0x30, ++0x7d,0x23,0x5e,0x24,0x80,0x0, 0xbe,0x24,0x80,0x0, 0x78,0xcf,0x4e,0x60,0x40,0x1b, ++0xa, 0x30,0x6d,0x11,0x7e,0x1f,0x3, 0xfc,0x1b,0x1a,0x10,0x22,0xca,0x3b,0xf5,0x24, ++0x7f,0x41,0x7f,0x30,0xe5,0x25,0x7e,0x8, 0x0, 0x26,0x12,0x1, 0x20,0x6c,0xaa,0x80, ++0x36,0xa, 0x3a,0x2d,0x39,0x7d,0x28,0x7e,0x1b,0xb0,0xbe,0xb1,0x27,0x40,0xd, 0x74, ++0x1c,0xa, 0x4a,0x7f,0x3, 0x2d,0x14,0x7a,0xb, 0xb0,0x80,0x19,0x7e,0x1b,0xb0,0xa, ++0x3b,0x2e,0x35,0x2a,0x7a,0x71,0x82,0x7a,0x61,0x83,0xe4,0x93,0xa, 0x4a,0x7f,0x13, ++0x2d,0x34,0x7a,0x1b,0xb0,0xb, 0xa0,0xe5,0x24,0xbc,0xba,0x38,0xc4,0xda,0x3b,0x22, ++0x5, 0x63,0x31,0x20,0x18,0x13,0xf, 0xd, 0xc, 0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, ++0xca,0xf8,0x7d,0xe2,0x7d,0xd3,0x7c,0xfb,0xbe,0x30,0x1, 0x28,0x6, 0x7e,0xf4,0x0, ++0x10,0x80,0xf, 0xbe,0x30,0x0, 0x28,0x6, 0x7e,0xf4,0x0, 0x8, 0x80,0x4, 0x7e,0xf4, ++0x0, 0x4, 0x7d,0x1f,0x6d,0x0, 0x6d,0x33,0x7e,0x24,0x0, 0x10,0x12,0x1f,0x8d,0x7f, ++0x1, 0x7d,0x3d,0x6d,0x22,0x12,0x1f,0x20,0x7d,0x1e,0x12,0x1f,0x3a,0x74,0x4, 0xac, ++0xbf,0x7e,0xf, 0x3b,0x10,0x2d,0x15,0x79,0x30,0x0, 0x82,0x79,0x20,0x0, 0x80,0xda, ++0xf8,0x22,0xca,0x7b,0xca,0x6b,0xca,0x5b,0xca,0x4b,0xca,0x2b,0xca,0x1b,0xca,0xb, ++0xc0,0xd0,0xc0,0x83,0xc0,0x82,0xd2,0x1b,0x7e,0xf, 0x33,0xfc,0xb, 0xa, 0x30,0x7c, ++0x57,0x7a,0x53,0x33,0xf7,0x4e,0x70,0xc, 0x1b,0xa, 0x30,0xc2,0xc6,0x6d,0x33,0x7e, ++0xf, 0x33,0xfc,0x79,0x30,0x0, 0xe, 0x12,0x12,0xd3,0x12,0x89,0xef,0xd0,0x82,0xd0, ++0x83,0xd0,0xd0,0xda,0xb, 0xda,0x1b,0xda,0x2b,0xda,0x4b,0xda,0x5b,0xda,0x6b,0xda, ++0x7b,0x32,0x74,0x3, 0x12,0x13,0x8b,0xa9,0xd1,0xc4,0x7e,0xf, 0x3b,0x8, 0x2e,0x14, ++0x0, 0x84,0xb, 0xa, 0x30,0x4e,0x70,0x20,0x1b,0xa, 0x30,0x7e,0x14,0x0, 0x1, 0x7e, ++0x1f,0x3b,0x8, 0x1b,0x1a,0x10,0x7e,0xf, 0x3b,0x10,0xb, 0x16,0xb, 0xa, 0x30,0x4e, ++0x70,0x1, 0x1b,0xa, 0x30,0xc2,0xf, 0xe4,0x7a,0xb3,0x3b,0x20,0x7e,0x1f,0x3b,0x8, ++0xb, 0x1a,0x30,0x5e,0x34,0x0, 0x1, 0x78,0xf3,0x74,0x2, 0x2, 0x13,0x8b,0x7c,0x6b, ++0x6c,0xaa,0x80,0x17,0x7e,0x90,0x2, 0xac,0x9a,0x7e,0x7f,0x33,0xf8,0x2d,0xf4,0xb, ++0x7a,0x20,0x7f,0x70,0x2d,0xf4,0x1b,0x7a,0x20,0xb, 0xa0,0xbc,0x7a,0x38,0xe5,0x6c, ++0xaa,0x80,0x20,0x7e,0x50,0x2, 0xac,0x5a,0x7e,0x7f,0x33,0xf8,0x2d,0xf2,0x69,0x27, ++0x0, 0x38,0xa, 0xf7,0xa, 0x4a,0x2d,0x4f,0x3e,0x44,0x7f,0x70,0x2d,0xf4,0x1b,0x7a, ++0x20,0xb, 0xa0,0xbc,0x6a,0x38,0xdc,0x22,0xca,0x79,0x7c,0xab,0x5e,0xa0,0x3, 0x6c, ++0x77,0x7e,0x50,0x2, 0xac,0x57,0x7f,0x60,0x2d,0xd2,0x29,0x66,0x0, 0x1, 0xa, 0xf6, ++0x7d,0x4f,0x7c,0x89,0x6c,0x99,0x7d,0xf4,0x7e,0x6b,0x60,0xa, 0x46,0x2d,0x4f,0x7e, ++0xf0,0xf0,0xac,0xfa,0x2d,0x27,0x7e,0x7f,0x33,0xf8,0x2d,0xf2,0x79,0x47,0x2, 0x54, ++0xb, 0x70,0xbe,0x70,0xe, 0x40,0xca,0xda,0x79,0x22,0x29,0x50,0x0, 0xf5,0xac,0x5b, ++0x7e,0xf, 0x3b,0x10,0x69,0x30,0x0, 0xc, 0xa, 0x56,0x3e,0x54,0xbe,0x24,0x2, 0x0, ++0x40,0x4, 0x7e,0x24,0x1, 0xff,0xbd,0x25,0x28,0x1f,0x2e,0x14,0x0, 0xc, 0x6c,0x66, ++0x1b,0xa, 0x30,0x1e,0x24,0x7c,0x45,0x6c,0x55,0x7e,0xf, 0x3b,0x10,0x2e,0x14,0x0, ++0xc, 0xb, 0xa, 0x30,0x4d,0x32,0x1b,0xa, 0x30,0x22,0x7c,0x6b,0x6c,0xaa,0x7e,0x50, ++0x28,0xac,0x57,0x7e,0x90,0x2, 0xac,0x9a,0x2d,0x42,0x7e,0x50,0xf0,0xac,0x56,0x2d, ++0x24,0x7e,0x7f,0x33,0xf8,0x2d,0xf2,0x69,0x27,0x1, 0x8c,0x6c,0x44,0xa, 0x4a,0x7f, ++0x60,0x2d,0xd4,0x7e,0x6b,0xb0,0x7c,0x8b,0x6c,0x99,0x4d,0x24,0x79,0x27,0x1, 0x8c, ++0xb, 0xa0,0xbe,0xa0,0xe, 0x40,0xc7,0x22,0x7c,0x6b,0x6c,0xaa,0x7e,0x50,0x28,0xac, ++0x57,0x7e,0x90,0x2, 0xac,0x9a,0x2d,0x42,0x7e,0x50,0xf0,0xac,0x56,0x2d,0x24,0x7e, ++0x7f,0x33,0xf8,0x2d,0xf2,0x69,0x27,0x1, 0x8c,0x6c,0x55,0xa, 0x4a,0x7f,0x60,0x2d, ++0xd4,0x7e,0x6b,0xb0,0xa, 0x4b,0x4d,0x24,0x79,0x27,0x1, 0x8c,0xb, 0xa0,0xbe,0xa0, ++0xe, 0x40,0xc9,0x22,0xa9,0xd6,0xcb,0x54,0x3f,0x5e,0x70,0x1f,0x7c,0x2b,0x6c,0x33, ++0x3e,0x14,0x3e,0x14,0x2e,0x14,0x0, 0x5, 0xa, 0x37,0x3e,0x34,0x3e,0x34,0x3e,0x34, ++0x3e,0x34,0x3e,0x34,0x2d,0x31,0x7e,0xf, 0x3, 0xfc,0x79,0x30,0x0, 0x2, 0x7e,0xf, ++0x3, 0xfc,0x79,0x20,0x0, 0x14,0xa9,0xc6,0xcb,0x22,0x12,0x5f,0xfc,0x7c,0x6b,0x12, ++0xbd,0x89,0x7c,0x7b,0x6c,0xaa,0xbe,0x60,0x15,0x68,0x4, 0xa5,0xbf,0x15,0x1f,0xbc, ++0x76,0x68,0x5, 0x7e,0xa0,0xf1,0x80,0xb, 0x12,0xbf,0xae,0xbe,0xb0,0x51,0x68,0x3, ++0x7e,0xa0,0xf2,0x7c,0xba,0x12,0xbf,0xa9,0x4c,0xaa,0x68,0x2, 0x80,0xfe,0x22,0x7d, ++0x23,0x6c,0x66,0x7e,0x30,0x2, 0xac,0x36,0x2e,0x14,0x20,0xc7,0x7a,0x31,0x82,0x7a, ++0x21,0x83,0xe4,0x93,0xa, 0x1b,0xbd,0x12,0x28,0x7, 0xb, 0x60,0xbe,0x60,0x14,0x40, ++0xe2,0x7e,0x70,0x2, 0xac,0x67,0x2e,0x34,0x20,0xc8,0x7a,0x71,0x82,0x7a,0x61,0x83, ++0xe4,0x93,0x22,0x7e,0xf, 0x3b,0x8, 0x2e,0x14,0x0, 0x84,0xb, 0xa, 0x30,0x5e,0x70, ++0xdf,0x1b,0xa, 0x30,0x74,0x3, 0x12,0x13,0x8b,0x7e,0x14,0x0, 0x3, 0x7e,0x1f,0x3b, ++0x8, 0x1b,0x1a,0x10,0x7e,0x1f,0x3b,0x8, 0xb, 0x1a,0x30,0x5e,0x34,0x0, 0x1, 0x78, ++0xf3,0xe4,0x2, 0x13,0x8b,0x2e,0x34,0x4, 0x0, 0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, ++0x60,0x7e,0x34,0x4, 0x0, 0x9d,0x32,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x62,0x7e, ++0x34,0x0, 0x1, 0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x64,0xa, 0x3b,0x7e,0xf, 0x3b, ++0x10,0x79,0x30,0x0, 0x66,0x22,0x7c,0xa5,0xbe,0x34,0x0, 0x0, 0x28,0x10,0xa, 0x1b, ++0x3e,0x14,0x7d,0x23,0x7c,0x45,0x6c,0x55,0x2d,0x21,0xa, 0x3a,0x80,0x8, 0xa, 0x2b, ++0x3e,0x24,0x7c,0x67,0x6c,0x77,0x2d,0x32,0x7e,0xf, 0x33,0xfc,0x79,0x30,0x0, 0x4, ++0x22,0x7c,0xa7,0x7e,0x1f,0x3b,0x8, 0x69,0x41,0x0, 0x8a,0x5e,0x44,0x10,0xf, 0xa, ++0x1a,0x3e,0x14,0x3e,0x14,0x3e,0x14,0x3e,0x14,0xa, 0x5b,0xc4,0x23,0x54,0xe0,0x7c, ++0xab,0xe4,0x2d,0x51,0x4d,0x45,0x79,0x41,0x0, 0x8a,0x22,0x7e,0xf, 0x3b,0x8, 0x69, ++0x30,0x0, 0x84,0x5e,0x70,0xe7,0x1b,0xb1,0x68,0xc, 0x14,0x68,0xc, 0xb, 0xb1,0x78, ++0x5, 0x4e,0x70,0x10,0x80,0x3, 0x4e,0x70,0x8, 0x79,0x30,0x0, 0x84,0x22,0x7e,0x34, ++0x0, 0x1f,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x4, 0xa9,0xd2,0xcd,0x7e,0xf, 0x3b, ++0x10,0xb, 0xa, 0x30,0x4e,0x70,0x1, 0x1b,0xa, 0x30,0x22,0xbe,0xb0,0x0, 0x28,0xa, ++0xa9,0xd7,0xca,0xa9,0xd3,0xcb,0xa9,0xd2,0xcb,0x22,0xa9,0xc7,0xca,0xa9,0xc3,0xcb, ++0xa9,0xc2,0xcb,0x22,0x30,0x1, 0xa, 0x54,0x3, 0xa, 0x3b,0x2e,0x34,0x2, 0x0, 0x80, ++0x2, 0x6d,0x33,0x7e,0xf, 0x3b,0x10,0x79,0x30,0x0, 0x3a,0x22,0x7e,0xf, 0x3b,0x8, ++0x69,0x30,0x0, 0x8a,0x60,0x5, 0x4e,0x60,0x10,0x80,0x3, 0x5e,0x60,0xef,0x79,0x30, ++0x0, 0x8a,0x22,0xbe,0xb0,0x0, 0x28,0x9, 0xa9,0xd6,0xca,0xd2,0xcd,0xa9,0xd1,0xcb, ++0x22,0xa9,0xc6,0xca,0xc2,0xcd,0xa9,0xc1,0xcb,0x22,0x7e,0x34,0x0, 0xf, 0x7e,0xf, ++0x3b,0x10,0x79,0x30,0x0, 0x4, 0xc2,0xc3,0xd2,0xeb,0x22,0x6, 0xe, 0x15,0x1a,0x1f, ++0x26,0x2b,0x2d,0x2e,0x2f,0x2c,0x2a,0x24,0x1f,0x1a,0x14,0xf, 0x8, 0x3, 0x3, 0x6, ++0xb, 0x10,0x15,0x1c,0x22,0x28,0x2d,0x34,0x39,0x3d,0x40,0xe, 0x3, 0x0, 0x0, 0x0, ++0x3, 0x8, 0xc, 0x11,0x16,0x1c,0x23,0x2b,0x32,0x37,0x3c,0x40,0x45,0x4a,0x4d,0x4c, ++0x4b,0x4a,0x48,0x46,0x46,0x45,0x45,0x44,0x44,0x43,0x44,0x45,0x78,0x65,0x55,0x2, ++0xd, 0x14,0x1b,0x21,0x25,0x2b,0x31,0x37,0x36,0x33,0x2d,0x28,0x20,0x19,0x14,0xd, ++0x8, 0x1, 0x2, 0x5, 0xb, 0x10,0x18,0x1e,0x23,0x2a,0x30,0x35,0x3a,0x3e,0x3f,0x0, ++0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0x9, 0xf, 0x15,0x1d,0x24,0x2a,0x30, ++0x35,0x3b,0x3e,0x3f,0x40,0x3f,0x3e,0x3d,0x3d,0x3c,0x3c,0x3b,0x3b,0x39,0x37,0x1a, ++0x2d,0x65,0x55,0x1b,0x29,0x27,0x1e,0x14,0x11,0x1a,0x26,0x2e,0x37,0x3d,0x3f,0x3d, ++0x37,0x2e,0x21,0x16,0xc, 0x5, 0x1, 0x0, 0x0, 0x1, 0x3, 0xa, 0x13,0x1d,0x26,0x2e, ++0x33,0x38,0x3a,0x16,0x21,0x2b,0x32,0x30,0x2a,0x27,0x2a,0x2f,0x2d,0x24,0x1a,0x10, ++0x7, 0x1, 0x0, 0x2, 0x7, 0x10,0x19,0x23,0x2d,0x36,0x41,0x49,0x4c,0x4a,0x45,0x3c, ++0x34,0x2a,0x27,0x51,0x71,0x50,0x55,0x28,0x12,0x11,0x18,0x23,0x29,0x2b,0x2a,0x2e, ++0x35,0x3c,0x3e,0x3f,0x39,0x31,0x28,0x1e,0x15,0xe, 0x6, 0x3, 0x1, 0x0, 0x0, 0x3, ++0xc, 0x16,0x20,0x2b,0x32,0x37,0x39,0x20,0x29,0x32,0x37,0x31,0x28,0x21,0x2a,0x31, ++0x2d,0x23,0x1b,0x13,0x8, 0x1, 0x0, 0x1, 0x5, 0xc, 0x18,0x20,0x29,0x34,0x3e,0x47, ++0x4f,0x50,0x4d,0x45,0x3c,0x34,0x31,0x26,0xcb,0x50,0x55,0x1d,0x2f,0x2c,0x25,0x1a, ++0x1b,0x20,0x29,0x31,0x31,0x2e,0x2d,0x35,0x3d,0x3f,0x3d,0x38,0x2c,0x22,0x15,0xd, ++0x6, 0x1, 0x0, 0x1, 0x6, 0x10,0x1b,0x24,0x2f,0x38,0x3d,0xd, 0x1b,0x27,0x31,0x32, ++0x28,0x1e,0x14,0x15,0x1d,0x28,0x31,0x34,0x2a,0x1f,0x14,0x9, 0x1, 0x0, 0x4, 0xd, ++0x17,0x21,0x2c,0x35,0x40,0x47,0x47,0x44,0x3c,0x34,0x30,0x1b,0x82,0x50,0x55,0x19, ++0x2e,0x2a,0x1f,0x18,0x1b,0x22,0x2d,0x30,0x2e,0x2e,0x35,0x3d,0x3f,0x3d,0x3a,0x2f, ++0x24,0x18,0xf, 0x7, 0x1, 0x0, 0x0, 0x3, 0xb, 0x16,0x1e,0x29,0x32,0x3a,0x3d,0x11, ++0x1f,0x28,0x32,0x30,0x26,0x1b,0x14,0x1c,0x25,0x2e,0x35,0x2e,0x23,0x19,0x11,0x4, ++0x0, 0x1, 0x8, 0x10,0x1c,0x25,0x30,0x38,0x40,0x42,0x3f,0x39,0x32,0x2c,0x27,0xc0, ++0xd1,0x50,0x55,0x18,0x2c,0x29,0x1e,0x14,0x13,0x16,0x1e,0x29,0x30,0x2e,0x2c,0x2b, ++0x37,0x3d,0x3f,0x3e,0x39,0x30,0x25,0x1b,0x10,0x8, 0x1, 0x0, 0x2, 0x9, 0x13,0x1f, ++0x2d,0x38,0x3c,0x11,0x1a,0x23,0x2f,0x33,0x29,0x20,0x16,0xe, 0x13,0x1d,0x28,0x32, ++0x31,0x28,0x1e,0x16,0xb, 0x2, 0x0, 0x1, 0x8, 0x12,0x1e,0x29,0x33,0x3b,0x3f,0x3c, ++0x32,0x29,0x26,0x30,0x6e,0x50,0x55,0x16,0x2b,0x24,0x17,0xd, 0xa, 0xe, 0x15,0x24, ++0x28,0x25,0x23,0x2b,0x36,0x3b,0x3d,0x3b,0x37,0x2b,0x20,0x15,0xb, 0x4, 0x0, 0x0, ++0x3, 0xe, 0x19,0x27,0x33,0x3d,0x3f,0x13,0x21,0x2e,0x37,0x3a,0x31,0x27,0x1c,0x13, ++0x1c,0x28,0x34,0x3e,0x37,0x2d,0x22,0x18,0xc, 0x1, 0x0, 0x3, 0xd, 0x18,0x25,0x31, ++0x3c,0x47,0x48,0x42,0x38,0x2e,0x2a,0x31,0x62,0x50,0x55,0x35,0x2e,0x27,0x22,0x1f, ++0x1b,0x16,0x10,0xc, 0x8, 0x6, 0x4, 0x2, 0x0, 0x0, 0x0, 0x1, 0x3, 0x6, 0xb, 0xe, ++0x12,0x17,0x1d,0x22,0x26,0x2a,0x30,0x35,0x39,0x3d,0x3f,0x0, 0x0, 0x1, 0x4, 0x6, ++0x8, 0xb, 0x10,0x16,0x1b,0x1f,0x23,0x28,0x2d,0x32,0x36,0x3b,0x40,0x44,0x48,0x4a, ++0x4b,0x4c,0x4b,0x4a,0x48,0x46,0x43,0x40,0x3e,0x3c,0x3a,0x3c,0x9c,0x34,0x55,0x9, ++0x17,0x1d,0x26,0x2e,0x37,0x3c,0x3f,0x3b,0x33,0x2b,0x22,0x1a,0x11,0xb, 0x5, 0x3, ++0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x6, 0xa, 0x11,0x19,0x22,0x2a,0x32,0x39,0x3d,0x30, ++0x30,0x2f,0x2c,0x26,0x1e,0x17,0xd, 0x5, 0x0, 0x0, 0x1, 0x6, 0xe, 0x15,0x1e,0x26, ++0x2c,0x32,0x3a,0x41,0x48,0x50,0x5b,0x61,0x64,0x64,0x60,0x5b,0x56,0x51,0x4f,0xd8, ++0x2c,0x33,0x55,0x26,0x1c,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x15, ++0xf, 0x9, 0x4, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, 0xb, 0x12,0x18,0x1f,0x28,0x31, ++0x37,0x3c,0x40,0x1, 0x7, 0xe, 0x14,0x1c,0x23,0x2c,0x34,0x3e,0x44,0x4c,0x54,0x5b, ++0x60,0x5d,0x55,0x4f,0x49,0x43,0x3d,0x38,0x32,0x2b,0x26,0x22,0x1f,0x1e,0x1c,0x1c, ++0x1c,0x1c,0x1d,0x66,0x54,0x74,0x55,0x3e,0x2c,0x21,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, ++0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1a,0x11,0xc, 0x7, 0x2, 0x0, 0x0, 0x3, ++0xa, 0x12,0x1c,0x23,0x2c,0x38,0x40,0xc, 0x0, 0x6, 0xf, 0x17,0x22,0x29,0x32,0x3b, ++0x41,0x47,0x4f,0x55,0x5c,0x66,0x71,0x79,0x3e,0x76,0x6d,0x64,0x5a,0x52,0x4b,0x42, ++0x39,0x35,0x33,0x32,0x32,0x31,0x31,0xf3,0xdb,0x74,0x55,0x9, 0x7, 0x6, 0x6, 0x5, ++0x5, 0x4, 0x4, 0x4, 0x4, 0x3, 0x2, 0x2, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, ++0xa, 0x10,0x14,0x1b,0x22,0x28,0x2e,0x34,0x39,0x3d,0x40,0x0, 0xb, 0x11,0x16,0x1b, ++0x22,0x28,0x2c,0x33,0x39,0x40,0x46,0x4d,0x52,0x56,0x5c,0x61,0x68,0x6d,0x73,0x73, ++0x71,0x71,0x71,0x70,0x70,0x6f,0x6f,0x6f,0x6f,0x6d,0x6e,0x79,0x80,0x44,0x55,0x17, ++0x13,0x12,0x12,0x11,0x10,0xf, 0xd, 0xc, 0xb, 0x9, 0x8, 0x7, 0x4, 0x3, 0x2, 0x1, ++0x0, 0x0, 0x0, 0x1, 0x4, 0xb, 0x10,0x16,0x1d,0x24,0x29,0x31,0x39,0x3d,0x40,0x0, ++0xe, 0x16,0x1a,0x1f,0x24,0x29,0x2e,0x33,0x38,0x3e,0x43,0x47,0x50,0x55,0x59,0x62, ++0x69,0x6e,0x75,0x7c,0xff,0x7d,0x7c,0x79,0x73,0x6d,0x68,0x60,0x5a,0x57,0x56,0x5d, ++0x8, 0x44,0x55,0x0, 0x7, 0xb, 0xd, 0x10,0x12,0x16,0x17,0x17,0x18,0x18,0x19,0x19, ++0x19,0x1c,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x30,0x32,0x33,0x35,0x38,0x39, ++0x3b,0x3d,0x3f,0x3e,0x29,0x1f,0x18,0xf, 0x7, 0x6, 0xc, 0x12,0x1d,0x25,0x2d,0x36, ++0x3e,0x3b,0x35,0x2c,0x26,0x20,0x19,0x11,0xa, 0x3, 0x3, 0x9, 0x10,0x18,0x24,0x2c, ++0x33,0x3a,0x3e,0x60,0x9b,0x32,0x55,0x0, 0x5, 0x5, 0x5, 0x4, 0x3, 0x2, 0x3, 0x5, ++0x7, 0xa, 0xe, 0x11,0x19,0x1b,0x1c,0x1d,0x1c,0x1c,0x1d,0x1f,0x22,0x25,0x2a,0x31, ++0x33,0x35,0x37,0x38,0x39,0x3c,0x40,0x0, 0x12,0x1c,0x24,0x2b,0x34,0x3c,0x39,0x2f, ++0x29,0x21,0x16,0xf, 0xd, 0x14,0x1e,0x2a,0x33,0x31,0x27,0x20,0x18,0x10,0x7, 0xa, ++0x10,0x1a,0x26,0x2f,0x37,0x3d,0x3f,0xfb,0x8f,0x32,0x55,0x2c,0x23,0x1f,0x19,0x13, ++0xc, 0x7, 0x3, 0x0, 0x0, 0x0, 0x1, 0x5, 0xa, 0xf, 0x16,0x1d,0x23,0x2a,0x30,0x36, ++0x3b,0x3e,0x40,0x3f,0x3e,0x3b,0x38,0x33,0x2f,0x2b,0x28,0x9, 0x1, 0x0, 0x1, 0x3, ++0x9, 0xe, 0x14,0x1b,0x21,0x27,0x2e,0x36,0x3b,0x3e,0x41,0x41,0x40,0x3d,0x3a,0x36, ++0x2f,0x2b,0x26,0x20,0x1c,0x16,0x10,0xc, 0xa, 0x9, 0xb, 0x36,0xdc,0x30,0x55,0x1a, ++0x9, 0x5, 0x1, 0x0, 0x0, 0x0, 0x2, 0x5, 0x9, 0xf, 0x16,0x1c,0x22,0x2a,0x31,0x36, ++0x39,0x3c,0x3e,0x3f,0x3f,0x3d,0x38,0x30,0x27,0x1f,0x18,0x12,0xb, 0x6, 0x5, 0x7, ++0x12,0x19,0x22,0x2c,0x36,0x3f,0x49,0x53,0x5c,0x63,0x66,0x64,0x5f,0x58,0x4c,0x43, ++0x3d,0x34,0x2b,0x22,0x1b,0x15,0xb, 0x4, 0x0, 0x0, 0x1, 0x4, 0xb, 0x13,0x18,0xf1, ++0xc, 0x30,0x55,0x18,0x2c,0x34,0x39,0x3c,0x3d,0x3f,0x3f,0x3f,0x3d,0x3b,0x36,0x30, ++0x2a,0x24,0x1c,0x16,0xd, 0x6, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x3, 0x5, 0x9, 0xf, ++0x17,0x1e,0x24,0x1, 0x2, 0x8, 0xe, 0x14,0x1a,0x21,0x28,0x30,0x37,0x40,0x49,0x50, ++0x55,0x59,0x5c,0x5c,0x58,0x51,0x48,0x3f,0x38,0x31,0x2b,0x25,0x1d,0x17,0x11,0xa, ++0x4, 0x1, 0x1, 0x9d,0xbf,0x30,0x55,0x16,0x7, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4, ++0x8, 0xe, 0x16,0x1f,0x28,0x30,0x38,0x3c,0x3e,0x3f,0x40,0x3f,0x3f,0x3d,0x3b,0x37, ++0x32,0x2c,0x25,0x1d,0x16,0xf, 0xc, 0x53,0x46,0x3e,0x35,0x2e,0x27,0x20,0x1a,0x14, ++0xd, 0x6, 0x1, 0x0, 0x0, 0x3, 0xa, 0x13,0x1a,0x20,0x27,0x2d,0x33,0x3a,0x40,0x48, ++0x4f,0x54,0x58,0x5a,0x5a,0x58,0x57,0xc6,0x55,0x30,0x55,0x7, 0x1, 0x4, 0xa, 0x10, ++0x18,0x20,0x2a,0x32,0x38,0x3c,0x3e,0x3f,0x3e,0x3d,0x3b,0x39,0x35,0x30,0x27,0x21, ++0x19,0x12,0xb, 0x6, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32,0x1d,0x12,0x9, 0x5, ++0x1, 0x0, 0x0, 0x1, 0x5, 0xd, 0x17,0x20,0x2a,0x32,0x3b,0x45,0x4e,0x58,0x63,0x69, ++0x6b,0x6a,0x64,0x5d,0x57,0x4f,0x47,0x40,0x38,0x32,0x2f,0x1a,0xb5,0x30,0x55,0x21, ++0x13,0xc, 0x8, 0x5, 0x2, 0x1, 0x0, 0x0, 0x1, 0x3, 0x8, 0xf, 0x17,0x1e,0x24,0x2b, ++0x32,0x39,0x3d,0x3e,0x3f,0x3f,0x3d,0x3a,0x36,0x30,0x29,0x21,0x1a,0x16,0x13,0x5, ++0x9, 0xe, 0x14,0x1a,0x22,0x29,0x30,0x38,0x3f,0x47,0x4d,0x51,0x51,0x4f,0x4d,0x49, ++0x42,0x39,0x31,0x2b,0x25,0x1e,0x17,0x10,0x8, 0x3, 0x0, 0x0, 0x1, 0x3, 0x5, 0xaf, ++0x13,0x30,0x55,0x38,0x3f,0x3d,0x3a,0x36,0x2e,0x26,0x1f,0x14,0xb, 0x6, 0x2, 0x0, ++0x0, 0x0, 0x1, 0x2, 0x5, 0x9, 0xe, 0x14,0x1c,0x23,0x2a,0x34,0x38,0x3a,0x3b,0x3d, ++0x3d,0x3d,0x3d,0x29,0x1a,0x10,0x9, 0x4, 0x0, 0x0, 0x1, 0x4, 0xc, 0x14,0x1c,0x22, ++0x28,0x2f,0x37,0x3f,0x47,0x4f,0x56,0x5a,0x5b,0x59,0x56,0x4e,0x47,0x40,0x37,0x30, ++0x28,0x22,0x1f,0x2a,0xa9,0x30,0x55,0x3e,0x3b,0x38,0x33,0x2b,0x24,0x1d,0x16,0x10, ++0x7, 0x3, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x3, 0x6, 0xc, 0x15,0x1c,0x23,0x29,0x2f, ++0x35,0x38,0x3b,0x3c,0x3e,0x3f,0x3f,0x1f,0x10,0xa, 0x6, 0x0, 0x0, 0x0, 0x2, 0x4, ++0xc, 0x12,0x18,0x1e,0x25,0x2c,0x35,0x3c,0x42,0x4a,0x51,0x56,0x56,0x53,0x4e,0x49, ++0x40,0x3a,0x33,0x2c,0x25,0x1f,0x1c,0xf9,0xa2,0x30,0x55,0x1f,0x2b,0x31,0x35,0x38, ++0x3b,0x3e,0x3f,0x3f,0x3d,0x3a,0x34,0x2d,0x27,0x23,0x1d,0x17,0x10,0x9, 0x4, 0x1, ++0x0, 0x0, 0x1, 0x3, 0x6, 0xa, 0xf, 0x15,0x1b,0x20,0x23,0x45,0x42,0x3e,0x38,0x34, ++0x2d,0x24,0x1c,0x15,0x11,0xb, 0x6, 0x2, 0x0, 0x0, 0x0, 0x1, 0x3, 0x7, 0xd, 0x12, ++0x18,0x20,0x28,0x30,0x36,0x3c,0x42,0x47,0x48,0x49,0x4a,0x65,0x9d,0x30,0x55,0x1c, ++0x2a,0x33,0x39,0x3c,0x3e,0x3f,0x3f,0x3e,0x3d,0x3a,0x35,0x2e,0x28,0x23,0x1c,0x15, ++0xf, 0x9, 0x4, 0x1, 0x0, 0x0, 0x1, 0x1, 0x4, 0x8, 0xd, 0x13,0x19,0x1e,0x22,0x40, ++0x3e,0x3a,0x33,0x2f,0x29,0x22,0x1b,0x15,0x10,0xa, 0x5, 0x1, 0x0, 0x0, 0x1, 0x2, ++0x5, 0xa, 0x11,0x17,0x1c,0x24,0x2a,0x30,0x35,0x3b,0x40,0x43,0x44,0x45,0x45,0xcb, ++0xc6,0x30,0x55,0x5, 0x3, 0x4, 0x7, 0xa, 0x10,0x17,0x21,0x28,0x2e,0x33,0x38,0x3c, ++0x3e,0x3f,0x3f,0x3e,0x3b,0x38,0x31,0x29,0x21,0x18,0xf, 0x9, 0x4, 0x1, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x26,0x35,0x3d,0x45,0x4b,0x51,0x53,0x52,0x4f,0x4c,0x46,0x41,0x3b, ++0x34,0x2e,0x25,0x1e,0x17,0x11,0x9, 0x3, 0x0, 0x0, 0x2, 0x6, 0xc, 0x12,0x18,0x1e, ++0x24,0x2c,0x31,0xf4,0xb6,0x30,0x55,0xa, 0x5, 0x5, 0x5, 0x8, 0xf, 0x16,0x20,0x29, ++0x31,0x36,0x3a,0x3c,0x3e,0x3f,0x3f,0x3e,0x3c,0x3a,0x33,0x2d,0x24,0x1c,0x14,0xf, ++0x8, 0x4, 0x0, 0x0, 0x0, 0x1, 0x2, 0x35,0x46,0x4e,0x56,0x5d,0x65,0x68,0x66,0x60, ++0x57,0x4f,0x47,0x3f,0x37,0x2e,0x25,0x1e,0x16,0x10,0x6, 0x2, 0x0, 0x1, 0x5, 0xb, ++0x15,0x1d,0x28,0x2f,0x39,0x41,0x45,0xf0,0xbc,0x30,0x55,0x7, 0x3, 0x3, 0x3, 0x4, ++0x7, 0xf, 0x17,0x20,0x28,0x30,0x36,0x3b,0x3d,0x3f,0x3f,0x3d,0x39,0x36,0x2d,0x25, ++0x1d,0x16,0xd, 0x8, 0x2, 0x0, 0x0, 0x1, 0x2, 0x3, 0x5, 0x2e,0x3f,0x48,0x50,0x59, ++0x5f,0x67,0x68,0x63,0x5d,0x52,0x4a,0x3e,0x35,0x2b,0x20,0x18,0x10,0xa, 0x3, 0x0, ++0x0, 0x1, 0x7, 0xe, 0x19,0x22,0x2b,0x31,0x3a,0x42,0x47,0xef,0xc9,0x30,0x55,0x3b, ++0x3c,0x3c,0x3b,0x39,0x36,0x2f,0x27,0x21,0x19,0x11,0xb, 0x5, 0x1, 0x0, 0x0, 0x1, ++0x2, 0x4, 0x6, 0xa, 0x10,0x16,0x1f,0x26,0x2d,0x33,0x39,0x3c,0x3e,0x3f,0x3f,0x22, ++0x31,0x3b,0x41,0x47,0x4d,0x56,0x59,0x5a,0x58,0x55,0x51,0x4b,0x43,0x3d,0x35,0x29, ++0x20,0x18,0x11,0x9, 0x3, 0x0, 0x0, 0x1, 0x3, 0x7, 0xf, 0x15,0x1b,0x21,0x26,0x2b, ++0xa0,0x30,0x55,0x37,0x38,0x37,0x34,0x2d,0x26,0x1c,0x16,0xe, 0x9, 0x4, 0x2, 0x0, ++0x0, 0x0, 0x1, 0x2, 0x5, 0xa, 0x10,0x17,0x20,0x26,0x2e,0x35,0x3a,0x3c,0x3e,0x3f, ++0x3f,0x3e,0x3e,0x30,0x40,0x49,0x50,0x59,0x5e,0x60,0x5d,0x56,0x50,0x47,0x41,0x39, ++0x33,0x2a,0x20,0x1a,0x10,0xa, 0x5, 0x1, 0x0, 0x0, 0x3, 0x8, 0x10,0x17,0x1f,0x25, ++0x2f,0x38,0x3c,0x37,0xc3,0x30,0x55,0x3b,0x3d,0x3d,0x3b,0x38,0x32,0x27,0x1c,0x13, ++0xe, 0x8, 0x3, 0x0, 0x0, 0x0, 0x1, 0x3, 0x7, 0xb, 0x12,0x18,0x20,0x28,0x31,0x39, ++0x3d,0x3f,0x40,0x3f,0x3f,0x3e,0x3e,0x33,0x45,0x4e,0x57,0x5d,0x65,0x6c,0x6a,0x66, ++0x63,0x5c,0x53,0x4a,0x40,0x38,0x2e,0x25,0x1a,0x11,0x8, 0x4, 0x0, 0x0, 0x2, 0x9, ++0x10,0x19,0x21,0x2a,0x32,0x39,0x3e,0x7, 0x90,0x30,0x55,0x39,0x2b,0x24,0x1c,0x15, ++0xe, 0x9, 0x6, 0x5, 0x6, 0x9, 0x10,0x19,0x22,0x27,0x2e,0x35,0x3b,0x3e,0x3f,0x3d, ++0x38,0x32,0x2c,0x26,0x1f,0x19,0x13,0xb, 0x5, 0x1, 0x0, 0x6, 0x0, 0x1, 0x2, 0x6, ++0xb, 0x11,0x17,0x1d,0x24,0x2a,0x2f,0x32,0x34,0x35,0x36,0x37,0x3b,0x41,0x47,0x4e, ++0x56,0x5d,0x61,0x64,0x65,0x65,0x63,0x60,0x5c,0x57,0x54,0xd1,0x4a,0x46,0x55,0x0, ++0x1, 0x3, 0x5, 0x7, 0x8, 0xa, 0xb, 0xc, 0xe, 0xf, 0x11,0x12,0x14,0x16,0x1a,0x1e, ++0x22,0x24,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3a,0x3c,0x3e,0x3f,0x3f,0x1, ++0xe, 0x14,0x1b,0x23,0x28,0x2e,0x35,0x3a,0x40,0x48,0x4f,0x56,0x5d,0x62,0x61,0x5a, ++0x53,0x4e,0x47,0x40,0x3b,0x35,0x2d,0x29,0x22,0x1b,0x17,0x10,0x9, 0x5, 0x1, 0x6d, ++0x7d,0x54,0x55,0x0, 0x2, 0x3, 0x5, 0x6, 0x8, 0xb, 0x10,0x13,0x16,0x17,0x19,0x1b, ++0x1d,0x1f,0x21,0x22,0x22,0x22,0x22,0x23,0x25,0x28,0x2e,0x31,0x34,0x36,0x38,0x3a, ++0x3c,0x3e,0x3f,0x6, 0x17,0x20,0x27,0x30,0x38,0x3e,0x39,0x32,0x2b,0x25,0x1e,0x18, ++0x10,0x9, 0x9, 0x10,0x18,0x1f,0x26,0x2f,0x36,0x3c,0x38,0x2f,0x27,0x1f,0x18,0xf, ++0x8, 0x1, 0x2, 0xc7,0x75,0x31,0x55,0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x3, 0x8, 0xd, ++0x12,0x15,0x17,0x18,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1f,0x22,0x27,0x2e,0x35,0x38, ++0x3b,0x3d,0x3e,0x3f,0x40,0x3f,0x3e,0x6, 0x15,0x1b,0x23,0x29,0x2f,0x37,0x3c,0x37, ++0x2e,0x27,0x20,0x1a,0x13,0xe, 0x14,0x1a,0x21,0x27,0x2f,0x38,0x3f,0x3d,0x35,0x2e, ++0x26,0x20,0x18,0x11,0xb, 0x3, 0x0, 0x67,0x3f,0x31,0x55,0x0, 0x1, 0x2, 0x3, 0x4, ++0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14, ++0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, ++0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x0, 0x1, 0x2, 0x3, 0x4, ++0x5, 0x6, 0x7, 0x8, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x0, 0x1, 0x2, ++0x3, 0x4, 0x1c,0x1d,0x1e,0x1f,0x20,0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x10,0x11,0x12, ++0x13,0x14,0x15,0x16,0x17,0x18,0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, ++0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x6, ++0x5, 0x4, 0x3, 0x2, 0x1, 0x0, 0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x0, 0x0, 0x0, 0x1, ++0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x0, 0x1, ++0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,0x11, ++0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x0, 0x1, 0x2, 0x3, 0x4, 0x5, ++0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10,0x11,0x12,0x13,0x14,0x15, ++0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x0, 0x1, 0x1, ++0x1, 0x10,0x1c,0x2, 0x10,0x1c,0x0, 0x1, 0x1, 0x4, 0xf, 0x1c,0x0, 0x1, 0x1, 0x6, ++0x1b,0xf, 0x7, 0xe, 0x1c,0x8, 0x23,0x15,0x0, 0x1, 0x1, 0xa, 0x10,0x19,0xb, 0x14, ++0x1c,0xc, 0xf, 0x18,0x0, 0x1, 0x1, 0xe, 0x23,0x15,0xf, 0xd, 0x19,0x0, 0x1, 0x1, ++0x11,0xd, 0x14,0x12,0x10,0x19,0x13,0x1c,0x10,0x14,0x1a,0x10,0x15,0x10,0x19,0x16, ++0x23,0x1c,0x72,0x23,0x15,0x73,0x23,0x1c,0x74,0x23,0x1c,0x75,0xe, 0x1c,0xc2,0xd5, ++0x7c,0xb4,0x30,0xe7,0x8, 0xb2,0xd5,0x6e,0x24,0xff,0xff,0xb, 0x24,0x7c,0xb6,0x30, ++0xe7,0x12,0xb2,0xd5,0x6e,0x34,0xff,0xff,0xb, 0x34,0x8d,0x32,0x6e,0x24,0xff,0xff, ++0xb, 0x24,0x80,0x2, 0x8d,0x32,0x30,0xd5,0x6, 0x6e,0x34,0xff,0xff,0xb, 0x34,0x22, ++0x7d,0x51,0xad,0x3, 0x7d,0x2, 0x7d,0x21,0xad,0x5, 0x2d,0x12,0xad,0x35,0x2d,0x21, ++0x22,0x7d,0x2, 0xad,0x31,0xad,0x10,0x2d,0x21,0x22,0x6d,0x0, 0x74,0x10,0x4d,0x0, ++0x78,0xb, 0x4d,0x22,0x78,0x27,0x8d,0x31,0x7d,0x12,0x6d,0x22,0x22,0x7d,0x43,0x7d, ++0x32,0x6d,0x22,0x2f,0x11,0x2d,0x44,0x50,0x2, 0xa5,0xf, 0xbf,0x10,0x40,0x4, 0x9f, ++0x10,0xb, 0x90,0x14,0x78,0xed,0x7f,0x1, 0x6d,0x22,0x7d,0x34,0x22,0x7d,0x41,0x7d, ++0x13,0x8d,0x24,0x7d,0x2, 0x2f,0x0, 0x40,0x4, 0xbd,0x4, 0x40,0x4, 0x9d,0x4, 0xb, ++0x14,0x14,0x78,0xf1,0x7d,0x23,0x7d,0x31,0x7d,0x10,0x6d,0x0, 0x22,0xc2,0xd5,0x7c, ++0xb0,0x30,0xe7,0x8, 0xb2,0xd5,0x9f,0x22,0x9f,0x20,0x7f,0x2, 0x7c,0xb4,0x30,0xe7, ++0x13,0xb2,0xd5,0x9f,0x22,0x9f,0x21,0x7f,0x12,0x12,0x1f,0x3c,0x9f,0x22,0x9f,0x20, ++0x7f,0x2, 0x80,0x3, 0x12,0x1f,0x3c,0x30,0xd5,0x6, 0x9f,0x22,0x9f,0x21,0x7f,0x12, ++0x22,0x6c,0xaa,0x4d,0x11,0x68,0x1a,0x1e,0x54,0x68,0xe, 0xb, 0x38,0x20,0x1b,0x18, ++0x20,0xb, 0x35,0xb, 0x15,0x1b,0x54,0x78,0xf2,0x50,0x6, 0x7e,0x39,0x40,0x7a,0x19, ++0x40,0x22,0x6c,0xaa,0x4d,0x11,0x68,0x1e,0x1e,0x54,0x50,0xc, 0x7e,0x1b,0x0, 0x7a, ++0x19,0x0, 0x68,0x12,0xb, 0x1c,0xb, 0x14,0xb, 0x1a,0x0, 0x1b,0x18,0x0, 0xb, 0x1d, ++0xb, 0x15,0x1b,0x54,0x78,0xf2,0x22,0x75,0x84,0x1, 0x7e,0x44,0x3f,0xff,0xe4,0x7a, ++0x49,0xb0,0x1b,0x44,0x78,0xf9,0x7e,0xf8,0x3b,0x62,0x75,0xc, 0x0, 0x75,0xd, 0x0, ++0x75,0xe, 0x2, 0x75,0xf, 0x0, 0xc2,0x8, 0xc2,0x9, 0x75,0x1e,0x0, 0xc2,0x10,0xc2, ++0x11,0x75,0x18,0x0, 0xc2,0xa, 0xc2,0x12,0x75,0x1f,0x0, 0x75,0x5a,0x0, 0xc2,0x14, ++0x75,0x5b,0x0, 0xc2,0x16,0x75,0x5c,0x0, 0xc2,0x17,0xc2,0x18,0xc2,0xc, 0x75,0x1c, ++0x0, 0x75,0x1d,0x64,0xc2,0x19,0xc2,0x1a,0x75,0x5d,0x0, 0xd2,0x5, 0xd2,0x6, 0xd2, ++0x7, 0xd2,0x1b,0xc2,0xe, 0xd2,0xf, 0x7e,0x4, 0x0, 0xff,0x7e,0x14,0x21,0x58,0xb, ++0xa, 0x40,0x5d,0x44,0x68,0x1a,0x69,0x20,0x0, 0x2, 0xb, 0xe, 0xb, 0x44,0x80,0xa, ++0x7e,0xb, 0xb0,0x7a,0x29,0xb0,0xb, 0x24,0xb, 0xc, 0x1b,0x44,0x78,0xf2,0x80,0xdf, ++0x2, 0x3f,0xec,0x0, 0x0, 0x0, 0x47,0x0, 0xcb,0x1, 0x0, 0x0, 0x10,0xfd,0xc7,0xfb, ++0x7e,0xfb,0xfb,0x1, 0xbb,0xc, 0x9e,0x19,0x0, 0x21,0x45,0x0, 0xe, 0x1, 0xf, 0x2, ++0x10,0x3, 0x11,0x4, 0x12,0x5, 0x13,0x6, 0x14,0x7, 0x15,0x8, 0x16,0x9, 0x17,0xa, ++0x18,0xb, 0x19,0xc, 0x1a,0xd, 0x1b,0xdf,0x22,0xc3,0x21,0xa9,0x20,0x94,0x1f,0x81, ++0x1e,0x70,0x1d,0x62,0x1c,0x55,0x1b,0x4a,0x1a,0x41,0x19,0x38,0x18,0x31,0x17,0x2b, ++0x16,0x25,0x15,0x21,0x14,0x1c,0x13,0x19,0x12,0x16,0x11,0x13,0x10,0x11,0xf, 0x10, ++0xe, 0xca,0xf8,0x7f,0x20,0x80,0xa, 0x7e,0x1b,0xf0,0x7a,0x2b,0xf0,0xb, 0x34,0xb, ++0x54,0x69,0xff,0xff,0xfc,0x7d,0xef,0x1b,0xe4,0x79,0xef,0xff,0xfc,0x4d,0xff,0x78, ++0xe6,0x7f,0x10,0xda,0xf8,0x22,0x7d,0x43,0x7f,0x10,0x80,0x7, 0x1b,0x44,0x7a,0xb, ++0xb0,0xb, 0x14,0x4d,0x44,0x78,0xf5,0x22,0x32,0x1, 0x19,0x1, 0x0, 0x2, 0xf8,0x4, ++0xe7,0x5, 0xce,0x6, 0xc2,0x7, 0xb5,0x8, 0xff,0x0, 0x1, 0x2, 0x0, 0xff,0x1, 0x2, ++0x0, 0x1, 0xff,0x2, 0x0, 0x1, 0x2, 0xff,0x7d,0x23,0xbe,0x24,0x0, 0x0, 0x48,0x3, ++0x7d,0x32,0x22,0x6d,0x33,0x9d,0x32,0x22,0x0, 0x4, 0x36,0xae,0x0, 0x0, 0x0, 0x0, ++0x0, 0x1, 0x34,0x4f,0x1, 0x0, 0x1, 0x25,0xf6,0x1, 0x0, 0x1, 0x39,0xe3,0x0, 0x0, ++0x2, 0x3a,0x35,0x0, 0x0, 0x0, 0x2, 0x3a,0x37,0x0, 0x0, 0x0, 0x1, 0x3a,0x39,0x0, ++0x0, 0x1, 0x3b,0x5f,0x0, 0x0, 0x1, 0x3b,0x60,0x0, 0x0, 0x2, 0x30,0x19,0x0, 0x0, ++0x0, 0x1, 0x30,0x3c,0x0, 0x0, 0x1, 0x31,0xcd,0x0, 0x0, 0x1, 0x31,0xce,0x0, 0x0, ++0x3c,0x38,0xb1,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x1, 0x38,0x2d,0x1, 0x0, 0x2, 0x38,0x30,0x0, 0x0, 0x0, 0x1, 0x34,0x88,0x0, 0x0, ++0x1, 0x34,0x89,0x0, 0x0, 0x1, 0x34,0x8a,0x0, 0x0, 0x1, 0x38,0x34,0x1, 0x0, 0x1, ++0x38,0xae,0x0, 0x0, 0x1, 0x3b,0x61,0x0, 0x0, 0x6, 0x3b,0x4b,0x3f,0x1f,0x50,0x11, ++0x20,0x10,0x0, 0x1, 0x3b,0x51,0x24,0x0, 0x1, 0x3b,0x58,0x0, 0x0, 0x1, 0x3b,0x59, ++0x0, 0x0, 0x1, 0x3b,0x5a,0x0, 0x0, 0x1, 0x3b,0x5b,0x0, 0x0, 0x1, 0x3b,0x5c,0x0, ++0x0, 0x1, 0x0, 0x5e,0x0, 0x0, 0x1, 0x3, 0xfb,0x0, 0x0, 0x1, 0x31,0xf9,0x0, 0x0, ++0x2, 0x32,0x1a,0x0, 0x0, 0x0, 0x1, 0x32,0x58,0x0, 0x0, 0x4, 0x39,0x88,0x0, 0x0, ++0x0, 0x0, 0x0, 0x1, 0x3b,0x52,0x0, 0x0, 0x1, 0x3b,0x53,0x0, 0x0, 0x2, 0x3b,0x54, ++0x0, 0x0, 0x0, 0x1, 0x3b,0x56,0x64,0x0, 0x1, 0x3b,0x57,0x0, 0x0, 0x1, 0x3b,0x62, ++0x0, 0x0, 0x1, 0x3b,0x5d,0x0, 0x0, 0x1, 0x3b,0x5e,0x0, 0x0, 0x2, 0x2b,0xb9,0x2b, ++0xbf,0x0, 0x1, 0x2f,0x7f,0x2, 0x0, 0x1, 0x2f,0xa8,0x0, 0x0, 0x1, 0x3b,0x36,0x0, ++0x0, 0x1, 0x3a,0x86,0xff,0x0, 0x1, 0x3a,0x87,0x0, 0x0, 0x1, 0x3a,0x88,0x0, 0x0, ++0x1, 0x3a,0x89,0x40,0x0, 0x1, 0x3a,0x8a,0x40,0x0, 0x4, 0x33,0xf8,0x0, 0x0, 0x50, ++0x0, 0x0, 0x4, 0x33,0xfc,0x0, 0x0, 0x64,0x0, 0x0, 0x4, 0x3b,0x8, 0x0, 0x0, 0x6c, ++0x0, 0x0, 0x4, 0x3b,0xc, 0x0, 0x0, 0x68,0xc0,0x0, 0x4, 0x3b,0x10,0x0, 0x0, 0x68, ++0x0, 0x0, 0x4, 0x3b,0x21,0x0, 0x0, 0x40,0x0, 0x0, 0x4, 0x3, 0xfc,0x0, 0x0, 0x60, ++0x0, 0x0, 0x0, 0x3, 0xe8,0x0, 0xc, 0x1, 0xf4,0x3, 0x20,0x0, 0xa, 0x1, 0x4a,0x2, ++0xbc,0x0, 0x9, 0x0, 0xc8,0x1, 0xf4,0x0, 0x6, 0x0, 0x3c,0x1, 0x2c,0x0, 0x6, 0x0, ++0x3c,0x0, 0x64,0x0, 0x6, 0x0, 0x3c,0x0, 0x50,0x0, 0x6, 0x0, 0x0, 0x0, 0xe, 0x1c, ++0x23,0x5, 0xdc,0x0, 0x32,0x3, 0xe8,0x0, 0x28,0x0, 0x0, 0x0, 0x1e,0x12,0x46,0xd1, ++0x12,0x5f,0xa6,0x12,0x23,0x36,0x12,0x28,0x6e,0x12,0x6c,0xe8,0x2, 0x23,0x2f,0x74, ++0x1, 0x7a,0xb3,0x38,0x38,0x22,0x12,0x71,0xc7,0x12,0x23,0x6b,0x2, 0x23,0x3f,0x7e, ++0x34,0x0, 0x3, 0x6d,0x22,0x2, 0x23,0x48,0x7d,0x43,0x7e,0xa3,0x34,0x38,0xbe,0xa0, ++0x5, 0x50,0x16,0x7e,0x70,0x4, 0xac,0x7a,0x59,0x43,0x34,0x3b,0x59,0x23,0x34,0x3d, ++0x7c,0xba,0x4, 0x7a,0xb3,0x34,0x38,0xc3,0x22,0xd3,0x22,0x6d,0x33,0x7e,0x24,0x6, ++0xfc,0x12,0x23,0x48,0x7e,0x34,0x0, 0x1, 0x7e,0x24,0x7, 0x7a,0x2, 0x23,0x48,0x7e, ++0x34,0x60,0xa3,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12,0x68,0x48,0x12,0x71,0x7e,0x12, ++0x46,0xd1,0x12,0x5f,0x9f,0x12,0xc8,0x76,0x12,0x23,0x36,0x12,0x28,0x6e,0x12,0x5f, ++0x93,0x12,0x6c,0xe8,0x2, 0x23,0x2f,0x7e,0x34,0x61,0x4f,0x7e,0x24,0x0, 0xff,0xb, ++0x1a,0x30,0x7a,0x37,0x2a,0x5a,0x7e,0x34,0x61,0x51,0x7e,0x24,0x0, 0xff,0xb, 0x1a, ++0x30,0x7a,0x37,0x2a,0x5c,0x7e,0x34,0x61,0x53,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x30, ++0x22,0x7e,0x34,0x61,0x55,0x12,0x23,0xc9,0x7a,0x37,0x28,0x95,0x7e,0x34,0x61,0xba, ++0x12,0x23,0xc9,0x7a,0x37,0x28,0x99,0x7e,0x34,0x61,0xb8,0x12,0x23,0xc9,0x7a,0x37, ++0x28,0x97,0x7e,0x34,0x62,0x12,0x12,0x23,0xc9,0x7a,0x37,0x28,0x9b,0x7e,0x34,0x61, ++0xbc,0x12,0x23,0xc9,0x7a,0x37,0x28,0x9d,0x7e,0x34,0x61,0xbe,0x12,0x23,0xc9,0x7a, ++0x37,0x28,0x9f,0x7e,0x34,0x61,0xc0,0x12,0x23,0xc9,0x7a,0x37,0x28,0xa1,0x7e,0x34, ++0x61,0xc2,0x12,0x23,0xc9,0x7a,0x37,0x28,0xa3,0x90,0x61,0xc4,0xe4,0x93,0x7a,0xb3, ++0x28,0xa5,0xe4,0x7a,0xb3,0x28,0xa8,0x12,0xb7,0xaa,0x3e,0x34,0x7e,0x8, 0x25,0xf7, ++0xe4,0x2, 0x21,0x16,0x12,0x25,0xf2,0x7e,0xb3,0x38,0x3f,0xb4,0x1, 0x16,0x7e,0x34, ++0x62,0x34,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x5a,0x7e,0x34,0x62,0x36,0x12,0x23,0xc9, ++0x7a,0x37,0x2a,0x5c,0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x37,0x7e,0x34,0x62,0x3e,0x12, ++0x23,0xc9,0x7a,0x37,0x2a,0x5a,0x7e,0x34,0x62,0x40,0x12,0x23,0xc9,0x7a,0x37,0x2a, ++0x5c,0x7e,0x34,0x62,0x42,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x4f,0x7e,0x34,0x62,0x44, ++0x12,0x23,0xc9,0x7a,0x37,0x2a,0x51,0x7e,0x34,0x62,0x46,0x12,0x23,0xc9,0x7a,0x37, ++0x2a,0x53,0x7e,0xb3,0x2a,0x2, 0x70,0x21,0x7e,0x27,0x2a,0x5a,0x7d,0x32,0x7e,0x14, ++0x0, 0x4, 0xad,0x13,0x7d,0x31,0x12,0x25,0x6f,0xbe,0x34,0x0, 0x50,0x28,0x4, 0x7e, ++0x34,0x0, 0x50,0x2d,0x32,0x7a,0x37,0x2a,0x5a,0x22,0x7e,0x54,0x0, 0x54,0x7e,0x44, ++0x0, 0xff,0x69,0x32,0x0, 0x4, 0x69,0x22,0x0, 0x2, 0xb, 0x2a,0x10,0x7a,0x1d,0x26, ++0x7a,0x15,0x24,0x7e,0x34,0x0, 0x20,0x7e,0x8, 0x0, 0x24,0x7e,0x24,0x0, 0x6, 0x12, ++0x69,0x9f,0x7e,0x34,0x61,0x4f,0x12,0x23,0xc9,0x1e,0x34,0x1e,0x34,0x7a,0x73,0x39, ++0x29,0x7e,0x34,0x61,0x51,0x12,0x23,0xc9,0xe, 0x34,0xe, 0x34,0x7a,0x73,0x39,0x2a, ++0x7e,0x34,0x61,0x55,0x12,0x23,0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2b,0x7e,0x34, ++0x61,0x57,0x12,0x23,0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2c,0x7e,0x34,0x61,0x59, ++0x12,0x23,0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2d,0x7e,0x34,0x61,0x5b,0x12,0x23, ++0xc9,0x12,0x25,0x6f,0x7a,0x73,0x39,0x2e,0x7e,0x34,0x0, 0x59,0xca,0x39,0x7e,0x34, ++0x61,0x5f,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x39,0x2f,0x12,0x20,0xf1,0x1b,0xfd,0xe5, ++0x25,0x7a,0xb3,0x39,0x5a,0xe5,0x28,0x7a,0xb3,0x39,0x49,0x22,0xb, 0x28,0x30,0x1e, ++0x34,0x1e,0x34,0x1e,0x34,0x1e,0x34,0x22,0x90,0x60,0x99,0xe4,0x93,0x7a,0xb3,0x2a, ++0x4d,0x90,0x60,0x9e,0xe4,0x93,0x7a,0xb3,0x2a,0x4e,0x7e,0x34,0x61,0x55,0x12,0x23, ++0xc9,0x12,0xc8,0xe9,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x51,0x7e,0x14,0x61,0x59,0x12, ++0x5f,0xec,0x7a,0x27,0x2a,0x53,0x7a,0x37,0x2a,0x55,0x90,0x60,0x9d,0xe4,0x93,0x7a, ++0xb3,0x2a,0x59,0x12,0x23,0xa7,0x12,0xc8,0xc1,0x7e,0x34,0x62,0x12,0x12,0x23,0xc9, ++0x7a,0x37,0x2a,0x60,0x90,0x60,0x9f,0xe4,0x93,0x7a,0xb3,0x2a,0x64,0x90,0x60,0xa0, ++0xe4,0x93,0x7a,0xb3,0x2a,0x65,0x7e,0x34,0x60,0xa1,0x12,0x23,0xc9,0x7a,0x37,0x2a, ++0x66,0x7e,0x34,0x61,0x5b,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x62,0xe4,0x7a,0xb3,0x16, ++0x92,0x22,0x12,0x23,0xa7,0x12,0xc8,0xc1,0x7e,0x34,0x61,0x55,0x12,0x23,0xc9,0x12, ++0xc8,0xe9,0x12,0x23,0xc9,0x7a,0x37,0x2a,0x51,0x7e,0x34,0x61,0x59,0x12,0x23,0xc9, ++0x7a,0x37,0x2a,0x53,0x22,0xca,0xf8,0x7e,0xf3,0x39,0xe8,0xbe,0xf0,0x5, 0x78,0xb, ++0x74,0x1, 0x7a,0xb3,0x39,0xe8,0x12,0x0, 0x9, 0x80,0x52,0xbe,0xf0,0x4, 0x78,0x13, ++0x12,0xc8,0x61,0x12,0x23,0xc9,0x12,0x26,0x8a,0xe4,0x7a,0xb3,0x2b,0x2, 0x12,0x84, ++0xd5,0x80,0x3a,0xbe,0xf0,0x6, 0x78,0x19,0x12,0xc8,0x61,0x12,0x23,0xc9,0x12,0x26, ++0x8a,0x12,0x51,0x16,0xe4,0x7a,0xb3,0x2b,0x1e,0x12,0x7d,0xf0,0x12,0xc9,0xd, 0x80, ++0x1c,0xbe,0xf0,0x7, 0x78,0x1d,0x12,0xc8,0x61,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12, ++0x2f,0xe8,0x50,0xfb,0x12,0x7e,0x16,0x12,0x5f,0xaf,0x12,0x28,0x6e,0x74,0x2, 0x7a, ++0xb3,0x39,0xe8,0xda,0xf8,0x22,0x7e,0x34,0x3, 0xe8,0x6d,0x22,0x7a,0x27,0x3b,0x25, ++0x7a,0x37,0x3b,0x27,0x22,0x7e,0xb3,0x39,0x4e,0x14,0x68,0x5d,0x14,0x78,0x2, 0xe1, ++0x36,0x14,0x68,0x6d,0x24,0x3, 0x68,0x2, 0xe1,0x2e,0x12,0xc9,0x55,0x38,0x8, 0x30, ++0x13,0xf, 0x12,0xc9,0x4d,0x68,0xa, 0x12,0x58,0xdc,0xe4,0x7a,0xb3,0x3a,0xcd,0x80, ++0x75,0x7e,0xb3,0x39,0x2f,0x30,0xe0,0x6e,0x7e,0x73,0x39,0x30,0xa, 0x27,0x7e,0x34, ++0x4, 0x0, 0xad,0x32,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0xb, 0x7e,0x34,0x62,0x64,0x12, ++0x23,0xc9,0x2e,0x34,0x4, 0x0, 0xbe,0x37,0x3a,0xcb,0x50,0x4a,0x12,0x58,0xdc,0x12, ++0x5d,0x3e,0xe4,0x7a,0xb3,0x3a,0xcf,0x80,0x3d,0x12,0xc9,0x55,0x28,0x33,0xe4,0x7a, ++0xb3,0x39,0x4e,0x7e,0xb3,0x3a,0xcd,0xb4,0x1, 0x3, 0x12,0x5d,0x3e,0xd2,0x1a,0x80, ++0x20,0x7e,0x34,0x60,0xa5,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12,0x82,0x80,0x12,0x23, ++0x7f,0xe4,0x7a,0xb3,0x39,0x4e,0x7a,0xb3,0x3b,0x57,0xd2,0x1a,0x80,0x8, 0x12,0x5d, ++0x3e,0xe4,0x7a,0xb3,0x3b,0x57,0x12,0x83,0x70,0x2, 0x27,0x3c,0xca,0xd8,0xca,0x79, ++0x7e,0xb3,0x39,0x4e,0xb4,0x1, 0x2, 0x80,0x3, 0x2, 0x28,0x5e,0x6c,0xdd,0x6c,0xff, ++0x12,0x97,0x5c,0x7d,0xf3,0x12,0x2f,0xe8,0x50,0xfb,0x74,0x1, 0x7a,0xb3,0x3a,0xce, ++0x12,0x45,0x6e,0x12,0x13,0xfc,0x12,0x0, 0x1e,0x74,0xa, 0x12,0x4f,0x4a,0x12,0xc8, ++0xb9,0x7e,0xe7,0x2b,0xd, 0x7a,0xe5,0x24,0x7e,0xe3,0x2a,0xfa,0x74,0x4, 0x7a,0xb3, ++0x2a,0xfa,0x7e,0xe7,0x2b,0xd, 0x5e,0xe4,0x0, 0x3f,0x7a,0xe7,0x2b,0xd, 0x7e,0xb3, ++0x2a,0xfa,0x12,0xbf,0x62,0x7c,0x7b,0x74,0x4, 0xac,0x7b,0x7e,0x24,0x0, 0x4, 0x12, ++0x1e,0xee,0x7d,0x23,0x7d,0x3f,0x12,0x25,0x6f,0xad,0x32,0x7a,0x37,0x2b,0x7, 0x12, ++0x56,0xe7,0x12,0x26,0x86,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0x4, 0x74,0x10,0x80,0x2, ++0x74,0xf, 0x12,0x97,0xa8,0x12,0x57,0xbb,0x80,0xf, 0x80,0x7, 0x12,0x82,0xac,0xe4, ++0x12,0x82,0xe4,0x20,0x93,0xf6,0x12,0x83,0x98,0x30,0x1b,0xf7,0x30,0x1a,0xf4,0xd2, ++0x1, 0x12,0x4f,0xae,0xe4,0x12,0x14,0x13,0xb, 0xd0,0x12,0x54,0x8a,0x12,0x97,0xbf, ++0x7e,0xa3,0x3a,0xcd,0x4c,0xaa,0x78,0x6, 0x74,0x1, 0x7a,0xb3,0x3a,0xce,0x4c,0xaa, ++0x68,0xb, 0x7e,0xb3,0x39,0x79,0x70,0x5, 0xe4,0x7a,0xb3,0x3a,0xcd,0x12,0x28,0x63, ++0x78,0x18,0x7e,0xb3,0x3a,0xcd,0x60,0x12,0xe4,0x7a,0xb3,0x3a,0xcd,0x7a,0xb3,0x2a, ++0x2, 0x7a,0xb3,0x2a,0x3, 0x7e,0xf0,0x1, 0x80,0x1d,0x12,0x28,0x63,0x68,0x10,0x7e, ++0xb3,0x3a,0xcd,0x70,0xa, 0x7e,0xf0,0x1, 0xe4,0x7a,0xb3,0x39,0x4e,0x80,0x8, 0xbe, ++0xd0,0x32,0x50,0x3, 0x2, 0x27,0xb2,0xe4,0x7a,0xb3,0x2b,0x4, 0x7e,0x35,0x24,0x7a, ++0x37,0x2b,0xd, 0x7a,0xe3,0x2a,0xfa,0x4c,0xff,0x68,0x3, 0x12,0x28,0x6e,0xda,0x79, ++0xda,0xd8,0x22,0x7e,0x73,0x33,0xf7,0xa, 0x37,0x5e,0x34,0x0, 0x2, 0x22,0xe4,0x7a, ++0xb3,0x34,0x3a,0x7a,0xb3,0x34,0x39,0x12,0x56,0xa2,0xb4,0x1, 0x4, 0x74,0x1, 0x80, ++0x2, 0x74,0x3, 0x7a,0xb3,0x34,0x3a,0x22,0xca,0x3b,0x12,0x2f,0xe8,0x50,0xfb,0x7e, ++0xf3,0x2b,0xf, 0x7c,0xbf,0x12,0xac,0x55,0x12,0xbc,0xe, 0x7e,0xb3,0x2b,0x1f,0xf5, ++0x28,0x7e,0xb3,0x2b,0x20,0xf5,0x29,0x7e,0xb3,0x39,0x50,0xb4,0x1, 0xf, 0x12,0x6c, ++0xa1,0x7e,0xb3,0x16,0x91,0x70,0x6, 0x12,0x28,0x6e,0xc3,0x21,0x92,0x12,0x29,0x95, ++0x3e,0x34,0xca,0x39,0x7e,0x18,0x6, 0xfc,0x7e,0x8, 0x4, 0x7e,0x12,0x20,0xf1,0x1b, ++0xfd,0x12,0x29,0x95,0x3e,0x34,0xca,0x39,0x7e,0x18,0x7, 0x7a,0x7e,0x8, 0x4, 0x0, ++0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xb3,0x39,0x50,0xb4,0x3, 0x7, 0x12,0xa8,0x62,0x7a, ++0x37,0x3a,0x2b,0x74,0x1, 0x7a,0xb3,0x16,0x90,0x12,0x5f,0xa6,0x12,0xa8,0x4e,0x7e, ++0xc3,0x3, 0xfb,0x12,0x6b,0xb9,0xe4,0x12,0x14,0x13,0x12,0x28,0x6e,0x7e,0x8, 0x4, ++0x7e,0x7a,0xd, 0x2a,0x7e,0x18,0x6, 0x76,0x7e,0xb3,0x2b,0x72,0x12,0x85,0x70,0x7e, ++0x8, 0x4, 0x0, 0x7a,0xd, 0x2a,0x7e,0x18,0x5, 0xf8,0x7e,0xb3,0x25,0xf0,0x12,0x85, ++0x70,0x7e,0xd3,0x2b,0x1f,0x7e,0xe3,0x2b,0x20,0xe5,0x28,0x7a,0xb3,0x2b,0x1f,0xe5, ++0x29,0x12,0x7e,0x2a,0x50,0x5, 0x7c,0xbc,0x12,0x6f,0x53,0x7e,0x34,0x8, 0xa, 0x7e, ++0x4, 0xd, 0xc8,0x7d,0x20,0x7d,0x10,0x12,0x7b,0xeb,0x7a,0xd3,0x2b,0x1f,0x7a,0xe3, ++0x2b,0x20,0x7c,0xbf,0x12,0xab,0xf5,0x12,0xa7,0xc8,0x7e,0xb3,0x3b,0x57,0x4, 0x7a, ++0xb3,0x3b,0x57,0x7e,0x73,0x3b,0x57,0xbe,0x70,0xfa,0x28,0x6, 0x74,0x64,0x7a,0xb3, ++0x3b,0x57,0x7e,0xb3,0x16,0x90,0x60,0x9, 0x7e,0xb3,0x16,0x91,0x60,0x3, 0xd3,0x80, ++0x1, 0xc3,0xda,0x3b,0x22,0x7e,0x73,0x2a,0x74,0xa, 0x27,0x7e,0x73,0x2a,0x73,0xa, ++0x37,0x2d,0x32,0x22,0x12,0x50,0x9, 0x7e,0xb3,0x39,0x50,0xb4,0x3, 0x6c,0x12,0xbb, ++0x5a,0x12,0x26,0x86,0x12,0x47,0xc8,0x7e,0xb3,0x39,0xe4,0x30,0xe7,0xe9,0x12,0x28, ++0x88,0x12,0x29,0x95,0x3e,0x34,0xca,0x39,0x7e,0x18,0x4, 0x0, 0x7e,0x8, 0x4, 0xfc, ++0x12,0x20,0xf1,0x1b,0xfd,0x12,0x29,0x95,0x3e,0x34,0xca,0x39,0x7e,0x18,0x4, 0x7e, ++0x7e,0x8, 0x5, 0x7a,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xb3,0x2b,0x1d,0xb4,0x1, 0x18, ++0x12,0x3f,0xb9,0x12,0x79,0xd3,0x12,0x2f,0xf3,0x12,0xa6,0x96,0x12,0x7e,0xc5,0x12, ++0x2f,0x43,0x12,0x2a,0x29,0x12,0x57,0xf8,0x12,0x50,0x42,0x12,0xb3,0x8a,0x7e,0xb3, ++0x39,0xe4,0x54,0x7f,0x7a,0xb3,0x39,0xe4,0x80,0x8d,0x12,0x2f,0xd8,0x2, 0x0, 0x46, ++0x7a,0xb3,0x2b,0x2, 0x7a,0xb3,0x2b,0x1e,0x22,0x12,0x33,0x82,0x12,0x2c,0x1d,0x12, ++0xa4,0x50,0x12,0x2c,0x1d,0x12,0x37,0xbd,0x12,0x38,0x94,0x12,0x2c,0x1d,0x12,0x63, ++0x71,0x12,0x2c,0x1d,0x12,0x2c,0x1d,0x2, 0x2a,0x4a,0xca,0x3b,0x75,0x24,0x0, 0x6c, ++0xcc,0x6c,0xdd,0x7e,0xc4,0x0, 0x3c,0xca,0xc9,0x7e,0x18,0x38,0xed,0x7e,0x8, 0x38, ++0xb1,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xf3,0x28,0x84,0xa, 0xcf,0x3e,0xc4,0xca,0xc9, ++0x7e,0x18,0x26,0xfa,0x7e,0x8, 0x1f,0x34,0x12,0x20,0xf1,0x1b,0xfd,0x6c,0x88,0x6c, ++0xee,0x61,0x1e,0x7e,0xc4,0x3, 0xff,0x7e,0xc0,0xff,0x6c,0x99,0x80,0x4c,0x74,0x2, ++0xac,0xb9,0x9, 0xb5,0x1f,0x34,0xbe,0xb0,0xff,0x68,0x3d,0x7c,0xb9,0x12,0x2d,0xb6, ++0x60,0x36,0x74,0x2, 0xac,0xb9,0x9, 0x75,0x1f,0x35,0xa, 0x27,0x74,0x2, 0xac,0xbe, ++0x9, 0x75,0x38,0xee,0xa, 0x37,0x12,0x8f,0x29,0x74,0x2, 0xac,0xb9,0x9, 0x75,0x1f, ++0x34,0xa, 0x27,0x74,0x2, 0xac,0xbe,0x9, 0x75,0x38,0xed,0x12,0x67,0xb1,0x2d,0x13, ++0xbd,0xc1,0x28,0x4, 0x7d,0xc1,0x7c,0xc9,0xb, 0x90,0xbc,0xf9,0x38,0xb0,0xbe,0xc0, ++0xff,0x68,0x39,0x7e,0x70,0x2, 0xac,0x7c,0x9, 0xb3,0x1f,0x34,0x9, 0x73,0x1f,0x35, ++0x12,0x2c,0x63,0xbe,0x37,0x2a,0x5a,0x48,0x23,0x7e,0x70,0x2, 0xac,0x7c,0x9, 0x53, ++0x1f,0x34,0x74,0x2, 0xac,0xbd,0x19,0x55,0x1f,0x70,0x9, 0x53,0x1f,0x35,0x19,0x55, ++0x1f,0x71,0x74,0xff,0x19,0xb3,0x1f,0x34,0xb, 0x80,0xb, 0xd0,0xb, 0xe0,0x7e,0x73, ++0x38,0xb0,0xbc,0x7e,0x28,0x2, 0x41,0x83,0x7c,0xe8,0x80,0x6d,0x6d,0xdd,0x7e,0x80, ++0xff,0x6c,0x99,0x80,0x3c,0x7c,0xb9,0x12,0x2d,0xb6,0x60,0x33,0x12,0x2f,0xde,0xbe, ++0xb0,0xff,0x68,0x2b,0x9, 0x73,0x1f,0x35,0x12,0x92,0xc0,0x7f,0x71,0xb, 0x7a,0x50, ++0xbe,0x54,0x0, 0x0, 0x58,0x5, 0x6d,0x55,0x1b,0x7a,0x50,0xb, 0x7a,0xc0,0xbd,0xcd, ++0x8, 0xd, 0x12,0x2f,0xde,0xf5,0x24,0x9, 0xc3,0x1f,0x35,0x7d,0xdc,0x7c,0x89,0xb, ++0x90,0xbc,0xf9,0x38,0xc0,0xbe,0x80,0xff,0x68,0x1d,0x7e,0x71,0x24,0x74,0x2, 0xac, ++0xbd,0x19,0x75,0x1f,0x70,0x19,0xc5,0x1f,0x71,0x7e,0xa0,0xff,0x7e,0x70,0x2, 0xac, ++0x78,0x19,0xa3,0x1f,0x34,0xb, 0xd0,0xb, 0xe0,0x90,0x60,0x99,0xe4,0x93,0xbc,0xbe, ++0x38,0x8a,0x90,0x60,0x9a,0xe4,0x93,0x7c,0xab,0x74,0x2, 0xa4,0xca,0x59,0x7e,0x18, ++0x1f,0x70,0x7e,0x8, 0x1f,0x34,0x12,0x20,0xf1,0x1b,0xfd,0x7c,0xfd,0x12,0x8b,0x9c, ++0x7e,0x8, 0x38,0xed,0x74,0xff,0x12,0x21,0x16,0xbe,0xf0,0x0, 0x28,0x35,0xa, 0x3f, ++0x3e,0x34,0xca,0x39,0x7e,0x18,0x1f,0x34,0x7e,0x8, 0x26,0xfa,0x12,0x20,0xf1,0x1b, ++0xfd,0xa, 0x3f,0x3e,0x34,0xca,0x39,0x7e,0x18,0x1f,0x34,0x7e,0x8, 0x38,0xed,0x12, ++0x20,0xf1,0x1b,0xfd,0x6c,0xee,0x80,0x7, 0x7c,0xbe,0x12,0x33,0x1c,0xb, 0xe0,0xbc, ++0xfe,0x38,0xf5,0x7a,0xf3,0x38,0xb0,0x7a,0xf3,0x28,0x84,0x90,0x60,0x99,0xe4,0x93, ++0xbe,0xb3,0x28,0x84,0x50,0x4, 0x7a,0xb3,0x28,0x84,0xda,0x3b,0x22,0xca,0x79,0x6c, ++0xff,0x6c,0xee,0x80,0x2e,0x7c,0xbe,0x12,0x2d,0xb6,0x60,0x25,0x7e,0x34,0x0, 0x2, ++0xca,0x39,0xac,0x7e,0x2e,0x34,0x26,0xfa,0x6d,0x22,0x7e,0x30,0x2, 0xac,0x3f,0x2e, ++0x14,0x26,0xfa,0x6d,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0x7c,0xbf,0x12,0x33,0x1c,0xb, ++0xf0,0xb, 0xe0,0x12,0x3f,0xb2,0x38,0xcd,0x7a,0xf3,0x28,0x84,0xda,0x79,0x22,0x7c, ++0xba,0x7c,0x79,0x12,0x92,0xc0,0xb, 0x1a,0x30,0x22,0xca,0x3b,0x6d,0xee,0x7e,0xc3, ++0x2a,0x6e,0x7e,0xd3,0x2a,0x6d,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0x3, 0xe4,0xa1,0xa0, ++0x7e,0xb3,0x28,0x84,0x70,0x2, 0xa1,0xf, 0x7e,0xb3,0x2a,0x3, 0x60,0x2, 0x80,0x7f, ++0x7e,0xa3,0x26,0xfa,0x7e,0x73,0x26,0xfb,0x7a,0x71,0x24,0x6c,0xee,0x6d,0xff,0x6c, ++0xff,0xa, 0x47,0x80,0x20,0x12,0x2c,0x5f,0xbe,0x34,0x0, 0x96,0x8, 0x1d,0xb, 0xe0, ++0xbe,0xa0,0x0, 0x28,0x6, 0x7c,0xba,0x14,0x12,0x2d,0xa6,0x12,0x2f,0x3a,0x58,0x3, ++0x12,0x2d,0xa3,0x1b,0x44,0xbe,0x44,0x0, 0x0, 0x58,0xda,0xe5,0x24,0xa, 0x4b,0x80, ++0x1e,0x12,0x2c,0x5f,0xbe,0x34,0x0, 0x96,0x8, 0x21,0xb, 0xe0,0xbe,0xa0,0x0, 0x28, ++0x6, 0x7c,0xba,0x14,0x12,0x2d,0xa6,0x12,0x2f,0x3a,0x58,0x3, 0x12,0x2d,0xa3,0x7d, ++0x24,0xb, 0x24,0x7d,0x42,0xa, 0x3c,0xbd,0x23,0x48,0xd6,0xbe,0xe0,0x3, 0x50,0x2, ++0x80,0xd, 0xa, 0x2f,0x7d,0x3f,0x12,0x1e,0xee,0xbe,0x34,0x0, 0x28,0x8, 0x7, 0xe4, ++0x7a,0xb3,0x31,0xcd,0xa1,0xa0,0x6d,0xdd,0xbe,0xa0,0x0, 0x28,0x8, 0x7c,0xba,0x14, ++0x12,0x2d,0xb0,0x2d,0xd3,0xa, 0x3d,0x1b,0x34,0xa, 0xca,0xbd,0xc3,0x58,0x8, 0x7c, ++0xba,0x4, 0x12,0x2d,0xb0,0x2d,0xd3,0x7e,0x70,0x8, 0x80,0x2a,0x7e,0x50,0x2, 0xac, ++0x57,0x7d,0xc2,0x2e,0xc4,0x21,0x28,0x7d,0x1c,0x7a,0x31,0x82,0x7a,0x21,0x83,0xe4, ++0x93,0x1a,0xcb,0xbd,0xcd,0x8, 0xf, 0x7d,0xc2,0x2e,0xc4,0x21,0x29,0x7d,0x2c,0x12, ++0x87,0x7a,0x1a,0xcb,0x2d,0xec,0x7c,0x67,0x1b,0x70,0xa5,0xbe,0x0, 0xce,0x7c,0xba, ++0x12,0x2d,0xb0,0x12,0x21,0x48,0xbe,0x34,0xa, 0xf0,0x8, 0x4, 0x2e,0xe4,0x0, 0x28, ++0xbe,0xe4,0x0, 0xfa,0x28,0x4, 0x7e,0xe4,0x0, 0xfa,0x7e,0xb3,0x31,0xcd,0xa, 0x3b, ++0xbd,0x3e,0x50,0x8, 0x7d,0x3e,0x7c,0xb7,0x7a,0xb3,0x31,0xcd,0x7e,0xb3,0x31,0xcd, ++0xda,0x3b,0x22,0x7c,0xba,0x4, 0x7c,0x79,0x12,0x2c,0x63,0x2d,0xf3,0xb, 0xf0,0x22, ++0x7e,0x71,0x24,0x2, 0x2c,0x63,0x7c,0x7b,0x12,0x31,0xa2,0x9, 0xa2,0x27,0x72,0x7c, ++0xb7,0x54,0x7, 0xa, 0x3b,0x2e,0x34,0x0, 0x5e,0x12,0x97,0xb6,0x5c,0xba,0x22,0xca, ++0x3b,0x7f,0x40,0x7e,0xe3,0x28,0x84,0x6c,0xdd,0x7e,0xc0,0x1, 0x80,0x1a,0xa, 0x3d, ++0x2d,0x39,0x7d,0x28,0x7e,0x1b,0x60,0xa, 0x2c,0x7f,0x4, 0x2d,0x12,0x7e,0xb, 0x70, ++0xbc,0x76,0x40,0x2, 0x7c,0xdc,0xb, 0xc0,0xbc,0xec,0x38,0xe2,0xa, 0x3d,0x2d,0x39, ++0x7d,0x28,0x7e,0x1b,0xd0,0x6c,0xff,0x7e,0xc0,0x1, 0xe1,0x1d,0x75,0x2d,0x0, 0x6d, ++0x33,0x7a,0x35,0x2e,0x7a,0x35,0x25,0x7a,0x35,0x27,0x7e,0x18,0x1f,0x70,0x7a,0x1d, ++0x29,0x74,0xff,0x7e,0x34,0x1f,0x71,0x7e,0x24,0x0, 0x0, 0x7a,0x1b,0xb0,0x7e,0x1d, ++0x29,0x7a,0x1b,0xb0,0xe4,0x7e,0x1d,0x29,0x39,0xb1,0x0, 0x3, 0x7e,0x1d,0x29,0x39, ++0xb1,0x0, 0x2, 0x7e,0x1d,0x29,0x12,0x67,0xba,0x44,0x1, 0x7a,0x1b,0xb0,0x75,0x24, ++0x0, 0x80,0x6c,0x12,0xb7,0xcd,0x9, 0x93,0x26,0xfb,0xe5,0x24,0x12,0xc8,0x8a,0xbc, ++0xbc,0x78,0x5a,0x5, 0x2d,0xa, 0x3a,0x2e,0x35,0x25,0x7a,0x35,0x25,0xa, 0x39,0x2e, ++0x35,0x27,0x7a,0x35,0x27,0x12,0x2c,0x5f,0xbe,0x35,0x2e,0x8, 0x6, 0x12,0x2c,0x5f, ++0x7a,0x35,0x2e,0x7e,0x1d,0x29,0x7e,0x1b,0xb0,0xbc,0xba,0x28,0x3, 0x7a,0x1b,0xa0, ++0x7e,0x1d,0x29,0x29,0xb1,0x0, 0x2, 0xbc,0xba,0x50,0x4, 0x39,0xa1,0x0, 0x2, 0x7e, ++0x1d,0x29,0x29,0xb1,0x0, 0x1, 0xbc,0xb9,0x28,0x4, 0x39,0x91,0x0, 0x1, 0x7e,0x1d, ++0x29,0x29,0xb1,0x0, 0x3, 0xbc,0xb9,0x50,0x4, 0x39,0x91,0x0, 0x3, 0x5, 0x24,0xbe, ++0xe1,0x24,0x38,0x8f,0xe5,0x2d,0xbe,0xb0,0x0, 0x28,0x50,0x7e,0xd, 0x29,0x12,0x65, ++0xe4,0xe5,0x2d,0xa, 0x2b,0x7e,0x15,0x25,0x8d,0x12,0x7a,0x15,0x25,0x7e,0x35,0x27, ++0x8d,0x32,0x7a,0x35,0x27,0x7e,0x55,0x25,0x12,0x2f,0x32,0x19,0xa3,0x32,0x1c,0x7e, ++0x55,0x27,0x12,0x2f,0x32,0x19,0xa3,0x32,0x1d,0x7e,0x37,0x32,0x1a,0x4d,0x33,0x68, ++0x18,0x7e,0x55,0x25,0x7e,0x35,0x27,0x12,0x2c,0x63,0x7e,0x25,0x2e,0x7e,0x70,0x2, ++0xac,0x7f,0x2e,0x37,0x32,0x1a,0x1b,0x38,0x20,0xb, 0xf0,0xb, 0xc0,0xbc,0xdc,0x40, ++0x2, 0xc1,0xc, 0x12,0x64,0xb4,0x7c,0xbf,0xda,0x3b,0x22,0x7c,0xb8,0x7c,0x79,0x2, ++0x2c,0x63,0x7c,0xab,0x7e,0x70,0x2, 0xac,0x7f,0x22,0xa, 0x2d,0x1b,0x24,0xa, 0x3a, ++0xbd,0x32,0x22,0x12,0x95,0x8b,0x12,0x2c,0x6a,0x7a,0xb3,0x2a,0xc, 0x22,0x12,0x5f, ++0x80,0x12,0x88,0xc, 0x7e,0xb3,0x39,0x50,0xb4,0x1, 0x6b,0x12,0xbb,0x5a,0x7e,0x34, ++0x60,0xa5,0x12,0x23,0xc9,0x12,0x26,0x8a,0x12,0x97,0x63,0x12,0x8a,0xb6,0x12,0x28, ++0x88,0x50,0xde,0x12,0x3f,0xb9,0x12,0x79,0xd3,0x7e,0xb3,0x39,0x4d,0xb4,0x1, 0x4, ++0xe4,0x12,0x4e,0xbe,0x12,0x2f,0xf3,0x12,0xa6,0x96,0x12,0x62,0xbb,0x40,0xc2,0x12, ++0x7e,0xc5,0x12,0x62,0xbb,0x40,0xba,0x12,0x2f,0x43,0x12,0x2a,0x29,0x12,0x0, 0x66, ++0x12,0x96,0x89,0x12,0x99,0x1, 0x12,0x72,0x2f,0x12,0x8c,0x3b,0x12,0x8f,0x54,0x12, ++0x99,0x9c,0x12,0x76,0xd7,0x12,0xc1,0x6, 0x12,0x4c,0x5e,0x12,0x62,0xa5,0x12,0x26, ++0x95,0x12,0x58,0x82,0x80,0x8b,0x12,0x2f,0xd8,0x2, 0x2f,0xcc,0x7e,0xb3,0x39,0x4d, ++0xb4,0x1, 0x4, 0xe4,0x2, 0x4e,0xbe,0x22,0x12,0x2f,0xe8,0x50,0xfb,0x22,0x7e,0x70, ++0x2, 0xac,0x79,0x9, 0xb3,0x1f,0x34,0x22,0x7e,0xb3,0x34,0x3a,0xb4,0x1, 0x2, 0xc3, ++0x22,0xd3,0x22,0x12,0x24,0x44,0xe4,0x7a,0xb3,0x3b,0x5d,0x2, 0x2f,0xfe,0xe4,0x7a, ++0xb3,0x28,0x93,0x12,0x31,0xdd,0x7e,0xb3,0x16,0x91,0xb4,0x1, 0x8, 0x7e,0x73,0x28, ++0x84,0x7a,0x73,0x28,0x92,0x7e,0x18,0x4, 0xfc,0x7a,0x1f,0x6, 0xf8,0x12,0xc8,0x81, ++0x12,0x30,0x46,0x12,0x78,0x2d,0x7e,0xb3,0x16,0x90,0xb4,0x1, 0x18,0x7e,0x73,0x26, ++0x83,0x7a,0x73,0x26,0xf3,0x7e,0x73,0x26,0x85,0x7a,0x73,0x26,0xf5,0x7e,0x73,0x26, ++0x84,0x7a,0x73,0x26,0xf4,0x22,0x7e,0x8, 0x26,0x86,0x7e,0x34,0x0, 0x3, 0xe4,0x12, ++0x21,0x16,0x7e,0x8, 0x26,0x89,0x7e,0x34,0x0, 0x3, 0x12,0x21,0x16,0x7a,0xb3,0x26, ++0x83,0x7a,0xb3,0x26,0x84,0x7a,0xb3,0x26,0x85,0x7a,0xb3,0x26,0xf0,0x7a,0xb3,0x26, ++0xf1,0x7a,0xb3,0x26,0xf2,0x7e,0x18,0x26,0x6f,0x12,0x31,0xb4,0x6c,0x55,0x12,0x31, ++0xc, 0x7a,0xb3,0x26,0x85,0x7e,0x18,0x26,0x5b,0x12,0x31,0xc4,0x6c,0x55,0x12,0x31, ++0xc, 0x7a,0xb3,0x26,0x84,0x6c,0x77,0x80,0x14,0x12,0x31,0x95,0x60,0x5, 0x3e,0x24, ++0x14,0x78,0xfb,0x12,0x31,0x9e,0x2e,0x24,0x26,0x86,0x12,0x31,0xa9,0x7e,0x63,0x26, ++0x84,0xbc,0x67,0x38,0xe4,0x6c,0x77,0x80,0x14,0x12,0x31,0x95,0x60,0x5, 0x3e,0x24, ++0x14,0x78,0xfb,0x12,0x31,0x9e,0x2e,0x24,0x26,0x89,0x12,0x31,0xa9,0x7e,0xa3,0x26, ++0x85,0xbc,0xa7,0x38,0xe4,0x7e,0xb3,0x26,0x84,0xa4,0x7a,0xb3,0x26,0x83,0x7e,0x18, ++0x26,0xe6,0x12,0x31,0xb4,0x7e,0x50,0x1, 0x12,0x31,0xc, 0x7a,0xb3,0x26,0xf2,0x7e, ++0x18,0x26,0xdc,0x12,0x31,0xc4,0x7e,0x50,0x1, 0x12,0x31,0xc, 0x7c,0xab,0x7a,0xa3, ++0x26,0xf1,0x7e,0xb3,0x26,0xf2,0xa4,0x7a,0xb3,0x26,0xf0,0x22,0xca,0x69,0xca,0xf8, ++0x7c,0x4b,0x6c,0xaa,0x6d,0xff,0x6c,0xff,0x80,0x70,0x7e,0xd0,0x2, 0xac,0xdf,0x7f, ++0x60,0x2d,0xd6,0xb, 0x6a,0xe0,0x4c,0x55,0x68,0x6, 0x6e,0xe4,0xff,0xff,0xb, 0xe4, ++0xbd,0x3e,0x58,0x54,0x4c,0xff,0x78,0x8, 0x6d,0x44,0x69,0xf0,0x0, 0x2, 0x80,0x1b, ++0x7c,0xb4,0x14,0xbc,0xbf,0x7f,0x56,0x78,0x9, 0x1b,0xb5,0xb, 0x5a,0x40,0x6d,0xff, ++0x80,0x9, 0x1b,0xb5,0xb, 0x5a,0x40,0x69,0xf6,0x0, 0x2, 0x4c,0x55,0x68,0xc, 0x6e, ++0x44,0xff,0xff,0xb, 0x44,0x6e,0xf4,0xff,0xff,0xb, 0xf4,0xbd,0x4e,0x58,0x19,0xbd, ++0xfe,0x18,0x15,0xa, 0xba,0x7e,0x6d,0x24,0x2d,0xdb,0x7a,0x6b,0xf0,0xb, 0xa0,0x90, ++0x60,0x9b,0xe4,0x93,0xbc,0xba,0x28,0x6, 0xb, 0xf0,0xbc,0x4f,0x38,0x8c,0x7c,0xba, ++0xda,0xf8,0xda,0x69,0x22,0x7c,0xb7,0x54,0x7, 0x7e,0x24,0x0, 0x1, 0x22,0x7c,0xa5, ++0x7c,0xb7,0xc4,0x23,0x54,0x1f,0xa, 0x2b,0x22,0x7e,0x29,0x60,0x4c,0x6a,0x7a,0x29, ++0x60,0xb, 0x70,0x22,0x7a,0x1d,0x24,0x7e,0xf, 0x6, 0xf8,0x7e,0xb3,0x2a,0x6e,0x7e, ++0x37,0x2a,0x53,0x22,0x7a,0x1d,0x24,0x7e,0xa3,0x2a,0x6e,0x74,0x2, 0xa4,0x7e,0xf, ++0x6, 0xf8,0x2d,0x15,0x7e,0xb3,0x2a,0x6d,0x7e,0x37,0x2a,0x51,0x22,0x6c,0x33,0x80, ++0x9, 0xe4,0xa, 0x33,0x19,0xb3,0x27,0x72,0xb, 0x30,0x90,0x60,0x9a,0xe4,0x93,0x12, ++0x31,0xa2,0xb, 0x24,0xa, 0x33,0xbd,0x32,0x48,0xe7,0xe4,0x7a,0xb3,0x28,0x84,0x7a, ++0xb3,0x28,0x85,0x6d,0x33,0x7a,0x37,0x28,0x86,0x7a,0x37,0x28,0x88,0x7a,0x37,0x28, ++0x8a,0x7a,0x37,0x28,0x8e,0x7e,0xd4,0x1f,0x36,0x5e,0xd4,0xff,0xfe,0x6d,0xcc,0x7e, ++0x1f,0x13,0x8a,0x7a,0x37,0x1f,0x76,0x7d,0x3d,0x7a,0x37,0x1f,0x7a,0x7e,0x34,0x15, ++0x9e,0x7a,0x37,0x1f,0x78,0x7e,0x73,0x2a,0x6d,0x7a,0x73,0x1f,0x73,0x7e,0x73,0x2a, ++0x6e,0x7a,0x73,0x1f,0x72,0x7e,0x37,0x2a,0x5c,0x7a,0x37,0x1f,0x7c,0x7e,0x37,0x2a, ++0x5e,0x7a,0x37,0x1f,0x7e,0x7e,0x37,0x2a,0x60,0x7a,0x37,0x1f,0x80,0x90,0x60,0x9a, ++0x93,0x7a,0xb3,0x1f,0x74,0x7e,0x73,0x3b,0x5e,0x7a,0x73,0x1f,0x75,0x7e,0x8, 0x1f, ++0x72,0x7e,0x18,0x1f,0x82,0x12,0x8, 0x0, 0x7e,0x73,0x1f,0x82,0x7a,0x73,0x28,0x84, ++0x7e,0x73,0x1f,0x83,0x7a,0x73,0x28,0x85,0x7e,0x37,0x1f,0x84,0x7a,0x37,0x28,0x86, ++0x7e,0x37,0x1f,0x86,0x7a,0x37,0x28,0x88,0x7e,0x37,0x1f,0x8c,0x7a,0x37,0x28,0x8a, ++0x7e,0x37,0x1f,0x8e,0x7d,0x23,0x7a,0x53,0x28,0x8c,0xa, 0x36,0x7a,0x73,0x28,0x8d, ++0x7e,0x37,0x1f,0x88,0x7a,0x37,0x28,0x8e,0x7e,0x37,0x1f,0x8a,0x7d,0x23,0x7a,0x53, ++0x28,0x90,0xa, 0x36,0x7a,0x73,0x28,0x91,0x6c,0x33,0x80,0x20,0x7c,0xb3,0x7e,0x70, ++0x1, 0x12,0x33,0x1f,0x74,0x2, 0xac,0xb3,0x49,0x45,0x15,0x9e,0xa, 0x38,0x7c,0x27, ++0x19,0x25,0x26,0xfa,0x7c,0x29,0x19,0x25,0x26,0xfb,0xb, 0x30,0x7e,0x23,0x28,0x84, ++0xbc,0x23,0x38,0xd8,0x6c,0x33,0x80,0x1b,0x74,0x2, 0xac,0xb3,0x7f,0x16,0x2d,0x35, ++0xb, 0x1a,0x40,0xa, 0x38,0x7c,0x27,0x19,0x25,0x27,0x36,0x7c,0x29,0x19,0x25,0x27, ++0x37,0xb, 0x30,0x7e,0x23,0x28,0x85,0xbc,0x23,0x38,0xdd,0x22,0x7e,0x70,0x1, 0x7c, ++0x67,0x7c,0x7b,0xc4,0x23,0x54,0x1f,0x7c,0xab,0x7c,0xb7,0x54,0x7, 0xa, 0x2b,0x2e, ++0x24,0x0, 0x5e,0x12,0x87,0x7a,0x7c,0x7b,0x4c,0x66,0x68,0xf, 0xa, 0x2a,0x2e,0x24, ++0x27,0x72,0x7e,0x29,0xb0,0x4c,0xb7,0x7a,0x29,0xb0,0x22,0x7c,0xb7,0x64,0xff,0xa, ++0x2a,0x2e,0x24,0x27,0x72,0x7e,0x29,0x70,0x5c,0x7b,0x7a,0x29,0x70,0x22,0x7c,0xab, ++0x7e,0xb3,0x3b,0x5b,0x70,0x1b,0x7e,0xb3,0x28,0xa8,0x70,0x15,0x12,0xc9,0x4d,0x68, ++0x10,0x7e,0xb3,0x2a,0x6b,0xbe,0xb0,0x1, 0x68,0x7, 0x7c,0xba,0x6c,0x77,0x2, 0x33, ++0x1f,0x22,0xca,0xd8,0xca,0x79,0xc2,0x0, 0x6d,0x88,0x7a,0x87,0x3a,0x84,0xe4,0x7a, ++0xb3,0x1f,0x58,0xe5,0x5a,0xbe,0xb0,0xff,0x50,0x2, 0x5, 0x5a,0x7e,0xb3,0x28,0x84, ++0x60,0xc, 0x12,0x9d,0xd6,0xb, 0x1a,0x80,0xbe,0x87,0x7, 0xfa,0x28,0xa, 0xc2,0x13, ++0x6d,0x88,0x7a,0x87,0x3a,0x45,0x81,0xb3,0x12,0x98,0x44,0x60,0x12,0x7e,0x34,0x62, ++0xe, 0x12,0xc9,0x16,0x7a,0x87,0x3a,0x3b,0x12,0x35,0x1d,0x7a,0x87,0x3a,0x45,0x7e, ++0x87,0x3a,0x3b,0x4d,0x88,0x68,0x6, 0x74,0x1, 0x7a,0xb3,0x28,0xa9,0x6c,0xff,0x80, ++0x77,0xe4,0xa, 0x3f,0x19,0xb3,0x1f,0x34,0x12,0x35,0x37,0x7e,0x8, 0x1f,0x52,0x7c, ++0xbd,0x7c,0x7e,0x12,0x35,0x8a,0x7d,0x93,0x7e,0x87,0x3a,0x45,0xbd,0x89,0x50,0x4, ++0x7a,0x97,0x3a,0x45,0x7e,0x87,0x3a,0x84,0xbd,0x89,0x50,0x4, 0x7a,0x97,0x3a,0x84, ++0xe5,0x5a,0xbe,0xb0,0x5, 0x38,0x1f,0x7e,0x8, 0x3a,0x47,0x12,0x35,0x44,0x50,0x7, ++0x12,0x35,0x2e,0xd2,0x0, 0x80,0x2f,0x7e,0x8, 0x3a,0x47,0x7e,0x18,0x1f,0x52,0x12, ++0x98,0x96,0x50,0x22,0x80,0x10,0x12,0x35,0x1d,0xbd,0x89,0x38,0x19,0x7e,0x8, 0x1f, ++0x52,0x12,0x97,0xcf,0x50,0x10,0x12,0x35,0x2e,0x7e,0x8, 0x1f,0x58,0x7e,0x18,0x1f, ++0x52,0x12,0x98,0x1e,0xd2,0x0, 0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0x81, ++0x30,0x0, 0x36,0x6c,0xff,0x80,0x1c,0x12,0x35,0x37,0x7e,0x8, 0x1f,0x58,0x12,0x35, ++0x44,0x40,0x9, 0xa, 0x3f,0x9, 0xb3,0x1f,0x34,0xb4,0x1, 0x5, 0x7c,0xbf,0x12,0x33, ++0x5e,0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xdc,0x75,0x5a,0x0, 0x7e,0x34, ++0x62,0xe, 0x12,0x23,0xc9,0x7a,0x37,0x3a,0x3b,0x7e,0x63,0x1f,0x58,0x7e,0x70,0x6, ++0xac,0x67,0xb, 0x34,0xca,0x39,0x7e,0x18,0x1f,0x58,0x7e,0x8, 0x3a,0x47,0x12,0x20, ++0xf1,0x1b,0xfd,0x7e,0x37,0x3a,0x3b,0x4d,0x33,0x78,0x39,0x90,0x62,0x9, 0xe4,0x93, ++0xa, 0x3b,0xbe,0x37,0x3a,0x45,0x38,0x43,0x7c,0x7b,0x1e,0x70,0xa, 0x37,0xbe,0x37, ++0x3a,0x84,0x38,0x37,0x90,0x60,0x51,0x12,0x35,0x25,0x7e,0x73,0x26,0xf7,0xa, 0x37, ++0xbd,0x32,0x8, 0x27,0x90,0x60,0x50,0x12,0x35,0x25,0x7e,0x73,0x26,0xf6,0xa, 0x37, ++0xbd,0x32,0x8, 0x17,0x6c,0xff,0x80,0x7, 0x7c,0xbf,0x12,0x33,0x5e,0xb, 0xf0,0x7e, ++0x73,0x28,0x84,0xbc,0x7f,0x38,0xf1,0xd2,0x0, 0x80,0x6, 0x6d,0x33,0x7a,0x37,0x3a, ++0x45,0xa2,0x0, 0x92,0x13,0x12,0x36,0xc2,0xda,0x79,0xda,0xd8,0x22,0x90,0x62,0x9, ++0xe4,0x93,0xa, 0x8b,0x22,0xe4,0x93,0x7c,0x7b,0x1e,0x70,0xa, 0x27,0x22,0x74,0x1, ++0xa, 0x8f,0x19,0xb8,0x1f,0x34,0x22,0x74,0x2, 0xac,0xbf,0x9, 0xd5,0x26,0xfa,0x9, ++0xe5,0x26,0xfb,0x22,0x7c,0xbd,0x7c,0x7e,0x7c,0x6b,0xc2,0x1, 0x6c,0xaa,0x80,0x30, ++0x7e,0x50,0x6, 0xac,0x5a,0x7f,0x70,0x2d,0xf2,0xb, 0xf4,0x29,0xb7,0x0, 0x2, 0xbc, ++0xb6,0x40,0x1b,0x7e,0x7b,0xb0,0xbc,0xb6,0x38,0x14,0x29,0xb7,0x0, 0x3, 0xbc,0xb7, ++0x40,0xc, 0x29,0xb7,0x0, 0x1, 0xbc,0xb7,0x38,0x4, 0xd2,0x1, 0x80,0x9, 0xb, 0xa0, ++0x7e,0xb, 0xb0,0xbc,0xba,0x38,0xc9,0xa2,0x1, 0x22,0xca,0x3b,0x7c,0xc7,0x7c,0xfb, ++0x7f,0x40,0x6d,0x33,0x7a,0x35,0x24,0x7e,0xa3,0x2a,0x6d,0x7e,0x73,0x2a,0x6e,0x4c, ++0xcc,0x78,0x5, 0x7e,0xc0,0x1, 0x80,0xd, 0x7c,0xb7,0x14,0xbc,0xbc,0x78,0x6, 0xa, ++0x6c,0x1b,0x65,0x7c,0xcd,0x4c,0xff,0x78,0x5, 0x7e,0xf0,0x1, 0x80,0xb, 0x7c,0xba, ++0x14,0xbc,0xbf,0x78,0x4, 0xa, 0x7f,0x1b,0x75,0x7f,0x4, 0x7e,0x34,0x0, 0x6, 0xe4, ++0x12,0x21,0x16,0x7e,0x73,0x2a,0x6d,0xa, 0x37,0x1b,0x34,0x7a,0x4b,0x70,0x7e,0x73, ++0x2a,0x6e,0xa, 0x37,0x1b,0x34,0x39,0x74,0x0, 0x1, 0x7c,0xec,0x80,0x1f,0x75,0x26, ++0x0, 0x7c,0xdf,0x80,0xd, 0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xa, 0x12,0x36,0xb7, ++0x1b,0xd0,0xbe,0xd0,0x0, 0x58,0xee,0xe5,0x26,0x60,0x7, 0x1b,0xe0,0xbe,0xe0,0x0, ++0x58,0xdc,0x7c,0xec,0x80,0x26,0x75,0x26,0x0, 0x1a,0x3f,0xb, 0x34,0x7c,0xd7,0x80, ++0xd, 0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xd, 0x12,0x36,0xb7,0xb, 0xd0,0x7e,0x73, ++0x2a,0x6d,0xbc,0x7d,0x18,0xeb,0xe5,0x26,0x60,0x7, 0x1b,0xe0,0xbe,0xe0,0x0, 0x58, ++0xd5,0x1a,0x3c,0xb, 0x34,0x7c,0xe7,0x80,0x1f,0x75,0x26,0x0, 0x7c,0xdf,0x80,0xd, ++0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xa, 0x12,0x36,0xb7,0x1b,0xd0,0xbe,0xd0,0x0, ++0x58,0xee,0xe5,0x26,0x60,0xa, 0xb, 0xe0,0x7e,0x73,0x2a,0x6e,0xbc,0x7e,0x18,0xd9, ++0x1a,0x3c,0xb, 0x34,0x7c,0xe7,0x80,0x24,0x75,0x26,0x0, 0x1a,0x6f,0xb, 0x64,0x80, ++0xd, 0x12,0x36,0xb0,0x12,0x91,0x24,0x70,0xd, 0x12,0x36,0xb7,0xb, 0xd0,0x7e,0x73, ++0x2a,0x6d,0xbc,0x7d,0x18,0xeb,0xe5,0x26,0x60,0xa, 0xb, 0xe0,0x7e,0x73,0x2a,0x6e, ++0xbc,0x7e,0x18,0xd4,0x7e,0x35,0x24,0x7d,0x23,0x39,0x54,0x0, 0x5, 0xda,0x3b,0x22, ++0x7c,0xbd,0x7c,0x7e,0x7f,0x4, 0x22,0x5, 0x26,0x7e,0x35,0x24,0xb, 0x34,0x7a,0x35, ++0x24,0x22,0x30,0x13,0x13,0x12,0x9f,0x4a,0x68,0x6, 0x7e,0xb3,0x3b,0x5b,0x60,0x8, ++0x7e,0x34,0xb, 0xb8,0x7a,0x37,0x3a,0x43,0x22,0xca,0xf8,0x6c,0xff,0x80,0x17,0x7c, ++0xbf,0x12,0x38,0x82,0xbe,0x37,0x2a,0x5c,0x58,0xa, 0x7c,0xbf,0x12,0x37,0x4, 0xac, ++0x7f,0x12,0x9f,0x67,0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xe1,0x12,0x2c, ++0x1d,0xda,0xf8,0x22,0x6c,0x77,0x12,0x33,0x1f,0x7e,0x70,0x2, 0x22,0xca,0xd8,0xca, ++0x79,0x7e,0x34,0x62,0x27,0x12,0x37,0xb5,0x12,0xa5,0xf8,0x50,0x2, 0xe1,0xb0,0x7e, ++0x34,0x62,0x2b,0x12,0x23,0xc9,0x7a,0x35,0x2a,0x90,0x62,0x26,0xe4,0x93,0x70,0x2, ++0xe1,0xb0,0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x7, 0x7e,0x34,0x62,0x29,0x12,0x37,0xb5, ++0x7e,0x37,0x28,0x8a,0xbe,0x34,0x4, 0x4c,0x8, 0x66,0x6c,0xdd,0x80,0x5a,0xc2,0x0, ++0x7c,0xbd,0x12,0x38,0x82,0x7a,0x35,0x26,0x7c,0xbd,0x7e,0x70,0x1, 0x12,0xa4,0xe3, ++0x7a,0x35,0x24,0x9e,0x35,0x26,0x7a,0x35,0x24,0x7e,0x35,0x26,0x3e,0x34,0x3e,0x34, ++0x12,0x9f,0x33,0x7a,0x35,0x28,0xbe,0x75,0x28,0x58,0x3, 0x7a,0x75,0x28,0x7e,0x35, ++0x28,0xbe,0x35,0x24,0x8, 0xa, 0x7e,0x35,0x2a,0xbe,0x35,0x26,0x8, 0x2, 0xd2,0x0, ++0x7c,0xbd,0x12,0xb9,0x97,0x50,0x2, 0xc2,0x0, 0x30,0x0, 0xa, 0x7c,0xbd,0x12,0x37, ++0x4, 0xac,0x7d,0x12,0x9f,0x67,0xb, 0xd0,0x7e,0x73,0x28,0x84,0xbc,0x7d,0x38,0x9e, ++0xda,0x79,0xda,0xd8,0x22,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x70,0x22,0x12,0xa5,0xe1, ++0x12,0x62,0xdb,0x12,0x9e,0x4d,0x12,0x37,0xd, 0x2, 0x37,0xcc,0xca,0x3b,0x12,0x2c, ++0x1d,0x7e,0xb3,0x28,0x84,0x60,0x6, 0x7e,0xb3,0x38,0x2d,0x60,0x9, 0xe4,0x7a,0xb3, ++0x38,0x2f,0x7a,0xb3,0x37,0xb4,0x7e,0xb3,0x38,0x2d,0x70,0x6b,0x6c,0x99,0x80,0x5f, ++0x74,0x2, 0xac,0xb9,0x9, 0x85,0x26,0xfa,0x9, 0xf5,0x26,0xfb,0x7c,0xb9,0x12,0xb9, ++0x97,0x40,0x4a,0x6c,0xee,0x80,0x3e,0x74,0x2, 0xac,0xbe,0x9, 0xd5,0x37,0xb5,0x9, ++0xc5,0x37,0xb6,0xa, 0x28,0xa, 0x3d,0x12,0x38,0x7a,0x78,0x27,0xa, 0x2f,0xa, 0x3c, ++0x12,0x38,0x7a,0x78,0x1e,0x7c,0xb9,0x12,0x38,0x82,0x7e,0x14,0x62,0x2b,0x12,0x5f, ++0xec,0xbd,0x32,0x58,0xe, 0x7c,0xb9,0x6c,0x77,0x12,0x33,0x1f,0x7c,0xb8,0x7c,0x7f, ++0x12,0x9f,0x6f,0xb, 0xe0,0x7e,0x73,0x38,0x2f,0xbc,0x7e,0x38,0xba,0xb, 0x90,0x7e, ++0x73,0x28,0x84,0xbc,0x79,0x38,0x99,0x7e,0x73,0x37,0xb4,0x7a,0x73,0x38,0x2f,0xa, ++0x37,0x3e,0x34,0xca,0x39,0x7e,0x18,0x37,0xf1,0x7e,0x8, 0x37,0xb5,0x12,0x20,0xf1, ++0x1b,0xfd,0xe4,0x7a,0xb3,0x38,0x2d,0xda,0x3b,0x22,0x9d,0x32,0x12,0x21,0x48,0x4d, ++0x33,0x22,0x7c,0xab,0x7e,0x70,0x2, 0xac,0x7a,0x9, 0xb3,0x26,0xfa,0x9, 0x73,0x26, ++0xfb,0x2, 0x2c,0x63,0xca,0x79,0x6c,0x88,0x80,0x70,0x74,0x2, 0xac,0xb8,0x9, 0xf5, ++0x26,0xfa,0x9, 0x75,0x26,0xfb,0x7a,0x71,0x24,0x7c,0xbf,0x12,0x3f,0x59,0x50,0x58, ++0x6c,0xee,0x80,0x4f,0xbc,0xe8,0x68,0x49,0x7e,0x70,0x2, 0xac,0x7e,0x12,0x9f,0x5a, ++0x6c,0x99,0x90,0x60,0xaa,0xe4,0x93,0x70,0x18,0x7e,0xb3,0x2a,0x70,0x14,0xbe,0xb1, ++0x26,0x78,0xe, 0xa, 0x2f,0x12,0x3c,0xd, 0xbe,0x34,0x0, 0x1, 0x18,0x3, 0x7e,0x90, ++0x1, 0xbe,0x90,0x1, 0x78,0x1b,0x7c,0xbe,0x12,0x38,0x82,0x7d,0xf3,0x7c,0xb8,0x12, ++0x38,0x82,0xbd,0x3f,0x8, 0x4, 0x7c,0xbe,0x80,0x2, 0x7c,0xb8,0x6c,0x77,0x12,0x33, ++0x1f,0xb, 0xe0,0x12,0x3f,0xb2,0x38,0xac,0xb, 0x80,0x7e,0x73,0x28,0x84,0xbc,0x78, ++0x38,0x88,0xda,0x79,0x22,0xca,0xd8,0xca,0x79,0x7e,0xa3,0x2a,0x6e,0x7e,0x47,0x28, ++0x99,0xe4,0x7a,0xb3,0x28,0xa6,0x7e,0xb3,0x26,0xf0,0xbe,0xb0,0x0, 0x28,0x4c,0x7e, ++0x73,0x28,0x85,0xbe,0x70,0x0, 0x28,0x43,0x6c,0xff,0x80,0x3b,0x7e,0x50,0x2, 0xac, ++0x5f,0x9, 0xd2,0x27,0x36,0x9, 0xe2,0x27,0x37,0x7e,0x50,0x2, 0xac,0x5e,0x49,0x12, ++0x4, 0xfc,0x6d,0x22,0x9e,0x27,0x2a,0x53,0xbd,0x12,0x58,0x19,0x12,0x3a,0x37,0x49, ++0x12,0x4, 0xfc,0x6d,0x22,0x9e,0x27,0x2a,0x51,0xbd,0x12,0x58,0x8, 0x74,0x1, 0x7a, ++0xb3,0x28,0xa6,0x80,0x6, 0xb, 0xf0,0xbc,0x7f,0x38,0xc1,0xe4,0x7a,0xb3,0x28,0xa7, ++0x7e,0xb3,0x26,0x83,0x70,0x40,0x12,0x9f,0x42,0x28,0x3b,0x6c,0xff,0x80,0x33,0x7e, ++0x50,0x2, 0xac,0x5f,0x9, 0xd2,0x26,0xfa,0x9, 0xe2,0x26,0xfb,0x12,0x3a,0x37,0x49, ++0x2, 0x5, 0x7a,0x6d,0x11,0x9d,0x14,0xbd,0x1, 0x48,0xd, 0x7e,0x10,0x2, 0xac,0x1e, ++0x49,0x20,0x5, 0x7a,0xbd,0x21,0x58,0x8, 0x74,0x1, 0x7a,0xb3,0x28,0xa7,0x80,0x6, ++0xb, 0xf0,0xbc,0x7f,0x38,0xc9,0x12,0x3a,0x40,0xe4,0x7a,0xb3,0x28,0xa9,0x7e,0x37, ++0x28,0x88,0x2e,0x37,0x28,0x86,0xbe,0x37,0x28,0x9f,0x28,0x6, 0x74,0x1, 0x7a,0xb3, ++0x28,0xa9,0x74,0x1, 0x7a,0xb3,0x28,0xaa,0x6c,0xff,0x80,0x1f,0x12,0x3a,0x2d,0x49, ++0x25,0x25,0xf7,0x7d,0x43,0x9d,0x42,0x7d,0x34,0x12,0x21,0x48,0xbe,0x37,0x28,0x9d, ++0x8, 0x7, 0xe4,0x7a,0xb3,0x28,0xaa,0x80,0xa, 0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc, ++0x7f,0x38,0xd9,0x6c,0xff,0x80,0x9, 0x12,0x3a,0x2d,0x59,0x35,0x25,0xf7,0xb, 0xf0, ++0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xef,0xda,0x79,0xda,0xd8,0x22,0x7c,0xbf,0x12, ++0x38,0x82,0x74,0x2, 0xac,0xbf,0x22,0xa, 0x1d,0xa, 0x2a,0x2d,0x21,0x3e,0x24,0x22, ++0xca,0xd8,0xca,0x79,0xc2,0x0, 0x6c,0xdd,0x7e,0x57,0x28,0x99,0x7d,0xf5,0x7e,0xe7, ++0x28,0x97,0x7e,0x37,0x3a,0x43,0x4d,0x33,0x68,0x4, 0x7d,0xf5,0xe, 0xf4,0x6c,0xff, ++0x7e,0xa3,0x2a,0x6e,0x7c,0x8a,0x7e,0xb3,0x28,0xa5,0x14,0x68,0x21,0x14,0x68,0x14, ++0x24,0xc2,0x68,0x8, 0x24,0xfb,0x68,0x16,0x24,0x45,0x78,0x10,0x7c,0xfa,0x7e,0x83, ++0x2a,0x6d,0x80,0xa, 0x7e,0x73,0x2a,0x6d,0x2c,0x87,0x80,0x2, 0x6c,0x88,0x6c,0x99, ++0x80,0xf, 0x7c,0xb9,0x12,0x38,0x82,0xbe,0x34,0x2, 0x58,0x8, 0x2, 0xb, 0xd0,0xb, ++0x90,0x7e,0x33,0x28,0x84,0xbc,0x39,0x38,0xe9,0xbe,0xd0,0x3, 0x40,0x2, 0x81,0x1, ++0x7e,0xa3,0x28,0x85,0xbe,0xa0,0x0, 0x38,0xb, 0xbe,0x30,0x0, 0x28,0x37,0x7e,0xb3, ++0x26,0x83,0x70,0x31,0x6c,0x99,0x80,0x29,0xa, 0x29,0xa, 0x3f,0x2d,0x32,0x3e,0x34, ++0x49,0x23,0x5, 0x7a,0xbd,0x2f,0x8, 0x17,0x49,0x3, 0x4, 0xfc,0xbd,0xe, 0x58,0xf, ++0x6d,0x33,0x9d,0x3e,0x12,0x9f,0x33,0xbd,0x3, 0x8, 0x4, 0xd2,0x0, 0x80,0x6, 0xb, ++0x90,0xbc,0x89,0x38,0xd3,0x6d,0xee,0x9e,0xe7,0x2a,0x4f,0xbe,0xe7,0x7, 0xf8,0x8, ++0x2, 0xc2,0x0, 0x30,0x0, 0x20,0x7e,0xb3,0x3b,0x5b,0x4, 0x7a,0xb3,0x3b,0x5b,0x7e, ++0x23,0x3b,0x5b,0xbe,0x20,0xa, 0x28,0x1d,0x74,0xa, 0x7a,0xb3,0x3b,0x5b,0x74,0x1, ++0x7a,0xb3,0x28,0xa8,0x80,0xf, 0x7e,0x23,0x3b,0x5b,0xbe,0x20,0x0, 0x28,0x6, 0x1e, ++0x20,0x7a,0x23,0x3b,0x5b,0x6c,0xee,0xbe,0x30,0x0, 0x38,0x5, 0xbe,0xa0,0x0, 0x28, ++0x69,0x7e,0xb3,0x28,0xa7,0xb4,0x1, 0x9, 0x7e,0xb3,0x28,0xaa,0xbe,0xb0,0x1, 0x68, ++0x59,0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x52,0x6c,0x99,0x80,0x1d,0x7e,0x70,0x2, 0xac, ++0x79,0x9, 0xa3,0x26,0xfa,0x9, 0xd3,0x26,0xfb,0x12,0x3c,0x6, 0xbe,0x34,0x0, 0x96, ++0x8, 0x5, 0x7e,0xe0,0x1, 0x80,0xa, 0xb, 0x90,0x7e,0xb3,0x28,0x84,0xbc,0xb9,0x38, ++0xdb,0x6c,0x99,0x80,0x1d,0x7e,0x70,0x2, 0xac,0x79,0x9, 0xa3,0x27,0x36,0x9, 0xd3, ++0x27,0x37,0x12,0x3c,0x6, 0xbe,0x34,0xff,0x6a,0x58,0x5, 0x7e,0xe0,0x1, 0x80,0xa, ++0xb, 0x90,0x7e,0xb3,0x28,0x85,0xbc,0xb9,0x38,0xdb,0x6c,0x99,0x80,0x17,0xa, 0xe9, ++0xa, 0x5f,0x2d,0x5e,0x3e,0x54,0x49,0x55,0x5, 0x7a,0xbd,0x5f,0x8, 0x5, 0x7e,0xe0, ++0x1, 0x80,0x6, 0xb, 0x90,0xbc,0x89,0x38,0xe5,0x4c,0xee,0x78,0x25,0x7e,0xb3,0x3b, ++0x5c,0x4, 0x7a,0xb3,0x3b,0x5c,0x7e,0x73,0x3b,0x5c,0xbe,0x70,0x5, 0x28,0x22,0x74, ++0x5, 0x7a,0xb3,0x3b,0x5c,0x7e,0xb3,0x28,0xa8,0x60,0x2, 0xd2,0x18,0x12,0xb2,0x80, ++0x80,0xf, 0x7e,0x73,0x3b,0x5c,0xbe,0x70,0x0, 0x28,0x6, 0x1e,0x70,0x7a,0x73,0x3b, ++0x5c,0xda,0x79,0xda,0xd8,0x22,0x7c,0xba,0x7c,0x7d,0x2, 0x2c,0x63,0xe5,0x25,0xa, ++0x3b,0x9d,0x32,0x2, 0x21,0x48,0x7e,0x30,0x64,0x7e,0x20,0x64,0x6c,0x11,0x80,0x4a, ++0xa, 0x31,0xb, 0x34,0x7c,0x7, 0x80,0x38,0x7e,0x70,0x2, 0xac,0x70,0x9, 0xb3,0x26, ++0xfa,0x12,0x3c,0x8b,0x9, 0xb3,0x26,0xfa,0x12,0x3c,0xf, 0x7c,0x97,0x7e,0x70,0x2, ++0xac,0x70,0x9, 0xb3,0x26,0xfb,0x12,0x3c,0x8b,0x9, 0xb3,0x26,0xfb,0x12,0x3c,0xf, ++0x7c,0x87,0xbc,0x39,0x28,0x2, 0x7c,0x39,0xbc,0x28,0x28,0x2, 0x7c,0x28,0xb, 0x0, ++0x7e,0xb3,0x28,0x84,0xbc,0xb0,0x38,0xc0,0xb, 0x10,0x7e,0xb3,0x28,0x84,0xbc,0xb1, ++0x38,0xae,0xa5,0xbb,0x64,0x2, 0x6c,0x33,0xa5,0xba,0x64,0x2, 0x6c,0x22,0xbc,0x23, ++0x28,0x4, 0x7c,0xa2,0x80,0x2, 0x7c,0xa3,0x7c,0xba,0x22,0xa, 0x2b,0x7e,0x70,0x2, ++0xac,0x71,0x22,0xca,0x3b,0x6c,0xff,0x12,0xc8,0xf2,0x7e,0xb3,0x16,0x91,0xb4,0x1, ++0x2, 0x80,0x2, 0xa1,0x7b,0x6c,0xcc,0xa1,0x6d,0x12,0x67,0xed,0xf5,0x27,0x9, 0xb3, ++0x26,0xfb,0xf5,0x28,0x75,0x25,0x2, 0x75,0x26,0x2, 0x7c,0xbc,0x12,0x3d,0x7e,0xd2, ++0x0, 0x12,0x3e,0xf9,0xe5,0x27,0x60,0xc, 0xa, 0x2e,0x1b,0x24,0xe5,0x27,0xa, 0x3b, ++0xbd,0x32,0x48,0x3, 0x75,0x25,0x1, 0xe5,0x28,0x60,0xc, 0xa, 0x2d,0x1b,0x24,0xe5, ++0x28,0xa, 0x3b,0xbd,0x32,0x48,0x3, 0x75,0x26,0x1, 0x75,0x24,0x0, 0x80,0x38,0xe5, ++0x24,0xbc,0xbc,0x68,0x30,0x12,0xb7,0xcd,0x7a,0xa1,0x29,0x9, 0xb3,0x26,0xfb,0xf5, ++0x2a,0xa, 0x2a,0xe5,0x27,0x12,0x3c,0xf, 0xbe,0x34,0x0, 0x3, 0x18,0x17,0xe5,0x2a, ++0xa, 0x2b,0xe5,0x28,0x12,0x3c,0xf, 0xbe,0x34,0x0, 0x3, 0x18,0x8, 0x75,0x25,0x1, ++0x75,0x26,0x1, 0x80,0x7, 0x5, 0x24,0x12,0x9f,0x52,0x38,0xc3,0xe5,0x27,0x7e,0x71, ++0x28,0x12,0xa8,0x1, 0x50,0x6, 0x12,0x3e,0xa9,0x12,0x4f,0xe9,0xe5,0x25,0x7e,0x71, ++0x26,0x7c,0x6c,0x7c,0x5f,0x12,0x92,0xd6,0x90,0x61,0x36,0xe4,0x93,0xb4,0x1, 0x16, ++0x7e,0x70,0x9, 0xac,0x7c,0x7d,0x13,0x2e,0x14,0x27,0x76,0x6d,0x0, 0x2e,0x34,0x27, ++0x78,0x6d,0x22,0x12,0x8a,0xa7,0x12,0x3e,0xa9,0xb, 0xf0,0xb, 0xc0,0x7e,0x73,0x28, ++0x84,0xbc,0x7c,0x28,0x2, 0x81,0xa9,0x7a,0xf3,0x28,0x84,0xda,0x3b,0x22,0xca,0x3b, ++0x7c,0x5b,0x7e,0x43,0x28,0x84,0xbe,0x40,0x1, 0x28,0x2, 0xc1,0x79,0x7e,0xa3,0x2a, ++0x6e,0x7e,0x70,0x2, 0xac,0x75,0x9, 0xd3,0x26,0xfa,0x9, 0xc3,0x26,0xfb,0x7c,0xbd, ++0x7c,0x7c,0x12,0x92,0xc0,0x7f,0x1, 0x90,0x60,0xaa,0xe4,0x93,0x70,0x12,0x7c,0xfc, ++0x7c,0x9d,0x7e,0x83,0x2a,0x70,0x7e,0xe3,0x2a,0x6f,0xa, 0xca,0x6d,0xbb,0x9d,0xbc, ++0xa, 0xa8,0x1b,0xa5,0xa, 0x5f,0xbd,0x5a,0x58,0x2, 0xc1,0x79,0xa, 0x59,0x1b,0x54, ++0xbe,0x54,0x0, 0x0, 0x48,0x4e,0x7c,0xb9,0x14,0x12,0x3e,0xd7,0x50,0x46,0x7c,0xb9, ++0x14,0x12,0x3e,0x7c,0xb, 0x1a,0xe0,0x7d,0x3b,0x12,0x3f,0x3b,0x8, 0x11,0x9d,0xae, ++0xbe,0xa4,0x0, 0x0, 0x58,0x4, 0x6d,0x55,0x80,0x2, 0x7d,0x5a,0x12,0x3f,0x33,0x7c, ++0xb8,0x24,0xfe,0xbc,0xbf,0x78,0x1d,0x90,0x60,0xaa,0xe4,0x93,0x70,0x4, 0x7d,0xfd, ++0x1b,0xf4,0x7d,0x5f,0x12,0x3e,0x83,0xb, 0x1a,0x30,0xbd,0x3a,0x8, 0x6, 0x12,0x3e, ++0x85,0x1b,0x1a,0xa0,0xa, 0xa9,0xb, 0xa4,0xa, 0x5e,0xbd,0xa5,0x58,0x4b,0x7c,0xb9, ++0x4, 0x12,0x3e,0xd7,0x50,0x43,0x7c,0xb9,0x4, 0x12,0x3e,0x7c,0xb, 0x1a,0xe0,0x7d, ++0x3c,0x12,0x3f,0x3b,0x8, 0x11,0x9d,0xae,0xbe,0xa4,0x0, 0x0, 0x58,0x4, 0x6d,0x55, ++0x80,0x2, 0x7d,0x5a,0x12,0x3f,0x33,0x7c,0xb8,0x24,0xfe,0xbc,0xbf,0x78,0x1a,0x90, ++0x60,0xaa,0xe4,0x93,0x70,0x4, 0x7d,0xfd,0x1b,0xf4,0x7d,0x5f,0x12,0x3e,0x83,0xb, ++0x1a,0x50,0xbd,0x5a,0x8, 0x3, 0x1b,0x1a,0xa0,0xda,0x3b,0x22,0x12,0x3e,0x8c,0x7d, ++0xd3,0x7d,0x5d,0x3e,0x54,0x7e,0x1f,0x13,0x8a,0x2d,0x35,0x22,0x7c,0x5b,0x7e,0x43, ++0x2a,0x6e,0x90,0x60,0xab,0xe4,0x93,0x7c,0xab,0x90,0x60,0xaa,0xe4,0x93,0x70,0x8, ++0x7c,0x75,0xac,0x74,0xa, 0x2a,0x2d,0x32,0x22,0x12,0x3f,0x51,0x60,0x28,0x6c,0x22, ++0x80,0x1c,0x7c,0xb2,0x12,0x3e,0xd7,0x50,0x13,0x7c,0xb2,0x12,0x3e,0x8c,0x7d,0x3, ++0x12,0x3f,0x49,0x49,0x55,0x3b,0x41,0x7d,0x40,0x12,0xc8,0xad,0xb, 0x20,0x7e,0x73, ++0x2a,0x75,0xbc,0x72,0x38,0xdc,0x22,0x7c,0xab,0x6c,0x77,0x80,0x11,0xa, 0x27,0x2e, ++0x24,0x60,0xac,0x12,0x87,0x7a,0xbc,0xba,0x78,0x2, 0xd3,0x22,0xb, 0x70,0x90,0x60, ++0xa7,0xe4,0x93,0xbc,0xb7,0x38,0xe6,0xc3,0x22,0x12,0x3f,0x51,0x60,0x34,0x6c,0x22, ++0x80,0x28,0x7c,0xb2,0x12,0x3e,0xd7,0x50,0x1f,0x7c,0xb2,0x12,0x3e,0x8c,0x3e,0x34, ++0x7e,0x7f,0x13,0x8a,0x2d,0xf3,0xb, 0x7a,0x30,0x12,0x3f,0x49,0x59,0x35,0x3b,0x41, ++0x30,0x0, 0x5, 0x6d,0x33,0x1b,0x7a,0x30,0xb, 0x20,0x7e,0x73,0x2a,0x75,0xbc,0x72, ++0x38,0xd0,0x22,0x2d,0x31,0x7d,0x20,0x1b,0x1a,0x50,0x22,0x3e,0x34,0x7f,0x40,0x2d, ++0x93,0xb, 0x4a,0xa0,0xbe,0xe4,0x0, 0x0, 0x22,0x7c,0xa3,0xb, 0x30,0x74,0x2, 0xa4, ++0x22,0x6c,0x33,0x90,0x60,0xa7,0xe4,0x93,0x22,0x7c,0xab,0x90,0x60,0xab,0xe4,0x93, ++0xbc,0xb7,0x78,0x9, 0x7c,0xba,0x12,0x3e,0xd7,0x50,0x2, 0xd3,0x22,0xc3,0x22,0xca, ++0xf8,0x7c,0xfb,0x7e,0x70,0x2, 0x12,0xa4,0xe3,0x7f,0x71,0x7c,0xbf,0x12,0x38,0x82, ++0x12,0xc6,0x97,0x7f,0x17,0x12,0x1f,0x8d,0x7c,0xb7,0xda,0xf8,0x22,0xca,0xd8,0xca, ++0x79,0x6c,0xff,0x6c,0xee,0x80,0xf, 0x7c,0xbe,0x12,0x3f,0x6f,0x7c,0xdb,0xbc,0xfd, ++0x58,0x2, 0x7c,0xfd,0xb, 0xe0,0x12,0x3f,0xb2,0x38,0xec,0x7c,0xbf,0xda,0x79,0xda, ++0xd8,0x22,0x7e,0x73,0x28,0x84,0xbc,0x7e,0x22,0x90,0x60,0xa7,0xe4,0x93,0x60,0x2b, ++0x6c,0x33,0x80,0x1f,0x7c,0xb3,0x12,0x3e,0xd7,0x40,0x16,0x7c,0xb3,0x12,0x3e,0x8c, ++0x7d,0x43,0x6d,0x55,0x7d,0x4, 0x3e,0x4, 0x7e,0x1f,0x13,0x8a,0x2d,0x30,0x1b,0x1a, ++0x50,0xb, 0x30,0x7e,0x23,0x2a,0x75,0xbc,0x23,0x38,0xd9,0x22,0x12,0x68,0x48,0x12, ++0x24,0xca,0x12,0x71,0x7e,0x12,0x23,0x1d,0x7e,0xb3,0x39,0x50,0x24,0xfd,0x68,0x9, ++0xb, 0xb1,0x78,0xf4,0x12,0x2f,0x4e,0x80,0xef,0x12,0x29,0xa4,0x80,0xea,0xca,0xf8, ++0x7c,0xab,0xbe,0xa0,0x34,0x38,0x2, 0x21,0x1f,0xbe,0xa0,0x35,0x78,0x6, 0x7e,0xb3, ++0x2b,0x10,0x41,0x3e,0xbe,0xa0,0x36,0x68,0x5, 0xbe,0xa0,0x37,0x78,0x1d,0x7e,0x35, ++0x8, 0x7d,0x23,0xb, 0x24,0x7a,0x25,0x8, 0x2e,0x37,0x36,0xac,0x7e,0x39,0xb0,0xbe, ++0xa0,0x37,0x68,0x2, 0x41,0x3e,0x75,0x1b,0x36,0x41,0x3e,0xbe,0xa0,0x38,0x68,0x5, ++0xbe,0xa0,0x39,0x78,0x1b,0x7e,0xf3,0x3a,0x8, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0x8, ++0xbe,0xa0,0x39,0x78,0x3, 0x75,0x1b,0x38,0xa, 0x3f,0x9, 0xb3,0x2b,0x21,0x41,0x3e, ++0xbe,0xa0,0x3a,0x68,0x5, 0xbe,0xa0,0x3b,0x78,0x1b,0x7e,0xf3,0x3a,0xa, 0x7c,0xbf, ++0x4, 0x7a,0xb3,0x3a,0xa, 0xbe,0xa0,0x3b,0x78,0x3, 0x75,0x1b,0x3a,0xa, 0x3f,0x9, ++0xb3,0x2b,0x44,0x41,0x3e,0xbe,0xa0,0xfb,0x78,0x6, 0x7e,0xb3,0x2b,0x12,0x41,0x3e, ++0xbe,0xa0,0x5e,0x78,0x26,0x7e,0xf, 0x3b,0x8, 0x69,0x30,0x0, 0x8e,0xa, 0x56,0x1e, ++0x54,0x1e,0x54,0x1e,0x54,0x5e,0x54,0x0, 0x1, 0x3, 0x3, 0x54,0xc0,0xa, 0x36,0x5e, ++0x34,0x0, 0x3, 0x7c,0xa7,0x4c,0xba,0x44,0x80,0x41,0x3e,0xbe,0xa0,0x3c,0x68,0x5, ++0xbe,0xa0,0x3d,0x78,0x1b,0x7e,0xf3,0x3a,0xc, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0xc, ++0xbe,0xa0,0x3d,0x78,0x3, 0x75,0x1b,0x3c,0xa, 0x3f,0x9, 0xb3,0x2a,0x7a,0x41,0x3e, ++0xbe,0xa0,0x3e,0x68,0x5, 0xbe,0xa0,0x3f,0x78,0x1b,0x7e,0xf3,0x3a,0xe, 0x7c,0xbf, ++0x4, 0x7a,0xb3,0x3a,0xe, 0xbe,0xa0,0x3f,0x78,0x3, 0x75,0x1b,0x3e,0xa, 0x3f,0x9, ++0xb3,0x2a,0x9d,0x41,0x3e,0xbe,0xa0,0x40,0x40,0xd, 0xbe,0xa0,0x4d,0x38,0x8, 0xa, ++0x3a,0x9, 0xb3,0x39,0xe4,0x41,0x3e,0xbe,0xa0,0x4e,0x68,0x5, 0xbe,0xa0,0x4f,0x78, ++0x1e,0x7e,0xf3,0x3a,0x29,0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0x29,0xbe,0xa0,0x4f,0x78, ++0x3, 0x75,0x1b,0x4e,0xa, 0x3f,0x2e,0x37,0x36,0xaa,0x7e,0x39,0xb0,0x41,0x3e,0xbe, ++0xa0,0x51,0x68,0x5, 0xbe,0xa0,0x52,0x78,0x28,0x7e,0x14,0x60,0x0, 0x6d,0x0, 0x2e, ++0x4, 0x0, 0xff,0x7e,0xb3,0x3a,0x34,0xa, 0x3b,0x6d,0x22,0x2f,0x10,0x7e,0x1b,0x70, ++0x4, 0x7a,0xb3,0x3a,0x34,0xbe,0xa0,0x52,0x78,0x3, 0x75,0x1b,0x51,0x7c,0xb7,0x41, ++0x3e,0xbe,0xa0,0x5c,0x68,0x5, 0xbe,0xa0,0x5d,0x78,0x1a,0x7e,0xf3,0x39,0xfd,0x7c, ++0xbf,0x4, 0x7a,0xb3,0x39,0xfd,0xbe,0xa0,0x5d,0x78,0x3, 0x75,0x1b,0x5c,0x7c,0xbf, ++0x12,0xb3,0xa, 0x41,0x3e,0xbe,0xa0,0x60,0x40,0xd, 0xbe,0xa0,0x6c,0x38,0x8, 0xa, ++0x3a,0x9, 0xb3,0x3a,0xc9,0x41,0x3e,0xbe,0xa0,0x6d,0x78,0x4, 0xe5,0xe, 0x80,0x7e, ++0xbe,0xa0,0xf4,0x68,0x5, 0xbe,0xa0,0xf5,0x78,0x18,0x7e,0x35,0xa, 0x7d,0x23,0xb, ++0x24,0x7a,0x25,0xa, 0x9, 0xb3,0x36,0xb2,0xbe,0xa0,0xf5,0x78,0x61,0x75,0x1b,0xf4, ++0x80,0x5c,0xbe,0xa0,0xf0,0x68,0x5, 0xbe,0xa0,0xf1,0x78,0x9, 0x7c,0x1a,0x2e,0x10, ++0x20,0xa5,0xe7,0x80,0x49,0xbe,0xa0,0xf2,0x68,0x5, 0xbe,0xa0,0xf3,0x78,0x1b,0x7e, ++0x15,0x10,0x3e,0x14,0x7e,0x1f,0x36,0xae,0x2d,0x31,0xb, 0x1a,0x30,0xbe,0xa0,0xf2, ++0x78,0x4, 0xa, 0x56,0x80,0x28,0x7d,0x53,0x80,0x24,0xbe,0xa0,0xf6,0x78,0x4, 0xe5, ++0xf, 0x80,0x1b,0xbe,0xa0,0xf7,0x78,0xd, 0x7e,0x34,0x62,0x48,0x7e,0x24,0x0, 0xff, ++0xb, 0x1a,0x50,0x80,0x9, 0xbe,0xa0,0xfd,0x78,0x3, 0xe4,0x80,0x1, 0xe4,0xda,0xf8, ++0x22,0x7c,0x7b,0x6c,0xaa,0x12,0x45,0x2e,0x78,0x9, 0x7c,0xb7,0x12,0x89,0x15,0x7c, ++0xab,0x80,0xa, 0xb4,0x4, 0x7, 0x7c,0xb7,0x12,0x40,0xe, 0x7c,0xab,0x7c,0xba,0x22, ++0x30,0x90,0x19,0xc2,0x90,0xe5,0x19,0x70,0x9, 0x75,0x19,0x1, 0xe5,0x91,0xf5,0x1b, ++0x80,0x11,0x7e,0x71,0x91,0xe5,0x1b,0x12,0x42,0x8b,0x5, 0x1b,0x30,0x91,0xb, 0xc2, ++0x91,0x5, 0x1b,0xe5,0x1b,0x12,0x42,0x41,0xf5,0x91,0x22,0x7c,0x6b,0x12,0x45,0x2e, ++0x78,0x5, 0x7c,0xb6,0x2, 0x88,0x6a,0xb4,0x4, 0x5, 0x7c,0xb6,0x2, 0x42,0xa0,0x22, ++0xca,0xf8,0x7c,0x6b,0xa5,0xbe,0x0, 0x9, 0x7c,0xb7,0x12,0x88,0x3f,0xd2,0x8, 0xa1, ++0x22,0xa5,0xbe,0x1, 0x3d,0x7a,0x73,0x39,0xe5,0xa5,0xbf,0xad,0x2, 0x80,0x2f,0xa5, ++0xbf,0xae,0x4, 0xd2,0x9, 0xa1,0x22,0xa5,0xbf,0xaa,0x5, 0x12,0xc9,0x4, 0x80,0x1e, ++0xa5,0xbf,0xab,0xa, 0x7e,0x34,0x5, 0x7a,0x7a,0x37,0x36,0xac,0x80,0x10,0xa5,0xbf, ++0xac,0x2, 0x80,0x2, 0xa1,0x22,0x7e,0x34,0x4, 0xfc,0x7a,0x37,0x36,0xac,0x6d,0x33, ++0x61,0x9e,0xbe,0x60,0x4, 0x40,0x20,0xbe,0x60,0x8, 0x38,0x1b,0x12,0x45,0x25,0xa5, ++0xbe,0x7, 0x7, 0x6d,0x33,0x7a,0x35,0xa, 0xa1,0x22,0xa5,0xbe,0x8, 0x2, 0x80,0x2, ++0xa1,0x22,0x12,0x0, 0x6e,0xa1,0x22,0xa5,0xbe,0xa, 0x9, 0x43,0xc, 0x20,0x7a,0x73, ++0x39,0xee,0xa1,0x22,0xa5,0xbe,0xb, 0x8, 0x12,0x45,0x25,0x12,0x7, 0xfb,0xa1,0x22, ++0xbe,0x60,0x1b,0x40,0x7, 0xbe,0x60,0x1c,0x38,0x2, 0x81,0xba,0xbe,0x60,0x1e,0x40, ++0xd, 0xbe,0x60,0x23,0x38,0x8, 0x12,0x45,0x27,0x43,0xc, 0x40,0xa1,0x22,0xbe,0x60, ++0x15,0x40,0x1a,0xbe,0x60,0x18,0x38,0x15,0x12,0x45,0x27,0xd2,0x8, 0xa5,0xbe,0x15, ++0x2, 0x80,0x2, 0xa1,0x22,0x74,0x7, 0x7a,0xb3,0x39,0xe8,0xa1,0x22,0xa5,0xbe,0x19, ++0x7, 0xe4,0x7a,0xb3,0x39,0xfd,0xa1,0x22,0xbe,0x60,0x24,0x40,0x7, 0xbe,0x60,0x2c, ++0x38,0x2, 0x81,0xba,0xa5,0xbe,0x2d,0x1b,0x12,0x45,0x27,0x20,0x9, 0x2, 0xa1,0x22, ++0x7e,0x63,0x3a,0x10,0x7c,0x46,0x6c,0x55,0xa, 0x37,0x2d,0x32,0x3e,0x34,0x7a,0x35, ++0x8, 0xa1,0x22,0xbe,0x60,0x2f,0x40,0xa, 0xbe,0x60,0x33,0x38,0x5, 0x43,0xc, 0x8, ++0x81,0xba,0xa5,0xbe,0x34,0xf, 0x43,0xc, 0x10,0xbe,0x70,0x64,0x38,0x2, 0x81,0xba, ++0x7e,0x70,0x64,0x81,0xba,0xbe,0x60,0x38,0x68,0x4, 0xa5,0xbe,0x39,0x21,0x43,0xc, ++0x1, 0x7e,0xf3,0x3a,0x9, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0x9, 0xa, 0x2f,0x19,0x72, ++0x2b,0x21,0xa5,0xbe,0x39,0x2, 0x80,0x2, 0xa1,0x22,0x75,0x1b,0x38,0xa1,0x22,0xbe, ++0x60,0x3a,0x68,0x4, 0xa5,0xbe,0x3b,0x21,0x43,0xc, 0x2, 0x7e,0xf3,0x3a,0xb, 0x7c, ++0xbf,0x4, 0x7a,0xb3,0x3a,0xb, 0xa, 0x2f,0x19,0x72,0x2b,0x44,0xa5,0xbe,0x3b,0x2, ++0x80,0x2, 0xa1,0x22,0x75,0x1b,0x3a,0xa1,0x22,0xa5,0xbe,0xfb,0x9, 0x43,0xc, 0x4, ++0x7a,0x73,0x2b,0x12,0xa1,0x22,0xa5,0xbe,0x50,0x6, 0x7a,0x73,0x3a,0x34,0xa1,0x22, ++0xbe,0x60,0x3c,0x68,0x4, 0xa5,0xbe,0x3d,0x21,0x43,0xc, 0x1, 0x7e,0xf3,0x3a,0xd, ++0x7c,0xbf,0x4, 0x7a,0xb3,0x3a,0xd, 0xa, 0x2f,0x19,0x72,0x2a,0x7a,0xa5,0xbe,0x3d, ++0x2, 0x80,0x2, 0xa1,0x22,0x75,0x1b,0x3c,0xa1,0x22,0xbe,0x60,0x3e,0x68,0x4, 0xa5, ++0xbe,0x3f,0x21,0x43,0xc, 0x1, 0x7e,0xf3,0x3a,0xf, 0x7c,0xbf,0x4, 0x7a,0xb3,0x3a, ++0xf, 0xa, 0x2f,0x19,0x72,0x2a,0x9d,0xa5,0xbe,0x3f,0x2, 0x80,0x2, 0xa1,0x22,0x75, ++0x1b,0x3e,0xa1,0x22,0xbe,0x60,0x40,0x40,0xd, 0xbe,0x60,0x42,0x38,0x8, 0x12,0x45, ++0x27,0x75,0xd, 0x1, 0x80,0xa, 0xa5,0xbe,0x43,0xb, 0x12,0x45,0x27,0x75,0xd, 0x2, ++0x12,0x45,0x36,0x80,0x7d,0xa5,0xbe,0x44,0x8, 0x12,0x45,0x27,0x12,0x47,0x2e,0x80, ++0x71,0xbe,0x60,0x45,0x68,0x4, 0xa5,0xbe,0x46,0x5, 0x12,0x45,0x27,0x80,0x63,0xbe, ++0x60,0x4e,0x68,0x4, 0xa5,0xbe,0x4f,0x20,0x43,0xd, 0x4, 0x7e,0xf3,0x3a,0x2a,0x7c, ++0xbf,0x4, 0x7a,0xb3,0x3a,0x2a,0xa, 0x2f,0x2e,0x27,0x36,0xaa,0x7a,0x29,0x70,0xa5, ++0xbe,0x4f,0x3f,0x75,0x1b,0x4e,0x80,0x3a,0xa5,0xbe,0x6d,0x5, 0x7a,0x71,0xe, 0x80, ++0x31,0xbe,0x60,0xf0,0x40,0x25,0xbe,0x60,0xf3,0x38,0x20,0x7c,0x16,0x2e,0x10,0x20, ++0x7c,0xb7,0xa5,0xf7,0xa5,0xbe,0xf3,0x1a,0x7e,0x15,0x12,0x7e,0x5, 0x10,0x3e,0x4, ++0x7e,0x1f,0x36,0xae,0x2d,0x30,0x1b,0x1a,0x10,0x80,0x7, 0xa5,0xbe,0xf6,0x3, 0x7a, ++0x71,0xf, 0xda,0xf8,0x22,0xd2,0x8, 0xa, 0x26,0x19,0x72,0x39,0xe4,0x22,0x7e,0xb3, ++0x39,0xe4,0xc4,0x54,0x7, 0x22,0x12,0x47,0xbf,0xb4,0x1, 0x14,0xca,0x39,0x7e,0x18, ++0x3a,0x24,0x7e,0x8, 0x25,0xee,0x12,0x20,0xf1,0x1b,0xfd,0x12,0x47,0x7, 0x80,0x12, ++0xca,0x39,0x7e,0x18,0x3a,0x24,0x7e,0x8, 0x2b,0x70,0x12,0x20,0xf1,0x1b,0xfd,0x12, ++0x47,0x25,0x2, 0x45,0x65,0x7a,0x1f,0x2a,0xfc,0x7a,0xf, 0x2a,0xf8,0x22,0x7a,0xb3, ++0x2b,0x0, 0x70,0x14,0x12,0x47,0x25,0x12,0x45,0x65,0x7e,0x18,0x6, 0x76,0x7a,0x1f, ++0x6, 0xf4,0x7e,0x18,0x4, 0x7e,0x80,0x10,0xb4,0x1, 0x11,0x12,0x47,0x7, 0x12,0x45, ++0x65,0x12,0xc8,0x81,0x7e,0x18,0x4, 0x0, 0x7a,0x1f,0x6, 0xf8,0x22,0x74,0x1, 0x12, ++0x0, 0x1e,0xe4,0x12,0x45,0x6e,0x12,0x45,0xb5,0xe4,0x12,0x0, 0x1e,0x74,0x1, 0x12, ++0x45,0x6e,0x2, 0x45,0xb5,0xca,0x3b,0x7e,0xd3,0x2a,0x73,0x7e,0xc3,0x2a,0x74,0x7e, ++0x8, 0x1f,0x44,0x12,0x86,0xf7,0x7e,0x8, 0x1f,0x8a,0x7e,0x34,0x0, 0x46,0x12,0x21, ++0x16,0x7e,0x8, 0x1f,0xd0,0x7e,0x34,0x0, 0xa, 0xe4,0x12,0x21,0x16,0x7e,0x8, 0x1f, ++0xda,0x7e,0x34,0x0, 0xa, 0x12,0x21,0x16,0x7e,0xf3,0x2a,0xfc,0x7e,0x18,0x2a,0xdc, ++0x7a,0x1d,0x24,0x7e,0x18,0x1f,0xd0,0x7a,0x1d,0x28,0x7c,0xbd,0x7c,0x7c,0x7e,0x8, ++0x2a,0xb9,0x12,0xbe,0x9e,0x6c,0xee,0x80,0x27,0xa, 0x3e,0x9, 0xa3,0x2a,0xdc,0xa, ++0x3a,0x12,0x97,0xb2,0x7c,0xab,0xbe,0xa0,0x1c,0x50,0x13,0xa, 0x3e,0x12,0x46,0xc9, ++0xa, 0x4a,0x19,0xb4,0x1f,0x44,0x7e,0xb3,0x2a,0xfb,0x19,0xb4,0x1f,0x8a,0xb, 0xe0, ++0xbc,0xce,0x38,0xd5,0x6c,0xee,0x80,0x24,0xa, 0x3e,0x9, 0xa3,0x2a,0xb9,0xbe,0xa0, ++0x23,0x50,0x17,0xa, 0x2e,0xa, 0x3c,0x2d,0x32,0x12,0x46,0xc9,0xa, 0x4a,0x19,0xb4, ++0x1f,0x60,0x7e,0xb3,0x2a,0xfb,0x19,0xb4,0x1f,0xa6,0xb, 0xe0,0xbc,0xde,0x38,0xd8, ++0x7e,0xb3,0x2a,0xfd,0x7e,0x8, 0x1f,0xe4,0x60,0x9, 0x7e,0x18,0x1f,0xd0,0x12,0xbb, ++0x8f,0x80,0x3, 0x12,0xbe,0x44,0x6c,0xee,0x7e,0x18,0x1f,0xe4,0x7a,0x1f,0x1f,0x34, ++0x74,0x2, 0xac,0xbe,0x49,0x35,0x1f,0xd0,0x7a,0x37,0x1f,0x38,0x74,0x2, 0xac,0xbe, ++0x49,0x35,0x1f,0xda,0x7a,0x37,0x1f,0x3a,0x7e,0x70,0xe, 0xac,0x7e,0x2e,0x34,0x1f, ++0x44,0x6d,0x22,0x7a,0x1f,0x1f,0x3c,0x7e,0x70,0xe, 0xac,0x7e,0x2e,0x34,0x1f,0x8a, ++0x7a,0x1f,0x1f,0x40,0x7e,0x8, 0x1f,0x34,0x7c,0xbf,0x7c,0x7e,0x12,0x8, 0xd1,0xb, ++0xe0,0xbe,0xe0,0x5, 0x40,0xb2,0xda,0x3b,0x22,0x2e,0x37,0x2a,0xfe,0x7e,0x39,0xb0, ++0x22,0x74,0x1, 0x7a,0xb3,0x39,0x50,0x12,0x6f,0xb6,0x12,0x14,0x2a,0x12,0xbd,0xb8, ++0xe4,0x12,0xa, 0x66,0x7e,0x24,0x3, 0xd4,0x12,0x50,0x32,0x74,0x1, 0x12,0x45,0x6e, ++0x12,0x85,0xc8,0x7e,0x34,0xd0,0xc, 0x12,0x1, 0xe, 0x12,0x45,0x9d,0x7e,0x34,0x0, ++0x1, 0x12,0xc8,0xbb,0x2, 0x12,0x6a,0x7e,0x1f,0x25,0xf2,0x7e,0xf, 0x25,0xee,0x22, ++0x7a,0xb3,0x2b,0x0, 0x70,0x5, 0x12,0x47,0x25,0x80,0x6, 0xb4,0x1, 0x6, 0x12,0x47, ++0x7, 0x12,0x45,0x65,0x22,0x7e,0x1f,0x2b,0x74,0x7e,0xf, 0x2b,0x70,0x22,0x12,0x47, ++0xbf,0xb4,0x1, 0x17,0xca,0x39,0x7e,0x18,0x25,0xee,0x7e,0x8, 0x3a,0x24,0x12,0x20, ++0xf1,0x1b,0xfd,0x12,0xc8,0xfb,0x12,0x47,0x7, 0x80,0x1a,0xca,0x39,0x7e,0x18,0x2b, ++0x70,0x7e,0x8, 0x3a,0x24,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x37,0x2b,0x76,0x7a,0x37, ++0x36,0xaa,0x12,0x47,0x25,0x2, 0x45,0x65,0xe5,0xd, 0x60,0x52,0xe5,0xd, 0x30,0xe0, ++0x6, 0x53,0xd, 0xfe,0x12,0x56,0xe7,0xe5,0xd, 0x30,0xe1,0x14,0x53,0xd, 0xfd,0x7e, ++0xb3,0x3a,0x28,0x70,0x4, 0x74,0x1, 0x80,0x1, 0xe4,0x12,0xc9,0x1e,0x12,0x87,0x0, ++0xe5,0xd, 0x30,0xe2,0x29,0x53,0xd, 0xfb,0xe4,0x7a,0xb3,0x3a,0x29,0x7e,0xb3,0x3a, ++0x28,0x70,0xa, 0x74,0x1, 0x12,0x0, 0x1e,0x12,0x47,0x25,0x80,0x7, 0xe4,0x12,0x0, ++0x1e,0x12,0x47,0x7, 0x12,0x45,0x65,0x7e,0xb3,0x2a,0xfc,0x2, 0x86,0x66,0x22,0x7e, ++0xb3,0x3a,0x28,0x7e,0x34,0x0, 0x4, 0x22,0x30,0x8, 0x3b,0xc2,0x8, 0x12,0x26,0x15, ++0x7e,0x73,0x39,0xe9,0x7a,0x73,0x2a,0x4d,0x7e,0x73,0x39,0xea,0x7a,0x73,0x2b,0x1d, ++0x7e,0x73,0x39,0xea,0x7a,0x73,0x2b,0x1, 0x7e,0xb3,0x39,0xeb,0x60,0x18,0x7e,0x34, ++0x0, 0x2, 0x12,0x49,0xbb,0x7e,0x34,0x0, 0x1, 0x12,0x49,0xbb,0x6d,0x33,0x12,0x49, ++0xbb,0xe4,0x7a,0xb3,0x39,0xeb,0x12,0x47,0x68,0x2, 0x48,0xc, 0xe5,0xc, 0x70,0x2, ++0x21,0x29,0xe5,0xc, 0x30,0xe0,0x10,0x53,0xc, 0xfe,0x12,0x81,0xe1,0x12,0x83,0xd1, ++0x7e,0x8, 0x2a,0x6d,0x12,0x9, 0xa1,0xe5,0xc, 0x30,0xe1,0x6, 0x53,0xc, 0xfd,0x12, ++0xbe,0x55,0xe5,0xc, 0x30,0xe2,0x32,0x53,0xc, 0xfb,0x7e,0xb3,0x2b,0x12,0x60,0x9, ++0x7e,0x8, 0x2a,0x6d,0x12,0x6, 0xba,0x80,0xb, 0x7e,0xb3,0x2b,0x65,0x7e,0x73,0x2b, ++0x64,0x12,0xb, 0xad,0x7e,0x73,0x2b,0x12,0x2e,0x70,0xff,0x92,0x1, 0x90,0x60,0x51, ++0xe4,0x93,0x9e,0xb3,0x2a,0x77,0x12,0xb, 0x1e,0xe5,0xc, 0x30,0xe3,0x45,0x53,0xc, ++0xf7,0x7e,0x73,0x3a,0x16,0x7a,0x73,0x2b,0xf, 0x12,0xab,0xd3,0x7a,0xb3,0x0, 0x5e, ++0xbe,0xb0,0xff,0x68,0xb, 0x43,0xc, 0x20,0x7e,0x73,0x0, 0x5e,0x7a,0x73,0x39,0xee, ++0x12,0x6c,0x17,0x12,0x4f,0xf7,0x7e,0x73,0x3a,0x17,0xbe,0x73,0x2b,0x62,0x68,0x6, ++0x7a,0x73,0x2b,0x62,0xd2,0x10,0x30,0x10,0x7, 0x12,0x6f,0xb4,0xe4,0x12,0xa, 0x66, ++0x12,0x6c,0xe8,0xe5,0xc, 0x30,0xe4,0xf, 0x53,0xc, 0xef,0x7e,0x43,0x3a,0x18,0x7e, ++0x50,0xa, 0xac,0x45,0x12,0x50,0x32,0xe5,0xc, 0x30,0xe6,0x4e,0x53,0xc, 0xbf,0x7e, ++0x73,0x3a,0x4, 0xbe,0x70,0x7, 0x28,0x6, 0x74,0x7, 0x7a,0xb3,0x3a,0x4, 0xa9,0xd5, ++0xcb,0x74,0xe, 0x12,0x49,0x2a,0x7c,0x7b,0x5e,0x70,0xf, 0x7e,0x63,0x3a,0x4, 0xa, ++0x26,0x2e,0x24,0x0, 0x3, 0x12,0x8b,0xb, 0x7c,0x65,0x4c,0x76,0x74,0xe, 0x12,0x49, ++0xb5,0x12,0x49,0x2a,0x12,0x4b,0xb1,0x7e,0x73,0x3a,0x7, 0x7a,0x73,0x2b,0x14,0x7e, ++0x73,0x3a,0x6, 0x7a,0x73,0x2b,0x1f,0x12,0xc9,0xd, 0xe5,0xc, 0x30,0xe5,0xa, 0x53, ++0xc, 0xdf,0x7e,0xb3,0x39,0xee,0x2, 0x50,0x80,0x22,0xf5,0xfd,0xe5,0xfe,0x22,0xca, ++0x79,0xa9,0xd5,0xcb,0x74,0x2, 0x7e,0x70,0x3f,0x12,0x49,0xb5,0x74,0xf, 0x12,0x49, ++0x2a,0x7c,0xfb,0x74,0xf, 0x7c,0x7f,0x5e,0x70,0xfe,0x12,0x49,0xb5,0x74,0xc, 0x12, ++0x49,0x2a,0x7c,0xfb,0x54,0x7f,0x68,0x8, 0x74,0xc, 0x7e,0x70,0xf8,0x12,0x49,0xb5, ++0x90,0x61,0x18,0xe4,0x93,0x7c,0xab,0xbe,0xa0,0x7, 0x38,0xb, 0x12,0x4f,0x3b,0x7c, ++0xb7,0xa, 0x7b,0xb, 0x75,0x80,0x16,0x90,0x61,0x17,0xe4,0x93,0xb4,0x1, 0xe, 0xbe, ++0xa0,0x7, 0x28,0x9, 0x12,0x4f,0x3b,0xa, 0x77,0x2e,0x74,0x0, 0x7, 0x74,0xe, 0x7c, ++0x7f,0x12,0x49,0xb5,0x74,0x7, 0x12,0x49,0x2a,0x7c,0xfb,0x5e,0xf0,0xfb,0x90,0x60, ++0x2, 0xe4,0x93,0xa, 0x3b,0x3e,0x34,0x3e,0x34,0x4c,0xf7,0x74,0x7, 0x7c,0x7f,0x12, ++0x4b,0xae,0xda,0x79,0x22,0xf5,0xfd,0x7a,0x71,0xfe,0x22,0xca,0xd8,0xca,0x79,0x7d, ++0xd3,0x90,0x60,0x50,0xe4,0x93,0x7c,0xfb,0x90,0x60,0x51,0xe4,0x93,0x7c,0x8b,0xa, ++0x38,0xa, 0xcf,0x2d,0xc3,0xb, 0xc4,0x7d,0x3c,0x7c,0xe7,0x12,0x26,0x86,0xa9,0xd0, ++0xc4,0xa9,0xd5,0xcb,0x74,0x7, 0x12,0x49,0x2a,0x7c,0x8b,0x74,0x7, 0x7e,0x70,0xf, ++0x12,0x4b,0xae,0x7e,0x54,0x0, 0x78,0x7e,0x1f,0x3b,0xc, 0x79,0x51,0x0, 0x6, 0x7e, ++0x54,0x0, 0x80,0x7e,0x1f,0x3b,0xc, 0x79,0x51,0x0, 0x8, 0x7e,0x54,0x0, 0xc, 0x7e, ++0x1f,0x3b,0xc, 0x79,0x51,0x0, 0x10,0xbe,0xd4,0x0, 0x2, 0x78,0xb, 0x7e,0x1f,0x3b, ++0xc, 0x12,0x4b,0xa6,0x44,0x1, 0x80,0x20,0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x44, ++0x8, 0x1b,0x1a,0x50,0x4d,0xdd,0x7e,0x1f,0x3b,0xc, 0x78,0x7, 0x12,0x4b,0xa6,0x54, ++0xfb,0x80,0x5, 0x12,0x4b,0xa6,0x44,0x4, 0x1b,0x1a,0x50,0x7e,0x1f,0x3b,0x8, 0x69, ++0xe1,0x0, 0x84,0x69,0x51,0x0, 0x90,0x7d,0xf5,0x2e,0x34,0x0, 0x90,0x5e,0xa0,0xf6, ++0x1b,0x1a,0x50,0x7e,0xb3,0x39,0x5a,0xbe,0xb0,0x6, 0x40,0x3, 0xb4,0xff,0xe, 0x12, ++0x4b,0xbb,0x54,0xe6,0x12,0x4b,0xb8,0x4e,0x54,0x1, 0xa4,0x80,0xc, 0x12,0x4b,0xbb, ++0x5e,0x54,0xfe,0xe6,0x12,0x4b,0xb8,0x44,0xa4,0x1b,0x1a,0x50,0xbe,0xd4,0x0, 0x2, ++0x78,0x2d,0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x5e,0x54,0x0, 0xf, 0x1b,0x1a,0x50, ++0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x44,0x50,0x1b,0x1a,0x50,0x7e,0x34,0x0, 0x2, ++0x12,0x4c,0x3f,0x12,0x4c,0x18,0x12,0x4b,0xf5,0x7a,0x37,0x36,0xb2,0x61,0x62,0x6c, ++0xdd,0x61,0x5c,0x4c,0xdd,0x78,0x4, 0x6c,0x99,0x80,0x2b,0xbc,0xfd,0x40,0x12,0xa, ++0xcd,0x9, 0x9c,0x2a,0xb8,0xbe,0x90,0x23,0x40,0x3, 0x7e,0x90,0x22,0xb, 0x90,0x80, ++0x15,0xa, 0x3f,0xa, 0xcd,0x9d,0xc3,0x9, 0x9c,0x2a,0xdb,0xbe,0x90,0x1c,0x40,0x3, ++0x7e,0x90,0x1b,0x2e,0x90,0x24,0x7e,0x1f,0x3b,0xc, 0x12,0x4b,0xa6,0x5e,0x54,0x0, ++0xf, 0x1b,0x1a,0x50,0xa, 0xc9,0x3e,0xc4,0x3e,0xc4,0x3e,0xc4,0x3e,0xc4,0x7e,0x1f, ++0x3b,0xc, 0x12,0x4b,0xa6,0x4d,0x5c,0x1b,0x1a,0x50,0xe5,0xe, 0x60,0x7, 0xe5,0xe, ++0xbe,0xb0,0x64,0x28,0x6, 0x7e,0x34,0x0, 0x2, 0x80,0x4, 0xe5,0xe, 0xa, 0x3b,0x12, ++0x4c,0x3f,0x12,0x4c,0x18,0xbe,0xd4,0x0, 0x1, 0x78,0x10,0x12,0x4c,0x18,0x12,0x4b, ++0xf5,0x74,0x2, 0xac,0xbd,0x59,0x35,0x36,0xb4,0x80,0xf, 0x12,0x4b,0xf5,0xa, 0x5e, ++0xa, 0x2d,0x2d,0x25,0x3e,0x24,0x59,0x32,0x36,0xb4,0xb, 0xd0,0xbc,0xed,0x28,0x2, ++0x41,0xc3,0xa9,0xd5,0xcb,0x74,0x7, 0x7c,0x78,0x12,0x4b,0xae,0xa9,0xc0,0xc4,0x7e, ++0x1f,0x3b,0x8, 0x79,0xe1,0x0, 0x84,0x7e,0x1f,0x3b,0x8, 0x79,0xf1,0x0, 0x90,0x6d, ++0x33,0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, 0x6, 0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, ++0x8, 0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, 0x10,0x7e,0xf, 0x3b,0xc, 0x79,0x30,0x0, ++0xe, 0xda,0x79,0xda,0xd8,0x22,0x2e,0x34,0x0, 0xe, 0xb, 0x1a,0x50,0x22,0x12,0x49, ++0xb5,0x75,0xfd,0xff,0xa9,0xc5,0xcb,0x22,0x1b,0x1a,0x50,0x7e,0x1f,0x3b,0x8, 0x2e, ++0x34,0x0, 0x84,0xb, 0x1a,0x50,0x22,0x6d,0x33,0x7e,0x8, 0x0, 0x24,0x7e,0x24,0x0, ++0x12,0x12,0x69,0x9f,0xe5,0x34,0x20,0xe7,0x1b,0xa9,0xd5,0xcb,0x74,0x3, 0x7e,0x71, ++0x27,0x12,0x49,0xb5,0x74,0xb, 0x7e,0x71,0x2f,0x12,0x49,0xb5,0x74,0xc, 0x7e,0x71, ++0x30,0x12,0x4b,0xae,0x22,0x7e,0xf, 0x3b,0xc, 0x69,0x30,0x0, 0xa, 0x7d,0x23,0x6d, ++0x33,0x69,0x10,0x0, 0xc, 0x6d,0x0, 0x2f,0x10,0x74,0x7, 0x1e,0x34,0x1e,0x24,0x50, ++0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,0x22,0x7e,0x34,0x0, 0x1, 0x7e,0xf, 0x3b,0xc, ++0x79,0x30,0x0, 0x4, 0x7e,0xf, 0x3b,0xc, 0x69,0x30,0x0, 0x12,0x5e,0x34,0x0, 0x1, ++0x68,0xf2,0x7e,0x34,0x0, 0x1, 0x79,0x30,0x0, 0x12,0x22,0x7e,0x34,0x0, 0x1, 0x7d, ++0x23,0x80,0x12,0x7e,0x30,0x4, 0x80,0x5, 0x74,0xfa,0x12,0x4f,0x4a,0x7c,0x23,0x1b, ++0x30,0xa5,0xba,0x0, 0xf3,0x7d,0x32,0x1b,0x24,0x4d,0x33,0x78,0xe6,0x22,0xca,0x3b, ++0x75,0x24,0x0, 0x6c,0xff,0x12,0x4f,0xe9,0x75,0x28,0x3, 0x6c,0xee,0x75,0x29,0x0, ++0x7e,0x48,0x29,0xbc,0x7e,0xb3,0x2a,0xb, 0x70,0xe, 0x7e,0xb3,0x2a,0x7, 0x70,0x8, ++0x7e,0xb3,0x2a,0x8, 0x70,0x2, 0xc1,0x90,0x30,0xb, 0x6, 0x7e,0x68,0x33,0x5f,0x80, ++0x4, 0x7e,0x68,0x33,0x21,0x7f,0x6, 0x12,0xc8,0xe0,0x7e,0x73,0x2a,0x4, 0x7a,0x6b, ++0x70,0x6c,0xdd,0xc1,0xf, 0x74,0x9, 0xac,0xbd,0x9, 0xc5,0x29,0xc, 0x7c,0xbc,0x54, ++0xf, 0x12,0xc8,0x8a,0xf5,0x28,0x7c,0xbc,0x54,0xf0,0xbe,0xb0,0x0, 0x28,0x2, 0xc1, ++0xd, 0xe5,0x28,0xbe,0xb0,0x3, 0x78,0x2, 0xc1,0xd, 0x7e,0x8, 0x0, 0x28,0x7c,0xbc, ++0x12,0xa1,0x2b,0x50,0x2, 0xc1,0xd, 0x74,0x9, 0xac,0xbd,0x9, 0xb5,0x29,0xd, 0xf5, ++0x25,0x74,0x9, 0xac,0xbd,0x9, 0xb5,0x29,0xe, 0xc4,0x54,0xf0,0xf5,0x26,0x7e,0x73, ++0x2a,0x4d,0xbc,0x7c,0x28,0x54,0x7e,0xb3,0x2a,0x9, 0x70,0x2a,0x75,0x2a,0xf, 0x7e, ++0x8, 0x0, 0x25,0xa, 0x3c,0x2e,0x34,0x33,0xd, 0x6d,0x22,0x74,0x1, 0x12,0x8f,0xd7, ++0x75,0x2a,0x20,0x7e,0x8, 0x0, 0x26,0xa, 0x3c,0x2e,0x34,0x33,0x17,0x6d,0x22,0x74, ++0x10,0x12,0x8f,0xd7,0x80,0xe, 0xa, 0x3c,0x9, 0xb3,0x33,0xd, 0xf5,0x25,0x9, 0xb3, ++0x33,0x17,0xf5,0x26,0xa, 0x3c,0x12,0xc8,0x8c,0xb4,0x1, 0xe, 0xe4,0xa, 0x3c,0x19, ++0xb3,0x33,0xd, 0x19,0xb3,0x33,0x17,0x12,0x4f,0xe9,0x7e,0xb3,0x2a,0x64,0xb4,0xff, ++0x13,0x75,0x25,0x0, 0x74,0x9, 0xac,0xbd,0x9, 0xb5,0x29,0xc, 0xbe,0xb0,0xff,0x68, ++0x3, 0x75,0x25,0x1, 0x7e,0x90,0x9, 0xac,0x9d,0x49,0xb4,0x29,0x8, 0x49,0xa4,0x29, ++0xa, 0xe5,0x28,0x60,0x5, 0xe5,0x28,0xb4,0x1, 0x2, 0x5, 0x29,0xe5,0x28,0xb4,0x1, ++0x2c,0x75,0x27,0x0, 0x80,0x1d,0x7e,0x71,0x27,0x74,0x9, 0xac,0x7b,0x9, 0xb3,0x33, ++0xa1,0x54,0xf, 0xbc,0xbc,0x78,0xa, 0x49,0xb3,0x33,0x9d,0x49,0xa3,0x33,0x9f,0x80, ++0xc, 0x5, 0x27,0x90,0x60,0x99,0xe4,0x93,0xbe,0xb1,0x27,0x38,0xd9,0x5e,0xb4,0xf, ++0xff,0x5e,0xa4,0xf, 0xff,0x9, 0x74,0x29,0xc, 0xa, 0x57,0xc4,0x54,0xf0,0x7c,0xab, ++0xe4,0x2d,0xa5,0xbe,0x70,0xff,0x68,0x16,0xe5,0x28,0xbe,0xb0,0x1, 0x68,0x2, 0x5, ++0x24,0xb, 0xf0,0xe5,0x28,0xa, 0x5b,0x12,0xbb,0xe9,0x2d,0xb5,0x80,0x4, 0x2e,0xb4, ++0xc0,0x0, 0x7e,0x70,0x6, 0xac,0x7e,0x7f,0x6, 0x2d,0x13,0x79,0xb0,0x0, 0x2, 0x7f, ++0x6, 0x2d,0x13,0x79,0xa0,0x0, 0x4, 0xe5,0x25,0x7f,0x6, 0x2d,0x13,0x39,0xb0,0x0, ++0x6, 0xe5,0x26,0x2d,0x3d,0x7d,0x2c,0x39,0xb1,0x0, 0x7, 0xb, 0xe0,0xb, 0xd0,0x7e, ++0x73,0x2a,0x4d,0xbc,0x7d,0x28,0x2, 0x81,0xa5,0xe5,0x24,0x39,0xb6,0x0, 0x1, 0x7e, ++0xb3,0x39,0x79,0xb4,0x1, 0x9, 0x7e,0xb3,0x2a,0x8, 0xb4,0x1, 0x49,0x80,0x44,0xbe, ++0xf0,0x0, 0x38,0x6, 0x7e,0xb3,0x2a,0x8, 0x60,0x3c,0x30,0xa, 0x28,0x12,0x4e,0xb9, ++0x7e,0x34,0x0, 0x1e,0x12,0x4c,0x3f,0x7e,0x10,0xa, 0x7e,0x34,0x0, 0x5, 0x12,0x4c, ++0x3f,0x30,0xa, 0x4, 0x1b,0x10,0x78,0xf2,0xe4,0x12,0x4e,0xbe,0x7e,0x34,0x0, 0x3, ++0x12,0x4c,0x3f,0xc2,0xa, 0xb2,0xb, 0xe5,0x29,0xbe,0xb0,0x0, 0x28,0x5, 0x75,0x18, ++0x0, 0xd2,0xa, 0x12,0x4e,0xb9,0x7e,0xb3,0x2a,0x7, 0x60,0x5, 0x7f,0x4, 0x12,0x71, ++0xfd,0xe4,0x7a,0xb3,0x2a,0xb, 0x7a,0xb3,0x2a,0x7, 0x7a,0xb3,0x2a,0x8, 0x80,0x4, ++0xe4,0x12,0x4e,0xbe,0x12,0x8f,0x3c,0xca,0x59,0x7e,0x18,0x29,0x8, 0x7e,0x8, 0x33, ++0x9d,0x12,0x20,0xf1,0x1b,0xfd,0x4c,0xff,0x78,0xc, 0x12,0x77,0xcf,0x7e,0x8, 0x33, ++0x9d,0x74,0xff,0x12,0x21,0x16,0xda,0x3b,0x22,0x12,0x4f,0x65,0x74,0x1, 0x70,0x3, ++0xd2,0x86,0x22,0xc2,0x86,0x22,0x12,0x4f,0xf0,0xc2,0x0, 0x12,0xba,0x85,0xc2,0x2, ++0x12,0x4f,0xa5,0xc2,0x0, 0x12,0x4f,0xfe,0xa9,0xd5,0xcb,0x74,0xf, 0x12,0x49,0x2a, ++0x7a,0x1b,0xb0,0x74,0xf, 0x6c,0x77,0x12,0x49,0xb5,0xe5,0xfc,0x7a,0xb, 0xb0,0x43, ++0xfc,0x10,0x2, 0x4b,0xb1,0x24,0xab,0x68,0x10,0x24,0xef,0x68,0x1c,0x24,0xde,0x68, ++0x26,0x24,0xde,0x78,0x2f,0x74,0x5, 0x80,0x2d,0x7e,0xb3,0x34,0x4f,0xb4,0x5, 0x2a, ++0x12,0x4c,0x3b,0x12,0xba,0x3d,0x2, 0x4f,0xd2,0x7e,0xb3,0x34,0x4f,0xb4,0x5, 0x1a, ++0x12,0x4c,0x3b,0x75,0xe9,0xff,0x22,0x7e,0xb3,0x34,0x4f,0xb4,0x5, 0xc, 0x12,0x4c, ++0x3b,0x2, 0x4f,0xcc,0x74,0x1, 0x7a,0xb3,0x34,0x4f,0x22,0xa, 0x3a,0x2e,0x34,0x0, ++0x3, 0x3e,0x34,0x3e,0x34,0x3e,0x34,0x3e,0x34,0x22,0x7c,0xab,0x80,0xe, 0x7e,0x70, ++0x3, 0x80,0x1, 0x0, 0x7c,0x67,0x1b,0x70,0xa5,0xbe,0x0, 0xf7,0x7c,0x6a,0x1b,0xa0, ++0xa5,0xbe,0x0, 0xea,0x22,0x7e,0xb3,0x3a,0x39,0x4, 0x7a,0xb3,0x3a,0x39,0xe5,0x1a, ++0xb4,0x1, 0x8, 0xe4,0x7a,0xb3,0x3a,0x39,0x75,0x1a,0x0, 0x7e,0x73,0x3a,0x39,0x7a, ++0x73,0x39,0x38,0x22,0x7c,0x6b,0xa9,0xd5,0xcb,0x74,0xf, 0x12,0x49,0xb5,0x7a,0x61, ++0xfc,0x12,0x4b,0xb1,0x12,0x6a,0xe2,0xd2,0x0, 0x12,0x4f,0xfe,0x12,0x4f,0xbf,0x12, ++0x14,0x13,0x2, 0x13,0xcb,0xa9,0xd0,0xce,0xa2,0x2, 0xa9,0x91,0xc9,0x22,0x30,0x1, ++0x6, 0x12,0x4f,0xbf,0x2, 0x13,0xcb,0x12,0x4f,0xf0,0xc2,0x2, 0x2, 0x4f,0xa5,0xd2, ++0x2, 0x12,0x4f,0xa5,0x74,0x1, 0x22,0xd2,0x1, 0x2, 0x4f,0xae,0x75,0xe7,0x6b,0x2, ++0x4f,0xd2,0xe4,0x7e,0x34,0xd7,0xfc,0x7e,0x24,0x0, 0xff,0x7a,0x1b,0xb0,0x7e,0x34, ++0xd7,0xfd,0x7a,0x1b,0xb0,0x75,0xe9,0xff,0x22,0x75,0x25,0x0, 0x75,0x26,0x0, 0x22, ++0xe4,0x12,0x14,0x13,0x2, 0x13,0xcb,0x7e,0x8, 0x2a,0x6d,0x2, 0xd, 0x72,0xa2,0x0, ++0xa9,0x97,0xc1,0xa2,0x0, 0xa9,0x97,0xc2,0x22,0x12,0xc9,0x4, 0x12,0xc8,0xfb,0x6d, ++0x33,0x7a,0x35,0xa, 0x12,0x50,0x5f,0x12,0x50,0x39,0x74,0x50,0x7a,0xb3,0x3a,0x18, ++0x7e,0x24,0x3, 0x20,0x12,0x50,0x32,0xe4,0x12,0xc8,0x78,0x6d,0x33,0x7a,0x37,0x3b, ++0x54,0x22,0x7d,0x32,0x74,0xfa,0x2, 0x13,0x5, 0x7e,0x73,0x2b,0x62,0x7a,0x73,0x3a, ++0x17,0x22,0xa2,0xe, 0xe4,0x33,0x7a,0xb3,0x3a,0x12,0x7e,0x73,0x3a,0x16,0xbe,0x73, ++0x2b,0xf, 0x68,0xa, 0xe5,0xc, 0x70,0x6, 0x12,0x50,0x5f,0x12,0x50,0x39,0x22,0x7e, ++0x73,0x2b,0xf, 0x7a,0x73,0x3a,0x16,0x7e,0x73,0x2b,0x1f,0x7a,0x73,0x3a,0x6, 0x7e, ++0x73,0x2b,0x20,0x7a,0x73,0x3a,0x5, 0x7e,0x73,0x2b,0x14,0x7a,0x73,0x3a,0x7, 0x22, ++0xca,0xd8,0xca,0x79,0x7c,0xdb,0x90,0x61,0xc5,0xe4,0x93,0x7c,0xab,0xbe,0xd0,0x80, ++0x78,0x18,0x7e,0xe0,0xff,0x6c,0xff,0x80,0xb, 0x12,0x50,0xf1,0x38,0x4, 0x7c,0xeb, ++0x7c,0xdf,0xb, 0xf0,0xbc,0xaf,0x38,0xf1,0x80,0x1a,0xbe,0xd0,0x81,0x78,0x15,0x6c, ++0xee,0x6c,0xff,0x80,0xb, 0x12,0x50,0xf1,0x40,0x4, 0x7c,0xeb,0x7c,0xdf,0xb, 0xf0, ++0xbc,0xaf,0x38,0xf1,0xbc,0xad,0x38,0x2, 0x6c,0xdd,0x7c,0xbd,0x12,0x6c,0x68,0x12, ++0x50,0x77,0x7e,0x73,0x2b,0x1f,0x7a,0x73,0x3a,0x6, 0x12,0x51,0xd, 0x7e,0x73,0x2b, ++0xf, 0x7a,0x73,0x3a,0x16,0x12,0x50,0x39,0x7a,0xd3,0x39,0xee,0xda,0x79,0xda,0xd8, ++0x22,0x7e,0x90,0x5, 0xac,0x9f,0x9, 0xb4,0x26,0x33,0xbc,0xbe,0x22,0x30,0x0, 0x3, ++0x12,0x50,0x77,0xa2,0x1, 0x92,0x2, 0x12,0x51,0xcc,0x2, 0x51,0xd, 0x7e,0x73,0x2b, ++0x20,0x7a,0x73,0x3a,0x5, 0x22,0x74,0x40,0x12,0x7e,0x2a,0x50,0x9, 0xd2,0x0, 0xd2, ++0x1, 0x12,0x50,0xfd,0x80,0x1c,0x74,0x1, 0x12,0x51,0x50,0x7e,0x43,0x3a,0x3, 0x7e, ++0x50,0x64,0xac,0x45,0x12,0x96,0xdd,0x7a,0xb3,0x2b,0x1f,0x7e,0xf, 0x3b,0x21,0x12, ++0x55,0xa2,0x12,0x51,0xd, 0x7e,0x73,0x2b,0x1f,0x7a,0x73,0x3a,0x6, 0x2, 0x50,0x77, ++0xca,0x3b,0x7c,0xdb,0xe4,0x7a,0xb3,0x2b,0x14,0x12,0x4f,0xf7,0x7e,0xc0,0xa, 0x12, ++0x56,0x75,0x30,0xf, 0xfd,0x74,0x1, 0x12,0x0, 0xe, 0x7e,0x1f,0x3b,0x21,0x12,0x96, ++0xfc,0x7d,0x73,0xbe,0x74,0xff,0xff,0x78,0x9, 0x12,0x51,0xc0,0x2e,0x34,0x0, 0x3, ++0x80,0x18,0xbe,0x74,0x80,0x0, 0x28,0x7, 0x12,0x51,0xc0,0xb, 0x35,0x80,0xb, 0xbe, ++0x74,0x40,0x0, 0x28,0xc, 0x12,0x51,0xc0,0xb, 0x34,0x1b,0xa, 0x30,0x1b,0xc0,0x78, ++0xbe,0xbe,0xd0,0x1, 0x78,0x9, 0x7e,0x1f,0x3b,0x21,0x12,0x95,0xda,0x7d,0x73,0x7e, ++0x1f,0x3b,0x10,0x69,0x31,0x0, 0x1a,0x7a,0x73,0x2b,0x14,0x7d,0x37,0xda,0x3b,0x22, ++0x7e,0xf, 0x3b,0x10,0x2e,0x14,0x0, 0x1a,0xb, 0xa, 0x30,0x22,0xca,0x3b,0x7e,0x34, ++0xff,0xff,0x7a,0x35,0x35,0x7e,0xb3,0x39,0xf9,0xf5,0x2a,0x7e,0xb3,0x2a,0x6d,0xf5, ++0x2b,0x7e,0xb3,0x2a,0x6e,0xf5,0x2c,0x7e,0xb3,0x2a,0x70,0xf5,0x2d,0x7e,0xb3,0x2a, ++0x6f,0xf5,0x2e,0x7e,0x34,0x27,0x10,0x7a,0x35,0x2f,0x7e,0x18,0x40,0x0, 0x7a,0x1d, ++0x31,0x12,0x56,0x6e,0x30,0xf, 0xfd,0x74,0x1, 0x12,0x0, 0xe, 0x7e,0x8, 0x34,0x0, ++0x12,0x56,0x66,0x6c,0xff,0x80,0x35,0x12,0x54,0x45,0x6c,0xee,0x80,0x19,0x7e,0x11, ++0x2c,0xac,0x1e,0x3e,0x4, 0x7e,0x30,0x2, 0xac,0x3f,0x2d,0x10,0x7e,0x1d,0x31,0x2d, ++0x31,0xb, 0x1a,0x10,0x12,0x54,0x4e,0xe5,0x2e,0xbc,0xbe,0x38,0xe1,0xe5,0x2e,0x12, ++0x54,0x5d,0x74,0x2, 0xac,0xbf,0x59,0x35,0x34,0x0, 0xb, 0xf0,0xe5,0x2d,0xbc,0xbf, ++0x38,0xc5,0x12,0x7f,0xdf,0x68,0xb, 0x7e,0x34,0x10,0x0, 0x12,0x54,0x83,0x59,0x35, ++0x33,0xfe,0x6c,0xff,0x80,0x74,0x12,0x54,0x45,0x6c,0xee,0x80,0x12,0x12,0x56,0x3f, ++0x1e,0x34,0x1e,0x24,0x50,0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,0x12,0x54,0x4c,0xe5, ++0x2a,0xbc,0xbe,0x38,0xe8,0xe5,0x2a,0x12,0x54,0x5d,0x74,0x4, 0xac,0xbf,0x59,0x35, ++0x3, 0x6f,0xe5,0x2a,0xbe,0xb1,0x2d,0x50,0x33,0x12,0x54,0x45,0x7e,0xe1,0x2a,0x80, ++0x12,0x12,0x56,0x3f,0x1e,0x34,0x1e,0x24,0x50,0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4, ++0x12,0x54,0x4c,0xe5,0x2d,0xbc,0xbe,0x38,0xe8,0xe5,0x2a,0xa, 0x3b,0x6d,0x22,0xe5, ++0x2d,0xa, 0x1b,0x6d,0x0, 0x9f,0x1, 0x12,0x54,0x61,0x80,0x4, 0x7e,0x34,0x10,0x0, ++0x74,0x4, 0xac,0xbf,0x59,0x35,0x3, 0x71,0xb, 0xf0,0xe5,0x2e,0xbc,0xbf,0x38,0x86, ++0xe5,0x2d,0xa, 0x1b,0x6d,0x0, 0x7e,0x18,0x0, 0x28,0x12,0x1f,0x3c,0x6c,0xff,0x80, ++0x2e,0x74,0x2, 0xac,0xbf,0x49,0x25,0x34,0x0, 0xa, 0x5f,0xad,0x53,0x7e,0x14,0x10, ++0x0, 0x9d,0x15,0xad,0x12,0x74,0xc, 0x1e,0x14,0x1e,0x4, 0x50,0x3, 0x4e,0x20,0x80, ++0x14,0x78,0xf4,0x7d,0x21,0x74,0x2, 0xac,0xbf,0x59,0x25,0x34,0x0, 0xb, 0xf0,0xe5, ++0x2d,0xbc,0xbf,0x38,0xcc,0xe5,0x2b,0xa, 0x1b,0x6d,0x0, 0x7e,0x18,0x0, 0x51,0x12, ++0x1f,0x3c,0x6c,0xff,0x80,0x5c,0x74,0x4, 0xac,0xbf,0x49,0x25,0x3, 0x6f,0xa, 0x1f, ++0xad,0x13,0x7e,0xf4,0x10,0x0, 0x9d,0xf1,0xad,0xf2,0x74,0xc, 0x1e,0xf4,0x1e,0xe4, ++0x50,0x4, 0x4e,0xf4,0x80,0x0, 0x14,0x78,0xf3,0x7d,0x2f,0x74,0x4, 0xac,0xbf,0x59, ++0x25,0x3, 0x6f,0xe5,0x2a,0xbe,0xb1,0x2d,0x50,0x26,0x74,0x4, 0xac,0xbf,0x49,0x25, ++0x3, 0x71,0x2e,0x14,0x10,0x0, 0xad,0x12,0x74,0xc, 0x1e,0x14,0x1e,0x4, 0x50,0x3, ++0x4e,0x20,0x80,0x14,0x78,0xf4,0x7d,0x21,0x74,0x4, 0xac,0xbf,0x59,0x25,0x3, 0x71, ++0xb, 0xf0,0xe5,0x2b,0xbc,0xbf,0x38,0x9e,0x7e,0x73,0x39,0xfb,0xa, 0x37,0x6d,0x22, ++0x74,0xc, 0x2f,0x11,0x14,0x78,0xfb,0x7e,0xf4,0x0, 0x64,0x7d,0x1f,0x12,0x1f,0x3a, ++0x7d,0xe3,0x7a,0xe5,0x35,0x7e,0x73,0x39,0xfc,0xa, 0x37,0x6d,0x22,0x74,0xc, 0x2f, ++0x11,0x14,0x78,0xfb,0x7d,0x1f,0x12,0x1f,0x3a,0x7d,0x63,0x6c,0xff,0x80,0x20,0x74, ++0x2, 0xac,0xbf,0x49,0x45,0x34,0x0, 0xbe,0x45,0x35,0x28,0x9, 0x7e,0x35,0x35,0x59, ++0x35,0x34,0x0, 0x80,0x8, 0xbd,0x46,0x50,0x4, 0x59,0x65,0x34,0x0, 0xb, 0xf0,0xe5, ++0x2d,0xbc,0xbf,0x38,0xda,0x6c,0xff,0x80,0x3a,0x74,0x4, 0xac,0xbf,0x49,0x45,0x3, ++0x6f,0xbe,0x45,0x35,0x28,0x9, 0x7e,0x35,0x35,0x59,0x35,0x3, 0x6f,0x80,0x8, 0xbd, ++0x46,0x50,0x4, 0x59,0x65,0x3, 0x6f,0x49,0x45,0x3, 0x71,0xbe,0x45,0x35,0x28,0x9, ++0x7e,0x35,0x35,0x59,0x35,0x3, 0x71,0x80,0x8, 0xbd,0x46,0x50,0x4, 0x59,0x65,0x3, ++0x71,0xb, 0xf0,0xe5,0x2b,0xbc,0xbf,0x38,0xc0,0x30,0x2, 0x6, 0x7e,0xd, 0x31,0x12, ++0x55,0xa2,0xda,0x3b,0x22,0x9f,0x11,0x7a,0x1f,0x24,0xf4,0x22,0x7d,0x13,0x6d,0x0, ++0x7e,0x1f,0x24,0xf4,0x2f,0x10,0x7a,0x1f,0x24,0xf4,0xb, 0xe0,0x22,0xa, 0x1b,0x6d, ++0x0, 0x7e,0x1f,0x24,0xf4,0x12,0x1f,0x3c,0x7a,0x1f,0x24,0xf4,0x7e,0x25,0x2f,0x74, ++0xc, 0x7d,0x13,0x7d,0x32,0x6d,0x22,0x60,0x5, 0x2f,0x11,0x14,0x78,0xfb,0xb, 0x14, ++0x2, 0x1f,0x3a,0x7e,0xa1,0x2c,0x74,0x2, 0xa4,0x22,0xca,0x3b,0x7e,0x8, 0x1f,0x34, ++0x12,0x56,0x66,0x7e,0x1f,0x33,0xf8,0x7a,0x1d,0x26,0x7e,0xb3,0x2a,0x74,0xf5,0x2d, ++0x7e,0xb3,0x3a,0xce,0xb4,0x1, 0x6, 0x7e,0x38,0x3a,0xd0,0x80,0x4, 0x7e,0x38,0x5, ++0xf8,0x6d,0x33,0x7a,0x35,0x2a,0x74,0x2, 0x12,0x0, 0x1e,0x7e,0xb3,0x3a,0xcf,0x70, ++0xe, 0x7e,0xb3,0x3a,0xcd,0x70,0x8, 0x74,0x1, 0x7a,0xb3,0x3a,0xcf,0xa1,0x5e,0x7e, ++0xb3,0x3a,0xcf,0x70,0x6, 0x74,0x1, 0x7a,0xb3,0x3a,0xcf,0x7e,0xb3,0x3a,0xce,0xb4, ++0x1, 0x17,0x75,0x2c,0x0, 0x80,0x9, 0x12,0x54,0x83,0x12,0x55,0x92,0x12,0x56,0x2e, ++0xe5,0x2d,0xbe,0xb1,0x2c,0x38,0xf0,0x80,0x1b,0x75,0x2c,0x0, 0x80,0xf, 0x12,0x54, ++0x83,0x12,0x55,0x92,0x3e,0x24,0x3e,0x24,0x1e,0x24,0x12,0x56,0x2e,0xe5,0x2d,0xbe, ++0xb1,0x2c,0x38,0xea,0x7e,0x34,0x61,0x59,0x12,0x23,0xc9,0x7a,0x35,0x2e,0x7e,0x18, ++0x1f,0x34,0x7f,0x1, 0x12,0x7a,0x3c,0x75,0x2c,0x0, 0x80,0x16,0x12,0x54,0x83,0x12, ++0x55,0x8b,0xbe,0x35,0x2a,0x8, 0x9, 0x12,0x54,0x83,0x12,0x55,0x8b,0x7a,0x35,0x2a, ++0x5, 0x2c,0xe5,0x2d,0xbe,0xb1,0x2c,0x38,0xe3,0x12,0x55,0x9a,0x40,0x25,0x7e,0xb3, ++0x3a,0xce,0xb4,0x1, 0x1e,0x5, 0x1f,0xe5,0x1f,0xbe,0xb0,0xa, 0x40,0x15,0x75,0x1f, ++0x0, 0xe5,0x2d,0xa, 0x3b,0x3e,0x34,0xca,0x39,0x7e,0x1d,0x26,0x7f,0x3, 0x12,0x20, ++0xf1,0x1b,0xfd,0x74,0x2, 0x12,0x0, 0x1e,0x12,0x55,0x9a,0x50,0xb, 0x74,0x2, 0x7a, ++0xb3,0x33,0xf7,0xe4,0x7a,0xb3,0x3a,0xcf,0xda,0x3b,0x22,0x49,0x35,0x1f,0x34,0x2, ++0x21,0x48,0x7f,0x13,0x2d,0x35,0xb, 0x1a,0x20,0x22,0x7e,0x37,0x2b,0x7, 0xbe,0x35, ++0x2a,0x22,0x12,0x55,0xac,0xb, 0x34,0x7a,0x73,0x2b,0x20,0x22,0xca,0x79,0x7f,0x10, ++0x9f,0x0, 0x12,0xc9,0x5d,0x4c,0xaa,0x78,0x6, 0x7e,0x34,0x0, 0x40,0x80,0x6c,0x6c, ++0x99,0x80,0x38,0xa, 0xe9,0x2e,0xe4,0x60,0xac,0x7d,0x7e,0x7a,0xf1,0x82,0x7a,0xe1, ++0x83,0xe4,0x93,0x7c,0x8b,0x90,0x60,0xaa,0xe4,0x93,0x70,0xe, 0x7e,0xf3,0x2a,0x6e, ++0xac,0xf8,0x7e,0xb3,0x2a,0x70,0xa, 0xfb,0x2d,0xf7,0x7d,0xef,0x3e,0xe4,0x7f,0x61, ++0x2d,0xde,0xb, 0x6a,0xd0,0x6d,0xcc,0x2f,0x6, 0xb, 0x90,0xbc,0xa9,0x38,0xc4,0xbe, ++0x8, 0x0, 0x0, 0x78,0x2, 0xb, 0xc, 0xa, 0x5a,0x6d,0x44,0x7f,0x10,0x7f,0x2, 0x12, ++0x1f,0x3c,0x7f,0x1, 0xb, 0xc, 0x7e,0x34,0xc4,0x0, 0x7e,0x24,0x0, 0x9, 0x12,0x1f, ++0x3c,0xbe,0x34,0x0, 0xfa,0x28,0x4, 0x7e,0x34,0x0, 0xfa,0xda,0x79,0x22,0x7e,0xd, ++0x26,0x2d,0x15,0xb, 0xa, 0x30,0x9d,0x32,0x59,0x35,0x1f,0x34,0x5, 0x2c,0x22,0x7e, ++0x11,0x2c,0xac,0x1f,0x3e,0x4, 0x7e,0x30,0x2, 0xac,0x3e,0x2d,0x10,0x7e,0x1d,0x31, ++0x2d,0x31,0xb, 0x1a,0x20,0x7a,0x27,0x24,0xf2,0x74,0x2, 0xac,0xbe,0x49,0x35,0x34, ++0x0, 0xad,0x23,0x74,0xc, 0x22,0x7e,0x34,0x0, 0x38,0xe4,0x2, 0x21,0x16,0x7e,0x8, ++0x2a,0x6d,0x12,0xd, 0x72,0xe4,0x12,0x0, 0xe, 0x74,0x1, 0x7e,0x70,0x99,0x12,0x13, ++0x61,0x2, 0x0, 0x4e,0xb4,0x3, 0x5, 0x12,0x56,0x94,0x80,0x2, 0xe4,0x22,0x12,0x56, ++0x79,0x74,0x1, 0x22,0x12,0x7f,0xc4,0xe4,0x12,0x0, 0xe, 0x7e,0x8, 0x2a,0x6d,0x2, ++0xd, 0x72,0x12,0x8a,0x51,0x38,0x2, 0xe4,0x22,0x12,0x8a,0x49,0x49,0x55,0x34,0x3b, ++0xbe,0xb0,0x2, 0x38,0x3, 0x2, 0x56,0xbb,0x2, 0x56,0x84,0x7e,0xd7,0x2b,0xd, 0xbe, ++0xb0,0x1, 0x28,0x2, 0xe4,0x22,0x12,0x89,0xe2,0x12,0x56,0xe7,0x7a,0xd7,0x2b,0xd, ++0x7e,0x73,0x2a,0xfa,0xa, 0x37,0x3e,0x34,0x3e,0x34,0xe4,0x7e,0x50,0x1, 0x12,0x13, ++0x36,0x12,0x57,0xbb,0x74,0x1, 0x22,0x7e,0x8, 0x2a,0x6d,0x2, 0x5, 0xb4,0xca,0x3b, ++0x7e,0xe3,0x2a,0x74,0x7e,0xf3,0x2a,0xfa,0x74,0x1, 0x7a,0xb3,0x2a,0xfa,0x12,0x56, ++0xe7,0x12,0xc8,0xb9,0x12,0x29,0x95,0x7e,0x17,0x2a,0xfe,0x6d,0x0, 0x12,0x21,0x16, ++0x7e,0xd0,0x7, 0x12,0x26,0x86,0x6c,0xcc,0x80,0x19,0x7e,0x34,0x0, 0x1, 0x7c,0xbd, ++0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb,0x7c,0x67,0x12,0xc8,0xd6,0x4c,0x76,0x7a,0x29, ++0x70,0xb, 0xc0,0x12,0x86,0xe8,0xa, 0x3c,0xbd,0x32,0x48,0xde,0x12,0x57,0xaa,0x30, ++0x1b,0xfd,0x12,0x87,0x83,0x7e,0xb3,0x2a,0x73,0x7c,0x7e,0x12,0x10,0xee,0x74,0x2, ++0x12,0x0, 0x1e,0x6c,0xcc,0x80,0x29,0x74,0x2, 0xac,0xbc,0x49,0x35,0x6, 0xfc,0xbe, ++0x34,0x15,0x40,0x50,0x19,0x7e,0x34,0x0, 0x1, 0x7c,0xbd,0x60,0x5, 0x3e,0x34,0x14, ++0x78,0xfb,0x7c,0xb7,0x64,0xff,0x12,0xc8,0xd6,0x5c,0x7b,0x7a,0x29,0x70,0xb, 0xc0, ++0x12,0x86,0xe8,0xa, 0x3c,0xbd,0x32,0x48,0xce,0x1b,0xd0,0xbe,0xd0,0x0, 0x58,0x83, ++0x12,0x85,0xe3,0x74,0x2, 0x12,0xc9,0x1e,0x12,0x86,0x66,0x74,0x2, 0x12,0x0, 0x1e, ++0x7a,0xf3,0x2a,0xfa,0x12,0x56,0xe7,0xda,0x3b,0x22,0x74,0x2, 0x12,0x0, 0x1e,0x7e, ++0xb3,0x2a,0xfc,0x12,0x86,0x66,0x74,0x2, 0x12,0x0, 0x1e,0x74,0x5, 0x7e,0x70,0x9b, ++0x12,0x13,0x61,0x12,0x57,0xcd,0x7e,0xb3,0x2a,0xfc,0x2, 0xe, 0x94,0x6c,0xaa,0x80, ++0x1e,0xa, 0x3a,0x9, 0x73,0x2a,0xdc,0x12,0x97,0xb2,0x7c,0x7b,0xa, 0x47,0x7e,0x50, ++0x2, 0xac,0x5a,0x7e,0xf, 0x3b,0x8, 0x2d,0x12,0x79,0x40,0x0, 0x48,0xb, 0xa0,0x7e, ++0x63,0x2a,0x74,0xbc,0x6a,0x38,0xda,0x22,0xca,0xd8,0xca,0x79,0x7e,0x73,0x2a,0x6e, ++0x7e,0xf3,0x2a,0x6d,0xac,0xf7,0x7d,0x37,0x3e,0x34,0x7e,0x8, 0x1f,0x34,0xe4,0x12, ++0x21,0x16,0x7e,0xb3,0x39,0xff,0xb4,0x1, 0x64,0x7e,0x73,0x3a,0x0, 0xbe,0x70,0x0, ++0x28,0x5b,0x6c,0xdd,0x80,0x3c,0x12,0x26,0x86,0x12,0x28,0x88,0x6d,0x33,0x80,0x28, ++0x7e,0x35,0x24,0x3e,0x34,0x49,0x33,0xd, 0xc8,0x12,0x21,0x48,0x7a,0x35,0x26,0x7e, ++0x35,0x24,0x7d,0x13,0x3e,0x14,0x49,0x21,0x1f,0x34,0xbe,0x25,0x26,0x58,0x7, 0x7e, ++0x25,0x26,0x59,0x21,0x1f,0x34,0xb, 0x34,0x7a,0x35,0x24,0xbe,0x75,0x24,0x38,0xd0, ++0xb, 0xd0,0x7e,0x73,0x3a,0x0, 0xbc,0x7d,0x38,0xbc,0x7d,0x37,0x3e,0x34,0xca,0x39, ++0x7e,0x18,0x1f,0x34,0x7e,0x8, 0xd, 0xc8,0x12,0x20,0xf1,0x1b,0xfd,0xda,0x79,0xda, ++0xd8,0x22,0x7e,0x8, 0x3a,0x3b,0x12,0x58,0xb9,0x7e,0x8, 0x3a,0x43,0x12,0x58,0xb9, ++0x12,0x58,0xce,0x12,0x58,0xd5,0x2, 0x58,0x99,0x7e,0x37,0x3a,0x3b,0xbe,0x34,0x0, ++0x0, 0x28,0x15,0x7e,0x73,0x3b,0x57,0xbe,0x70,0x5, 0x50,0xc, 0x7e,0xb3,0x39,0x79, ++0x70,0x6, 0x12,0x58,0xdc,0x12,0x5d,0x3e,0x22,0xb, 0xa, 0x30,0xe5,0x5d,0xa, 0x2b, ++0xbd,0x32,0x28,0x4, 0x9d,0x32,0x80,0x2, 0x6d,0x33,0x1b,0xa, 0x30,0x22,0x7e,0x8, ++0x2b,0xb7,0x2, 0x58,0xb9,0x7e,0x8, 0x3b,0x3f,0x2, 0x58,0xb9,0x6d,0x33,0x7a,0x37, ++0x3a,0xcb,0x22,0xca,0xf8,0x7e,0xa3,0x2a,0x2, 0x7e,0xb3,0x2a,0x3, 0xbe,0xa0,0x1, ++0x38,0x21,0xbe,0xb0,0x1, 0x38,0x1c,0x7e,0x47,0x28,0x86,0xbe,0x44,0x0, 0x1e,0x28, ++0x2, 0x80,0x10,0x7e,0xf3,0x2f,0x80,0x4c,0xff,0x68,0x17,0x7e,0x47,0x2b,0xb7,0x4d, ++0x44,0x78,0xf, 0x12,0x58,0xdc,0x74,0x1, 0x7a,0xb3,0x3a,0xcd,0x7a,0xb3,0x39,0x4e, ++0x80,0x35,0x4c,0xaa,0x78,0x36,0xb4,0x1, 0x33,0x7e,0x37,0x2b,0xb7,0x7a,0x37,0x2f, ++0x82,0x7e,0xb3,0x2f,0x80,0xb4,0x3, 0x1f,0x7e,0x37,0x2b,0xb7,0xbe,0x34,0x0, 0x0, ++0x28,0x15,0x74,0x4, 0x7a,0xb3,0x2f,0x80,0x7e,0x37,0x2f,0x98,0x7e,0x27,0x2f,0x9a, ++0x12,0x59,0xf4,0x21,0xed,0x80,0x0, 0x12,0xc3,0xe, 0x21,0xed,0x7e,0xc7,0x29,0x8, ++0x7e,0xd7,0x29,0xa, 0x4c,0xff,0x78,0x19,0x70,0x57,0xbe,0xa0,0x1, 0x78,0x52,0x7d, ++0x3c,0x7d,0x2d,0x12,0xc2,0xa9,0x12,0x59,0xf0,0x74,0x1, 0x7a,0xb3,0x2f,0x80,0x80, ++0x40,0xbe,0xf0,0x1, 0x78,0x2e,0x7e,0x27,0x2f,0x88,0x9e,0x27,0x2f,0x90,0x7e,0x14, ++0x62,0x8a,0x12,0x5a,0xad,0xbd,0x23,0x38,0x13,0x7e,0x27,0x2f,0x96,0x9e,0x27,0x2f, ++0x8e,0x7e,0x14,0x62,0x8c,0x12,0x5a,0xad,0xbd,0x23,0x28,0x15,0x74,0x3, 0x7a,0xb3, ++0x2f,0x80,0x80,0x5, 0xbe,0xf0,0x3, 0x78,0x8, 0x7a,0xc7,0x2f,0x98,0x7a,0xd7,0x2f, ++0x9a,0x7e,0xb3,0x2f,0x80,0x60,0x26,0x7d,0x3c,0x7d,0x2d,0x7e,0x17,0x2b,0xbb,0x7e, ++0x7, 0x2b,0xbd,0x12,0x5c,0xaa,0xa, 0x2b,0x7e,0x73,0x2f,0x7f,0xa, 0x37,0xbd,0x32, ++0x58,0xb, 0x12,0x59,0xf0,0x7a,0xc7,0x2b,0xbb,0x7a,0xd7,0x2b,0xbd,0xda,0xf8,0x22, ++0x7d,0x3c,0x7d,0x2d,0x7d,0x42,0x7d,0x13,0x7d,0x24,0x12,0x5f,0xc3,0x7d,0x31,0x12, ++0xaf,0x7d,0x2, 0x5a,0x5, 0x7e,0x3, 0x2f,0xa8,0xbe,0x0, 0xf0,0x50,0x2, 0x41,0x9e, ++0x41,0x93,0x6c,0x99,0x7e,0xb3,0x2f,0x7f,0xbe,0xb0,0x20,0x50,0x5, 0x4, 0x7a,0xb3, ++0x2f,0x7f,0x7e,0x1f,0x2b,0xbf,0x7a,0x1f,0x1f,0x34,0x7e,0x80,0x1, 0x80,0x49,0x74, ++0x4, 0xac,0xb8,0x49,0x35,0x2b,0xbf,0x49,0x25,0x2b,0xc1,0x7e,0x17,0x1f,0x34,0x7e, ++0x7, 0x1f,0x36,0x12,0x5c,0xaa,0x7c,0x1b,0x7e,0x3, 0x2f,0x7f,0xbc,0x1, 0x38,0x26, ++0xb, 0x90,0x7e,0x70,0x4, 0xac,0x78,0x2e,0x34,0x2b,0xbf,0x7e,0x14,0x1f,0x34,0x74, ++0x4, 0x12,0x1f,0xc1,0x7e,0x34,0x1f,0x34,0x7e,0x30,0x4, 0xac,0x39,0x2e,0x14,0x2b, ++0xbf,0x74,0x4, 0x12,0x1f,0xc1,0xb, 0x80,0x7e,0x3, 0x2f,0xa8,0xbc,0x8, 0x38,0xaf, ++0xa, 0x59,0xb, 0x54,0x7c,0xb, 0x7a,0x3, 0x2f,0xa8,0x7e,0x3, 0x2f,0x7f,0xbe,0x0, ++0x20,0x50,0xb, 0x7e,0x3, 0x2f,0xa8,0xbe,0x0, 0xec,0x40,0x2, 0x41,0x12,0x22,0x7d, ++0x34,0x9e,0x34,0x0, 0x40,0x7d,0x2e,0x9d,0x23,0x7e,0x14,0x61,0x49,0x7e,0x4, 0x0, ++0xff,0xb, 0xa, 0x30,0x22,0x7d,0xe3,0x9f,0x11,0x7e,0x14,0x61,0x43,0x12,0x5d,0xdc, ++0x90,0x61,0x35,0xe4,0x93,0x70,0x3, 0x7d,0x3e,0x22,0x90,0x61,0x36,0xe4,0x93,0xb4, ++0x1, 0x6, 0x7e,0x83,0x2a,0x6f,0x80,0x4, 0x7e,0x83,0x2a,0x70,0x12,0x92,0xb4,0xbe, ++0xe4,0x0, 0x3f,0x38,0x1e,0x7e,0x24,0x0, 0x3f,0x9d,0x2e,0x7e,0x14,0x61,0x47,0x12, ++0x5a,0xad,0x12,0x5b,0xee,0x90,0x61,0x45,0x12,0x5b,0xe5,0x48,0x2, 0x7f,0x10,0x9f, ++0x1, 0x7f,0x10,0x12,0xc9,0x5d,0xbe,0xa0,0x0, 0x28,0x36,0x7d,0x14,0x9e,0x14,0x0, ++0x3f,0xbd,0x1e,0x38,0x15,0x12,0x5c,0x96,0xbd,0x1e,0x40,0xe, 0x12,0x5a,0x9f,0x12, ++0x5b,0xd8,0x48,0x34,0x7f,0x10,0x1b,0x1c,0x80,0x2e,0x12,0x5c,0x96,0xbd,0x1e,0x50, ++0x31,0x7d,0x34,0x9e,0x34,0x0, 0x20,0x12,0x5a,0xa5,0x12,0x5b,0xee,0x7d,0x1f,0x80, ++0x1d,0x4c,0xaa,0x78,0x1d,0x12,0x5c,0x8f,0xbd,0x5e,0x38,0x16,0x12,0x5a,0x9f,0x12, ++0x5b,0xd8,0x48,0x4, 0x7f,0x10,0x1b,0x1c,0xa, 0xb, 0x7d,0x1f,0x9d,0x10,0x6d,0x0, ++0x2f,0x10,0xbe,0xe4,0x0, 0x3f,0x28,0x6f,0x12,0x5c,0x8f,0xbd,0x5e,0x28,0x68,0x7d, ++0xd4,0xb, 0xd4,0x1e,0xd4,0x7d,0x5d,0x1b,0x54,0xbd,0x5e,0x40,0xc, 0x7d,0x35,0x9d, ++0x3e,0x6d,0x22,0x7e,0x14,0x61,0x4b,0x80,0xa, 0x7d,0x3e,0x9d,0x3d,0x6d,0x22,0x7e, ++0x14,0x61,0x4d,0x7e,0x4, 0x0, 0xff,0xb, 0xa, 0x10,0x12,0x1f,0x31,0x12,0x5b,0xf2, ++0xbd,0x5e,0x7d,0x1f,0x40,0xc, 0x1e,0x14,0x1b,0x14,0x6d,0x0, 0x9f,0x1, 0x7f,0x10, ++0x80,0x6, 0x1e,0x14,0x6d,0x0, 0x2f,0x10,0x90,0x61,0x45,0x12,0x5b,0xe5,0x58,0x4, ++0x7f,0x10,0x80,0x13,0x90,0x61,0x46,0xe4,0x93,0xa, 0xb, 0x7d,0x1f,0x9d,0x10,0x6d, ++0x0, 0xbf,0x10,0x8, 0x2, 0x7f,0x10,0x22,0xad,0x32,0x6d,0x22,0x7c,0x76,0x7c,0x65, ++0x1a,0x24,0x90,0x61,0x46,0xe4,0x93,0xa, 0x1b,0x6d,0x0, 0xbf,0x10,0x22,0xad,0x32, ++0x6d,0x22,0x7c,0x76,0x7c,0x65,0x1a,0x24,0x22,0x7e,0x73,0x38,0x37,0x7a,0x73,0x38, ++0xad,0x7e,0x27,0x3b,0x1e,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad,0x1e,0x34,0xbd,0x32, ++0x50,0x6, 0x74,0x1, 0x7a,0xb3,0x38,0x37,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad,0xbd, ++0x32,0x50,0x8, 0xe4,0x7a,0xb3,0x38,0x35,0x12,0x5d,0x45,0x7e,0x37,0x38,0x3d,0xbd, ++0x32,0x50,0x4, 0x7a,0x27,0x38,0x3d,0x12,0xc9,0x45,0x38,0xa, 0x12,0xc9,0x3d,0x38, ++0x5, 0x12,0xc9,0x35,0x28,0x3d,0x12,0x5d,0x4c,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad, ++0x1e,0x34,0x1e,0x34,0xbd,0x32,0x28,0x21,0x7e,0xb3,0x38,0x35,0x4, 0x7a,0xb3,0x38, ++0x35,0x7e,0x73,0x38,0x35,0xbe,0x70,0x32,0x28,0x14,0x74,0x32,0x7a,0xb3,0x38,0x35, ++0x12,0xc8,0xcc,0x7a,0xb3,0x38,0xaa,0x80,0x5, 0xe4,0x7a,0xb3,0x38,0x35,0x7d,0x32, ++0x2, 0xa9,0x92,0x2, 0x5c,0x86,0x12,0x5d,0xa3,0xe4,0x7a,0xb3,0x38,0x43,0x22,0x7d, ++0x54,0x9e,0x54,0x0, 0x3f,0x22,0x7d,0x4, 0x9e,0x4, 0x0, 0x1f,0x7e,0xd4,0x60,0xd1, ++0x7e,0xc4,0x0, 0xff,0xb, 0x6a,0x10,0x2d,0x10,0x22,0x7d,0x51,0x7d,0x12,0x9d,0x35, ++0x12,0x21,0x48,0x7c,0xa7,0x12,0x5f,0x79,0x7c,0xb7,0xbc,0xba,0x50,0x3, 0x7c,0xba, ++0x22,0x22,0x7d,0x13,0x7e,0x54,0x62,0x58,0x12,0x5c,0xf1,0x50,0x21,0x7e,0x54,0x62, ++0x5a,0x12,0x5c,0xf1,0x28,0x18,0x7e,0x14,0x62,0x5c,0x12,0x5a,0xad,0xbd,0x32,0x50, ++0xd, 0x7e,0x14,0x62,0x5e,0x12,0x5a,0xad,0xbd,0x32,0x28,0x2, 0xe4,0x22,0x74,0x1, ++0x22,0x7e,0x44,0x0, 0xff,0xb, 0x2a,0x30,0xbd,0x31,0x22,0x12,0x5b,0xf9,0x2, 0x5d, ++0x1, 0x7e,0xb3,0x38,0x37,0x60,0xf, 0x74,0x1, 0x7a,0xb3,0x38,0x3f,0x7e,0xb3,0x38, ++0xad,0x70,0x3, 0x12,0x5d,0xad,0x7e,0xb3,0x38,0x3f,0xb4,0x1, 0xc, 0x74,0x3, 0x12, ++0x5d,0x35,0x12,0x23,0xc9,0x3e,0x34,0x80,0x7, 0xe4,0x12,0x5d,0x35,0x12,0x23,0xc9, ++0x7a,0x37,0x2a,0x62,0x22,0x7a,0xb3,0x30,0x27,0x7e,0x34,0x61,0x5b,0x22,0x74,0x1, ++0x7a,0xb3,0x39,0x4e,0x22,0x74,0x2, 0x7a,0xb3,0x38,0x37,0x22,0x7e,0xb3,0x38,0x43, ++0xb4,0x1, 0x3, 0x2, 0x5d,0x45,0x7e,0xb3,0x38,0xa9,0x4, 0x7a,0xb3,0x38,0xa9,0x7e, ++0xb3,0x38,0x37,0xb4,0x2, 0x18,0x7e,0xb3,0x38,0xa8,0x4, 0x7a,0xb3,0x38,0xa8,0xb4, ++0x1, 0x6, 0x74,0x1, 0x7a,0xb3,0x38,0xa9,0x74,0x1, 0x7a,0xb3,0x38,0x37,0x7e,0x73, ++0x38,0xa8,0xbe,0x70,0x3, 0x40,0xf, 0x74,0x1, 0x7a,0xb3,0x38,0x43,0x12,0x5d,0x45, ++0x12,0x5d,0xad,0x12,0x5d,0xa3,0x7e,0x73,0x38,0xa9,0xbe,0x70,0xa, 0x28,0x3, 0x2, ++0x5d,0xa3,0x22,0xe4,0x7a,0xb3,0x38,0xa9,0x7a,0xb3,0x38,0xa8,0x22,0xe4,0x7a,0xb3, ++0x38,0x35,0x6c,0xaa,0x80,0xd, 0x6d,0x44,0x7e,0x70,0xc, 0xac,0x7a,0x59,0x43,0x38, ++0x4c,0xb, 0xa0,0x12,0x5f,0xf4,0x38,0xee,0xe4,0x7a,0xb3,0x38,0x36,0x6d,0x33,0x7a, ++0x37,0x38,0x3d,0x7a,0x37,0x38,0x32,0x22,0x7e,0x14,0x62,0x8e,0x7e,0x4, 0x0, 0xff, ++0xb, 0xa, 0xf0,0x22,0xca,0xf8,0x6c,0xff,0x7e,0xb7,0x2f,0x9c,0x7e,0xc7,0x2f,0x9e, ++0x7e,0x97,0x2f,0x84,0x7e,0xd7,0x2f,0x86,0x7e,0xa7,0x2f,0x98,0x7e,0xe7,0x2f,0x9a, ++0xe4,0x7e,0x73,0x2f,0xa8,0x1b,0x70,0x7d,0x2b,0x7d,0x1c,0x12,0x5f,0x28,0x70,0x2, ++0xe1,0x1b,0x7e,0x73,0x2f,0xa8,0xbe,0x70,0xa, 0x28,0x13,0xe4,0x7e,0x70,0x9, 0x7e, ++0x27,0x2f,0xa0,0x7e,0x17,0x2f,0xa2,0x12,0x5f,0x28,0x70,0x2, 0xe1,0x1b,0x7e,0x73, ++0x2f,0xa8,0xbe,0x70,0x14,0x28,0x13,0xe4,0x7e,0x70,0x13,0x7e,0x27,0x2f,0xa4,0x7e, ++0x17,0x2f,0xa6,0x12,0x5f,0x28,0x70,0x2, 0xe1,0x1b,0x7e,0x34,0x62,0x72,0x12,0x5f, ++0x20,0xbd,0xfc,0x28,0x4c,0x7e,0x34,0x62,0x70,0x12,0x5f,0x20,0xbd,0xfb,0x50,0x41, ++0x7e,0xb3,0x2f,0x81,0x70,0x3b,0x7e,0x34,0x62,0x76,0x12,0x23,0xc9,0x12,0x5d,0xd8, ++0x7d,0x8f,0x9d,0x83,0xbe,0x87,0x2f,0x82,0x50,0x27,0x7e,0x34,0x62,0x74,0x12,0xc9, ++0x16,0x9d,0xf8,0xbe,0xf7,0x2f,0x82,0x28,0x18,0x7d,0xfc,0x3e,0xf4,0xbd,0xfb,0x40, ++0x2, 0xe1,0x1b,0xbd,0xa9,0x50,0x5, 0x7e,0xf0,0x20,0x80,0x7f,0x7e,0xf0,0x21,0x80, ++0x7a,0x7e,0x34,0x62,0x7a,0x12,0x5f,0x20,0xbd,0xfb,0x28,0x6f,0x7e,0x34,0x62,0x78, ++0x12,0x5f,0x20,0xbd,0xfc,0x50,0x64,0x7e,0xb3,0x2f,0x81,0x70,0x5e,0x7e,0x34,0x62, ++0x7e,0x12,0x23,0xc9,0x12,0x5d,0xd8,0x7d,0xaf,0x9d,0xa3,0xbe,0xa7,0x2f,0x82,0x50, ++0x4a,0x7e,0x34,0x62,0x7c,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0xa0,0x9d,0xfa,0xbe,0xf7, ++0x2f,0x82,0x28,0x37,0x7d,0xfb,0x3e,0xf4,0xbd,0xfc,0x50,0x2f,0xbd,0xed,0x50,0x5, ++0x7e,0xf0,0x22,0x80,0x26,0x12,0x5f,0xe4,0x49,0x35,0x2b,0xbb,0x49,0x15,0x2b,0xbd, ++0x49,0x25,0x2b,0xab,0x49,0x5, 0x2b,0xad,0x9d,0x10,0xbe,0x14,0x0, 0x20,0x18,0x8, ++0x9d,0x32,0xbe,0x34,0x0, 0x10,0x58,0x3, 0x7e,0xf0,0x23,0x7c,0xbf,0xda,0xf8,0x22, ++0x7e,0x24,0x0, 0xff,0xb, 0x1a,0xf0,0x22,0x7d,0x41,0x7d,0x2, 0x7c,0x37,0x7c,0x2b, ++0x74,0x4, 0xac,0xb2,0x49,0x35,0x2b,0xbf,0x49,0xf5,0x2b,0xc1,0x74,0x4, 0xac,0xb3, ++0x49,0x25,0x2b,0xbf,0x49,0x55,0x2b,0xc1,0x12,0x8f,0x29,0x7d,0x3f,0x9d,0x35,0x12, ++0x21,0x48,0x9d,0x34,0x12,0x21,0x48,0x7e,0x54,0x62,0x6a,0x7e,0x44,0x0, 0xff,0xb, ++0x2a,0x20,0xbd,0x32,0x50,0x11,0x12,0x5f,0x79,0x7e,0x14,0x62,0x6a,0x12,0x5f,0xec, ++0xbd,0x32,0x50,0x3, 0x74,0x1, 0x22,0xe4,0x22,0x7d,0x31,0x9d,0x30,0x2, 0x21,0x48, ++0x12,0xc8,0x76,0x12,0x58,0xdc,0x7a,0x37,0x3b,0x54,0x12,0x5f,0x9f,0x12,0x28,0x6e, ++0x2, 0x5f,0x93,0x74,0x3, 0x7a,0xb3,0x2f,0xa9,0xe4,0x7a,0xb3,0x30,0x4, 0x22,0x7e, ++0x34,0xd, 0xac,0x12,0x26,0x8a,0x12,0x84,0xd5,0x12,0x7d,0xf0,0x2, 0x5f,0xaf,0x30, ++0x12,0x10,0x12,0x7e,0x2e,0x50,0x3, 0x12,0x6d,0x9e,0x12,0x7d,0x6c,0x12,0xb1,0x2c, ++0xc2,0x12,0x22,0x7e,0xa3,0x2f,0xa8,0xbe,0xa0,0xf0,0x50,0x17,0x74,0x4, 0xa4,0x59, ++0x35,0x2b,0xbf,0x12,0x5f,0xe4,0x59,0x25,0x2b,0xc1,0x7e,0xb3,0x2f,0xa8,0x4, 0x7a, ++0xb3,0x2f,0xa8,0x22,0x7e,0xa3,0x2f,0xa8,0x74,0x4, 0xa4,0x22,0x7e,0x4, 0x0, 0xff, ++0xb, 0xa, 0x20,0x22,0x90,0x61,0xc5,0xe4,0x93,0xbc,0xba,0x22,0x74,0x12,0x22,0xff, ++0x70,0x8f,0x1, 0xfe,0x79,0x86,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x46,0x54,0x53,0x35,0x58,0x34,0x36,0x50,0x30,0x30,0x31,0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x15,0xea,0x30,0x30,0x31,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x10,0x17,0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, ++0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf, 0xe, 0xd, 0xc, ++0xb, 0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x5, 0x0, 0x4, 0xff,0x23,0x1c,0x2, 0xdf,0x2, 0x6, 0x2, 0x4, 0x1e,0x10,0x0, ++0x4, 0x0, 0x64,0xd, 0xac,0x0, 0xc8,0x1, 0x1, 0x0, 0x0, 0x16,0xf, 0x0, 0x0, 0x0, ++0x0, 0x2, 0x94,0x2, 0xf6,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2c,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, ++0xb0,0x0, 0x14,0x1, 0x19,0x18,0x1, 0xf4,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, ++0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x78,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, ++0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, ++0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e, ++0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x0, 0x4, 0x2d,0x20,0x1, 0x20,0x2, 0x0, 0x0, ++0x0, 0x0, 0x1, 0xf4,0xd5,0x40,0x10,0x17,0x27,0x10,0x25,0x6, 0x80,0x10,0x25,0x6, ++0x78,0x8, 0x10,0x4, 0x20,0x1, 0x0, 0x2, 0xf6,0x2a,0x2a,0x1, 0xa0,0x1, 0xa0,0x0, ++0xc0,0x0, 0xc0,0x4, 0x0, 0x42,0x42,0x2, 0x60,0x2, 0x60,0x0, 0xb2,0x0, 0xb2,0x0, ++0xc8,0x0, 0xb4,0x0, 0xa0,0x0, 0x96,0x0, 0x96,0x0, 0x96,0xa, 0x0, 0x1, 0x7c,0x1, ++0x5, 0xb, 0x1e,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22,0x12,0x0, 0x1, 0x54,0x1, 0x0, 0x15, ++0x1, 0x79,0x1, 0x14,0x0, 0x0, 0x1, 0x1, 0xf, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x96,0x2, 0x26,0x0, 0x50,0x0, 0x2e, ++0x0, 0x4, 0x0, 0x4, 0x1, 0x4, 0x1, 0x90,0x0, 0xc8,0x0, 0x50,0x1, 0xf4,0x0, 0x96, ++0x1, 0x2c,0x1, 0x2c,0x4, 0x18,0x2, 0x2d,0xd5,0x20,0x20,0x2, 0x2f,0xda,0x20,0x28, ++0x2, 0x30,0xdb,0x20,0x41,0x2, 0x40,0xfb,0x30,0x18,0x2, 0x2d,0xd5,0x20,0x18,0x2, ++0x2d,0xd5,0x20,0x18,0x2, 0x2d,0xd5,0x20,0x18,0x2, 0x2d,0xd5,0x20,0x4, 0x5, 0x25, ++0x26,0x27,0x28,0x29,0x4, 0x0, 0x70,0x1, 0x2c,0x64,0x0, 0xc8,0x1, 0x5e,0x0, 0x64, ++0x0, 0x64,0x0, 0x96,0x0, 0x64,0xb, 0xb8,0x8, 0x5, 0x6, 0x80,0x1, 0x90,0x1, 0x2c, ++0x1, 0xc2,0x3, 0x20,0xf, 0xa0,0x1, 0x3, 0x20,0x4, 0xb0,0x3, 0x20,0x1, 0x2, 0x2, ++0x4, 0x4, 0x6, 0x40,0x1, 0x2c,0x1, 0x18,0x1, 0x90,0x1, 0x90,0x1, 0x90,0x1, 0x90, ++0x1, 0x2c,0x1, 0x90,0x1, 0x7c,0x1, 0x7c,0x0, 0x50,0x0, 0x46,0x0, 0x78,0x0, 0x78, ++0x0, 0x78,0x1, 0x18,0x1, 0x18,0xa, 0x5, 0x0, 0x50,0x2, 0xa6,0x0, 0x50,0x3, 0xb0, ++0x0, 0x32,0x1, 0xf4,0x1, 0xf4,0x3, 0x20,0x0, 0xc8,0x0, 0x2f,0x0, 0x1e,0x0, 0x80, ++0x0, 0xbd,0x0, 0x80,0x0, 0x3c,0x3, 0xe8,0x1, 0x0, 0x0, 0x5e,0x0, 0x3c,0x3, 0xe8, ++0x0, 0x20,0x2, 0xd6,0x0, 0x0, 0x4, 0x0, 0x0, 0x64,0x0, 0xa0,0x0, 0xa0,0x13,0x88, ++0x1, 0x2c,0x0, 0xa0,0x0, 0xa0,0x10,0x0, 0xc, 0x0, 0xa, 0xe, 0x5, 0x7, 0x7, 0xa, ++0x6, 0x6, 0xc, 0x64,0xc8,0x7e,0x73,0x28,0x93,0x7a,0x73,0x28,0x94,0x7e,0x73,0x2a, ++0x2, 0x7a,0x73,0x2a,0x3, 0xe4,0x7a,0xb3,0x2a,0x6, 0x22,0xc2,0x0, 0x7e,0xb3,0x16, ++0x91,0x60,0x6, 0x7e,0xb3,0x16,0x90,0x70,0x7, 0x12,0x62,0xd3,0x28,0x2, 0xd2,0x0, ++0xa2,0x0, 0x22,0x7e,0x73,0x28,0x84,0xbe,0x70,0x1, 0x22,0xca,0x3b,0x7e,0x77,0x2a, ++0x5c,0x12,0xa5,0xa8,0x7d,0x63,0x3e,0x34,0x3e,0x34,0x7e,0xe4,0x0, 0xa, 0x12,0x63, ++0x69,0x7e,0xb3,0x28,0xa8,0x60,0xf, 0x7e,0x37,0x38,0x30,0xbd,0x36,0x48,0x7, 0x3e, ++0x34,0x3e,0x34,0x12,0x63,0x69,0xbe,0x64,0x4, 0x4c,0x8, 0xf, 0x12,0xa5,0xf8,0x50, ++0x6, 0x7e,0xb3,0x28,0xa8,0x60,0x4, 0x74,0xa, 0x80,0x13,0x7e,0xb3,0x28,0xa8,0x60, ++0xc, 0x7e,0xb3,0x38,0x2e,0xbe,0xb0,0x0, 0x28,0x8, 0x14,0x80,0x1, 0xe4,0x7a,0xb3, ++0x38,0x2e,0x7e,0xe7,0x2a,0x5c,0x7d,0x3e,0x12,0x4f,0x43,0x7e,0x53,0x38,0x2e,0xbe, ++0x50,0x0, 0x28,0x12,0xbd,0x3f,0x58,0x4, 0x7d,0xf3,0x80,0x6, 0xbd,0xef,0x8, 0x2, ++0x7d,0xfe,0x7a,0xf7,0x2a,0x5c,0x12,0x62,0xd3,0x28,0x3, 0x12,0x36,0xd9,0x7a,0x67, ++0x38,0x30,0x7a,0x77,0x2a,0x5c,0xda,0x3b,0x22,0x7d,0x2e,0x12,0x1e,0xee,0x7d,0xf3, ++0x22,0xca,0x79,0xc2,0x0, 0x7e,0xf0,0x3, 0x12,0x64,0x88,0x7e,0xe3,0x2a,0x3, 0x7e, ++0x34,0x1f,0x34,0x7a,0x37,0x32,0x1a,0x12,0x62,0xd3,0x38,0x2, 0x81,0x4d,0x12,0x65, ++0x1, 0x92,0xd, 0x12,0x64,0x56,0x7c,0xbf,0x12,0xb3,0xd1,0x4c,0xee,0x68,0xe, 0x7e, ++0xa3,0x31,0xf7,0x4c,0xaa,0x78,0xa, 0x7e,0xb3,0x31,0xf8,0x70,0x4, 0xd2,0x0, 0x80, ++0x25,0xbe,0xe0,0x1, 0x28,0xb, 0xe5,0x1d,0xbe,0xb0,0x8, 0x28,0x4, 0xd2,0x0, 0x80, ++0x15,0xd2,0x0, 0x7e,0xb3,0x28,0x84,0xbc,0xbe,0x78,0xb, 0x20,0xd, 0x8, 0x4c,0xaa, ++0x78,0x4, 0x6c,0xff,0xc2,0x0, 0x20,0x0, 0x5, 0x7c,0xbf,0x12,0xb3,0xd1,0x7e,0x8, ++0x31,0xfc,0x12,0x2d,0xcf,0x7a,0xb3,0x31,0xfb,0xbe,0xb3,0x28,0x84,0x50,0x3d,0x7e, ++0x33,0x31,0xfb,0x80,0x29,0x7e,0x70,0x2, 0xac,0x73,0x9, 0x23,0x32,0x1c,0x9, 0x13, ++0x32,0x1d,0x2e,0x37,0x32,0x1a,0xb, 0x38,0x50,0x7e,0x93,0x2a,0x6e,0xac,0x92,0xa, ++0x31,0x2d,0x43,0x12,0xc8,0xad,0x7c,0xb3,0x7e,0x70,0x1, 0x12,0x33,0x1f,0x7c,0x3, ++0x1b,0x30,0xa5,0xb8,0x0, 0xcf,0x74,0x1, 0x7a,0xb3,0x31,0xf9,0x7e,0xa3,0x31,0xfb, ++0x7a,0xa3,0x28,0x84,0x74,0x2, 0xa4,0xca,0x59,0x7e,0x18,0x32,0x1c,0x7e,0x8, 0x26, ++0xfa,0x12,0x20,0xf1,0x1b,0xfd,0x12,0x3c,0x16,0xf5,0x1d,0x80,0x6, 0x75,0x1d,0x64, ++0x12,0xb9,0x8b,0xda,0x79,0x22,0x6c,0xaa,0x12,0x64,0xf5,0x12,0x64,0x81,0x7e,0xb, ++0xb0,0x54,0xfe,0x12,0x64,0x7e,0x7e,0xb, 0xb0,0x54,0x7, 0x12,0x64,0x7e,0x7e,0xb, ++0xb0,0x54,0xfb,0x7a,0xb, 0xb0,0xb, 0xa0,0xbe,0xa0,0x1e,0x40,0xdb,0x22,0x7a,0xb, ++0xb0,0x7f,0x1, 0x2e,0x14,0x0, 0x5, 0x22,0x12,0x67,0xdc,0x28,0x8, 0x7e,0xb3,0x28, ++0x84,0x70,0x2, 0xf5,0x1c,0x7e,0xb3,0x28,0x84,0x70,0x18,0xe5,0x1c,0xbe,0xb0,0xfa, ++0x50,0x2, 0x5, 0x1c,0xe5,0x1c,0xbe,0xb0,0x5, 0x40,0x8, 0xe4,0x7a,0xb3,0x32,0x58, ++0x75,0x1c,0xfa,0x22,0x6c,0xaa,0x12,0x64,0xf5,0x29,0x81,0x0, 0x5, 0x7c,0x98,0x5e, ++0x90,0x1, 0x3e,0x90,0x12,0x64,0x81,0x7c,0xb8,0x54,0xfd,0x4c,0xb9,0x7a,0xb, 0xb0, ++0x29,0xb1,0x0, 0x5, 0x30,0xe0,0x16,0x30,0xe2,0x13,0xc4,0x23,0x54,0x1f,0xb4,0x1, ++0xc, 0x7f,0x1, 0xb, 0x16,0x7e,0xb, 0xb0,0x1e,0xb0,0x7a,0xb, 0xb0,0xb, 0xa0,0xbe, ++0xa0,0x1e,0x40,0xc2,0x22,0x7e,0x70,0x6, 0xac,0x7a,0x2e,0x34,0x32,0x59,0x6d,0x22, ++0x22,0xca,0x3b,0x7e,0xe3,0x28,0x84,0x6c,0xdd,0x6c,0xff,0x74,0x6, 0xac,0xbd,0x12, ++0x67,0xcf,0x30,0xe0,0x37,0x6c,0xcc,0x80,0x27,0x12,0x67,0xed,0x7a,0xb3,0x1f,0x70, ++0x9, 0xa3,0x26,0xfb,0x7a,0xa3,0x1f,0x71,0x7f,0x7, 0x12,0x65,0x57,0x50,0xf, 0x7f, ++0x7, 0x7e,0xb3,0x1f,0x71,0x6c,0x77,0x12,0x65,0x5a,0x50,0x2, 0xb, 0xf0,0xb, 0xc0, ++0xbc,0xec,0x38,0xd5,0xbe,0xf0,0x2, 0x40,0x3, 0xd3,0x80,0x8, 0xb, 0xd0,0xbe,0xd0, ++0x1e,0x40,0xb6,0xc3,0xda,0x3b,0x22,0x7e,0x70,0x1, 0x7c,0x87,0x7c,0x9b,0x29,0xa0, ++0x0, 0x3, 0x29,0x60,0x0, 0x1, 0x7e,0x70,0x1, 0xbe,0x80,0x1, 0x78,0x7, 0x29,0xa0, ++0x0, 0x2, 0x7e,0xb, 0x60,0xa, 0x7, 0xa, 0x29,0x2d,0x2, 0xa, 0x16,0xbd,0x1, 0x48, ++0xc, 0xa, 0x17,0xa, 0x3a,0x2d,0x31,0xbd,0x23,0x18,0x2, 0xd3,0x22,0xc3,0x22,0xca, ++0x3b,0x12,0x67,0xe4,0x75,0x54,0x0, 0x7e,0xa1,0x54,0x74,0x6, 0xa4,0x12,0x67,0xcf, ++0x30,0xe1,0x2e,0x7f,0x7, 0x7c,0xbc,0x12,0x65,0xde,0x50,0x25,0x7f,0x7, 0x7c,0xbe, ++0x12,0x65,0x57,0x50,0x1c,0x7f,0x7, 0x7c,0xbd,0x6c,0x77,0x12,0x65,0x5a,0x50,0x11, ++0x7f,0x7, 0x7c,0xbf,0x6c,0x77,0x12,0x65,0x5a,0x50,0x6, 0x29,0xb7,0x0, 0x4, 0x80, ++0xa, 0x5, 0x54,0xe5,0x54,0xbe,0xb0,0x1e,0x40,0xbd,0xe4,0xda,0x3b,0x22,0x7e,0x70, ++0x1, 0x2, 0x65,0x5a,0xca,0x79,0x7f,0x70,0x7e,0xb4,0xff,0xff,0x6c,0xee,0xc2,0x1, ++0xc2,0x2, 0x29,0x67,0x0, 0x2, 0x7e,0x7b,0x70,0xbc,0x76,0x78,0xe, 0x29,0x67,0x0, ++0x3, 0x29,0x77,0x0, 0x1, 0xbc,0x76,0x78,0x2, 0xd2,0x2, 0x6c,0xff,0x12,0x67,0xc2, ++0x6d,0xaa,0x29,0xb6,0x0, 0x5, 0x20,0xe1,0x2, 0xc1,0x9e,0x7f,0x6, 0x7e,0x7b,0xb0, ++0x12,0x65,0xde,0x50,0x2d,0x7f,0x6, 0x29,0xb7,0x0, 0x2, 0x12,0x65,0xde,0x50,0x22, ++0x7f,0x6, 0x29,0xb7,0x0, 0x1, 0x6c,0x77,0x12,0x65,0x5a,0x50,0x15,0x7f,0x6, 0x29, ++0xb7,0x0, 0x3, 0x6c,0x77,0x12,0x65,0x5a,0x50,0x8, 0x7c,0xef,0xd2,0x1, 0x6d,0xbb, ++0x80,0x55,0x7e,0x6b,0x70,0xa, 0x27,0x7e,0x7b,0x70,0x12,0x67,0xb1,0x2d,0xa3,0x29, ++0x76,0x0, 0x2, 0xa, 0x27,0x29,0x77,0x0, 0x2, 0x12,0x67,0xb1,0x2d,0xa3,0x29,0x76, ++0x0, 0x1, 0xa, 0x27,0x29,0x77,0x0, 0x1, 0x12,0x67,0xb1,0x2d,0xa3,0x29,0x76,0x0, ++0x3, 0xa, 0x27,0x29,0x77,0x0, 0x3, 0x12,0x67,0xb1,0x2d,0xa3,0xbd,0xab,0x50,0x4, ++0x7d,0xba,0x7c,0xef,0xbe,0xa4,0x0, 0x4, 0x38,0x4, 0xd2,0x1, 0x80,0x9, 0xb, 0xf0, ++0xbe,0xf0,0x1e,0x50,0x2, 0xc1,0xd, 0x20,0x1, 0xb, 0x20,0x2, 0x8, 0xbe,0xb4,0x0, ++0x8, 0x50,0x2, 0xd2,0x1, 0x20,0x1, 0x2, 0xe1,0x5f,0x74,0x6, 0xac,0xbe,0x12,0x67, ++0xc6,0x29,0x76,0x0, 0x5, 0x7c,0xb7,0xc4,0x23,0x54,0x1f,0xbe,0xb0,0x1f,0x50,0x16, ++0x7f,0x6, 0x2e,0x14,0x0, 0x5, 0x7c,0x67,0x2e,0x60,0x8, 0x5e,0x60,0xf8,0x5e,0x70, ++0x7, 0x4c,0x76,0x7a,0xb, 0x70,0x20,0x2, 0x11,0x29,0xb6,0x0, 0x4, 0xbe,0xb0,0xfa, ++0x50,0x8, 0x7f,0x16,0xb, 0x36,0x4, 0x7a,0x1b,0xb0,0x29,0x67,0x0, 0x3, 0x29,0x76, ++0x0, 0x3, 0xbc,0x76,0x28,0x6, 0x29,0x76,0x0, 0x3, 0x80,0x4, 0x29,0x77,0x0, 0x3, ++0x39,0x76,0x0, 0x3, 0x29,0x67,0x0, 0x2, 0x29,0x76,0x0, 0x2, 0xbc,0x76,0x28,0x6, ++0x29,0x76,0x0, 0x2, 0x80,0x4, 0x29,0x77,0x0, 0x2, 0x39,0x76,0x0, 0x2, 0x29,0x67, ++0x0, 0x1, 0x29,0x76,0x0, 0x1, 0xbc,0x76,0x50,0x6, 0x29,0x76,0x0, 0x1, 0x80,0x4, ++0x29,0x77,0x0, 0x1, 0x39,0x76,0x0, 0x1, 0x7e,0x7b,0x60,0x7e,0x6b,0x70,0xbc,0x76, ++0x50,0x5, 0x7e,0x6b,0x70,0x80,0x3, 0x7e,0x7b,0x70,0x7a,0x6b,0x70,0x80,0x31,0x6c, ++0xff,0x74,0x6, 0xac,0xbf,0x9, 0xb5,0x32,0x5e,0x30,0xe1,0x7, 0xb, 0xf0,0xbe,0xf0, ++0x1e,0x40,0xee,0xbe,0xf0,0x1e,0x50,0x33,0x74,0x1, 0x39,0xb7,0x0, 0x4, 0x12,0x67, ++0xc2,0x7e,0x34,0x0, 0x6, 0xca,0x39,0x7f,0x17,0x7f,0x6, 0x12,0x20,0xf1,0x1b,0xfd, ++0x12,0x67,0xb8,0x44,0x1, 0x7a,0x1b,0xb0,0x12,0x67,0xb8,0x44,0x2, 0x7a,0x1b,0xb0, ++0x30,0x2, 0x8, 0x12,0x67,0xb8,0x44,0x4, 0x7a,0x1b,0xb0,0xda,0x79,0x22,0x7e,0x39, ++0x70,0xa, 0x37,0x9d,0x32,0x2, 0x21,0x48,0x7f,0x16,0x2e,0x34,0x0, 0x5, 0x7e,0x1b, ++0xb0,0x22,0x74,0x6, 0xac,0xbf,0x7d,0xd5,0x2e,0xd4,0x32,0x59,0x6d,0xcc,0x22,0x7d, ++0xf5,0x2e,0xf4,0x32,0x59,0x6d,0xee,0x29,0xb7,0x0, 0x5, 0x22,0x7e,0x73,0x2a,0x3, ++0xbe,0x70,0x0, 0x22,0x7c,0xf5,0x7c,0xe6,0x7c,0xd7,0x7c,0xcb,0x22,0x7e,0x70,0x2, ++0xac,0x7c,0x9, 0xb3,0x26,0xfa,0x22,0x7e,0x37,0x3b,0x25,0xb, 0x34,0x7a,0x37,0x3b, ++0x25,0x7e,0x37,0x3b,0x27,0xbe,0x37,0x3b,0x25,0x28,0x3, 0x2, 0x68,0xf, 0x22,0xe5, ++0x9a,0x60,0x5, 0xd2,0x9c,0xa9,0xd6,0xdf,0x22,0x2, 0x67,0xf7,0xca,0x7b,0xca,0x6b, ++0xca,0x5b,0xca,0x4b,0xca,0x2b,0xca,0x1b,0xca,0xb, 0xc0,0xd0,0xc0,0x83,0xc0,0x82, ++0x12,0x68,0x19,0xd0,0x82,0xd0,0x83,0xd0,0xd0,0xda,0xb, 0xda,0x1b,0xda,0x2b,0xda, ++0x4b,0xda,0x5b,0xda,0x6b,0xda,0x7b,0x32,0xe4,0x12,0x6a,0xb1,0x12,0xba,0xfc,0x12, ++0x26,0x86,0x12,0x6f,0xf8,0x12,0x49,0x2f,0x12,0xba,0x33,0x12,0xbb,0x13,0x12,0x0, ++0xa, 0x12,0xbb,0x1f,0x12,0x6a,0x3c,0x12,0xbb,0x2f,0xd2,0xaf,0x12,0xba,0x8e,0x12, ++0x68,0x96,0x12,0x4b,0xc7,0x12,0x6a,0xe2,0x7e,0x8, 0x3b,0x29,0x12,0x6a,0x8b,0x90, ++0x60,0x50,0xe4,0x93,0xca,0xb8,0x90,0x60,0x51,0xe4,0x93,0x7c,0x7b,0x7e,0x24,0xff, ++0xff,0xda,0xb8,0x2, 0x12,0x34,0xd2,0xc8,0x43,0xed,0xf, 0xc2,0xea,0x75,0xb3,0x13, ++0xa9,0xd1,0xb4,0xa9,0xc0,0xb4,0x12,0x6a,0x2c,0xe4,0x12,0x68,0xb9,0x2, 0x68,0xb0, ++0xa9,0xc5,0xca,0xe4,0x7a,0xb3,0x3b,0x62,0x22,0xca,0xf8,0x7c,0xfb,0x74,0x2, 0x12, ++0x69,0x37,0x4c,0xff,0x78,0x5, 0x5e,0x70,0xdf,0x80,0x3, 0x4e,0x70,0x20,0x74,0x2, ++0x12,0x68,0xda,0xda,0xf8,0x22,0x74,0x6, 0x7d,0x30,0x7d,0x23,0x7c,0x6b,0xa, 0x14, ++0x7c,0x73,0x7d,0x52,0x7c,0xab,0x7e,0xb3,0x3b,0x62,0xb4,0xa5,0x42,0x12,0x69,0xd7, ++0x75,0xb5,0x1, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3, ++0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x61, ++0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x71,0xb5,0xa9,0x36,0xb3,0xfc,0xa9, ++0xc6,0xb3,0x7a,0xa1,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0xa9,0xd2,0xb4,0x22, ++0x74,0x4, 0x7d,0x30,0x2, 0x68,0xda,0x7c,0x6b,0x6c,0x77,0x6c,0xaa,0x7e,0xb3,0x3b, ++0x62,0xb4,0xa5,0x52,0x12,0x69,0xd7,0x75,0xb5,0x5, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6, ++0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36, ++0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x61,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75, ++0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc, ++0xa9,0xc6,0xb3,0x7e,0x71,0xb5,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3, ++0x7e,0xa1,0xb5,0xa9,0xd2,0xb4,0x7c,0x47,0x6c,0x55,0xa, 0x3a,0x4d,0x32,0x22,0x7d, ++0x42,0x7f,0x60,0x7d,0x3, 0x12,0x6a,0x2c,0x74,0x2, 0x12,0x69,0x37,0x7d,0xf3,0x4e, ++0xf4,0x0, 0x1, 0x4e,0xf4,0x0, 0xa, 0x12,0x69,0xd0,0x7a,0x45,0x36,0x7d,0x30,0x6d, ++0x22,0x7f,0x6, 0x12,0x69,0xe8,0x5e,0xf4,0xff,0xfd,0x12,0x69,0xd0,0x2, 0x68,0xb0, ++0x74,0x2, 0x7d,0x3f,0x2, 0x68,0xda,0xa9,0xc2,0xb4,0xa9,0xc6,0xb3,0x22,0x74,0x6, ++0x12,0x69,0x37,0x7d,0x3, 0x6c,0x11,0x22,0x12,0x69,0xf6,0x7e,0x35,0x36,0x12,0xbb, ++0x73,0xa9,0xd2,0xb4,0xd3,0x22,0x7d,0x52,0xf5,0x3a,0x7c,0xb6,0x7c,0xa5,0xa, 0x44, ++0xf5,0x39,0x7f,0x21,0xf5,0x38,0xa9,0xc2,0xb4,0x74,0xb, 0x12,0x6a,0x21,0xe5,0x3a, ++0x12,0x6a,0x21,0xe5,0x39,0x12,0x6a,0x21,0xe5,0x38,0x12,0x6a,0x21,0xe4,0x2, 0x6a, ++0x21,0xf5,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0xd3,0x22,0xa9,0xd5,0xca,0xa9, ++0xd1,0xea,0xa9,0xc1,0xea,0x74,0xa5,0x7a,0xb3,0x3b,0x62,0x22,0xe4,0x7a,0xb3,0x39, ++0xe4,0x7e,0x8, 0x33,0x21,0x12,0xc8,0xe0,0x7e,0x8, 0x33,0x5f,0x7e,0x34,0x0, 0x3e, ++0x12,0x21,0x16,0x7e,0x18,0x33,0x21,0x7a,0x1d,0x14,0x12,0x6a,0x6d,0x2, 0x6a,0x60, ++0x75,0x19,0x0, 0x75,0x1b,0x0, 0x7e,0xb3,0x39,0xe4,0xf5,0x91,0x22,0x2, 0x6a,0x70, ++0x90,0x60,0x0, 0xe4,0x93,0x54,0xfe,0x75,0x91,0x0, 0xc2,0x90,0xc2,0x91,0xc2,0xc9, ++0x54,0xfe,0xf5,0x92,0xd2,0xe8,0xc2,0xc0,0xd2,0xad,0x22,0xd2,0xc9,0x75,0xf2,0x30, ++0x75,0xf3,0x80,0x75,0xf4,0xc, 0x75,0xf5,0x1, 0x6c,0xaa,0xe5,0xf5,0x54,0x80,0xb4, ++0x80,0xf9,0xe5,0xf6,0x12,0xb0,0xd3,0xb, 0xa0,0xbe,0xa0,0xd, 0x40,0xed,0xc2,0xc9, ++0x22,0xa9,0xc4,0xca,0xa9,0xc5,0xca,0xbe,0xb0,0x8, 0x50,0x3, 0x12,0x83,0xc8,0xa9, ++0xd0,0xce,0xa9,0xc0,0xc9,0xd2,0x2, 0x12,0x4f,0xa5,0xa9,0xc2,0xea,0x75,0xc1,0x6, ++0x75,0xc2,0xc, 0xd2,0x0, 0x12,0x4f,0xfe,0xa9,0xc1,0xc4,0xa9,0xd2,0xc4,0xa9,0xc2, ++0xe1,0x22,0xca,0xf8,0xa2,0xaf,0xe4,0x33,0x7c,0xfb,0xd2,0x0, 0x12,0xba,0x85,0xa9, ++0xd0,0xcb,0xc2,0xaf,0xa9,0xd0,0x9e,0x75,0x9d,0x0, 0xa9,0xd0,0x9e,0x75,0x9c,0x20, ++0xa9,0xd0,0x9e,0xa9,0xd4,0x9e,0xa9,0xd0,0xcd,0x74,0x41,0x12,0x4f,0x4a,0xa9,0xd0, ++0x9e,0xa9,0xd7,0x9e,0x2e,0xf0,0xff,0x92,0xaf,0xda,0xf8,0x22,0x7e,0x23,0x2b,0xf, ++0x7e,0x33,0x3a,0x15,0x7e,0x34,0x60,0xd6,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x0, 0xac, ++0x23,0x2d,0x10,0xbe,0x14,0x0, 0xa, 0x50,0x4, 0x7e,0x14,0x0, 0xa, 0x7e,0x63,0x2b, ++0x10,0xbe,0x14,0xf, 0x3c,0x40,0x4, 0x7e,0x14,0xf, 0x3c,0xbe,0x14,0x7, 0x8, 0x40, ++0x3, 0xe4,0x80,0x21,0xbe,0x14,0x3, 0x84,0x40,0x16,0x90,0x61,0x1b,0xe4,0x93,0x7c, ++0x7b,0xbe,0x70,0x1, 0x28,0x4, 0x74,0x1, 0x80,0xb, 0x7a,0x73,0x2b,0x10,0x80,0x9, ++0x90,0x61,0x1b,0xe4,0x93,0x7a,0xb3,0x2b,0x10,0x7e,0x73,0x2b,0x10,0xbc,0x76,0x68, ++0x2, 0xd2,0x10,0x7e,0x24,0x1, 0xf4,0x7d,0x31,0x8d,0x32,0x7c,0x17,0xbe,0x10,0x7, ++0x28,0x3, 0x7e,0x10,0x7, 0x7e,0x1f,0x3b,0x8, 0x69,0x51,0x0, 0x86,0x54,0x1f,0xa, ++0x1, 0x12,0xa4,0x47,0x3e,0x4, 0x2d,0x5, 0x79,0x1, 0x0, 0x86,0x6d,0x0, 0x7e,0x34, ++0xb8,0x0, 0x7e,0x24,0x0, 0xb, 0x2, 0x1f,0x8d,0x7e,0xa3,0x0, 0x5e,0xbe,0xa0,0xff, ++0x68,0x48,0xbe,0xa3,0x3, 0xfb,0x68,0x42,0x74,0x5, 0xa4,0x12,0x6f,0x88,0x12,0x6c, ++0xb, 0x12,0x6f,0x4a,0x12,0x6c,0xb, 0x12,0x6f,0x41,0x12,0x7e,0x2e,0x50,0x9, 0x7e, ++0xb3,0x0, 0x5e,0x12,0x6f,0x53,0x80,0x6, 0x12,0x6c,0xb, 0x12,0x6e,0x45,0x12,0x6c, ++0x17,0x12,0x6e,0x3e,0x7e,0x73,0x2b,0x14,0xa, 0x37,0x7e,0xf, 0x3b,0x10,0x79,0x30, ++0x0, 0x1a,0x7e,0x73,0x0, 0x5e,0x7a,0x73,0x3, 0xfb,0x22,0x7e,0xa3,0x0, 0x5e,0x74, ++0x5, 0xa4,0x22,0x7a,0xb3,0x2b,0xf, 0x12,0x6b,0x1c,0x7a,0x37,0x2b,0x1b,0x22,0x12, ++0x6c,0x13,0x30,0x10,0xa, 0x12,0x6f,0xb4,0x30,0x0, 0x4, 0xe4,0x12,0xa, 0x66,0x30, ++0x0, 0x9, 0x12,0x6f,0xc6,0x12,0x6c,0xeb,0x2, 0x7f,0x43,0x22,0x7e,0xb, 0x70,0x7a, ++0x73,0x2b,0xf, 0x29,0x70,0x0, 0x4, 0x7a,0x73,0x2b,0x62,0x29,0x70,0x0, 0x1, 0x7a, ++0x73,0x2b,0x14,0x29,0x70,0x0, 0x3, 0x7a,0x73,0x2b,0x20,0x12,0x6c,0x17,0x12,0x6e, ++0x3e,0xd2,0x0, 0xc2,0x1, 0x2, 0x50,0xfd,0xca,0xf8,0x7c,0xfb,0x74,0x5, 0xac,0xbf, ++0x12,0x6f,0x88,0x12,0x6f,0x4a,0x12,0x6e,0x45,0x12,0x6f,0x41,0x7a,0xf3,0x0, 0x5e, ++0x7c,0xbf,0x12,0x6f,0x53,0x12,0x6c,0x17,0x74,0x5, 0xac,0xbf,0x9, 0xb5,0x26,0x37, ++0x12,0x6f,0x9b,0x12,0x6c,0xeb,0x12,0x23,0x2f,0xe4,0x7a,0xb3,0x16,0x91,0xda,0xf8, ++0x22,0x7e,0xb3,0x38,0x34,0x60,0x6, 0x14,0x7a,0xb3,0x38,0x34,0x22,0x12,0xa9,0x57, ++0x90,0x61,0xc5,0xe4,0x93,0xbe,0xb0,0x4, 0x28,0x3, 0x12,0x6c,0xeb,0x7e,0xb3,0x39, ++0x34,0x70,0xe, 0x7e,0xb3,0x3b,0x61,0xb4,0x1, 0x7, 0xe4,0x12,0x6c,0x68,0x12,0xc8, ++0xcc,0x12,0x5c,0xfb,0x12,0xaa,0xa1,0x7e,0xa3,0x39,0x34,0x7a,0xa3,0x3b,0x61,0xbe, ++0xb0,0xff,0x68,0x3, 0x2, 0x6c,0x68,0x22,0x12,0x6f,0x91,0x7e,0xb3,0x2b,0xf, 0xca, ++0x3b,0x7c,0xeb,0x6c,0xff,0x7e,0x34,0x60,0xd6,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0xc0, ++0x7e,0x73,0x3a,0x15,0xa, 0xb7,0x7e,0xb3,0x2b,0x10,0xf5,0x36,0x12,0xc9,0x2d,0xbe, ++0xd0,0x4, 0x38,0x5, 0xe4,0x7a,0xb3,0x38,0x40,0xa, 0x3e,0xad,0x3b,0x7d,0xa3,0x2d, ++0xac,0x75,0x35,0x0, 0x7e,0xa3,0x38,0x40,0xbc,0xad,0x40,0x2, 0x80,0x19,0xbe,0xa0, ++0x0, 0x28,0x19,0x74,0x5, 0xa4,0x9, 0x75,0x26,0x33,0xbc,0x7e,0x78,0xe, 0x7c,0xbd, ++0x14,0xbe,0xb3,0x38,0x40,0x78,0x5, 0xe4,0x7a,0xb3,0x38,0x40,0x7e,0xc3,0x38,0x40, ++0x80,0x41,0x7e,0xb3,0x38,0x40,0x4, 0x7a,0xb3,0x38,0x40,0x7e,0x90,0x5, 0xac,0x9c, ++0x9, 0xa4,0x26,0x33,0xbc,0xae,0x68,0x29,0xe5,0x35,0xa, 0xdb,0x19,0xcd,0x38,0x44, ++0xa, 0x9a,0xad,0x9b,0x2d,0x9c,0x7e,0xa1,0x35,0x7c,0xba,0x4, 0xf5,0x35,0x7c,0xba, ++0x7d,0x39,0x7d,0x2a,0x7e,0x31,0x36,0x12,0x10,0x0, 0xb, 0xf0,0xbe,0xf0,0x3, 0x50, ++0x6, 0xb, 0xc0,0xbc,0xdc,0x38,0xbb,0x7a,0xf3,0x38,0x41,0xda,0x3b,0x22,0xca,0xf8, ++0x6c,0xff,0x80,0x34,0x7e,0x73,0x0, 0x5e,0xbc,0x7f,0x68,0x2a,0x7e,0x30,0x5, 0xac, ++0x3f,0x12,0x6e,0x1a,0xca,0x39,0x7e,0x30,0x38,0xac,0x3f,0x12,0x6e,0x33,0x12,0x20, ++0xf1,0x1b,0xfd,0x7e,0x34,0x0, 0x8c,0xca,0x39,0x7e,0x30,0x8c,0xac,0x3f,0x12,0x6e, ++0x28,0x12,0x20,0xf1,0x1b,0xfd,0xb, 0xf0,0x90,0x61,0xc5,0xe4,0x93,0xbc,0xbf,0x38, ++0xc3,0x7e,0x23,0x0, 0x5e,0x7e,0x30,0x5, 0xac,0x23,0x12,0x6e,0x1a,0xca,0x39,0x7e, ++0x23,0x0, 0x5e,0x7e,0x30,0x38,0xac,0x23,0x12,0x6e,0x33,0x12,0x20,0xf1,0x1b,0xfd, ++0x7e,0x34,0x0, 0x8c,0xca,0x39,0x7e,0x23,0x0, 0x5e,0x7e,0x30,0x8c,0xac,0x23,0x12, ++0x6e,0x28,0x12,0x20,0xf1,0x1b,0xfd,0xda,0xf8,0x22,0x2e,0x14,0x26,0x33,0x6d,0x0, ++0x12,0x6c,0x3c,0x7e,0x34,0x0, 0x38,0x22,0x2e,0x14,0x1, 0x3f,0x6d,0x0, 0x7e,0x18, ++0x3, 0x6f,0x22,0x2e,0x14,0x0, 0x5f,0x6d,0x0, 0x7e,0x18,0x34,0x0, 0x22,0x7e,0x8, ++0x2a,0x6d,0x2, 0x3, 0x8b,0x9, 0x75,0x26,0x35,0x7a,0x73,0x2b,0x1f,0x22,0xca,0x3b, ++0x7a,0xd, 0x2f,0x7c,0xcb,0x7e,0xb3,0x2b,0x1d,0xf5,0x33,0x7e,0xb3,0x2b,0xf, 0xf5, ++0x34,0x7e,0xd3,0x2b,0x14,0x7e,0xe3,0x2b,0x1f,0x7e,0xf3,0x2b,0x20,0x7e,0x34,0x0, ++0x38,0xca,0x39,0x7e,0x18,0x34,0x0, 0x7e,0x8, 0x24,0xf2,0x12,0x20,0xf1,0x1b,0xfd, ++0x7e,0x34,0x0, 0x8c,0xca,0x39,0x7e,0x18,0x3, 0x6f,0x7e,0x8, 0x25,0x2a,0x12,0x20, ++0xf1,0x1b,0xfd,0x7c,0xbc,0x12,0x6f,0x53,0x74,0x1, 0x7a,0xb3,0x2b,0x1d,0x74,0x5, ++0xac,0xbc,0x12,0x6f,0x4a,0x74,0x5, 0xac,0xbc,0x12,0x6e,0x45,0x74,0x5, 0xac,0xbc, ++0x12,0x6f,0x41,0x74,0x5, 0xac,0xbc,0x9, 0x75,0x26,0x37,0xbe,0x73,0x2b,0x62,0x68, ++0x6, 0x7a,0x73,0x2b,0x62,0xd2,0x10,0xc2,0x0, 0x12,0xb1,0xb1,0x12,0x6c,0x1f,0x12, ++0x56,0x6e,0x30,0xf, 0xfd,0x74,0x1, 0x12,0x0, 0xe, 0x7e,0x14,0x40,0x0, 0x7d,0x31, ++0x7e,0x2f,0x13,0x86,0x7d,0x25,0x7e,0x4, 0xd, 0xc8,0x12,0x7b,0xeb,0x12,0xc8,0x6c, ++0x7a,0x55,0x35,0x7e,0xd, 0x2f,0x7e,0x18,0xd, 0xc8,0x12,0xb0,0x29,0x12,0xb0,0xdd, ++0xe5,0x33,0x7a,0xb3,0x2b,0x1d,0xe5,0x34,0x7a,0xb3,0x2b,0xf, 0x7a,0xd3,0x2b,0x14, ++0x7a,0xe3,0x2b,0x1f,0x7a,0xf3,0x2b,0x20,0x7e,0x34,0x0, 0x38,0xca,0x39,0x7e,0x18, ++0x24,0xf2,0x7e,0x8, 0x34,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x0, 0x8c,0xca, ++0x39,0x7e,0x18,0x25,0x2a,0x7e,0x8, 0x3, 0x6f,0x12,0x20,0xf1,0x1b,0xfd,0xda,0x3b, ++0x22,0x9, 0x75,0x26,0x36,0x7a,0x73,0x2b,0x20,0x22,0x9, 0x75,0x26,0x34,0x7a,0x73, ++0x2b,0x14,0x22,0xca,0xf8,0x7c,0xfb,0x7e,0x34,0x0, 0x38,0xca,0x39,0xac,0x7f,0x2e, ++0x34,0x0, 0x5f,0x6d,0x22,0x7e,0x8, 0x34,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34, ++0x0, 0x8c,0xca,0x39,0xac,0x7f,0x2e,0x34,0x1, 0x3f,0x6d,0x22,0x7e,0x8, 0x3, 0x6f, ++0x12,0x20,0xf1,0x1b,0xfd,0xda,0xf8,0x22,0x9, 0x75,0x26,0x33,0x7a,0x73,0x2b,0xf, ++0x22,0x12,0x6f,0xc6,0x74,0x1, 0x7a,0xb3,0x38,0x34,0x22,0x7e,0xa3,0x2b,0x62,0xbc, ++0xab,0x68,0x6, 0x7a,0xb3,0x2b,0x62,0xd2,0x10,0x30,0x10,0x7, 0x12,0x6f,0xb4,0xe4, ++0x2, 0xa, 0x66,0x22,0xc2,0x10,0x7e,0x8, 0x2a,0x6d,0x12,0x3, 0x8b,0x7e,0x8, 0x2a, ++0x6d,0x74,0x3, 0x2, 0x11,0x7a,0x7e,0x8, 0x38,0x48,0x7e,0x34,0x0, 0x60,0xe4,0x12, ++0x21,0x16,0x6c,0xaa,0x7e,0x44,0xff,0xff,0x7e,0x70,0xc, 0xac,0x7a,0x59,0x43,0x38, ++0x4a,0x59,0x43,0x38,0x52,0xb, 0xa0,0xbe,0xa0,0x8, 0x40,0xe8,0x7e,0x8, 0x38,0x36, ++0x7e,0x34,0x0, 0xd, 0xe4,0x2, 0x21,0x16,0xa9,0xd0,0x99,0xa9,0xc6,0xdf,0x22,0x7e, ++0x34,0x0, 0x4, 0xca,0x39,0x7e,0x34,0x61,0x2d,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x2b, ++0x70,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x2a,0xe, 0x7a,0x37,0x2b,0x76,0xe4,0x7a, ++0xb3,0x2b,0x74,0x7a,0xb3,0x2b,0x75,0x7e,0x34,0x0, 0x4, 0xca,0x39,0x12,0x70,0x4d, ++0x7e,0x8, 0x25,0xee,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x2b,0x78,0x7a,0x37,0x25, ++0xf4,0xe4,0x7a,0xb3,0x25,0xf2,0x74,0x1, 0x7a,0xb3,0x25,0xf3,0x22,0x7e,0x34,0x61, ++0x29,0x7e,0x24,0x0, 0xff,0x22,0xe4,0x7a,0xb3,0x39,0xe4,0x7a,0xb3,0x39,0xe5,0x90, ++0x60,0x50,0x93,0x7a,0xb3,0x39,0xe6,0x90,0x60,0x51,0xe4,0x93,0x7a,0xb3,0x39,0xe7, ++0xe4,0x7a,0xb3,0x39,0xe8,0x90,0x60,0x99,0x93,0x7a,0xb3,0x39,0xe9,0xe4,0x7a,0xb3, ++0x39,0xea,0x7a,0xb3,0x39,0xeb,0x90,0x61,0xc4,0x93,0x7a,0xb3,0x39,0xed,0x7e,0x34, ++0x61,0x4f,0x12,0x23,0xc9,0x1e,0x34,0x1e,0x34,0x7a,0x73,0x39,0xf1,0x7e,0x34,0x61, ++0x55,0x12,0x23,0xc9,0x1e,0x34,0x1e,0x34,0x7a,0x73,0x39,0xf2,0x74,0x64,0x7a,0xb3, ++0x3a,0x3, 0x90,0x61,0x18,0xe4,0x93,0x7a,0xb3,0x3a,0x4, 0x90,0x61,0x17,0xe4,0x93, ++0x7a,0xb3,0x39,0xf0,0x90,0x61,0x19,0xe4,0x93,0x7a,0xb3,0x3a,0x6, 0x90,0x61,0x24, ++0xe4,0x93,0x7a,0xb3,0x3a,0x5, 0x90,0x61,0x1d,0xe4,0x93,0x7a,0xb3,0x3a,0x7, 0x90, ++0x61,0x25,0xe4,0x93,0x7a,0xb3,0x3a,0x2, 0xe4,0x7a,0xb3,0x39,0xfd,0x74,0xfa,0x7a, ++0xb3,0x39,0xfb,0x74,0x1e,0x7a,0xb3,0x39,0xfc,0x74,0x1, 0x7a,0xb3,0x39,0xfa,0x74, ++0x17,0x7a,0xb3,0x39,0xf9,0x74,0x1, 0x7a,0xb3,0x39,0xfe,0xe4,0x7a,0xb3,0x39,0xff, ++0x7a,0xb3,0x3a,0x0, 0x7e,0x8, 0x3a,0x8, 0x7e,0x34,0x0, 0x2c,0x12,0x21,0x16,0x7e, ++0x34,0x60,0xd6,0x12,0x23,0xc9,0xa, 0x36,0x7a,0x73,0x3a,0x13,0x7e,0x34,0x60,0xd6, ++0x12,0x23,0xc9,0x7a,0x73,0x3a,0x14,0x90,0x60,0xd4,0x93,0x7a,0xb3,0x3a,0x15,0x90, ++0x60,0xd5,0xe4,0x93,0x7a,0xb3,0x3a,0x16,0x7e,0x34,0x0, 0x4, 0xca,0x39,0x12,0x70, ++0x4d,0x7e,0x8, 0x3a,0x24,0x12,0x20,0xf1,0x1b,0xfd,0x74,0x5, 0x7a,0xb3,0x3a,0x31, ++0x74,0x1, 0x7a,0xb3,0x3a,0x28,0x7e,0x34,0x0, 0x28,0xca,0x39,0x7e,0x34,0x61,0xd5, ++0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x26,0x33,0x12,0x20,0xf1,0x1b,0xfd,0x22,0x12,0x70, ++0x56,0x12,0x7f,0xfa,0x12,0x0, 0x42,0x12,0xc8,0x81,0x7e,0x18,0x4, 0x0, 0x7a,0x1f, ++0x6, 0xf8,0x7e,0xf, 0x6, 0xf8,0x7e,0x1f,0x6, 0xf4,0x12,0x84,0x40,0x7e,0x18,0x8, ++0xa, 0x7a,0x1f,0x13,0x86,0x7e,0x18,0xd, 0xc8,0x7a,0x1f,0x13,0x8a,0x7e,0xf, 0x13, ++0x8a,0x7e,0x1f,0x13,0x86,0x12,0x84,0x1d,0x12,0x84,0x1a,0x12,0x25,0x78,0x12,0x77, ++0x91,0x12,0x71,0xd5,0x2, 0x71,0xc7,0xe4,0x7a,0xb3,0x34,0x38,0x7a,0xb3,0x34,0x39, ++0x7a,0xb3,0x34,0x3a,0x22,0x12,0x77,0xcf,0x7e,0x24,0x0, 0x3, 0xad,0x32,0x7e,0x8, ++0x28,0xae,0x74,0xff,0x12,0x21,0x16,0x12,0xa1,0xfc,0x7e,0x8, 0x29,0xbc,0x12,0x71, ++0xfd,0x7e,0x8, 0x2a,0x2, 0x7e,0x34,0x0, 0xb, 0xe4,0x2, 0x21,0x16,0x6c,0xaa,0x80, ++0x20,0x74,0x3, 0x12,0xb0,0xd3,0x7f,0x10,0x2d,0x34,0x39,0xb1,0x0, 0xa, 0x12,0x74, ++0xc9,0x7f,0x70,0x2d,0xf3,0x79,0x47,0x0, 0x14,0x2d,0x31,0x79,0x41,0x0, 0x28,0xb, ++0xa0,0x12,0x72,0x27,0x38,0xdb,0x22,0x90,0x60,0x99,0xe4,0x93,0xbc,0xba,0x22,0xca, ++0xf8,0x7e,0x68,0x29,0xbc,0x6c,0xaa,0x80,0x19,0x7e,0x70,0xff,0x12,0x74,0xe4,0xe4, ++0xa, 0x4a,0x19,0xb4,0x1f,0x34,0x74,0xff,0x19,0xb4,0x1f,0x46,0x19,0xb4,0x1f,0x50, ++0xb, 0xa0,0x12,0x72,0x27,0x38,0xe2,0x7e,0x73,0x2a,0x2, 0xa5,0xbf,0x0, 0x23,0x7e, ++0xb3,0x3b,0x5f,0x70,0x2, 0x81,0x3e,0x6c,0xaa,0x80,0x10,0x7e,0x44,0x7f,0xff,0x12, ++0x74,0xee,0x79,0x40,0x0, 0x14,0x12,0x74,0xdb,0xb, 0xa0,0x12,0x72,0x27,0x38,0xeb, ++0x81,0x3e,0x7e,0xb3,0x3b,0x5f,0x70,0x3d,0xbe,0x70,0x0, 0x28,0x38,0x6c,0xaa,0x80, ++0x2a,0x7e,0x90,0x9, 0xac,0x9a,0x49,0x34,0x28,0xae,0x12,0x74,0xee,0x79,0x30,0x0, ++0x14,0x49,0x34,0x28,0xb0,0x7f,0x6, 0x2d,0x12,0x79,0x30,0x0, 0x28,0x74,0x1, 0xa, ++0x3a,0x19,0xb3,0x1f,0x34,0x19,0xa4,0x28,0xb2,0xb, 0xa0,0x7e,0xb3,0x2a,0x2, 0xbc, ++0xba,0x38,0xce,0x81,0x3e,0x6c,0xaa,0x80,0x17,0x12,0x74,0xc9,0x3e,0x34,0x59,0x43, ++0x15,0x4e,0x59,0x43,0x15,0x50,0x59,0x43,0x15,0x76,0x59,0x43,0x15,0x78,0xb, 0xa0, ++0x12,0x72,0x27,0x38,0xe4,0x6c,0xaa,0x80,0x3d,0x6c,0xff,0x80,0x32,0x7e,0x70,0x2, ++0xac,0x7f,0x7f,0x6, 0x2d,0x13,0x69,0x30,0x0, 0x14,0xbe,0x34,0x7f,0xff,0x68,0x1d, ++0xa, 0x4f,0x9, 0xb4,0x1f,0x50,0xb4,0xff,0x14,0x12,0x74,0xd3,0x59,0x32,0x15,0x4e, ++0x69,0x30,0x0, 0x28,0x59,0x32,0x15,0x50,0x12,0x74,0xf8,0x80,0x7, 0xb, 0xf0,0x12, ++0x74,0xc1,0x38,0xc9,0xb, 0xa0,0x7e,0xb3,0x3b,0x5f,0xbc,0xba,0x38,0xbb,0x6c,0xaa, ++0x80,0x24,0xa, 0x3a,0x9, 0xb3,0x1f,0x46,0xb4,0xff,0x19,0x6c,0xff,0x80,0x10,0xa, ++0x4f,0x9, 0xb4,0x1f,0x50,0xb4,0xff,0x5, 0x12,0x74,0xf8,0x80,0x7, 0xb, 0xf0,0x12, ++0x74,0xc1,0x38,0xeb,0xb, 0xa0,0x12,0x72,0x27,0x38,0xd7,0x6c,0xaa,0x80,0x1a,0x7e, ++0x70,0x9, 0xac,0x7a,0x49,0x43,0x28,0xae,0x12,0x74,0xd3,0x59,0x42,0x15,0x76,0x49, ++0x33,0x28,0xb0,0x59,0x32,0x15,0x78,0xb, 0xa0,0x7e,0xb3,0x2a,0x2, 0xbc,0xba,0x38, ++0xde,0x7e,0x34,0x15,0x4e,0x7a,0x37,0x1f,0x40,0x7e,0x34,0x15,0x76,0x7a,0x37,0x1f, ++0x42,0x7e,0x34,0x15,0x9e,0x7a,0x37,0x1f,0x44,0x7e,0x73,0x3b,0x5f,0x7a,0x73,0x1f, ++0x3e,0x7e,0x73,0x2a,0x2, 0x7a,0x73,0x1f,0x3f,0x7e,0x8, 0x1f,0x3e,0x12,0x4, 0xad, ++0x6c,0xaa,0x80,0x59,0x7e,0x70,0xff,0x6c,0xff,0x80,0x19,0x7e,0x50,0x2, 0xac,0x5f, ++0x49,0x12,0x15,0x9e,0xa, 0x2a,0xbd,0x21,0x78,0x8, 0xa, 0x3f,0x9, 0x73,0x1f,0x46, ++0x80,0x7, 0xb, 0xf0,0x12,0x74,0xc1,0x38,0xe2,0xbe,0x70,0xff,0x68,0x2d,0x12,0x74, ++0xe4,0x74,0x1, 0xa, 0x47,0x19,0xb4,0x1f,0x34,0x7e,0x90,0x9, 0xac,0x9a,0x49,0x24, ++0x28,0xae,0x7e,0x30,0x2, 0xac,0x37,0x2d,0x1d,0x7d,0xc, 0x79,0x20,0x0, 0x14,0x49, ++0x44,0x28,0xb0,0x7e,0x50,0x2, 0xac,0x57,0x12,0x74,0xdb,0xb, 0xa0,0x7e,0x63,0x2a, ++0x2, 0xbc,0x6a,0x38,0x9f,0x6c,0xaa,0x80,0x20,0xa, 0x3a,0x9, 0xb3,0x1f,0x34,0xbe, ++0xb0,0x1, 0x68,0x13,0x12,0x74,0xc9,0x7f,0x6, 0x2d,0x13,0x79,0x40,0x0, 0x14,0x2d, ++0x3d,0x7d,0x2c,0x79,0x41,0x0, 0x28,0xb, 0xa0,0x12,0x72,0x27,0x38,0xdb,0x7e,0xf3, ++0x2a,0x2, 0x7a,0xf3,0x3b,0x5f,0x6c,0xaa,0x80,0x68,0xa, 0x3a,0x9, 0xb3,0x1f,0x34, ++0xb4,0x1, 0x2c,0x12,0x74,0xba,0x29,0xb1,0x0, 0xa, 0xb4,0x1, 0x6, 0x74,0x3, 0x39, ++0xb1,0x0, 0xa, 0x12,0x74,0xba,0x29,0x31,0x0, 0xa, 0xa5,0xbb,0x3, 0x6, 0xe4,0x7a, ++0x1b,0xb0,0x80,0x32,0xa5,0xbb,0x0, 0x2e,0x74,0x2, 0x7a,0x1b,0xb0,0x80,0x27,0x12, ++0x74,0xba,0x29,0xb1,0x0, 0xa, 0xbe,0xb0,0x2, 0x68,0x2, 0x70,0x14,0x74,0x1, 0x7a, ++0x1b,0xb0,0x7c,0x2f,0xb, 0xf0,0x7e,0x30,0x9, 0xac,0x23,0x19,0xa1,0x28,0xb2,0x80, ++0x5, 0x74,0x3, 0x7a,0x1b,0xb0,0x12,0x74,0xba,0x7e,0x1b,0xb0,0x39,0xb1,0x0, 0xa, ++0xb, 0xa0,0x12,0x72,0x27,0x38,0x93,0xda,0xf8,0x22,0xa, 0x3a,0x2d,0x3d,0x7d,0x2c, ++0x22,0x90,0x60,0x99,0xe4,0x93,0xbc,0xbf,0x22,0x7e,0x44,0x7f,0xff,0x7e,0x70,0x2, ++0xac,0x7a,0x22,0x7e,0x50,0x2, 0xac,0x5a,0x3e,0x24,0x22,0x7f,0x6, 0x2d,0x12,0x79, ++0x40,0x0, 0x28,0x22,0x7e,0x50,0x9, 0xac,0x5a,0x19,0x72,0x28,0xb2,0x22,0x7e,0x50, ++0x2, 0xac,0x5a,0x7f,0x6, 0x2d,0x12,0x22,0xa, 0x3a,0x19,0xf3,0x1f,0x46,0x74,0x1, ++0x19,0xb4,0x1f,0x50,0x22,0xca,0xd8,0xca,0x79,0x70,0xc, 0x7e,0x8, 0x30,0x3d,0x12, ++0x76,0x61,0x74,0xff,0x12,0x21,0x16,0x6c,0xff,0xc1,0x4e,0x7e,0x50,0x9, 0xac,0x5f, ++0x49,0xd2,0x29,0x62,0x1e,0xd4,0x1e,0xd4,0x1e,0xd4,0x1e,0xd4,0x49,0xc2,0x29,0x64, ++0x1e,0xc4,0x1e,0xc4,0x1e,0xc4,0x1e,0xc4,0x9, 0xe2,0x29,0x66,0x2e,0x24,0x28,0xae, ++0x12,0x25,0x6c,0x1b,0x28,0x30,0x7e,0x50,0x9, 0xac,0x5f,0x2e,0x24,0x28,0xb0,0x12, ++0x25,0x6c,0x1b,0x28,0x30,0x74,0x9, 0xac,0xbf,0x19,0xe5,0x28,0xb2,0x74,0x9, 0xac, ++0xbf,0x9, 0x75,0x29,0x67,0x19,0x75,0x28,0xb3,0x74,0x9, 0xac,0xbf,0x9, 0x75,0x29, ++0x68,0x19,0x75,0x28,0xb4,0x7c,0xae,0x5e,0xa0,0xf, 0xa, 0x2a,0x12,0x76,0x61,0xbd, ++0x23,0x48,0x2, 0xc1,0x4c,0x7c,0xea,0xa, 0x3e,0x9, 0xb3,0x29,0xbc,0xbe,0xb0,0x3, ++0x78,0x2, 0xc1,0x4c,0xb4,0x1, 0x7, 0x74,0xff,0x12,0x76,0x5a,0xc1,0x4c,0xa, 0x3e, ++0x9, 0x13,0x30,0x3d,0xa5,0xb9,0xff,0x38,0x74,0x1, 0x12,0x76,0x5a,0x74,0x9, 0xac, ++0xbf,0x59,0xd5,0x28,0xae,0x74,0x9, 0xac,0xbf,0x59,0xc5,0x28,0xb0,0x6c,0xdd,0x12, ++0x8f,0xcd,0x7e,0x50,0x9, 0xac,0x5d,0x7e,0x30,0x1b,0xac,0x3e,0x2d,0x12,0x2e,0x14, ++0x30,0x47,0x74,0x9, 0x12,0x1f,0xc1,0xb, 0xd0,0xbe,0xd0,0x3, 0x78,0xe1,0x80,0x6c, ++0xbe,0x10,0x3, 0x40,0x4, 0xe4,0x12,0x76,0x5a,0xa, 0x3e,0x9, 0x3, 0x30,0x3d,0x7e, ++0x10,0x9, 0xac,0x1, 0x7e,0x30,0x1b,0xac,0x3e,0x7d,0xb1,0x2d,0xb0,0x59,0xdb,0x30, ++0x47,0x59,0xcb,0x30,0x49,0x7e,0xb3,0x2a,0x9, 0x70,0x13,0xe4,0x12,0x76,0x72,0x12, ++0x76,0x69,0x74,0x1, 0x7e,0x30,0x1b,0xac,0x3e,0x12,0x76,0x72,0x80,0x1d,0x49,0x3b, ++0x30,0x47,0x12,0x76,0x69,0xa, 0x3e,0x9, 0x43,0x30,0x3d,0x7e,0x50,0x9, 0xac,0x45, ++0x7e,0x70,0x1b,0xac,0x7e,0x2d,0x32,0x49,0x33,0x30,0x49,0x74,0x9, 0xac,0xbf,0x59, ++0x35,0x28,0xb0,0xa, 0x3e,0x2e,0x34,0x30,0x3d,0x12,0xb7,0xc5,0xb, 0xf0,0x12,0x74, ++0xc1,0x28,0x2, 0xa1,0x1b,0xda,0x79,0xda,0xd8,0x22,0xa, 0x3e,0x19,0xb3,0x30,0x3d, ++0x22,0x90,0x60,0x99,0xe4,0x93,0xa, 0x3b,0x22,0x74,0x9, 0xac,0xbf,0x59,0x35,0x28, ++0xae,0x22,0x2e,0x14,0x30,0x47,0x6d,0x0, 0x7c,0xab,0x6d,0x33,0x6c,0x55,0x4c,0xaa, ++0x7e,0x90,0x9, 0x78,0xd, 0xac,0x95,0x7f,0x70,0x2d,0xf4,0xb, 0x7a,0x40,0x2d,0x34, ++0x80,0xc, 0xac,0x95,0x7f,0x70,0x2d,0xf4,0x69,0x47,0x0, 0x2, 0x2d,0x34,0xb, 0x50, ++0xbe,0x50,0x3, 0x40,0xd9,0x7e,0x24,0x0, 0x3, 0x8d,0x32,0x22,0x7c,0xab,0x7e,0x8, ++0x29,0xbc,0x12,0x72,0x27,0x28,0x1f,0xa, 0x3a,0x7f,0x70,0x2d,0xf3,0x7e,0x7b,0xb0, ++0xb4,0x2, 0x4, 0x74,0x1, 0x80,0x2, 0x74,0x3, 0x7a,0x7b,0xb0,0x74,0x3, 0x2d,0x31, ++0x7d,0x20,0x39,0xb1,0x0, 0xa, 0x22,0xca,0xd8,0xca,0x79,0x7e,0x34,0x61,0x43,0x7e, ++0x24,0x0, 0xff,0xb, 0x1a,0x40,0x90,0x61,0x35,0xe4,0x93,0x70,0x2, 0xe1,0x83,0x90, ++0x60,0xa7,0xe4,0x93,0x70,0x2, 0xe1,0x83,0x6c,0xff,0xe1,0x7c,0x7e,0x70,0x9, 0xac, ++0x7f,0x9, 0xe3,0x29,0xc, 0x5e,0xe0,0xf, 0x49,0xc3,0x29,0xa, 0x7e,0x14,0x60,0xd1, ++0x12,0x5f,0xec,0x2d,0x24,0xbd,0xc2,0x40,0x42,0x49,0xd3,0x29,0x8, 0x7d,0x3d,0x12, ++0xa8,0x1b,0x7c,0xdb,0x90,0x60,0xa7,0xe4,0x93,0xbc,0xbd,0x38,0xe, 0x7d,0x34,0x1b, ++0x34,0x12,0x77,0x88,0x7c,0xbe,0x12,0x76,0xac,0x80,0x3f,0x7e,0x70,0x2, 0xac,0x7d, ++0x2e,0x34,0x60,0xc5,0x12,0x91,0x1c,0x74,0x9, 0xac,0xbf,0x59,0xd5,0x29,0x8, 0x7e, ++0x34,0x60,0xcf,0x12,0x23,0xc9,0x12,0x77,0x88,0x80,0x1f,0xbd,0xc4,0x40,0x1b,0x7d, ++0x54,0x2e,0x54,0x0, 0xa, 0xbd,0xc5,0x40,0x5, 0x7c,0xbe,0x12,0x76,0xac,0x7d,0xc4, ++0x1b,0xc4,0x74,0x9, 0xac,0xbf,0x59,0xc5,0x29,0xa, 0xb, 0xf0,0x12,0x74,0xc1,0x28, ++0x2, 0xc1,0xfc,0xda,0x79,0xda,0xd8,0x22,0x74,0x9, 0xac,0xbf,0x59,0x35,0x29,0xa, ++0x22,0x7e,0x8, 0x26,0x5b,0x7e,0x34,0x2, 0x3a,0xe4,0x12,0x21,0x16,0x90,0x60,0x9c, ++0x93,0xa, 0x3b,0x3e,0x34,0x7e,0x8, 0x26,0x8c,0x74,0xff,0x12,0x21,0x16,0x90,0x60, ++0x9c,0xe4,0x93,0xa, 0x3b,0x3e,0x34,0x7e,0x8, 0x26,0xb4,0x74,0xff,0x12,0x21,0x16, ++0x90,0x60,0x9a,0x12,0x77,0xd2,0x7e,0x8, 0x27,0x76,0x74,0xff,0x2, 0x21,0x16,0x90, ++0x60,0x99,0xe4,0x93,0x7c,0x7b,0x74,0x9, 0xac,0x7b,0x22,0x6d,0x33,0x6c,0xaa,0x80, ++0x14,0xa, 0x2a,0x9, 0xb2,0x2a,0xdc,0x54,0x1, 0x78,0x5, 0x4e,0x70,0x1, 0x80,0x3, ++0x4e,0x70,0x10,0xb, 0xa0,0x7e,0x53,0x2a,0x74,0xbc,0x5a,0x38,0xe4,0x6c,0xaa,0x80, ++0x1f,0xa, 0x2a,0x9, 0xb2,0x2a,0xb9,0xbe,0xb0,0xd, 0x38,0x5, 0x4e,0x70,0xc0,0x80, ++0xd, 0xbe,0xb0,0x1b,0x38,0x5, 0x4e,0x60,0x8, 0x80,0x3, 0x4e,0x60,0x50,0xb, 0xa0, ++0x12,0x78,0x26,0x38,0xdc,0x22,0x7e,0xb3,0x2a,0x73,0xbc,0xba,0x22,0xca,0x3b,0x7e, ++0xb4,0x7f,0xff,0x7d,0xab,0x7d,0x8b,0x6d,0x22,0x7d,0x32,0x7d,0x9b,0x75,0x24,0x0, ++0x6c,0x99,0x7e,0x78,0x4, 0xfc,0x7e,0x8, 0x5, 0x7a,0xe4,0x7a,0xb3,0x8, 0x8, 0x7a, ++0xb3,0x8, 0x9, 0x7a,0xb3,0x26,0xf6,0x7a,0xb3,0x26,0xf8,0x7a,0xb3,0x26,0xf7,0x7a, ++0xb3,0x26,0xf9,0x6c,0xaa,0x80,0x5f,0x12,0x79,0x9c,0xb, 0x6a,0xc0,0xbd,0xca,0x58, ++0x2, 0x7d,0xac,0xbd,0xc3,0x8, 0x2, 0x7d,0x3c,0x2d,0x71,0x7d,0x60,0xb, 0x3a,0xd0, ++0xbd,0xd9,0x58,0x2, 0x7d,0x9d,0x7e,0x67,0x2a,0x53,0x7e,0x74,0x0, 0x3, 0xad,0x76, ++0xbd,0xc7,0x8, 0x2, 0x5, 0x24,0x12,0x79,0x89,0xb, 0x3a,0xd0,0xbd,0xcd,0x8, 0xb, ++0x7e,0xb3,0x26,0xf7,0x4, 0x7a,0xb3,0x26,0xf7,0x80,0x19,0x12,0x79,0x92,0xb, 0x3a, ++0xc0,0x6e,0xd4,0xff,0xff,0xb, 0xd4,0xbd,0xcd,0x58,0x9, 0x7e,0xb3,0x26,0xf9,0x4, ++0x7a,0xb3,0x26,0xf9,0xb, 0xa0,0x7e,0xb3,0x2a,0x74,0xbc,0xba,0x38,0x99,0x7a,0xa7, ++0x7, 0xfe,0x7a,0x37,0x8, 0x2, 0xe5,0x24,0x7a,0xb3,0x8, 0x9, 0x7a,0x97,0x8, 0x6, ++0x12,0x79,0x81,0x2d,0xf5,0x6c,0xaa,0x80,0x50,0x12,0x79,0x9c,0xb, 0x6a,0xd0,0xbd, ++0xd8,0x58,0x2, 0x7d,0x8d,0xbd,0xd2,0x8, 0x2, 0x7d,0x2d,0x7e,0x67,0x2a,0x51,0x7e, ++0x74,0x0, 0x3, 0xad,0x76,0xbd,0xd7,0x8, 0x2, 0xb, 0x90,0x12,0x79,0x89,0xb, 0x3a, ++0xc0,0xbd,0xdc,0x8, 0xb, 0x7e,0xb3,0x26,0xf6,0x4, 0x7a,0xb3,0x26,0xf6,0x80,0x17, ++0x12,0x79,0x92,0xb, 0x3a,0xd0,0x6d,0x99,0x9d,0x9c,0xbd,0xd9,0x58,0x9, 0x7e,0xb3, ++0x26,0xf8,0x4, 0x7a,0xb3,0x26,0xf8,0xb, 0xa0,0x12,0x78,0x26,0x38,0xab,0x7a,0x87, ++0x7, 0xfc,0x7a,0x27,0x8, 0x0, 0x7a,0x93,0x8, 0x8, 0x12,0x79,0x81,0x2d,0x15,0x6c, ++0xaa,0x80,0xe, 0x12,0xc7,0xac,0xb, 0x7a,0x90,0xbd,0x9b,0x58,0x2, 0x7d,0xb9,0xb, ++0xa0,0x12,0x78,0x26,0x38,0xed,0x7a,0xb7,0x8, 0x4, 0xbd,0x8a,0x58,0x2, 0x7d,0xa8, ++0x7a,0xa7,0x7, 0xf8,0xbd,0x32,0x58,0x2, 0x7d,0x32,0x7a,0x37,0x7, 0xfa,0xda,0x3b, ++0x22,0x7e,0xa3,0x2a,0x74,0x74,0x2, 0xa4,0x22,0x7e,0x74,0x62,0x10,0x7e,0x64,0x0, ++0xff,0x22,0x7e,0xf0,0x2, 0xac,0xfa,0x2d,0x7f,0x7d,0x6e,0x22,0x7e,0xf0,0x2, 0xac, ++0xfa,0x7f,0x67,0x2d,0xd7,0x22,0xca,0x3b,0x7f,0x31,0x7a,0xd, 0x24,0x7e,0x35,0x28, ++0x7a,0x35,0x2e,0x7e,0xd, 0x24,0x7f,0x13,0x12,0x7a,0x3c,0x7e,0x35,0x28,0x7a,0x35, ++0x2a,0x12,0x79,0x81,0x7e,0xd, 0x24,0x2d,0x15,0x7f,0x13,0x2d,0x35,0x12,0x7a,0xf6, ++0xda,0x3b,0x22,0x7e,0x37,0x2a,0x4f,0x1e,0x34,0x7a,0x35,0x28,0x7e,0x8, 0x4, 0xfc, ++0x7e,0x18,0x4, 0x0, 0x12,0x79,0xa6,0x7e,0x37,0x28,0x99,0xe, 0x34,0x7a,0x35,0x28, ++0x7e,0x8, 0x5, 0x7a,0x7e,0x18,0x4, 0x7e,0x12,0x79,0xa6,0x12,0x7a,0x15,0x12,0xa6, ++0x1e,0x2, 0x7a,0x4, 0xe4,0x7a,0xb3,0x3b,0x5e,0x7e,0xb3,0x28,0xa8,0x60,0x5, 0xe4, ++0x7a,0xb3,0x3b,0x5e,0x22,0xca,0x3b,0x7e,0xf3,0x2a,0x6e,0x12,0xc8,0xf2,0x6c,0xcc, ++0x80,0x13,0x7c,0x7c,0xac,0x7f,0x3e,0x34,0x7e,0xf, 0x13,0x8a,0x2d,0x13,0x7c,0xbd, ++0x12,0xa6,0xa6,0xb, 0xc0,0xbc,0xec,0x38,0xe9,0xda,0x3b,0x22,0xca,0x3b,0x7f,0x61, ++0x7f,0x50,0x7e,0x73,0x2a,0x6e,0xa, 0x37,0x3e,0x34,0xca,0x39,0x7f,0x16,0x7f,0x5, ++0x12,0x20,0xf1,0x1b,0xfd,0x6c,0xdd,0x12,0x7d,0x37,0x7a,0xb3,0x1f,0x6c,0x6c,0xcc, ++0x80,0x4a,0x12,0x7a,0xe5,0x78,0x43,0x74,0x2, 0xac,0xbc,0x7f,0x16,0x2d,0x35,0xb, ++0x1a,0xe0,0x7d,0x3f,0x12,0x21,0x48,0x7d,0x13,0x7d,0x3e,0x12,0x21,0x48,0xbd,0x31, ++0x58,0x2, 0x7d,0xfe,0xbe,0xe5,0x2e,0x8, 0x5, 0x7e,0xe5,0x2e,0x80,0xb, 0x6d,0x33, ++0x9e,0x35,0x2e,0xbd,0x3e,0x8, 0x2, 0x7d,0xe3,0x7d,0x3e,0x1a,0x26,0x1a,0x24,0x2f, ++0x41,0x7e,0xb3,0x1f,0x6c,0x4, 0x7a,0xb3,0x1f,0x6c,0xb, 0xc0,0x7e,0x73,0x2a,0x70, ++0xbc,0x7c,0x38,0xae,0x7e,0x73,0x1f,0x6c,0x4c,0x77,0x68,0x1d,0x12,0x7d,0x54,0x8, ++0x2, 0x7d,0x7f,0x6c,0xcc,0x80,0xa, 0x12,0x7a,0xe5,0x78,0x3, 0x12,0x7d,0x3f,0xb, ++0xc0,0x7e,0x73,0x2a,0x70,0xbc,0x7c,0x38,0xee,0xb, 0xd0,0xbe,0xd0,0x2, 0x50,0x2, ++0x41,0x57,0xda,0x3b,0x22,0xa, 0xec,0x9, 0x7e,0x2a,0xdc,0xa, 0x37,0x5e,0x34,0x0, ++0x1, 0xa, 0xed,0xbd,0x3e,0x22,0xca,0x3b,0x7f,0x61,0x7f,0x50,0x7e,0x14,0x23,0xd, ++0x7e,0x4, 0x0, 0xff,0x69,0x30,0x0, 0x2, 0xb, 0xa, 0x20,0x7a,0x1d,0x2c,0x7e,0x73, ++0x2a,0x6d,0xa, 0x37,0x3e,0x34,0xca,0x39,0x7f,0x16,0x7f,0x5, 0x12,0x20,0xf1,0x1b, ++0xfd,0x6c,0xdd,0x12,0x7d,0x37,0x7a,0xb3,0x1f,0x34,0x6c,0xcc,0x80,0x4f,0x12,0x7b, ++0xdb,0x40,0x48,0x12,0x7b,0xd1,0x50,0x43,0x74,0x2, 0xac,0xbc,0x7f,0x16,0x2d,0x35, ++0xb, 0x1a,0x10,0x7d,0x3f,0x12,0x21,0x48,0x7d,0x3, 0x7d,0x31,0x12,0x21,0x48,0xbd, ++0x30,0x58,0x2, 0x7d,0xf1,0xbe,0x15,0x2a,0x8, 0x5, 0x7e,0x15,0x2a,0x80,0xb, 0x6d, ++0x0, 0x9e,0x5, 0x2a,0xbd,0x1, 0x8, 0x2, 0x7d,0x10,0x7d,0x31,0x1a,0x26,0x1a,0x24, ++0x2f,0x41,0x7e,0xb3,0x1f,0x34,0x4, 0x7a,0xb3,0x1f,0x34,0xb, 0xc0,0x12,0x7b,0xca, ++0x38,0xac,0x7e,0x73,0x1f,0x34,0x4c,0x77,0x68,0x34,0x12,0x7d,0x54,0x8, 0x2, 0x7d, ++0x7f,0xbe,0x75,0x2a,0x8, 0x5, 0x7e,0x75,0x2a,0x80,0xb, 0x6d,0xee,0x9e,0xe5,0x2a, ++0xbd,0xe7,0x8, 0x2, 0x7d,0x7e,0x6c,0xcc,0x80,0xf, 0x12,0x7b,0xdb,0x40,0x8, 0x12, ++0x7b,0xd1,0x50,0x3, 0x12,0x7d,0x3f,0xb, 0xc0,0x12,0x7b,0xca,0x38,0xec,0xb, 0xd0, ++0xbe,0xd0,0x3, 0x50,0x2, 0x61,0x23,0xda,0x3b,0x22,0x7e,0x73,0x2a,0x6f,0xbc,0x7c, ++0x22,0x7c,0x1d,0x2e,0x10,0x2d,0xa5,0xe7,0xbc,0xab,0x22,0xa, 0xec,0x9, 0xae,0x2a, ++0xb9,0x7c,0x1d,0x2e,0x10,0x2c,0xa5,0xe7,0xbc,0xab,0x22,0x7e,0xb3,0x2a,0x6d,0xca, ++0x3b,0x7c,0xdb,0x7a,0x5, 0x39,0x7d,0x71,0x7a,0x25,0x37,0x7a,0x35,0x35,0x12,0x7e, ++0x2e,0x50,0x7c,0x6c,0xcc,0x80,0x11,0x7e,0x73,0x2a,0x6e,0x12,0x7d,0x16,0x12,0x7c, ++0xfc,0x7e,0x34,0x34,0x0, 0x12,0x7d,0x1f,0x12,0x7b,0xca,0x38,0xea,0x6c,0xcc,0x80, ++0x58,0x7e,0xa3,0x2a,0x6e,0x7c,0x7a,0x12,0x7d,0x16,0x75,0x3b,0x0, 0x80,0x27,0x7e, ++0xb3,0x39,0xf9,0xbe,0xb1,0x3b,0x7e,0x70,0x4, 0x28,0x8, 0xac,0x7c,0x49,0x43,0x3, ++0x6f,0x80,0x6, 0xac,0x7c,0x49,0x43,0x3, 0x71,0x7e,0x71,0x3b,0x74,0x2, 0xac,0x7b, ++0x59,0x43,0x34,0x50,0x5, 0x3b,0x7e,0xb3,0x2a,0x70,0xbe,0xb1,0x3b,0x38,0xd0,0x12, ++0x7f,0xdf,0x68,0xb, 0x7e,0x34,0x10,0x0, 0x74,0x2, 0xa4,0x59,0x35,0x34,0x4e,0x12, ++0x7c,0xfc,0x7e,0x34,0x34,0x50,0x12,0x7d,0x1f,0xbc,0xdc,0x38,0xa4,0x80,0x2c,0x7a, ++0xd3,0x25,0xb6,0x7e,0x73,0x2a,0x70,0x7a,0x73,0x25,0xb7,0xe4,0x7a,0xb3,0x25,0xb9, ++0x74,0x6, 0x7a,0xb3,0x25,0xb8,0x7a,0x77,0x25,0xba,0x7a,0x77,0x25,0xbe,0x7e,0x8, ++0x25,0xb6,0x7e,0x73,0x2b,0x1f,0xa, 0x37,0x12,0xe, 0x37,0x7d,0x37,0x12,0x8a,0x5a, ++0x7e,0x35,0x39,0x7a,0x37,0x25,0xbe,0xe4,0x7a,0xb3,0x25,0xb8,0x12,0x7d,0xd, 0x7a, ++0xd3,0x25,0xb6,0x7e,0xb3,0x2b,0x1d,0x70,0xf, 0xe4,0x7a,0xb3,0x25,0xb9,0x7a,0x77, ++0x25,0xba,0x7e,0x34,0x0, 0x20,0x80,0x16,0x74,0x1, 0x7a,0xb3,0x25,0xb9,0x7e,0x35, ++0x35,0x7a,0x37,0x25,0xba,0x7e,0x35,0x37,0x7a,0x37,0x25,0xbc,0x6d,0x33,0x7a,0x37, ++0x25,0xc0,0x7e,0x8, 0x25,0xb6,0x12,0xd, 0x7, 0xda,0x3b,0x22,0x74,0xc, 0x7a,0xb3, ++0x25,0xb8,0x74,0x1, 0x7a,0xb3,0x25,0xb6,0xe4,0x7a,0xb3,0x25,0xb9,0x7e,0x73,0x2a, ++0x6e,0x7a,0x73,0x25,0xb7,0x22,0xac,0x7c,0x3e,0x34,0x7d,0xf7,0x2d,0xf3,0x22,0x7a, ++0x37,0x25,0xba,0x7d,0x3f,0x7a,0x37,0x25,0xbc,0x7a,0x37,0x25,0xbe,0x7e,0x8, 0x25, ++0xb6,0x12,0x7, 0x9b,0xb, 0xc0,0x22,0x7e,0xf4,0x7f,0xff,0x9f,0x44,0xe4,0x22,0x74, ++0x2, 0xac,0xbc,0x7f,0x16,0x2d,0x35,0xb, 0x1a,0xe0,0x9d,0xe7,0x7f,0x15,0x2d,0x35, ++0x1b,0x1a,0xe0,0x22,0xa, 0x17,0x6d,0x0, 0x7f,0x14,0x12,0x1f,0x8d,0x7d,0x73,0x12, ++0x21,0x48,0x7d,0xe3,0x7d,0x3f,0x12,0x21,0x48,0xbd,0x3e,0x22,0x7e,0xf, 0x13,0x8a, ++0x7e,0x18,0x8, 0xa, 0xca,0x3b,0x7a,0x1d,0x2a,0x7f,0x30,0x12,0xc8,0x6c,0x7a,0x55, ++0x32,0x7e,0xb3,0x2b,0x1d,0xf5,0x2f,0xe4,0x7a,0xb3,0x2b,0x1d,0x7f,0x3, 0x7e,0x1d, ++0x2a,0x12,0x84,0x1d,0x12,0x7f,0xc4,0x12,0x4f,0xf7,0x75,0x2e,0x0, 0x12,0x56,0x75, ++0x30,0xf, 0xfd,0x74,0x1, 0x12,0x7e,0x73,0x7e,0x14,0x40,0x0, 0x7d,0x21,0x7d,0x7, ++0x12,0x7b,0xeb,0x12,0x7e,0x7b,0x6d,0x33,0x80,0x19,0x7e,0x35,0x30,0x3e,0x34,0x7f, ++0x3, 0x2d,0x13,0xb, 0xa, 0x20,0x7e,0xd, 0x2a,0x2d,0x13,0x12,0x85,0xcf,0x7e,0x35, ++0x30,0xb, 0x34,0x7a,0x35,0x30,0x7e,0x35,0x32,0xbe,0x35,0x30,0x38,0xdc,0x5, 0x2e, ++0xe5,0x2e,0xbe,0xb0,0x1, 0x40,0xb6,0xe5,0x2f,0x7a,0xb3,0x2b,0x1d,0xda,0x3b,0x22, ++0x7e,0xb3,0x2b,0x1e,0x70,0x1f,0x12,0x26,0x86,0x12,0x2f,0xe8,0x50,0xfb,0x12,0x7d, ++0x6c,0x12,0x7e,0x16,0x20,0x12,0x3, 0x12,0xb1,0x2c,0x74,0x2, 0x7a,0xb3,0x2b,0x1e, ++0xe4,0x7a,0xb3,0x16,0x91,0x22,0x12,0x7e,0x2e,0x50,0x3, 0xd2,0x12,0x22,0xc2,0x12, ++0x22,0x12,0xa8,0xd2,0x12,0x7e,0x3f,0x2, 0x7e,0x16,0x7a,0xb3,0x2b,0x20,0x7e,0xb3, ++0x39,0x50,0xb4,0x3, 0x8, 0x7e,0xb3,0x39,0xfa,0x70,0x2, 0xc3,0x22,0xd3,0x22,0x7e, ++0x8, 0x24,0xf2,0x7e,0x34,0x0, 0xc, 0xe4,0x12,0x21,0x16,0x12,0x7f,0xf1,0x12,0x7f, ++0xe8,0xa9,0xd1,0xcb,0x12,0x7e,0x73,0x7a,0x37,0x24,0xf6,0x7e,0x1f,0x3b,0x21,0x7a, ++0x37,0x24,0xf8,0x7e,0x1f,0x13,0x86,0x7a,0x37,0x24,0xfa,0x6d,0x33,0x12,0x7f,0xcd, ++0x2, 0xd, 0x7, 0x12,0x0, 0xe, 0x7e,0x1f,0x13,0x86,0x22,0x7e,0xa3,0x2a,0x6e,0xa, ++0x3a,0x3e,0x34,0x7e,0x8, 0x13,0x8e,0xe4,0x12,0x21,0x16,0x90,0x60,0x93,0x93,0xa, ++0x3b,0x7e,0xb3,0x2a,0x71,0xa, 0x2b,0x2d,0x23,0xa, 0x3a,0xad,0x32,0x7d,0x43,0x6c, ++0x77,0x80,0x1d,0xa, 0x27,0x2d,0x24,0x12,0x7f,0xd6,0xb, 0xa, 0x0, 0x7e,0x30,0x2, ++0xac,0x37,0x2e,0x14,0x13,0x8e,0xb, 0x18,0x20,0x2d,0x20,0x1b,0x18,0x20,0xb, 0x70, ++0xbc,0xa7,0x38,0xdf,0x22,0x12,0x39,0x15,0x12,0x9b,0xef,0x12,0x7f,0x1f,0x7e,0xb3, ++0x39,0x4e,0xb4,0x1, 0x1e,0x7e,0x34,0x61,0xc0,0x12,0x7f,0xbc,0x7e,0x24,0x0, 0x5, ++0xad,0x12,0x7a,0x17,0x28,0xa1,0x7e,0x14,0x61,0xc2,0x12,0x5a,0xad,0xad,0x32,0x7a, ++0x37,0x28,0xa3,0x7e,0xb3,0x3b,0x60,0x60,0x7, 0x14,0x7a,0xb3,0x3b,0x60,0x80,0x6, ++0x7e,0xb3,0x28,0xac,0x60,0x9, 0x12,0x7e,0x21,0x12,0x7f,0x43,0x12,0xb9,0xb9,0x7e, ++0xb3,0x28,0xad,0x60,0x9, 0x12,0xc0,0x5, 0x12,0xbf,0xb4,0x2, 0x7f,0x60,0x22,0x12, ++0xb1,0xba,0x60,0x17,0x12,0x7f,0x3c,0x7e,0x37,0x28,0xa1,0x3e,0x34,0x7a,0x37,0x28, ++0xa1,0x7e,0x37,0x28,0xa3,0x3e,0x34,0x7a,0x37,0x28,0xa3,0x22,0x74,0x1, 0x7a,0xb3, ++0x28,0xad,0x22,0x12,0xa9,0x57,0x6d,0x33,0x7a,0x37,0x38,0xab,0x6c,0xaa,0x80,0x5, ++0x12,0x7f,0xae,0xb, 0xa0,0x12,0x5f,0xf4,0x38,0xf6,0xe4,0x7a,0xb3,0x38,0x40,0x22, ++0x6c,0xaa,0x80,0x44,0x7e,0x70,0xc, 0xac,0x7a,0x12,0xc8,0x94,0xbe,0x34,0x3, 0xe8, ++0x8, 0x5, 0x12,0x7f,0xae,0x80,0x2f,0x7e,0x50,0xc, 0xac,0x5a,0x49,0x32,0x38,0x52, ++0x49,0x12,0x38,0x4e,0xbd,0x13,0x28,0xf, 0x7d,0x2, 0x2e,0x4, 0x38,0x52,0x7d,0x13, ++0xb, 0x15,0x1b,0x8, 0x10,0x80,0xf, 0xbe,0x34,0x0, 0x2, 0x28,0x9, 0x2e,0x24,0x38, ++0x52,0x1b,0x35,0x1b,0x28,0x30,0xb, 0xa0,0x12,0x5f,0xf4,0x38,0xb7,0x22,0x7e,0x50, ++0xc, 0xac,0x5a,0x49,0x32,0x38,0x4e,0x59,0x32,0x38,0x52,0x22,0x7e,0x24,0x0, 0xff, ++0xb, 0x1a,0x10,0x22,0x74,0x1, 0x12,0x14,0x13,0xe4,0x2, 0x0, 0x1e,0x7a,0x37,0x24, ++0xfc,0x7e,0x8, 0x24,0xf2,0x22,0x3e,0x24,0x7e,0xf, 0x3b,0x21,0x2d,0x12,0x22,0x90, ++0x60,0xaa,0xe4,0x93,0xbe,0xb0,0x1, 0x22,0x7e,0x73,0x2a,0x6d,0x7a,0x73,0x24,0xf2, ++0x22,0x7e,0x73,0x2a,0x6e,0x7a,0x73,0x24,0xf3,0x22,0xca,0xd8,0xca,0x79,0x90,0x60, ++0x50,0xe4,0x93,0x7c,0xdb,0x90,0x60,0x51,0xe4,0x93,0x7c,0xeb,0x7e,0x73,0x2a,0x74, ++0xbc,0x7e,0x28,0x4, 0x7c,0xf7,0x80,0x2, 0x7c,0xfe,0x7a,0xd3,0x2a,0x6d,0x7a,0xe3, ++0x2a,0x6e,0x7a,0xd3,0x2a,0x71,0x7a,0xe3,0x2a,0x72,0x7a,0xd3,0x2a,0x73,0x7a,0xe3, ++0x2a,0x74,0x90,0x60,0xa8,0xe4,0x93,0x7c,0xab,0x7a,0xa3,0x2a,0x77,0x90,0x60,0xa9, ++0xe4,0x93,0xa, 0x2b,0xa, 0x3d,0x9d,0x32,0x7c,0xb7,0x7a,0xb3,0x2a,0x6f,0xa, 0x2a, ++0xa, 0x3e,0x9d,0x32,0x7a,0x73,0x2a,0x70,0x90,0x60,0x91,0xe4,0x93,0x7a,0xb3,0x2a, ++0x78,0x90,0x60,0x94,0xe4,0x93,0x7a,0xb3,0x2a,0x79,0xa, 0x3d,0xca,0x39,0x7e,0x34, ++0x60,0x52,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x2a,0x7a,0x12,0x20,0xf1,0x1b,0xfd,0xa, ++0x3f,0xca,0x39,0x7e,0x34,0x60,0x75,0x7e,0x24,0x0, 0xff,0x7e,0x8, 0x2a,0x9d,0x12, ++0x20,0xf1,0x1b,0xfd,0x7e,0x34,0x0, 0x23,0xca,0x39,0x7e,0x34,0x60,0xd8,0x7e,0x24, ++0x0, 0xff,0x7e,0x8, 0x2b,0x21,0x12,0x20,0xf1,0x1b,0xfd,0x12,0x81,0xe1,0x12,0x83, ++0xd1,0x90,0x60,0xaa,0xe4,0x93,0x70,0x8, 0x7a,0xd3,0x2a,0x75,0x7a,0xe3,0x2a,0x76, ++0x12,0x6f,0xff,0x74,0x1, 0x12,0x45,0x6e,0xe4,0x7a,0xb3,0x2b,0x1, 0x7a,0xb3,0x2b, ++0x2, 0x12,0x77,0xdb,0x7a,0x37,0x2b,0xd, 0x74,0x3, 0x7a,0xb3,0x2b,0x3, 0xe4,0x7a, ++0xb3,0x2b,0x4, 0x74,0x2, 0x7a,0xb3,0x2b,0x5, 0x7e,0x34,0x61,0x59,0x12,0x23,0xc9, ++0x7a,0x37,0x2b,0x7, 0x74,0x4, 0x7a,0xb3,0x2b,0x6, 0x7e,0x34,0x0, 0xf, 0x7a,0x37, ++0x2b,0x9, 0x7e,0x34,0x20,0x5f,0x7a,0x37,0x2b,0xb, 0x90,0x61,0x1a,0xe4,0x93,0x7a, ++0xb3,0x2b,0x62,0x90,0x61,0x1b,0xe4,0x93,0x7a,0xb3,0x2b,0x10,0x90,0x61,0x1c,0xe4, ++0x93,0x7a,0xb3,0x2b,0x11,0x74,0x4, 0x7a,0xb3,0x2b,0x13,0x90,0x60,0xd5,0xe4,0x93, ++0x12,0x6c,0x13,0xe4,0x7a,0xb3,0x2b,0x1d,0x7a,0xb3,0x2b,0x1e,0x7e,0x34,0x61,0x22, ++0x12,0x23,0xc9,0x7a,0x37,0x2b,0x19,0x90,0x60,0xd3,0x93,0x7a,0xb3,0x2b,0x12,0x90, ++0x61,0x24,0xe4,0x93,0x7a,0xb3,0x2b,0x20,0x90,0x61,0x19,0xe4,0x93,0x7a,0xb3,0x2b, ++0x1f,0x7e,0x34,0x61,0x1e,0x12,0x23,0xc9,0x7a,0x37,0x2b,0x15,0x7e,0x34,0x61,0x20, ++0x12,0x23,0xc9,0x7a,0x37,0x2b,0x17,0x90,0x61,0x1d,0xe4,0x93,0x7a,0xb3,0x2b,0x14, ++0x7e,0x34,0x0, 0x30,0x7a,0x37,0x2b,0x6a,0x74,0x5, 0x7a,0xb3,0x2b,0x67,0x7e,0x34, ++0x0, 0x5, 0x7a,0x37,0x2b,0x68,0xe4,0x7a,0xb3,0x2b,0x66,0x7e,0x34,0x4, 0x6d,0x7a, ++0x37,0x2b,0x6c,0x74,0x1, 0x7a,0xb3,0x2b,0x63,0x74,0x6, 0x7a,0xb3,0x2b,0x64,0xe4, ++0x7a,0xb3,0x2b,0x65,0x74,0x1, 0x7a,0xb3,0x2b,0x60,0xe4,0x7a,0xb3,0x2b,0x61,0x7e, ++0x34,0x20,0x93,0x7a,0x37,0x2b,0x6e,0xa, 0x3e,0xca,0x39,0x7e,0x34,0x60,0xfb,0x7e, ++0x24,0x0, 0xff,0x7e,0x8, 0x2b,0x44,0x12,0x20,0xf1,0x1b,0xfd,0xda,0x79,0xda,0xd8, ++0x22,0x12,0x82,0x77,0x12,0x82,0x43,0x90,0x60,0x50,0xe4,0x93,0xa, 0x3b,0x7d,0x13, ++0x2e,0x14,0x2a,0x7a,0x6d,0x0, 0x9, 0xb3,0x2a,0x79,0x12,0x82,0x2a,0xa, 0x3b,0x7d, ++0x13,0x2e,0x14,0x2b,0x21,0x6d,0x0, 0x9, 0xb3,0x2b,0x20,0x12,0x82,0x2a,0xa, 0x1b, ++0x2e,0x14,0x2a,0x7c,0x12,0x82,0x37,0xe5,0x25,0x12,0x82,0x2e,0xa, 0x1b,0x2e,0x14, ++0x2b,0x23,0x12,0x82,0x37,0xe5,0x24,0x2, 0x21,0x16,0x7e,0x34,0x0, 0x2, 0x12,0x21, ++0x16,0x90,0x60,0x50,0xe4,0x93,0x22,0x6d,0x0, 0x90,0x60,0x91,0xe4,0x93,0xa, 0x3b, ++0x1b,0x35,0x22,0x6c,0xaa,0x6c,0x99,0x80,0xc, 0xa, 0xf9,0x9, 0xbf,0x2a,0x7a,0xbc, ++0xba,0x68,0x7, 0xb, 0x90,0x12,0x82,0x6f,0x38,0xef,0x12,0x82,0x6f,0x68,0x7, 0xb, ++0xa0,0xbe,0xa0,0x23,0x40,0xdf,0x7a,0xb, 0xa0,0x74,0x6e,0x7a,0x1b,0xb0,0x22,0x90, ++0x60,0x50,0xe4,0x93,0xbc,0xb9,0x22,0x7e,0x8, 0x0, 0x25,0x7e,0x18,0x0, 0x24,0x22, ++0x12,0x82,0xac,0x12,0x83,0x2b,0x75,0xcd,0x0, 0xa9,0xd6,0xeb,0xa9,0xd7,0xcd,0xc2, ++0xce,0x12,0x82,0x77,0x12,0x4e,0xc6,0x74,0x1, 0x12,0x82,0xe4,0xa9,0xc6,0xeb,0xa9, ++0xc7,0xcd,0xd2,0xce,0xe5,0x25,0x7e,0x71,0x24,0x2, 0x4f,0x84,0x74,0x81,0x7a,0xb3, ++0x3b,0x52,0x22,0x80,0x1d,0x12,0x82,0xac,0x12,0x83,0x34,0x68,0x5, 0xc2,0x1, 0x12, ++0x4f,0xae,0x7e,0xb3,0x34,0x3a,0xbe,0xb0,0x2, 0x68,0x18,0x20,0x1a,0x15,0xe4,0x12, ++0x82,0xe4,0x20,0x93,0xe0,0x12,0x82,0xac,0xa9,0xd1,0xcd,0xa9,0xc5,0xea,0x74,0x2, ++0x2, 0x82,0xe4,0x22,0x7c,0xab,0x7e,0xb3,0x3b,0x52,0xb4,0x81,0x38,0x4c,0xaa,0x78, ++0x5, 0xa9,0xd0,0x87,0x80,0x29,0xbe,0xa0,0x1, 0x78,0xf, 0xc2,0xaf,0xa9,0xd0,0xce, ++0xa9,0xc7,0xc9,0xa9,0xd1,0x87,0xd2,0xaf,0x80,0x15,0xbe,0xa0,0x2, 0x78,0x16,0xc2, ++0xaf,0x20,0x93,0x9, 0xa9,0xd0,0xce,0xa9,0xd7,0xc9,0xa9,0xd1,0x87,0xd2,0xaf,0x0, ++0x0, 0x0, 0x0, 0x0, 0x0, 0xe4,0x7a,0xb3,0x3b,0x52,0x22,0x12,0x83,0x34,0x68,0xfb, ++0x20,0x93,0xfd,0x22,0x7e,0xb3,0x34,0x3a,0xbe,0xb0,0x1, 0x22,0x74,0xc8,0x7a,0xb3, ++0x3b,0x56,0xc2,0x1a,0x80,0xa, 0x12,0x82,0xb3,0x30,0x1a,0x4, 0x75,0xe9,0xff,0x22, ++0x12,0x83,0x34,0x68,0xf1,0x22,0xd2,0x0, 0x80,0x12,0x30,0x0, 0xc, 0x12,0x83,0x34, ++0x68,0x7, 0xc2,0x0, 0xc2,0x1, 0x12,0x4f,0xae,0x12,0x82,0xb3,0x30,0x1a,0xeb,0x22, ++0x74,0x1, 0x12,0x83,0x8f,0x20,0x1a,0x6, 0x12,0x83,0x56,0x12,0x4f,0xc7,0x7e,0xb3, ++0x34,0x3a,0xb4,0x1, 0x6, 0x12,0x83,0x3c,0x12,0x4f,0xc7,0xe4,0x2, 0x83,0x8f,0xbe, ++0xb0,0x8, 0x50,0x3, 0x12,0x83,0xc8,0x22,0x30,0x1b,0x5, 0xc2,0x1, 0x12,0x4f,0xae, ++0xa9,0xd1,0xcd,0xa9,0xc5,0xea,0x30,0x1a,0x3, 0x20,0x1b,0x14,0x12,0x82,0xac,0xa9, ++0xd0,0xce,0xa9,0xc4,0xc9,0x74,0x2, 0x12,0x82,0xe4,0xa9,0xd0,0xce,0xa9,0xd4,0xc9, ++0xa9,0xc1,0xcd,0xd2,0x1, 0x2, 0x4f,0xae,0xa, 0x5b,0x2e,0x54,0x0, 0x8, 0xf5,0xcc, ++0x22,0xca,0xf8,0x7e,0x73,0x2a,0x78,0xa, 0x47,0x7e,0x73,0x2a,0x71,0xa, 0x57,0x2d, ++0x54,0x7e,0xa3,0x2a,0x73,0xbc,0xab,0x28,0x2, 0x7c,0xba,0x7e,0xf3,0x2a,0x72,0x7e, ++0xa3,0x2a,0x74,0xbc,0xaf,0x28,0x2, 0x7c,0xfa,0x75,0x25,0x12,0x7e,0x8, 0x2a,0xb9, ++0x7e,0x18,0x2a,0x7a,0x12,0xd, 0xd9,0x75,0x25,0x12,0x7e,0x8, 0x2a,0xdc,0x7e,0x18, ++0x2a,0x9d,0x7c,0xbf,0x12,0xf, 0x9c,0xda,0xf8,0x22,0x2, 0x23,0xd1,0x7f,0x60,0x7e, ++0xa3,0x2a,0x6d,0x7e,0xb3,0x2a,0x6e,0xa4,0x7d,0xf5,0x3e,0xf4,0x7f,0x1, 0x7d,0x3f, ++0xe4,0x12,0x21,0x16,0x7f,0x6, 0x7d,0x3f,0x12,0x21,0x16,0x7a,0xb3,0x16,0x91,0x22, ++0x7f,0x70,0x7e,0x33,0x2a,0x74,0xa, 0x43,0x7e,0x33,0x2a,0x73,0xa, 0x53,0x2d,0x54, ++0x3e,0x54,0x7c,0xab,0xe4,0x7a,0xb3,0x16,0x90,0x7f,0x1, 0xa, 0x3a,0x12,0x21,0x16, ++0x7f,0x7, 0xa, 0x3a,0x2, 0x21,0x16,0xca,0xd8,0xca,0x79,0x7c,0xfb,0x7f,0x51,0x7f, ++0x40,0x7f,0x15,0x12,0x84,0x40,0x12,0x85,0xc8,0x7e,0xe0,0x1, 0x12,0x57,0xbb,0x30, ++0x1b,0xfd,0x74,0x2, 0x12,0x0, 0x1e,0x7f,0x4, 0x12,0x85,0xd8,0x74,0x2, 0x12,0x0, ++0x1e,0x6c,0xdd,0x80,0x18,0x74,0x2, 0xac,0xbd,0x7f,0x14,0x2d,0x35,0xb, 0x1a,0x20, ++0x74,0x2, 0xac,0xbd,0x7f,0x5, 0x2d,0x15,0x12,0x85,0xcf,0xb, 0xd0,0x7e,0x73,0x2a, ++0x74,0xa, 0x7, 0x7e,0x63,0x2a,0x73,0xa, 0x16,0x2d,0x10,0xa, 0x2d,0xbd,0x21,0x48, ++0xd4,0x1b,0xe0,0x78,0xb7,0x7f,0x5, 0x7c,0xbf,0x2e,0x73,0x2a,0x73,0x12,0x85,0x36, ++0xda,0x79,0xda,0xd8,0x22,0x7e,0xb3,0x2b,0x2, 0x70,0x41,0x12,0x2f,0xe8,0x50,0xfb, ++0xe4,0x6c,0x77,0x6c,0x66,0x12,0x85,0x1d,0x7e,0x8, 0x6, 0xfc,0x7e,0x1f,0x6, 0xf4, ++0x7e,0xb3,0x2b,0x72,0x12,0x84,0x67,0x74,0x1, 0x7e,0x70,0x1, 0x7e,0x60,0x1, 0x12, ++0x85,0x1d,0x7e,0x8, 0x7, 0x7a,0x7e,0x1f,0x6, 0xf4,0x7e,0xb3,0x25,0xf0,0x12,0x84, ++0x67,0x74,0x2, 0x7a,0xb3,0x2b,0x2, 0xe4,0x7a,0xb3,0x16,0x90,0x22,0x7c,0x96,0x7c, ++0xa7,0x12,0x45,0x6e,0x7c,0xba,0x12,0x13,0xfc,0x74,0xa, 0x12,0x4f,0x4a,0x7c,0xb9, ++0x12,0x0, 0x1e,0x2, 0x56,0xee,0xca,0xd8,0xca,0x79,0x7c,0xf7,0x7f,0x70,0x12,0xbf, ++0x62,0x7c,0xeb,0x6c,0xdd,0x80,0x20,0x74,0x2, 0xac,0xbd,0x7f,0x67,0x2d,0xd5,0xb, ++0x6a,0x30,0x6d,0x22,0x74,0x4, 0x2f,0x11,0x14,0x78,0xfb,0xa, 0x1e,0x6d,0x0, 0x12, ++0x1f,0x3c,0x1b,0x6a,0x30,0xb, 0xd0,0xbc,0xfd,0x38,0xdc,0xda,0x79,0xda,0xd8,0x22, ++0xca,0x79,0x7f,0x51,0x7f,0x40,0x7e,0xa3,0x2a,0x74,0xa, 0x3a,0x7e,0xa3,0x2a,0x73, ++0xa, 0x7a,0x2d,0x73,0x7e,0xd, 0x2a,0x7c,0x7f,0x12,0x85,0x36,0xa, 0x3f,0x3e,0x34, ++0xca,0x39,0x7e,0x1d,0x2a,0x7f,0x4, 0x12,0x20,0xf1,0x1b,0xfd,0x7e,0xb3,0x2b,0x1, ++0xb4,0x1, 0x22,0x6c,0xaa,0x80,0x1a,0x7e,0x70,0x2, 0xac,0x7a,0x7f,0x5, 0x2d,0x13, ++0xb, 0xa, 0x20,0x7f,0x4, 0x2d,0x13,0xb, 0xa, 0x30,0x9d,0x32,0x1b,0xa, 0x30,0xb, ++0xa0,0xbc,0xfa,0x38,0xe2,0xda,0x79,0x22,0x7e,0x8, 0x2a,0x6d,0x2, 0x0, 0x2e,0xb, ++0xa, 0x30,0x2d,0x32,0x1b,0xa, 0x30,0x22,0x7e,0xb3,0x2a,0x73,0x7e,0x73,0x2a,0x74, ++0x2, 0x10,0xee,0xca,0xd8,0xca,0x79,0x7e,0xf0,0xa, 0x74,0x1, 0x7a,0xb3,0x2a,0xfa, ++0x12,0x29,0x95,0x7c,0xe7,0x80,0x62,0x12,0x26,0x86,0x12,0x57,0xaa,0x30,0x1b,0xfd, ++0x12,0x87,0x83,0x12,0x85,0xd8,0x74,0x2, 0x12,0x0, 0x1e,0x6c,0xdd,0x80,0x3d,0x7e, ++0x50,0x2, 0xac,0x5d,0x49,0x32,0x6, 0xfc,0xbe,0x34,0x14,0x78,0x50,0x14,0xa, 0x1d, ++0x2e,0x17,0x2a,0xfe,0x7e,0x19,0xb0,0xbe,0xb0,0x0, 0x28,0x1e,0x14,0x7a,0x19,0xb0, ++0x80,0x18,0xbe,0x34,0x19,0x28,0x28,0x10,0xa, 0x3d,0x12,0x46,0xc9,0xbe,0xb0,0xff, ++0x68,0x8, 0x4, 0x7a,0x39,0xb0,0x80,0x2, 0x1b,0xe0,0xb, 0xd0,0x12,0x86,0xe8,0xa, ++0x3d,0xbd,0x32,0x48,0xba,0x4c,0xee,0x68,0x8, 0x7c,0xaf,0x1b,0xf0,0x4c,0xaa,0x78, ++0x96,0xda,0x79,0xda,0xd8,0x22,0xca,0x79,0x7c,0xfb,0x7e,0x8, 0x24,0xf2,0x12,0x86, ++0xf7,0x7e,0xa3,0x2a,0x73,0x7e,0x73,0x2a,0x74,0x6c,0xee,0x80,0x1d,0xa, 0x2e,0x9, ++0x62,0x2a,0xdc,0xa, 0x26,0x12,0x87,0x76,0x7c,0x6b,0xbe,0x60,0x1c,0x50,0x9, 0xa, ++0x2e,0x12,0x86,0xde,0x19,0xb2,0x24,0xf2,0xb, 0xe0,0xbc,0x7e,0x38,0xdf,0x6c,0xee, ++0x80,0x1a,0xa, 0x2e,0x9, 0x62,0x2a,0xb9,0xbe,0x60,0x23,0x50,0xd, 0xa, 0x1e,0xa, ++0x27,0x2d,0x21,0x12,0x86,0xde,0x19,0xb2,0x25,0xe, 0xb, 0xe0,0xbc,0xae,0x38,0xe2, ++0x6c,0xee,0x7e,0x30,0xe, 0xac,0x3e,0x2e,0x14,0x24,0xf2,0x6d,0x0, 0x7c,0xbf,0x7c, ++0x7e,0x12,0x11,0xba,0xb, 0xe0,0xbe,0xe0,0x5, 0x40,0xe7,0xda,0x79,0x22,0x2e,0x27, ++0x2a,0xfe,0x7e,0x29,0xb0,0xa, 0x26,0x22,0x7e,0x73,0x2a,0x74,0xa, 0x37,0x7e,0x53, ++0x2a,0x73,0xa, 0x25,0x2d,0x23,0x22,0x7e,0x34,0x0, 0x46,0x74,0x3f,0x2, 0x21,0x16, ++0xca,0x79,0x7c,0xfb,0x7e,0x8, 0x1f,0x34,0x12,0x86,0xf7,0x7e,0xa3,0x2a,0x73,0x7e, ++0x63,0x2a,0x74,0x6c,0xee,0x80,0x1e,0xa, 0x2e,0x9, 0x72,0x2a,0xdc,0xbe,0x70,0x1c, ++0x50,0x11,0xa, 0x27,0x12,0x87,0x76,0x7c,0x7b,0x7e,0xb3,0x2a,0xfb,0xa, 0x27,0x19, ++0xb2,0x1f,0x34,0xb, 0xe0,0xbc,0x6e,0x38,0xde,0x6c,0xee,0x80,0x17,0xa, 0x3e,0x9, ++0x73,0x2a,0xb9,0xbe,0x70,0x23,0x50,0xa, 0x7e,0x63,0x2a,0xfb,0xa, 0x27,0x19,0x62, ++0x1f,0x50,0xb, 0xe0,0xbc,0xae,0x38,0xe5,0x6c,0xee,0x7e,0x30,0xe, 0xac,0x3e,0x2e, ++0x14,0x1f,0x34,0x6d,0x0, 0x7c,0xbf,0x7c,0x7e,0x12,0x11,0xf8,0xb, 0xe0,0xbe,0xe0, ++0x5, 0x40,0xe7,0xda,0x79,0x22,0x2e,0x24,0x20,0xab,0x7a,0x51,0x82,0x7a,0x41,0x83, ++0xe4,0x93,0x22,0x74,0x2, 0x12,0x0, 0x1e,0x7e,0x8, 0x6, 0xfc,0x22,0xb4,0xeb,0x5, ++0xe4,0x7a,0xb3,0x3a,0x3a,0x7e,0x73,0x3a,0x3a,0xa, 0x27,0x2e,0x24,0x0, 0x6, 0x12, ++0x87,0x7a,0x7c,0xab,0x7c,0xb7,0x4, 0x7a,0xb3,0x3a,0x3a,0xb4,0x3, 0xb, 0xe4,0x7a, ++0xb3,0x3a,0x3a,0x6d,0x33,0x7a,0x37,0x3a,0x37,0x75,0x1b,0xeb,0x7c,0xba,0x22,0x7e, ++0xa3,0x2f,0xa8,0x7e,0x70,0x4, 0xac,0x7a,0xb, 0x34,0xbe,0x37,0x3a,0x35,0x40,0x39, ++0x7e,0x37,0x3a,0x35,0xb, 0x34,0x7a,0x37,0x3a,0x35,0xbe,0x34,0x0, 0x1, 0x78,0x5, ++0x7e,0xb3,0x39,0x7c,0x22,0xbe,0x34,0x0, 0x2, 0x78,0x3, 0x7c,0xba,0x22,0xbe,0x34, ++0x0, 0x2, 0x50,0x9, 0x7d,0x23,0x1b,0x25,0x9, 0xb2,0x3b,0x4b,0x22,0x9e,0x34,0x0, ++0x3, 0x2e,0x37,0x2b,0xb9,0x7e,0x39,0xb0,0x22,0x74,0xff,0x22,0x7e,0xa3,0x39,0xe3, ++0x7c,0xba,0x4, 0x7a,0xb3,0x39,0xe3,0x7a,0xa3,0x39,0x3a,0x22,0xca,0x7b,0xca,0x2b, ++0xca,0x1b,0xca,0xb, 0xc0,0x83,0xc0,0x82,0x12,0x42,0x60,0xd0,0x82,0xd0,0x83,0xda, ++0xb, 0xda,0x1b,0xda,0x2b,0xda,0x7b,0x32,0xa9,0xc0,0x93,0x75,0x19,0x0, 0x32,0x7a, ++0xb3,0x39,0xe4,0xc4,0x54,0x7, 0xbe,0xb0,0x4, 0x68,0x3, 0xb4,0x2, 0x4, 0x74,0x3, ++0x80,0x7, 0x60,0x3, 0xb4,0x1, 0x7, 0x74,0x1, 0x7a,0xb3,0x39,0x50,0x22,0x74,0x1, ++0x7a,0xb3,0x39,0x50,0xe4,0x7a,0xb3,0x39,0xe4,0x22,0x7c,0xa7,0x7c,0x3b,0xa5,0xbb, ++0x0, 0x7, 0x7c,0xba,0x12,0x88,0x3f,0x80,0x2c,0xbe,0x30,0xeb,0x68,0x4, 0xa5,0xbb, ++0xec,0x9, 0x7c,0xb3,0x7c,0x7a,0x12,0x88,0xd9,0x80,0x1a,0xbe,0x30,0x80,0x40,0x15, ++0xbe,0x30,0xdf,0x38,0x10,0x7c,0xb3,0x24,0x80,0x7c,0x7a,0x12,0x88,0xb5,0xa5,0xbb, ++0x8f,0x3, 0x75,0x1a,0x1, 0xa5,0xbb,0xfc,0x5, 0x7c,0xba,0x2, 0x4e,0xf5,0x74,0x1, ++0x7a,0xb3,0x34,0x4f,0x22,0x7c,0x6b,0x2e,0x60,0xdd,0x68,0x1c,0x2e,0x60,0xfd,0x68, ++0x17,0x1b,0x61,0x68,0x13,0x2e,0x60,0xfa,0x68,0xe, 0x1b,0x60,0x68,0xa, 0x80,0x0, ++0xa, 0x2b,0x19,0x72,0x39,0x29,0xd2,0x11,0x22,0xbe,0xb0,0xeb,0x68,0x3, 0xb4,0xec, ++0x33,0x7e,0x27,0x3a,0x37,0x4d,0x22,0x78,0xe, 0xa5,0xbf,0xaa,0xa, 0x7e,0x24,0x0, ++0x1, 0x7a,0x27,0x3a,0x37,0x15,0x1b,0x7e,0x27,0x3a,0x37,0xbe,0x24,0x0, 0x1, 0x78, ++0x10,0xa5,0xbf,0x9, 0x6, 0x7e,0x34,0x0, 0x2, 0x80,0x2, 0x6d,0x33,0x7a,0x37,0x3a, ++0x37,0x75,0x1b,0xea,0x22,0x7c,0xab,0x4c,0xaa,0x78,0x5, 0x7e,0xb3,0x39,0xe4,0x22, ++0xbe,0xa0,0x3, 0x38,0x23,0x75,0x1e,0x0, 0x30,0xb, 0x6, 0x7e,0x18,0x33,0x21,0x80, ++0x4, 0x7e,0x18,0x33,0x5f,0x7a,0x1d,0x14,0x30,0xa, 0x2b,0xbe,0xa0,0x2, 0x78,0x26, ++0xe5,0x18,0x70,0x22,0x5, 0x18,0x80,0x1e,0xbe,0xa0,0x5e,0x38,0x26,0x75,0x1e,0x0, ++0x30,0xa, 0x13,0xbe,0xa0,0x21,0x78,0x7, 0xe5,0x18,0xb4,0x1, 0x2, 0x5, 0x18,0xe5, ++0x18,0xb4,0x2, 0x2, 0xc2,0xa, 0xa, 0x1a,0x7e,0x1d,0x14,0x2d,0x31,0x1b,0x34,0x7e, ++0x1b,0xb0,0x22,0xbe,0xa0,0xd3,0x68,0x5, 0xbe,0xa0,0xd4,0x78,0x12,0xbe,0xa0,0xd3, ++0x78,0x8, 0x6d,0x33,0x7a,0x37,0x3a,0x35,0x80,0x2, 0x15,0x1b,0x2, 0x87,0xbf,0xbe, ++0xa0,0xeb,0x68,0x5, 0xbe,0xa0,0xec,0x78,0x5, 0x7c,0xba,0x2, 0x87,0x8d,0xbe,0xa0, ++0x80,0x40,0xc, 0xbe,0xa0,0xdf,0x38,0x7, 0xa, 0x3a,0x9, 0xb3,0x38,0xa9,0x22,0xbe, ++0xa0,0xfc,0x78,0x5, 0x7e,0xb3,0x39,0x50,0x22,0xbe,0xa0,0xfd,0x78,0x17,0x6c,0xaa, ++0x7e,0xb3,0x28,0xa8,0x60,0x3, 0x4e,0xa0,0x1, 0x7e,0xb3,0x38,0x3f,0x60,0x3, 0x4e, ++0xa0,0x2, 0x7c,0xba,0x22,0xbe,0xa0,0xfe,0x78,0x5, 0x7e,0xb3,0x2b,0xf, 0x22,0x74, ++0xff,0x22,0x7c,0xab,0x12,0x47,0x10,0x7c,0xba,0x12,0x13,0xfc,0x2, 0x0, 0x1e,0x30, ++0x1b,0x8, 0x74,0x5, 0x7e,0x70,0x99,0x12,0x13,0x61,0x7e,0xb3,0x34,0x3a,0xb4,0x1, ++0x47,0x12,0x8a,0x49,0x49,0x35,0x34,0x3b,0x49,0x15,0x34,0x3d,0x6d,0x0, 0xbe,0x8, ++0x0, 0x0, 0x68,0x12,0xbe,0x70,0x0, 0x40,0xd, 0xbe,0x70,0x2, 0x38,0x8, 0x74,0x2, ++0x12,0x0, 0x1e,0x12,0x85,0xd8,0x7e,0xb3,0x34,0x39,0x4, 0x7a,0xb3,0x34,0x39,0x12, ++0x8a,0x51,0x28,0xe, 0x12,0x56,0xa2,0xb4,0x1, 0x4, 0x74,0x1, 0x80,0x6, 0x74,0x3, ++0x80,0x2, 0x74,0x2, 0x7a,0xb3,0x34,0x3a,0x22,0x7e,0xa3,0x34,0x39,0x74,0x4, 0xa4, ++0x22,0x7e,0x73,0x34,0x38,0xbe,0x73,0x34,0x39,0x22,0x7d,0xf3,0x6d,0xee,0x6c,0x99, ++0x80,0x3c,0x7c,0xb9,0x12,0x3e,0x8c,0x7d,0xd3,0x7d,0xcd,0x3e,0xc4,0x7f,0x57,0x2d, ++0xbc,0xb, 0x5a,0x10,0x1a,0x2, 0x1a,0x0, 0x7e,0x83,0x2b,0x20,0xa, 0x98,0x6d,0x88, ++0x7f,0x10,0x7f,0x4, 0x12,0x1f,0x20,0x74,0x6, 0x7f,0x1, 0x1e,0x14,0x1e,0x4, 0x50, ++0x3, 0x4e,0x20,0x80,0x14,0x78,0xf4,0x7d,0xc1,0x1b,0x5a,0xc0,0xb, 0x90,0x7e,0x83, ++0x2a,0x75,0xbc,0x89,0x38,0xbc,0x22,0x7f,0x20,0xb, 0x2a,0x10,0xb, 0x1a,0x0, 0x1b, ++0x2a,0x0, 0x1b,0x1a,0x10,0x22,0x7e,0x34,0x39,0x29,0x30,0x11,0x4b,0xc2,0x11,0x9, ++0x53,0x0, 0x2, 0x12,0x8b,0x9, 0x7a,0x27,0x2a,0x4f,0x9, 0x53,0x0, 0x3, 0x12,0x8b, ++0x9, 0x7a,0x27,0x2a,0x51,0x9, 0x53,0x0, 0x4, 0x12,0x8b,0x9, 0x7a,0x27,0x2a,0x53, ++0x7e,0x39,0x50,0xa, 0x25,0x3e,0x24,0x3e,0x24,0x7a,0x27,0x2a,0x5a,0x9, 0x53,0x0, ++0x1, 0xa, 0x25,0x3e,0x24,0x3e,0x24,0x7a,0x27,0x2a,0x5c,0x9, 0x73,0x0, 0x5, 0xa, ++0x37,0x12,0x4f,0x41,0x7a,0x37,0x2a,0x62,0x22,0xa, 0x25,0x3e,0x24,0x3e,0x24,0x3e, ++0x24,0x3e,0x24,0x22,0x7c,0x67,0x7c,0x7b,0xa5,0xbf,0x0, 0x17,0xbe,0x60,0x0, 0x28, ++0xf, 0x74,0x1, 0x7a,0xb3,0x2a,0x7, 0xe4,0x7a,0xb3,0x2a,0x9, 0x7a,0xb3,0x2a,0xa, ++0x2, 0x8b,0x83,0xa5,0xbe,0x0, 0x1d,0x6c,0xaa,0x80,0xe, 0x7e,0x60,0xff,0x7e,0x50, ++0x9, 0xac,0x5a,0x19,0x62,0x29,0x66,0xb, 0xa0,0x12,0x72,0x27,0x38,0xed,0x74,0x1, ++0x7a,0xb3,0x2a,0x6, 0x6c,0xaa,0x80,0x26,0x7e,0x30,0x9, 0xac,0x3a,0x2e,0x14,0x28, ++0xae,0xb, 0x18,0x20,0x12,0x8b,0xb, 0x1b,0x18,0x20,0x7e,0x30,0x9, 0xac,0x3a,0x2e, ++0x14,0x28,0xb0,0xb, 0x18,0x20,0x12,0x8b,0xb, 0x1b,0x18,0x20,0xb, 0xa0,0xbc,0x7a, ++0x38,0xd6,0x22,0x12,0x8b,0x9c,0x7e,0x8, 0x30,0x28,0xe4,0x12,0x21,0x16,0x90,0x60, ++0x99,0x12,0x8b,0xa0,0x7e,0x8, 0x30,0x5, 0xe4,0x2, 0x21,0x16,0x90,0x60,0x99,0xe4, ++0x93,0x7c,0x7b,0x74,0x2, 0xac,0x7b,0x22,0xca,0x79,0x7e,0xf3,0x2a,0x2, 0x7e,0xe3, ++0x2a,0x3, 0x7c,0xbf,0x7c,0x7e,0x12,0x8b,0x14,0x7c,0xbf,0x12,0x9f,0xc8,0x4c,0xee, ++0x78,0x17,0x12,0x8f,0x3c,0xca,0x59,0x7e,0x18,0x28,0xae,0x7e,0x8, 0x29,0x62,0x12, ++0x20,0xf1,0x1b,0xfd,0x12,0x8b,0xfa,0x80,0xe, 0x7e,0xb3,0x2a,0x9, 0x70,0x8, 0x12, ++0x8b,0xfa,0x7c,0xbf,0x12,0x8c,0x47,0x7c,0xbf,0x12,0x75,0x5, 0xbe,0xf0,0x0, 0x28, ++0x6, 0x74,0x1, 0x7a,0xb3,0x2a,0xb, 0xda,0x79,0x22,0x7e,0xa3,0x2a,0x2, 0x6c,0x77, ++0x80,0x34,0x7e,0x90,0x9, 0xac,0x97,0x9, 0x64,0x29,0x66,0xa, 0x26,0x9, 0xb2,0x29, ++0xbc,0x70,0x21,0x7e,0x30,0x1, 0x7e,0x50,0x9, 0xac,0x56,0x19,0x32,0x2f,0xad,0x49, ++0x14,0x28,0xae,0x59,0x12,0x2f,0xae,0x49,0x14,0x28,0xb0,0x59,0x12,0x2f,0xb0,0xe4, ++0x19,0xb2,0x2f,0xb2,0xb, 0x70,0xbc,0xa7,0x38,0xc8,0x22,0x7e,0xb3,0x39,0x79,0x70, ++0x3, 0x12,0x8c,0xcb,0x2, 0x8b,0xa8,0xca,0x3b,0x7c,0xfb,0x6c,0xee,0x80,0x6d,0x6c, ++0xdd,0x80,0x16,0x74,0x9, 0xac,0xbd,0x9, 0x65,0x29,0x66,0x74,0x9, 0xac,0xbe,0x9, ++0x75,0x28,0xb2,0xbc,0x67,0x68,0x7, 0xb, 0xd0,0x12,0x8c,0xc3,0x38,0xe5,0x12,0x8c, ++0xc3,0x28,0x4d,0x74,0x9, 0xac,0xbd,0x9, 0xc5,0x29,0x66,0x12,0x8f,0x1d,0x74,0x9, ++0xac,0xbd,0x12,0x8f,0x47,0x9d,0x32,0x12,0x21,0x48,0x2d,0x31,0x7a,0x35,0x24,0xa, ++0x3c,0x9, 0xb3,0x29,0xbc,0xb4,0x1, 0xe, 0x6d,0x33,0x74,0x2, 0xac,0xbc,0x59,0x35, ++0x30,0x5, 0x59,0x35,0x30,0x28,0x7e,0x35,0x24,0x7c,0xbd,0x7c,0x5e,0x7c,0x4c,0x12, ++0xa2,0x8, 0x7a,0x35,0x24,0x7c,0xbd,0x12,0x8e,0x84,0xb, 0xe0,0xbc,0xfe,0x38,0x8f, ++0xda,0x3b,0x22,0x90,0x60,0x99,0xe4,0x93,0xbc,0xbd,0x22,0xca,0x3b,0x6d,0x11,0x7e, ++0xe3,0x2a,0x2, 0x4c,0xee,0x78,0x23,0x6c,0xff,0x80,0x1a,0x74,0x2, 0xac,0xbf,0x12, ++0x8e,0x73,0x7e,0x70,0x9, 0xac,0x7f,0x19,0xa3,0x31,0x59,0x74,0x2, 0xa, 0x3f,0x19, ++0xb3,0x31,0xc3,0xb, 0xf0,0x12,0x74,0xc1,0x38,0xe1,0x12,0x99,0x60,0x7e,0x24,0x0, ++0x14,0xad,0x32,0x7d,0x43,0x2e,0x44,0x3, 0x20,0x6c,0xff,0xc1,0x4c,0x74,0x9, 0xac, ++0xbf,0x9, 0xd5,0x28,0xb2,0x5e,0xd0,0xf, 0x12,0x8c,0xc3,0x38,0x2, 0xc1,0x4a,0xa, ++0x1d,0x9, 0xb1,0x29,0xbc,0xbe,0xb0,0x1, 0x78,0x2, 0xc1,0x30,0x75,0x24,0x0, 0xc1, ++0x22,0x7e,0xa1,0x24,0x74,0x9, 0xa4,0x9, 0xc5,0x31,0x59,0xbc,0xcd,0x68,0x2, 0xc1, ++0x20,0x49,0x25,0x31,0x57,0x74,0x9, 0xac,0xbf,0x49,0x35,0x28,0xb0,0x9d,0x32,0x12, ++0x21,0x48,0x7d,0x3, 0x7e,0xa1,0x24,0x74,0x9, 0xa4,0x49,0x25,0x31,0x55,0x12,0x8f, ++0xbc,0x9d,0x32,0x12,0x21,0x48,0x2d,0x3, 0xa, 0x1c,0x9, 0xa1,0x31,0xc3,0xbe,0xa0, ++0x0, 0x28,0x17,0x7e,0x30,0x2, 0xac,0x3c,0x59,0x1, 0x31,0xaf,0xa, 0x1c,0x2e,0x14, ++0x31,0xc3,0x7c,0xba,0x14,0x7a,0x19,0xb0,0xc1,0x4a,0x74,0x2, 0xac,0xbc,0x49,0x15, ++0x31,0xaf,0xbe,0x14,0x0, 0x32,0x28,0x8, 0x7d,0x31,0x2d,0x34,0xbd,0x30,0x40,0x20, ++0xbe,0x14,0x0, 0x32,0x28,0x8, 0xbe,0x4, 0x0, 0x32,0x28,0x2, 0x80,0x6c,0x7d,0x31, ++0x2e,0x34,0x0, 0x32,0xbd,0x30,0x50,0x8, 0xbe,0x14,0x0, 0x32,0x28,0x2, 0x80,0x5a, ++0xbe,0x4, 0x0, 0xa0,0x28,0x50,0xa, 0x1d,0x9, 0xb1,0x29,0xbc,0x70,0x4, 0x74,0x3, ++0x80,0x2, 0x74,0x1, 0xa, 0x1d,0x19,0xb1,0x29,0xbc,0x74,0x3, 0xa, 0x1c,0x19,0xb1, ++0x29,0xc6,0xbe,0xe0,0x0, 0x28,0x63,0x1b,0xe0,0x12,0x8f,0xcd,0x7e,0x14,0x1f,0x34, ++0x74,0x9, 0x12,0x1f,0xc1,0x7e,0x70,0x9, 0xac,0x7e,0x12,0x8f,0xc5,0xac,0x3f,0x12, ++0x8e,0x7b,0x7e,0x34,0x1f,0x34,0x7e,0x30,0x9, 0xac,0x3e,0x12,0x8e,0x7b,0x1b,0xf0, ++0x74,0x2, 0xac,0xbc,0x80,0x4, 0x74,0x2, 0xac,0xbc,0x59,0x5, 0x31,0xaf,0x80,0x2a, ++0x5, 0x24,0x90,0x60,0x99,0xe4,0x93,0xbe,0xb1,0x24,0x28,0x2, 0xa1,0x31,0x80,0x1a, ++0x6d,0x11,0x74,0x2, 0xac,0xbd,0x12,0x8e,0x73,0x7e,0x30,0x9, 0xac,0x3d,0x19,0xa1, ++0x31,0x59,0x74,0x2, 0xa, 0x1d,0x19,0xb1,0x31,0xc3,0xb, 0xf0,0xbc,0xef,0x28,0x2, ++0xa1,0xd, 0xe4,0x7a,0xb3,0x16,0x92,0x90,0x60,0x99,0x12,0x8f,0x40,0xca,0x59,0x7e, ++0x18,0x28,0xae,0x7e,0x8, 0x31,0x55,0x12,0x20,0xf1,0x1b,0xfd,0x7a,0xe3,0x2a,0x2, ++0xda,0x3b,0x22,0x59,0x15,0x31,0xaf,0x7e,0xa0,0xff,0x22,0x2e,0x14,0x28,0xae,0x74, ++0x9, 0x2, 0x1f,0xc1,0x2, 0x8e,0x87,0xca,0xd8,0xca,0x79,0x7c,0xd4,0x7c,0xe5,0x7c, ++0xfb,0x7c,0xbd,0x12,0xa1,0x7f,0x7d,0xf3,0x7c,0xbe,0x7c,0x7d,0x12,0xa3,0x18,0x7d, ++0x3, 0x74,0x9, 0xac,0xbf,0x12,0x8f,0x47,0x12,0x8f,0x29,0x12,0x8f,0x31,0x7d,0x13, ++0x5d,0x10,0x7e,0x70,0x9, 0xac,0x7f,0x49,0xe3,0x29,0x62,0x74,0x9, 0xac,0xbe,0x49, ++0x25,0x28,0xae,0xbd,0x2e,0x28,0xf, 0x7d,0x53,0x2e,0x54,0x29,0x62,0x7d,0x2e,0x2d, ++0x21,0x1b,0x58,0x20,0x80,0x9, 0x2e,0x34,0x29,0x62,0x9d,0xe1,0x1b,0x38,0xe0,0x74, ++0x9, 0xac,0xbf,0x12,0x8f,0x1d,0x12,0x8f,0x31,0x7d,0x13,0x5d,0x10,0x7e,0x50,0x9, ++0xac,0x5f,0x49,0x32,0x29,0x64,0x74,0x9, 0xac,0xbe,0x49,0x5, 0x28,0xb0,0xbd,0x3, ++0x28,0xd, 0x7d,0x2, 0x2e,0x4, 0x29,0x64,0x2d,0x13,0x1b,0x8, 0x10,0x80,0x9, 0x2e, ++0x24,0x29,0x64,0x9d,0x31,0x1b,0x28,0x30,0xda,0x79,0xda,0xd8,0x22,0x49,0x25,0x29, ++0x64,0x74,0x9, 0xac,0xbe,0x49,0x35,0x28,0xb0,0x9d,0x32,0x12,0x21,0x48,0x7d,0x13, ++0x22,0x7d,0x3f,0xad,0x31,0x7c,0x76,0x7c,0x65,0xa, 0x24,0x22,0x90,0x60,0x99,0xe4, ++0x93,0x7c,0xab,0x74,0x9, 0xa4,0x22,0x49,0x25,0x29,0x62,0x74,0x9, 0xac,0xbe,0x49, ++0x35,0x28,0xae,0x22,0xca,0xf8,0x7e,0xa3,0x2a,0x2, 0x4c,0xaa,0x78,0x11,0x7e,0xb3, ++0x2a,0x3, 0xbe,0xb0,0x0, 0x28,0x13,0x74,0x1, 0x7a,0xb3,0x2a,0x7, 0x80,0xb, 0xbe, ++0xa0,0x0, 0x28,0x6, 0x74,0x1, 0x7a,0xb3,0x2a,0xb, 0x12,0x8f,0x3c,0xca,0x59,0x7e, ++0x18,0x28,0xae,0x7e,0x8, 0x29,0x8, 0x12,0x20,0xf1,0x1b,0xfd,0x90,0x61,0x35,0xe4, ++0x93,0xbe,0xb0,0x0, 0x28,0x23,0x6c,0xff,0x80,0x1a,0x12,0x8f,0xbc,0x12,0x90,0x19, ++0x74,0x9, 0xac,0xbf,0x59,0x35,0x29,0x8, 0x49,0x35,0x28,0xb0,0x12,0x5a,0xb5,0x12, ++0x77,0x88,0xb, 0xf0,0x12,0x74,0xc1,0x38,0xe1,0xda,0xf8,0x22,0x74,0x9, 0xac,0xbf, ++0x49,0x35,0x28,0xae,0x22,0x2e,0x34,0x28,0xae,0x7e,0x30,0x9, 0x22,0x7e,0x70,0x9, ++0xac,0x7f,0x2e,0x34,0x28,0xae,0x22,0x7c,0x9b,0x7f,0x71,0x7e,0x7b,0x80,0x4c,0x88, ++0x78,0x7, 0x7e,0xb, 0x90,0x7a,0x7b,0x90,0x22,0xa, 0x28,0x7e,0xb, 0x80,0xa, 0x38, ++0x9d,0x32,0x12,0x21,0x48,0xe5,0x2a,0xa, 0x2b,0xbd,0x32,0x8, 0x15,0x7e,0x7b,0xa0, ++0x7e,0xb, 0xb0,0xbc,0xba,0x7c,0xba,0x28,0x4, 0x2c,0xb9,0x80,0x2, 0x9c,0xb9,0x7a, ++0x7b,0xb0,0x7e,0x7b,0x70,0x7a,0xb, 0x70,0x22,0x7d,0xc3,0x7e,0x34,0x61,0x37,0x12, ++0x91,0x1c,0x90,0x61,0x35,0xe4,0x93,0x70,0x3, 0x7d,0x3c,0x22,0x90,0x61,0x36,0xe4, ++0x93,0xb4,0x1, 0x6, 0x7e,0x83,0x2a,0x70,0x80,0x4, 0x7e,0x83,0x2a,0x6f,0x12,0x92, ++0xb4,0xbe,0xc4,0x0, 0x3f,0x38,0x21,0x7e,0xe4,0x0, 0x3f,0x9d,0xec,0x7e,0x34,0x61, ++0x3b,0x12,0x5f,0x20,0x12,0x91,0xf, 0x7f,0x71,0x12,0x90,0xfe,0xbf,0x71,0x40,0x2, ++0x7f,0x71,0x9f,0x17,0x7f,0x71,0x1, 0xfb,0x12,0x5c,0x8f,0xbd,0x5c,0x38,0x26,0x7d, ++0xec,0x9d,0xe5,0x7e,0x34,0x61,0x3d,0x12,0x5f,0x20,0x12,0x91,0xf, 0x7f,0x71,0x90, ++0x61,0x3a,0xe4,0x93,0xa, 0x3b,0xbf,0x71,0x40,0x4, 0x7f,0x71,0x1b,0x7c,0x12,0x91, ++0x6, 0x2f,0x71,0x80,0x66,0x7d,0xb4,0xb, 0xb4,0x1e,0xb4,0x7d,0x5b,0x1b,0x54,0xbd, ++0x5c,0x40,0xc, 0x7d,0xf5,0x9d,0xfc,0x6d,0xee,0x7e,0x34,0x61,0x3f,0x80,0xa, 0x7d, ++0xfc,0x9d,0xfb,0x6d,0xee,0x7e,0x34,0x61,0x41,0x12,0x7f,0xbc,0x7f,0x17,0x12,0x1f, ++0x31,0x7f,0x71,0x12,0x8f,0x35,0x7f,0x71,0xbd,0x5c,0x7d,0x3d,0x40,0xc, 0x1e,0x34, ++0x1b,0x34,0x6d,0x22,0x9f,0x17,0x7f,0x71,0x80,0x6, 0x1e,0x34,0x6d,0x22,0x2f,0x71, ++0x12,0x90,0xfe,0x6d,0x22,0xbf,0x71,0x50,0x4, 0x7f,0x71,0x80,0xe, 0x90,0x61,0x3a, ++0xe4,0x93,0x12,0x91,0x6, 0xbf,0x71,0x28,0x2, 0x7f,0x71,0x7d,0x3f,0x22,0x90,0x61, ++0x39,0xe4,0x93,0xa, 0x3b,0x22,0xa, 0x2b,0x7d,0x3d,0x9d,0x32,0x6d,0x22,0x22,0xad, ++0xfe,0x6d,0xee,0x7d,0x3f,0x7d,0x2e,0x7c,0x76,0x7c,0x65,0x22,0x7e,0x24,0x0, 0xff, ++0xb, 0x1a,0xd0,0x22,0xca,0x3b,0x7f,0x70,0x7c,0xe7,0x7c,0xdb,0x7e,0xc0,0x4, 0x7e, ++0xb3,0x2a,0x6d,0xf5,0x28,0x7e,0xb3,0x2a,0x6e,0xf5,0x27,0x7e,0x34,0x62,0xa, 0x12, ++0x91,0x1c,0x6c,0xff,0x12,0x92,0xbc,0x7f,0x51,0xe5,0x28,0xa, 0x3b,0x1b,0x34,0xa, ++0xcd,0xbd,0xc3,0x58,0x14,0xe5,0x27,0xa, 0x3b,0x1b,0x34,0xa, 0xce,0xbd,0xc3,0x58, ++0x8, 0x4c,0xee,0x68,0x4, 0x4c,0xdd,0x78,0x3, 0x4e,0xf0,0x10,0xb, 0x5a,0x30,0x7e, ++0x14,0x62,0xa, 0x12,0x5f,0xec,0xbd,0x32,0x8, 0xc, 0x7e,0x27,0x28,0x8a,0xbe,0x24, ++0x3, 0x20,0x8, 0x2, 0x41,0x7d,0xb, 0xa, 0xc0,0x1e,0xc4,0xbd,0x3c,0x8, 0xc, 0x7e, ++0xc7,0x28,0x8a,0xbe,0xc4,0x3, 0x20,0x58,0x2, 0x41,0x7d,0x6c,0xaa,0x7c,0x8d,0x80, ++0x1e,0x7c,0x9e,0xbe,0x80,0x0, 0x48,0x13,0x7e,0xb3,0x2a,0x6d,0xbc,0xb8,0x8, 0xb, ++0x12,0x2f,0x2b,0xbd,0x3d,0x58,0x14,0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0x1b,0x80,0x1a, ++0x2c,0x1a,0x3d,0x9d,0x32,0x1a,0xc8,0xbd,0xc3,0x18,0xd6,0xbc,0xca,0x18,0x5, 0x4e, ++0xf0,0x1, 0x41,0x7d,0x6c,0xaa,0x7c,0x8d,0x80,0x1e,0x7c,0x9e,0xbe,0x80,0x0, 0x48, ++0x13,0x7e,0xb3,0x2a,0x6d,0xbc,0xb8,0x8, 0xb, 0x12,0x2f,0x2b,0xbd,0x3d,0x58,0x14, ++0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0xb, 0x80,0x1a,0x2c,0x1a,0x3d,0x2d,0x32,0x1a,0xc8, ++0xbd,0xc3,0x48,0xd6,0xbc,0xca,0x18,0x5, 0x4e,0xf0,0x2, 0x80,0x70,0x6c,0xaa,0x7c, ++0x9e,0x80,0x1e,0x7c,0x8d,0xbe,0x90,0x0, 0x48,0x13,0x7e,0xb3,0x2a,0x6e,0xbc,0xb9, ++0x8, 0xb, 0x12,0x2f,0x2b,0xbd,0x3d,0x58,0x14,0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0x1b, ++0x90,0x1a,0x2c,0x1a,0x3e,0x9d,0x32,0x1a,0xc9,0xbd,0xc3,0x18,0xd6,0xbc,0xca,0x18, ++0x5, 0x4e,0xf0,0x4, 0x80,0x37,0x6c,0xaa,0x7c,0x9e,0x80,0x1e,0x7c,0x8d,0xbe,0x90, ++0x0, 0x48,0x13,0x7e,0xb3,0x2a,0x6e,0xbc,0xb9,0x8, 0xb, 0x12,0x2f,0x2b,0xbd,0x3d, ++0x58,0x14,0xb, 0xa0,0x80,0x2, 0xb, 0xa0,0xb, 0x90,0x1a,0x2c,0x1a,0x3e,0x2d,0x32, ++0x1a,0xc9,0xbd,0xc3,0x48,0xd6,0xbc,0xca,0x18,0x3, 0x4e,0xf0,0x8, 0x4c,0xff,0x68, ++0x2e,0x7e,0x7b,0xb0,0xbc,0xbd,0x40,0x3, 0x7a,0x7b,0xd0,0x29,0xb7,0x0, 0x2, 0xbc, ++0xbd,0x38,0x4, 0x39,0xd7,0x0, 0x2, 0x29,0xb7,0x0, 0x1, 0xbc,0xbe,0x40,0x4, 0x39, ++0xe7,0x0, 0x1, 0x29,0xb7,0x0, 0x3, 0xbc,0xbe,0x38,0x4, 0x39,0xe7,0x0, 0x3, 0x7c, ++0xbf,0xda,0x3b,0x22,0x7e,0x90,0x40,0xac,0x89,0x1b,0x44,0x22,0x7c,0xbd,0x7c,0x7e, ++0x7e,0x13,0x2a,0x6e,0xac,0x1b,0x3e,0x4, 0x7e,0x30,0x2, 0xac,0x37,0x2d,0x10,0x7e, ++0x1f,0x13,0x8a,0x2d,0x31,0x22,0xca,0x3b,0x12,0x67,0xe4,0x74,0x9, 0xac,0xbf,0x7d, ++0xd5,0x2e,0xd4,0x27,0x76,0x6d,0xcc,0x7e,0x37,0x2a,0x66,0x7a,0x35,0x43,0xe4,0x39, ++0xb6,0x0, 0x6, 0x7e,0x70,0x2, 0xac,0x7e,0x9, 0xb3,0x26,0xfa,0xf5,0x31,0x9, 0xb3, ++0x26,0xfb,0xf5,0x32,0x7e,0x73,0x2a,0x6e,0x7c,0x6d,0x7e,0x8, 0x0, 0x35,0x12,0x95, ++0x30,0xf5,0x33,0xe5,0x31,0x7e,0x73,0x2a,0x6d,0x7c,0x6c,0x7e,0x8, 0x0, 0x34,0x12, ++0x95,0x30,0x7c,0xab,0xe5,0x34,0x7e,0x71,0x35,0x12,0x92,0xc0,0x7a,0x35,0x3f,0x7e, ++0x34,0x15,0x9e,0x7a,0x35,0x41,0x85,0x34,0x39,0x85,0x35,0x3a,0x7a,0xa1,0x3b,0x85, ++0x33,0x3c,0x7e,0xb3,0x2a,0x59,0xf5,0x3d,0x75,0x3e,0x0, 0x7e,0x8, 0x0, 0x39,0x12, ++0x95,0x83,0x7d,0x23,0x6d,0x33,0x7e,0x97,0x15,0xa0,0x6d,0x88,0x2f,0x41,0x7e,0x37, ++0x15,0xa2,0x6d,0x22,0x7d,0x3, 0x6d,0x11,0x7e,0x37,0x15,0xa4,0x2f,0x10,0x7a,0x1d, ++0x2b,0x7e,0x37,0x15,0xa6,0x7d,0x23,0x6d,0x33,0x7e,0xb7,0x15,0xa8,0x6d,0xaa,0x2f, ++0x51,0x7f,0x74,0xa, 0x4c,0xe5,0x31,0xa, 0x5b,0x9d,0x54,0xf5,0x2f,0x81,0x77,0xa, ++0x4d,0xe5,0x32,0xa, 0x5b,0x9d,0x54,0xf5,0x30,0x81,0x61,0xe5,0x2f,0xbe,0xb0,0x0, ++0x58,0x2, 0x81,0x5f,0x7e,0x73,0x2a,0x6d,0xbe,0x71,0x2f,0x18,0x2, 0x81,0x5f,0xe5, ++0x30,0xbe,0xb0,0x0, 0x58,0x2, 0x81,0x5f,0x7e,0x73,0x2a,0x6e,0xbe,0x71,0x30,0x18, ++0x2, 0x81,0x5f,0xe5,0x2f,0x7e,0x71,0x30,0x12,0x2c,0x63,0x7e,0x53,0x2a,0x59,0xa, ++0x25,0x9d,0x32,0x7a,0x35,0x37,0xbe,0x34,0x0, 0x0, 0x18,0x2, 0x81,0x5f,0x7e,0x35, ++0x43,0xbe,0x35,0x37,0x18,0xd, 0x7f,0x16,0x2e,0x34,0x0, 0x6, 0x7e,0x1b,0xb0,0x4, ++0x7a,0x1b,0xb0,0xe5,0x31,0xa, 0x2b,0xe5,0x2f,0x12,0x95,0x15,0x18,0xb, 0xe5,0x32, ++0xa, 0x2b,0xe5,0x30,0x12,0x95,0x15,0x8, 0x56,0xe5,0x2f,0x7e,0x71,0x30,0x7c,0x6e, ++0x12,0x96,0x2f,0xf5,0x36,0xb4,0x2, 0xc, 0x7e,0x35,0x37,0x7d,0x23,0xe, 0x24,0x9d, ++0x32,0x7a,0x35,0x37,0xe5,0x36,0xbe,0xb0,0x2, 0x68,0x5, 0xe5,0x36,0xb4,0x1, 0x2f, ++0x7e,0x45,0x37,0x7d,0x34,0x1a,0x26,0x1a,0x24,0xe5,0x2f,0x12,0x95,0x6, 0x7f,0x1, ++0x7e,0x1d,0x2b,0x9f,0x10,0x7a,0x1d,0x2b,0x7d,0x34,0x1a,0x26,0x1a,0x24,0xe5,0x30, ++0x12,0x95,0x6, 0x9f,0x51,0x12,0x95,0xd, 0x9f,0x41,0x12,0x95,0xd, 0x9f,0x71,0x5, ++0x30,0xa, 0x2d,0xe5,0x32,0xa, 0x3b,0x2d,0x32,0x1a,0x27,0xe5,0x30,0x1a,0x3b,0xbd, ++0x32,0x18,0x2, 0x61,0x9b,0x5, 0x2f,0xa, 0x2c,0xe5,0x31,0xa, 0x3b,0x2d,0x32,0x1a, ++0x27,0xe5,0x2f,0x1a,0x3b,0xbd,0x32,0x18,0x2, 0x61,0x8f,0xbe,0x48,0x0, 0x0, 0x78, ++0x2, 0xb, 0x4c,0xbe,0x78,0x0, 0x0, 0x78,0x2, 0xb, 0x7c,0x7e,0x1d,0x2b,0x7f,0x4, ++0x12,0x95,0x21,0x1b,0x6a,0x30,0x7f,0x15,0x7f,0x7, 0x12,0x95,0x21,0x79,0x36,0x0, ++0x2, 0x7e,0xb3,0x2a,0x65,0x60,0xd, 0x1e,0xf4,0x1e,0xe4,0x50,0x4, 0x4e,0xf4,0x80, ++0x0, 0x14,0x78,0xf3,0xbe,0x78,0x0, 0x7f,0x28,0x4, 0x7e,0x78,0x0, 0x7f,0x7d,0x3f, ++0x39,0x76,0x0, 0x5, 0x74,0x9, 0xac,0xbe,0x9, 0x75,0x27,0x7c,0x39,0x76,0x0, 0x6, ++0xbe,0x70,0xf, 0x28,0x6, 0x74,0xf, 0x39,0xb6,0x0, 0x6, 0x7e,0xa1,0x31,0x7e,0x70, ++0x9, 0xac,0x7f,0x19,0xa3,0x27,0x7d,0x7e,0xa1,0x32,0x7e,0x70,0x9, 0xac,0x7f,0x19, ++0xa3,0x27,0x7e,0xda,0x3b,0x22,0x1a,0x1b,0x1a,0x2, 0x2, 0x1f,0x20,0x7e,0x35,0x37, ++0x1a,0x26,0x1a,0x24,0x22,0x1a,0x3b,0x9d,0x32,0x12,0x21,0x48,0xbe,0x34,0x0, 0x1, ++0x22,0x74,0x6, 0x2f,0x11,0x14,0x78,0xfb,0x12,0x1f,0x3c,0x2e,0x18,0x0, 0x20,0x22, ++0xca,0xf8,0x7c,0xf6,0x7c,0x87,0x7c,0x9b,0xa, 0x2f,0x7d,0x32,0x3e,0x34,0xb, 0x34, ++0x7c,0xb7,0xbc,0xf9,0x38,0x14,0xa, 0xf8,0x1b,0xf4,0xa, 0x3f,0x9d,0xf3,0xa, 0x39, ++0xbd,0x3f,0x18,0x6, 0x7c,0xab,0xa, 0x39,0x80,0x1d,0xbc,0xf9,0x28,0xd, 0xa, 0x39, ++0xa, 0x5f,0x2d,0x53,0xb, 0x54,0x7c,0xab,0xe4,0x80,0x10,0xa, 0x3f,0xa, 0x58,0x2d, ++0x53,0xa, 0x39,0x9d,0x53,0x7c,0xab,0x9d,0x32,0x7c,0xb7,0x7a,0xb, 0xb0,0x7c,0xba, ++0xda,0xf8,0x22,0x12,0xc, 0x29,0x7e,0x37,0x15,0x9e,0x22,0x7e,0xa3,0x28,0x84,0xe4, ++0x7a,0xb3,0x30,0x1b,0x6c,0x33,0x80,0x3d,0x7e,0x70,0x2, 0xac,0x73,0x9, 0x23,0x26, ++0xfb,0x7e,0x10,0x1, 0x6c,0x0, 0x80,0x27,0xbc,0x3, 0x68,0x21,0x7e,0x70,0x2, 0xac, ++0x70,0x9, 0x93,0x26,0xfb,0xa, 0x29,0xa, 0x32,0x12,0x95,0x17,0x18,0x2, 0xb, 0x10, ++0xbe,0x10,0x2, 0x40,0x8, 0x74,0x2, 0x7a,0xb3,0x30,0x1b,0x80,0x6, 0xb, 0x0, 0xbc, ++0xa0,0x38,0xd5,0xb, 0x30,0xbc,0xa3,0x38,0xbf,0x22,0xca,0xf8,0x7e,0xf3,0x2a,0x70, ++0x7a,0x37,0x1f,0x3a,0x7e,0x34,0x15,0x9e,0x7a,0x37,0x1f,0x3c,0xe4,0x7a,0xb3,0x1f, ++0x34,0x7a,0xb3,0x1f,0x35,0x7e,0x73,0x2a,0x6f,0x7a,0x73,0x1f,0x36,0x7a,0xf3,0x1f, ++0x37,0x7a,0xb3,0x1f,0x38,0x7a,0xb3,0x1f,0x39,0x7e,0x8, 0x1f,0x34,0x12,0x95,0x83, ++0x6d,0x22,0x7d,0x3, 0x6d,0x11,0x7e,0x37,0x15,0xa0,0x2f,0x10,0x7e,0x33,0x1f,0x36, ++0x6d,0x0, 0x12,0x1f,0x3c,0xa, 0x1f,0x6d,0x0, 0x12,0x1f,0x3c,0xda,0xf8,0x22,0x7c, ++0xa6,0x7c,0x37,0x7c,0x2b,0xe4,0x6c,0x11,0x80,0x46,0xbc,0xa1,0x68,0x40,0x1a,0x41, ++0x3e,0x44,0x9, 0x4, 0x26,0xfb,0xa, 0x20,0xa, 0x33,0x9d,0x32,0x12,0x21,0x48,0x7c, ++0x7, 0x1a,0x41,0x3e,0x44,0x9, 0x74,0x26,0xfa,0xa, 0x27,0xa, 0x32,0x9d,0x32,0x12, ++0x21,0x48,0x7c,0x97,0xbe,0x90,0x1, 0x18,0x8, 0xbe,0x0, 0x1, 0x18,0x3, 0x74,0x1, ++0x22,0xbe,0x90,0x2, 0x18,0x8, 0xbe,0x0, 0x2, 0x18,0x3, 0x74,0x2, 0x22,0xb, 0x10, ++0x7e,0x83,0x28,0x84,0xbc,0x81,0x18,0xb2,0x22,0x2, 0x96,0x8c,0xca,0x79,0x6c,0xff, ++0x7e,0xd7,0x2a,0x5a,0x6c,0xee,0x80,0x35,0x7c,0xbe,0x12,0x38,0x82,0xbd,0x3d,0x48, ++0x2a,0x7c,0xbe,0x12,0x2d,0xb6,0x60,0x23,0x7e,0xc4,0x0, 0x9, 0xca,0xc9,0x7e,0x70, ++0x9, 0xac,0x7e,0x2e,0x34,0x27,0x76,0x6d,0x22,0x7e,0x30,0x9, 0xac,0x3f,0x2e,0x14, ++0x28,0xae,0x6d,0x0, 0x12,0x20,0xf1,0x1b,0xfd,0xb, 0xf0,0xb, 0xe0,0x12,0x3f,0xb2, ++0x38,0xc6,0x7a,0x73,0x28,0x93,0x7a,0xf3,0x2a,0x2, 0xda,0x79,0x22,0x7d,0x13,0x7d, ++0x32,0x6d,0x22,0x74,0x6, 0x2f,0x11,0x14,0x78,0xfb,0xb, 0x14,0x12,0x1f,0x3a,0x7d, ++0x53,0xbe,0x54,0x0, 0xff,0x28,0x4, 0x7e,0x54,0x0, 0x40,0x22,0x7a,0x37,0x1f,0x38, ++0x7e,0x34,0x15,0xa8,0x7a,0x37,0x1f,0x3c,0x7e,0x34,0x15,0x9e,0x7a,0x37,0x1f,0x3a, ++0x7e,0x73,0x2a,0x6f,0x7a,0x73,0x1f,0x35,0x7e,0x73,0x2a,0x70,0x7a,0x73,0x1f,0x34, ++0x7e,0x37,0x2a,0x5c,0x7a,0x37,0x1f,0x3e,0x7e,0x37,0x2a,0x5e,0x7a,0x37,0x1f,0x40, ++0x7e,0x37,0x2a,0x60,0x7a,0x37,0x1f,0x42,0x74,0x1, 0x7a,0xb3,0x1f,0x36,0x7a,0xb3, ++0x1f,0x37,0x7e,0x8, 0x1f,0x34,0x7e,0x18,0x1f,0x44,0x12,0x8, 0x0, 0x7e,0x37,0x1f, ++0x4e,0x7e,0x27,0x1f,0x4a,0xbd,0x23,0x28,0x2, 0x7d,0x32,0x22,0x7e,0x34,0x61,0x59, ++0x2, 0x23,0xc9,0x7e,0xb3,0x39,0x4e,0x70,0x2e,0x7e,0x73,0x39,0x31,0xbe,0x70,0x10, ++0x40,0x2, 0x6c,0x77,0x7e,0xb3,0x39,0x79,0xb4,0x1, 0x3, 0x7e,0x70,0x6, 0xa, 0x37, ++0x2e,0x34,0xf, 0xf0,0x12,0x97,0xb6,0x7c,0xab,0xe5,0x5d,0xa, 0x3b,0x2e,0x37,0x3a, ++0xcb,0x7a,0x37,0x3a,0xcb,0x80,0xc, 0x7e,0xa3,0x39,0x32,0xbe,0xa0,0x7f,0x28,0x3, ++0x7e,0xa0,0x7f,0x7c,0xba,0x2, 0x97,0xa8,0x75,0x5d,0x0, 0x7a,0xb3,0x3b,0x56,0xc2, ++0x1a,0x22,0x2e,0x34,0x20,0xab,0x7a,0x71,0x82,0x7a,0x61,0x83,0xe4,0x93,0x22,0x7e, ++0xb3,0x3a,0xce,0x70,0x4, 0x74,0x1, 0x80,0x1, 0xe4,0x7a,0xb3,0x3a,0xce,0x22,0x7f, ++0x20,0xc2,0x1, 0x7e,0x2b,0x60,0x29,0x72,0x0, 0x2, 0x9c,0x76,0x1a,0x37,0x12,0x21, ++0x48,0x7c,0x27,0x29,0x72,0x0, 0x1, 0x29,0x32,0x0, 0x3, 0x9c,0x37,0x1a,0x33,0x12, ++0x21,0x48,0x7c,0x37,0x1a,0x23,0x1a,0x32,0x9d,0x32,0x12,0x21,0x48,0x7c,0x67,0x7c, ++0x72,0xbc,0x32,0x58,0x2, 0x7c,0x73,0xbe,0x60,0x5, 0x18,0x5, 0xbe,0x70,0x6, 0x58, ++0x8, 0x7e,0x37,0x3a,0x3b,0x4d,0x33,0x68,0x2, 0xd2,0x1, 0xa2,0x1, 0x22,0x7f,0x60, ++0x7e,0x6b,0xa0,0xbe,0xa0,0xa, 0x50,0x1b,0x7e,0x14,0x0, 0x6, 0xca,0x19,0x74,0x6, ++0xa4,0x7f,0x6, 0x2d,0x15,0xb, 0x14,0x12,0x20,0xf1,0x1b,0xfd,0x7e,0x6b,0xb0,0x4, ++0x7a,0x6b,0xb0,0x22,0x6c,0xaa,0x7e,0x63,0x2a,0x6e,0x7e,0x73,0x2a,0x6d,0xac,0x76, ++0x7d,0x13,0x1e,0x14,0x7e,0x27,0x28,0x88,0x2e,0x27,0x28,0x86,0xbd,0x21,0x38,0xa, ++0x1e,0x34,0x1e,0x34,0xbe,0x37,0x28,0x86,0x50,0x29,0x90,0x60,0x51,0xe4,0x93,0x1e, ++0xb0,0xa, 0x2b,0x7e,0xb3,0x26,0xf7,0xa, 0x3b,0xbd,0x32,0x8, 0x16,0x90,0x60,0x50, ++0xe4,0x93,0x1e,0xb0,0xa, 0x2b,0x7e,0xb3,0x26,0xf6,0xa, 0x3b,0xbd,0x32,0x8, 0x3, ++0x7e,0xa0,0x1, 0x7c,0xba,0x22,0x7f,0x61,0x7f,0x50,0x7e,0x6b,0x90,0x80,0x1f,0x29, ++0x86,0x0, 0x1, 0x80,0xf, 0x7f,0x5, 0x7c,0xb9,0x7c,0x78,0x12,0x35,0x48,0x50,0x2, ++0xd3,0x22,0xb, 0x80,0x29,0x76,0x0, 0x3, 0xbc,0x78,0x50,0xe9,0xb, 0x90,0x29,0x76, ++0x0, 0x2, 0xbc,0x79,0x50,0xd9,0xc3,0x22,0x7e,0xa3,0x2a,0x3, 0xbe,0xa0,0x0, 0x38, ++0x2f,0xbe,0xa3,0x2a,0x2, 0x50,0x19,0x7e,0xb3,0x2a,0xc, 0xbe,0xb3,0x31,0xce,0x28, ++0x14,0x7e,0xb3,0x31,0xce,0x4, 0x7a,0xb3,0x31,0xce,0x7a,0xa3,0x2a,0x2, 0x80,0x5, ++0xe4,0x7a,0xb3,0x31,0xce,0x7e,0xb3,0x2a,0x2, 0x70,0x5, 0xe4,0x7a,0xb3,0x2a,0xb, ++0x22,0x12,0x99,0x7, 0x2, 0x98,0xc8,0x7e,0xb3,0x2a,0x2, 0x70,0x29,0x12,0x67,0xdc, ++0x28,0x24,0x7e,0xb3,0x30,0x3c,0x70,0x18,0x12,0x99,0x40,0x7e,0x73,0x2a,0x3, 0x7a, ++0x73,0x2a,0x2, 0x74,0x1, 0x7a,0xb3,0x2a,0x9, 0x7e,0xb3,0x30,0x3c,0x4, 0x80,0x1, ++0xe4,0x7a,0xb3,0x30,0x3c,0x22,0xe4,0x7a,0xb3,0x30,0x3c,0x7a,0xb3,0x2a,0x9, 0x22, ++0x7e,0x34,0x0, 0x3c,0xca,0x39,0x7e,0x18,0x38,0xb1,0x7e,0x8, 0x38,0xed,0x12,0x20, ++0xf1,0x1b,0xfd,0x7e,0x73,0x28,0x94,0x7a,0x73,0x38,0xb0,0x7a,0x73,0x28,0x93,0x22, ++0x7e,0x73,0x2a,0x3, 0xbe,0x73,0x2a,0x2, 0x78,0x17,0x7e,0x73,0x2a,0x2, 0xbe,0x70, ++0x1, 0x40,0xe, 0x7e,0x37,0x30,0x19,0xbe,0x34,0x0, 0x14,0x38,0xe, 0xb, 0x34,0x80, ++0x6, 0x7e,0x37,0x30,0x19,0x1e,0x34,0x7a,0x37,0x30,0x19,0x7e,0xb3,0x2a,0x2, 0x70, ++0x6, 0x6d,0x33,0x7a,0x37,0x30,0x19,0x7e,0x37,0x30,0x19,0x22,0x12,0x99,0xcd,0x2, ++0x99,0xa2,0x7e,0xb3,0x2a,0x9, 0x70,0x24,0x7e,0xa3,0x30,0x1b,0x4c,0xaa,0x78,0x3, ++0xe4,0x80,0x7, 0xbe,0xa0,0x2, 0x78,0x6, 0x74,0x3, 0x7a,0xb3,0x30,0x26,0x7e,0x73, ++0x30,0x27,0xbe,0x73,0x30,0x26,0x28,0x4, 0x7a,0x73,0x30,0x26,0x22,0xca,0x69,0xca, ++0xf8,0x7e,0xa3,0x2a,0x2, 0x7e,0x8, 0x29,0xbc,0x4c,0xaa,0x78,0x5, 0x12,0x5f,0x93, ++0x41,0xe1,0x6c,0x99,0x41,0xd6,0x7e,0x70,0x9, 0xac,0x79,0x9, 0x83,0x29,0xc, 0xbe, ++0x80,0xff,0x78,0x2, 0x41,0xd4,0xa, 0x28,0x7f,0x70,0x2d,0xf2,0x7e,0x7b,0xf0,0xbe, ++0xf0,0x2, 0x68,0x2, 0x41,0xb7,0x12,0x9a,0xf0,0x49,0x33,0x29,0x8, 0x12,0x9a,0xfa, ++0x7e,0x70,0x4, 0xac,0x78,0x49,0x23,0x31,0xd1,0x12,0x9a,0xe6,0x9d,0x32,0x12,0x21, ++0x48,0x7d,0xe3,0x7e,0x73,0x2f,0xa9,0xa, 0x27,0xbd,0x2f,0x28,0x54,0xbd,0x2e,0x28, ++0x50,0x12,0x9a,0xf0,0x7e,0xd0,0x9, 0xac,0xd9,0x59,0x26,0x29,0x8, 0x7e,0x50,0x4, ++0xac,0x58,0x49,0x22,0x31,0xd1,0x7e,0xd0,0x9, 0xac,0xd9,0x59,0x26,0x29,0xa, 0xbe, ++0xa0,0x0, 0x28,0x2, 0x1b,0xa0,0x4c,0xaa,0x78,0x7a,0x7e,0xb3,0x30,0x4, 0x4, 0x7a, ++0xb3,0x30,0x4, 0x7e,0x63,0x30,0x4, 0xbe,0x60,0x32,0x40,0x68,0xe4,0x7a,0xb3,0x30, ++0x4, 0x7e,0xb3,0x2f,0xa9,0xbe,0xb0,0x2, 0x50,0x5a,0x4, 0x7a,0xb3,0x2f,0xa9,0x80, ++0x53,0x7e,0x50,0x9, 0xac,0x59,0x49,0xd2,0x29,0x8, 0x7e,0xd0,0x4, 0xac,0xd8,0x59, ++0xd6,0x31,0xcf,0x49,0x22,0x29,0xa, 0x59,0x26,0x31,0xd1,0xbe,0x70,0x3, 0x40,0x4, ++0x74,0x2, 0x80,0x8, 0xbe,0x70,0x1, 0x28,0x7, 0x7c,0xb7,0x14,0x7a,0xb3,0x2f,0xa9, ++0xe4,0x7a,0xb3,0x30,0x4, 0x80,0x1d,0x4c,0xff,0x78,0x19,0x7e,0x70,0x9, 0xac,0x79, ++0x49,0x33,0x29,0x8, 0x7e,0x50,0x4, 0xac,0x58,0x59,0x32,0x31,0xcf,0x12,0x9a,0xe6, ++0x59,0x32,0x31,0xd1,0xb, 0x90,0x90,0x60,0x99,0xe4,0x93,0xbc,0xb9,0x28,0x2, 0x21, ++0xe6,0xda,0xf8,0xda,0x69,0x22,0x7e,0x70,0x9, 0xac,0x79,0x49,0x33,0x29,0xa, 0x22, ++0x7e,0x50,0x4, 0xac,0x58,0x49,0x22,0x31,0xcf,0x22,0x9d,0x32,0x12,0x21,0x48,0x7d, ++0xf3,0x22,0xca,0x3b,0x12,0x9f,0x3a,0x38,0x2, 0x61,0xc5,0x7e,0xc3,0x34,0x8b,0x4c, ++0xcc,0x78,0x3d,0x7a,0xb3,0x34,0x8b,0xe4,0x7a,0xb3,0x34,0x8d,0x6c,0xaa,0x80,0x26, ++0x12,0x9b,0xd0,0x7e,0x70,0x2, 0xac,0x7a,0x9, 0xd3,0x26,0xfa,0x9, 0xe3,0x26,0xfb, ++0x7a,0x49,0xd0,0x19,0xe4,0x0, 0x1, 0x74,0x1, 0x19,0xb4,0x0, 0x8, 0x12,0x9b,0xda, ++0x59,0x34,0x0, 0x2, 0xb, 0xa0,0x7e,0xb3,0x28,0x84,0xbc,0xba,0x38,0xd2,0x80,0x7b, ++0x7c,0xfc,0x6c,0xaa,0x80,0x31,0x12,0x9b,0xd0,0x7e,0x49,0xd0,0x9, 0xe4,0x0, 0x1, ++0x9, 0xb4,0x0, 0x8, 0x70,0x4, 0x1b,0xf0,0x80,0x1b,0x12,0x9b,0xda,0x7d,0x23,0x49, ++0x34,0x0, 0x2, 0x12,0x9a,0xfa,0xbe,0xf4,0x0, 0x23,0x8, 0x9, 0x74,0x5, 0x19,0xb4, ++0x0, 0x8, 0x75,0x5c,0x1, 0xb, 0xa0,0xbc,0xfa,0x38,0xcb,0x4c,0xff,0x78,0x2, 0x80, ++0x26,0x7e,0x73,0x34,0x8d,0xbe,0x70,0x4, 0x40,0x22,0x6c,0xaa,0x80,0xe, 0x12,0x9b, ++0xd0,0x9, 0xb4,0x0, 0x8, 0xbe,0xb0,0x5, 0x68,0x6, 0xb, 0xa0,0xbc,0xfa,0x38,0xee, ++0xbc,0xfa,0x78,0x3, 0x75,0x5c,0x0, 0x12,0x9b,0xe1,0x80,0xf, 0x7c,0xb7,0x4, 0x7a, ++0xb3,0x34,0x8d,0x80,0x6, 0x12,0x9b,0xe1,0x75,0x5c,0x0, 0xe5,0x5c,0xda,0x3b,0x22, ++0x7e,0x90,0x9, 0xac,0x9a,0x2e,0x44,0x34,0x8e,0x22,0x7c,0xbd,0x7c,0x7e,0x2, 0x2c, ++0x63,0xe4,0x7a,0xb3,0x34,0x8c,0x7a,0xb3,0x34,0x8b,0x7a,0xb3,0x34,0x8d,0x22,0x7e, ++0x90,0x1, 0x7e,0x94,0x61,0xc0,0x7e,0x84,0x0, 0xff,0xb, 0x4a,0x30,0x7a,0x37,0x28, ++0xa1,0x7e,0xb4,0x61,0xc2,0x7e,0xa4,0x0, 0xff,0xb, 0x5a,0x30,0x7a,0x37,0x28,0xa3, ++0x12,0x9d,0xd6,0xb, 0x1a,0x20,0x7e,0x14,0x61,0x4f,0x7e,0x4, 0x0, 0xff,0xb, 0xa, ++0xd0,0xe4,0x7a,0xb3,0x28,0xac,0x12,0x7f,0x3c,0x7e,0x34,0xff,0xfa,0xad,0x32,0x12, ++0x9f,0x33,0x7d,0xc3,0xe, 0x34,0x7e,0x27,0x7, 0xfe,0xbd,0x2c,0x58,0x1c,0x7e,0xc7, ++0x7, 0xfc,0xbd,0xc3,0x58,0x14,0x6d,0xcc,0x9e,0xc7,0x2a,0x5a,0xbe,0xc7,0x28,0x8e, ++0x8, 0x8, 0x12,0xb2,0x8a,0x60,0x3, 0x12,0x9d,0xdf,0x12,0x9f,0x8a,0x40,0x5, 0xe4, ++0x7a,0xb3,0x28,0xa8,0x12,0x9f,0x4a,0x68,0x6, 0x7e,0xb3,0x3b,0x5b,0x60,0x7, 0xe4, ++0x7a,0xb3,0x28,0xad,0x80,0x6f,0x12,0x9d,0x55,0x28,0x5, 0xe4,0x7a,0xb3,0x28,0xad, ++0x30,0x13,0x5, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0xa9,0x11,0x50,0xa, 0x12,0x7f,0x3c, ++0x12,0x9d,0x6e,0x7c,0x9b,0x80,0x17,0x7e,0xb3,0x26,0x84,0x70,0x11,0x7e,0xb3,0x26, ++0x85,0x70,0xb, 0x12,0x9d,0x55,0x28,0x6, 0x7e,0x90,0x3, 0x12,0x7f,0x3c,0x7e,0xc7, ++0x7, 0xfa,0xbe,0xc4,0x5, 0xdc,0x8, 0x17,0x12,0x9d,0x55,0x28,0x12,0x6d,0xcc,0x9d, ++0xcd,0xbe,0xc7,0x28,0x8e,0x58,0x8, 0x12,0x9d,0x60,0xe4,0x7a,0xb3,0x28,0xad,0xa, ++0x29,0xb, 0x4a,0x30,0xad,0x32,0x7a,0x37,0x28,0xa1,0xa, 0x29,0xb, 0x5a,0x30,0xad, ++0x32,0x7a,0x37,0x28,0xa3,0x12,0x9d,0x5d,0x50,0xd, 0xe4,0x7a,0xb3,0x28,0xad,0x12, ++0x9f,0x42,0x28,0x3, 0x12,0x9d,0x60,0x7e,0xc7,0x28,0x8a,0xbd,0xcd,0x8, 0x1f,0x7e, ++0x24,0x0, 0x2, 0x7d,0x3d,0x12,0x1e,0xee,0x6e,0x34,0xff,0xff,0xb, 0x34,0xbe,0x37, ++0x28,0x8e,0x58,0xa, 0x12,0x9d,0x5d,0x50,0x5, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0x9b, ++0x2, 0xb4,0x1, 0x5, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0x9d,0xf3,0x7e,0xb3,0x34,0x88, ++0xbe,0xb0,0x0, 0x28,0x1f,0x14,0x7a,0xb3,0x34,0x88,0x70,0x18,0xe4,0x7a,0xb3,0x28, ++0xad,0x12,0x9d,0xeb,0x7a,0xb3,0x16,0x91,0x7a,0xb3,0x16,0x90,0x7a,0xb3,0x28,0x84, ++0x7a,0xb3,0x26,0x83,0x22,0x7e,0x83,0x28,0x84,0xbe,0x80,0x0, 0x22,0xa2,0x16,0x22, ++0xe4,0x7a,0xb3,0x34,0x88,0x7a,0xb3,0x28,0xac,0x74,0x2, 0x2, 0x2a,0x20,0x7e,0xa0, ++0x1, 0x7e,0x47,0x7, 0xf8,0x12,0x9d,0xd6,0xb, 0x1a,0x0, 0x7e,0x34,0xff,0xfa,0xad, ++0x30,0x7e,0x14,0x0, 0x2, 0x12,0x9d,0xce,0x8, 0x12,0x7e,0xb3,0x28,0xac,0x60,0x7, ++0xe4,0x7a,0xb3,0x28,0xad,0x80,0x32,0x7e,0xa0,0x5, 0x80,0x2d,0x7e,0x34,0xff,0xfb, ++0x12,0x9d,0xcc,0x8, 0x5, 0x7e,0xa0,0x4, 0x80,0x1f,0x7e,0x34,0xff,0xfc,0x12,0x9d, ++0xcc,0x8, 0x5, 0x7e,0xa0,0x3, 0x80,0x11,0x7e,0x34,0xff,0xfd,0x12,0x9d,0xcc,0x8, ++0x5, 0x7e,0xa0,0x2, 0x80,0x3, 0x7e,0xa0,0x1, 0x7c,0xba,0x22,0xad,0x30,0x7d,0x21, ++0x12,0x1e,0xee,0xbd,0x34,0x22,0x7e,0x34,0x61,0x55,0x7e,0x24,0x0, 0xff,0x22,0x74, ++0x2, 0x7a,0xb3,0x34,0x88,0x12,0x9d,0xeb,0x2, 0x2a,0x20,0x74,0x1, 0x7a,0xb3,0x28, ++0xac,0xe4,0x22,0x7e,0x60,0x4, 0x7e,0x27,0x3b,0x54,0xbe,0x24,0x3, 0xe8,0x28,0x3, ++0x7e,0x60,0x8, 0x7e,0xb3,0x28,0xac,0xb4,0x1, 0x1a,0x7e,0x73,0x34,0x89,0xbc,0x76, ++0x50,0xf, 0xe4,0x7a,0xb3,0x28,0xad,0x12,0x9d,0x60,0x7e,0xb3,0x34,0x89,0x4, 0x80, ++0x4, 0xe4,0x80,0x1, 0xe4,0x7a,0xb3,0x34,0x89,0x7e,0xb3,0x28,0xad,0xb4,0x1, 0x17, ++0x7e,0xa3,0x34,0x8a,0xbe,0xa0,0x5, 0x50,0xa, 0xe4,0x7a,0xb3,0x28,0xad,0x7c,0xba, ++0x4, 0x80,0x5, 0x74,0x5, 0x80,0x1, 0xe4,0x7a,0xb3,0x34,0x8a,0x22,0xca,0x3b,0x7e, ++0xb3,0x2a,0x74,0xf5,0x27,0x12,0x9d,0x5d,0x50,0x2, 0xc1,0xdf,0x6d,0x33,0x9e,0x37, ++0x2a,0x4f,0x3e,0x34,0xbe,0x37,0x7, 0xf8,0x18,0x75,0x7e,0xb3,0x16,0x92,0x70,0x6f, ++0x7e,0xb3,0x28,0xa8,0xb4,0x1, 0x65,0x7e,0x77,0x2a,0x51,0x7e,0x67,0x2a,0x53,0x75, ++0x24,0x0, 0x80,0x53,0xe5,0x24,0x12,0x2d,0xb6,0x60,0x4a,0x12,0x9e,0xe2,0x12,0x9f, ++0x5a,0x7e,0xb3,0x2a,0x3, 0xb4,0x1, 0xe, 0x90,0x60,0xab,0xe4,0x93,0xbe,0xb1,0x26, ++0x78,0x4, 0xe, 0x64,0xe, 0x74,0x7e,0xa1,0x26,0x74,0x2, 0xa4,0x49,0x35,0x4, 0xfc, ++0xbd,0x36,0x48,0x14,0xe5,0x25,0xa, 0x2b,0xe5,0x27,0xa, 0x3b,0x2d,0x32,0x3e,0x34, ++0x49,0x33,0x4, 0xfc,0xbd,0x37,0x58,0xd, 0xe5,0x24,0x6c,0x77,0x12,0x33,0x1f,0x12, ++0x9e,0xe2,0x12,0x9f,0x67,0x5, 0x24,0x12,0x9f,0x52,0x38,0xa8,0x12,0x9e,0xea,0xda, ++0x3b,0x22,0x7e,0x71,0x24,0x74,0x2, 0xac,0x7b,0x22,0x7e,0xa0,0x1, 0x7e,0x37,0x2a, ++0x4f,0x12,0x9f,0x3a,0x28,0x35,0x6d,0x22,0x9d,0x23,0xbe,0x27,0x7, 0xf8,0x58,0x2b, ++0x12,0x9f,0x33,0xbe,0x37,0x7, 0xfa,0x8, 0x22,0xe4,0x7a,0xb3,0x28,0x84,0x7e,0xb3, ++0x2a,0x3, 0x70,0x17,0x7e,0xb3,0x39,0x50,0xb4,0x1, 0x10,0x6c,0xaa,0x5, 0x5b,0xe5, ++0x5b,0xbe,0xb0,0x10,0x28,0x5, 0xd2,0x14,0x75,0x5b,0x0, 0x4c,0xaa,0x68,0x3, 0x75, ++0x5b,0x0, 0x22,0x7e,0x24,0x0, 0x2, 0x2, 0x1e,0xee,0x7e,0xb3,0x28,0x84,0xbe,0xb0, ++0x0, 0x22,0x7e,0x73,0x28,0x84,0xbe,0x70,0x0, 0x22,0x7e,0xb3,0x28,0xa8,0xbe,0xb0, ++0x1, 0x22,0x7e,0x73,0x28,0x84,0xbe,0x71,0x24,0x22,0x9, 0xb3,0x26,0xfa,0xf5,0x25, ++0x9, 0xb3,0x26,0xfb,0xf5,0x26,0x22,0x9, 0xb3,0x26,0xfa,0x9, 0x73,0x26,0xfb,0x7c, ++0x6b,0x7e,0xa3,0x37,0xb4,0x7e,0x50,0x2, 0xac,0x5a,0x19,0x62,0x37,0xf1,0x19,0x72, ++0x37,0xf2,0x7c,0xba,0x4, 0x7a,0xb3,0x37,0xb4,0x22,0xd2,0x0, 0x6c,0xaa,0x6c,0x77, ++0x80,0x1f,0x7e,0x63,0x2a,0x6e,0xa, 0x16,0xa, 0x27,0x2d,0x21,0x7c,0x65,0x7e,0x50, ++0x2, 0xac,0x56,0x49,0x22,0x5, 0x7a,0xbe,0x24,0xfe,0xc, 0x58,0x2, 0xb, 0xa0,0xb, ++0x70,0x7e,0xb3,0x2a,0x6d,0xbc,0xb7,0x38,0xd9,0xa, 0x2b,0x1e,0x24,0xa, 0x3a,0xbd, ++0x32,0x8, 0x2, 0xc2,0x0, 0xa2,0x0, 0x22,0xca,0xd8,0xca,0x79,0x7c,0xdb,0x90,0x60, ++0x99,0xe4,0x93,0x7c,0xfb,0x6c,0x11,0x80,0x21,0x7e,0x0, 0xff,0x74,0x9, 0xac,0xb1, ++0x19,0x5, 0x1f,0x38,0x7e,0x34,0x7f,0xff,0x74,0x9, 0xac,0xb1,0x59,0x35,0x1f,0x34, ++0x74,0x9, 0xac,0xb1,0x59,0x35,0x1f,0x36,0xb, 0x10,0xbc,0xf1,0x38,0xdb,0xe4,0x6c, ++0x77,0x7c,0x6d,0x12,0xa1,0x21,0x7c,0x7d,0x7c,0x6f,0x12,0xa1,0x21,0x6c,0x0, 0x80, ++0x39,0x6c,0xee,0x80,0x16,0x74,0x9, 0xac,0xbe,0x9, 0x65,0x1f,0x38,0x74,0x9, 0xac, ++0xb0,0x9, 0x75,0x28,0xb2,0xbc,0x76,0x68,0x6, 0xb, 0xe0,0xbc,0x1e,0x38,0xe6,0xbc, ++0x1e,0x78,0x15,0x7e,0x70,0x9, 0xac,0x70,0x12,0x8f,0xc5,0xac,0x31,0x2e,0x14,0x1f, ++0x34,0x74,0x9, 0x12,0x1f,0xc1,0xb, 0x10,0xb, 0x0, 0xbc,0xf0,0x38,0xc3,0x74,0x9, ++0xac,0xbf,0xca,0x59,0x7e,0x18,0x1f,0x34,0x7e,0x8, 0x29,0x62,0x12,0x20,0xf1,0x1b, ++0xfd,0xda,0x79,0xda,0xd8,0x22,0xca,0x3b,0x7c,0x46,0x7c,0xab,0x6c,0x66,0x21,0x9, ++0x7c,0x57,0x21,0x1, 0x7e,0xf0,0x9, 0xac,0xf6,0x9, 0x87,0x29,0x66,0x7c,0x98,0x7e, ++0xd0,0x9, 0xac,0xd5,0x9, 0xb6,0x28,0xb2,0xbc,0xb9,0x78,0x73,0xbe,0x90,0xff,0x68, ++0x6e,0x12,0xa1,0x19,0x2d,0xf7,0x39,0x87,0x0, 0x4, 0xa, 0xf9,0x9, 0xbf,0x29,0xbc, ++0x7e,0xf0,0x9, 0x70,0xc, 0xac,0xf5,0x7d,0x97,0x2e,0x94,0x28,0xae,0x6d,0x88,0x80, ++0xa, 0xac,0xf6,0x7d,0x97,0x2e,0x94,0x29,0x62,0x6d,0x88,0xb, 0x4a,0xd0,0x12,0xa1, ++0x19,0x2d,0xf7,0x1b,0x7a,0xd0,0x69,0xf4,0x0, 0x2, 0x7e,0xf0,0x9, 0xac,0xfa,0x7f, ++0x60,0x2d,0xd7,0x79,0xf6,0x0, 0x2, 0x7e,0xf0,0x9, 0xac,0xf5,0x9, 0x87,0x28,0xb3, ++0x12,0xa1,0x19,0x2d,0xf7,0x39,0x87,0x0, 0x5, 0x7e,0xf0,0x9, 0xac,0xf5,0x9, 0x87, ++0x28,0xb4,0x12,0xa1,0x19,0x2d,0xf7,0x39,0x87,0x0, 0x6, 0xb, 0xa0,0x80,0x8, 0xb, ++0x50,0xbc,0x45,0x28,0x2, 0x1, 0x74,0xb, 0x60,0x90,0x60,0x99,0xe4,0x93,0xbc,0xb6, ++0x28,0x2, 0x1, 0x70,0x7c,0xba,0xda,0x3b,0x22,0x7e,0xf0,0x9, 0xac,0xfa,0x7f,0x70, ++0x22,0x7e,0x8, 0x1f,0x34,0x12,0xa0,0x66,0x7c,0x1b,0x22,0x7c,0xab,0x7e,0xb, 0xb0, ++0x60,0x3, 0xb4,0x2, 0x31,0xa, 0x4a,0x9, 0x74,0x30,0x1c,0xbe,0x73,0x30,0x26,0x50, ++0xe, 0x7d,0x24,0x2e,0x24,0x30,0x1c,0x7c,0xb7,0x4, 0x7a,0x29,0xb0,0xd3,0x22,0xbe, ++0x73,0x30,0x26,0x40,0x9, 0xbe,0x70,0xff,0x68,0x4, 0xe4,0x7a,0xb, 0xb0,0x74,0xff, ++0x19,0xb4,0x30,0x1c,0x80,0x17,0xa, 0x3a,0x9, 0xb3,0x30,0x1c,0xbe,0xb0,0xff,0x68, ++0x7, 0xe4,0x19,0xb3,0x30,0x1c,0xd3,0x22,0xe4,0x19,0xb3,0x30,0x1c,0xc3,0x22,0xca, ++0xf8,0x7c,0xfb,0x7d,0xf3,0x7e,0x17,0x2a,0x62,0xbd,0x13,0x38,0x6, 0x7e,0x34,0x1, ++0x0, 0x80,0x15,0x6d,0x22,0x7c,0x56,0x7c,0x67,0x6c,0x77,0x12,0x1f,0x3a,0xbe,0x34, ++0x0, 0x8, 0x50,0x4, 0x7e,0x34,0x0, 0x8, 0x74,0x2, 0xac,0xbf,0x49,0x25,0x30,0x28, ++0xbd,0x2f,0x28,0x6, 0x49,0x35,0x30,0x5, 0x80,0x4, 0x59,0x35,0x30,0x5, 0x59,0xf5, ++0x30,0x28,0xbe,0x34,0x1, 0x0, 0x28,0x4, 0x7e,0x34,0x1, 0x0, 0xbe,0x34,0x0, 0x20, ++0x50,0x15,0x7e,0x50,0x9, 0xac,0x5f,0x9, 0xb2,0x2f,0xb2,0xb4,0x1, 0x9, 0x7e,0x34, ++0x1, 0x0, 0xe4,0x19,0xb2,0x2f,0xb2,0xbe,0x34,0x0, 0x40,0x28,0xc, 0x7e,0xa0,0x1, ++0x7e,0x50,0x9, 0xac,0x5f,0x19,0xa2,0x2f,0xb2,0xda,0xf8,0x22,0x7e,0x8, 0x30,0x1b, ++0x7e,0x34,0x0, 0xd, 0xe4,0x2, 0x21,0x16,0xca,0x3b,0x7c,0xab,0x7d,0x3, 0x7e,0x20, ++0x10,0x7d,0x30,0x7e,0x90,0x9, 0xac,0x95,0x9, 0x34,0x28,0xb4,0xbe,0x30,0x10,0x28, ++0x2, 0x7c,0x23,0xbe,0x20,0x18,0x28,0x3, 0x7e,0x20,0x18,0x49,0xe4,0x28,0xae,0xbe, ++0xe4,0x6, 0x50,0x40,0x20,0x7e,0x33,0x2a,0x6f,0x12,0xa3,0x4, 0xbd,0xef,0x38,0x15, ++0x49,0xe4,0x28,0xb0,0xbe,0xe4,0x6, 0x50,0x40,0xb, 0x7e,0x33,0x2a,0x70,0x12,0xa3, ++0x4, 0xbd,0xef,0x28,0x3, 0x7e,0x20,0x8, 0x7e,0xf0,0x10,0xac,0xf2,0xbd,0x70,0x40, ++0x5d,0x7e,0xf0,0x9, 0xac,0xf4,0x9, 0xb7,0x2f,0xb2,0x70,0x52,0x7e,0xd0,0x8, 0xac, ++0xd2,0xbd,0x60,0x50,0x3c,0x9, 0xb7,0x2f,0xab,0x70,0x1f,0x9, 0xb7,0x2f,0xac,0xbe, ++0xb0,0x0, 0x28,0xc, 0x7d,0x37,0x2e,0x34,0x2f,0xac,0x14,0x7a,0x39,0xb0,0x80,0x6, ++0x74,0x1, 0x19,0xb7,0x2f,0xab,0x6d,0x33,0x80,0x34,0x9, 0xb7,0x2f,0xac,0xbe,0xb0, ++0x14,0x50,0x2b,0x7d,0x37,0x2e,0x34,0x2f,0xac,0x4, 0x7a,0x39,0xb0,0x6d,0x33,0x80, ++0x1d,0xe4,0x19,0xb7,0x2f,0xac,0x19,0xb7,0x2f,0xab,0x6d,0x33,0x80,0x10,0x6c,0x33, ++0x7e,0xf0,0x9, 0xac,0xf4,0x19,0x37,0x2f,0xac,0xe4,0x19,0xb7,0x2f,0xab,0x7e,0x30, ++0x8, 0xac,0x23,0xbd,0x10,0x40,0x2a,0x7e,0x70,0x9, 0xac,0x7a,0x49,0x33,0x29,0x62, ++0x59,0x34,0x28,0xae,0x74,0x9, 0xa4,0x49,0x35,0x29,0x64,0x74,0x9, 0xac,0xb5,0x59, ++0x35,0x28,0xb0,0x7e,0xa0,0x1, 0x7e,0x70,0x9, 0xac,0x74,0x19,0xa3,0x2f,0xaa,0x6d, ++0x33,0xda,0x3b,0x22,0x7e,0xf0,0x40,0xac,0xf3,0x7d,0xf7,0x9e,0xf4,0x0, 0x65,0x3e, ++0xf4,0x3e,0xf4,0x3e,0xf4,0x3e,0xf4,0x22,0x7c,0x17,0x7c,0xab,0x7e,0x14,0xff,0xfc, ++0x7e,0x3, 0x2a,0x2, 0x7e,0x90,0x9, 0xac,0x91,0x9, 0xb4,0x2f,0xad,0xb4,0x1, 0x49, ++0xa5,0xb8,0x1, 0xc, 0xbe,0x14,0xff,0x0, 0x28,0x10,0x7e,0x14,0xff,0x0, 0x80,0xa, ++0xbe,0x14,0xff,0xe0,0x28,0x4, 0x7e,0x14,0xff,0xe0,0x49,0x34,0x2f,0xae,0x7e,0x50, ++0x9, 0xac,0x5a,0x49,0x22,0x28,0xae,0x12,0xa4,0x31,0x8, 0x3, 0x12,0xa4,0x3b,0x7e, ++0x70,0x9, 0xac,0x71,0x49,0x33,0x2f,0xb0,0x7e,0x50,0x9, 0xac,0x5a,0x49,0x22,0x28, ++0xb0,0x12,0xa4,0x31,0x8, 0x3, 0x12,0xa4,0x3b,0x7e,0x70,0x9, 0xac,0x7a,0x9, 0x3, ++0x28,0xb4,0xbe,0x0, 0xc, 0x28,0xc, 0xbe,0x14,0xff,0x80,0x28,0x26,0x7e,0x14,0xff, ++0x80,0x80,0x20,0xbe,0x0, 0x8, 0x28,0xc, 0xbe,0x14,0xff,0xe0,0x28,0x15,0x7e,0x14, ++0xff,0xe0,0x80,0xf, 0xbe,0x0, 0x6, 0x28,0xa, 0xbe,0x14,0xff,0xf0,0x28,0x4, 0x7e, ++0x14,0xff,0xf0,0x7e,0x50,0x9, 0xac,0x51,0x49,0x22,0x2f,0xae,0x49,0x33,0x28,0xae, ++0x12,0xa4,0x27,0x18,0x16,0x74,0x9, 0xac,0x1b,0x49,0x20,0x2f,0xb0,0x7e,0x70,0x9, ++0xac,0x7a,0x49,0x33,0x28,0xb0,0x12,0xa4,0x27,0x8, 0x4, 0x7e,0x14,0xff,0xfc,0x7e, ++0x50,0x9, 0xac,0x5a,0x49,0x2, 0x28,0xae,0xbe,0x4, 0x6, 0x50,0x40,0x32,0x7e,0x63, ++0x2a,0x6f,0x7e,0x70,0x40,0xac,0x67,0x9e,0x34,0x0, 0x65,0x12,0x4f,0x41,0xbd,0x3, ++0x38,0x1e,0x49,0x32,0x28,0xb0,0xbe,0x34,0x6, 0x50,0x40,0x14,0x7e,0x3, 0x2a,0x70, ++0x7e,0x10,0x40,0xac,0x1, 0x9e,0x4, 0x0, 0x65,0x12,0xa4,0x47,0xbd,0x30,0x28,0x4, ++0x7e,0x14,0xff,0xff,0x7d,0x31,0x22,0x9d,0x32,0x12,0x21,0x48,0xbe,0x34,0x4, 0x0, ++0x22,0x9d,0x32,0x12,0x21,0x48,0xbe,0x34,0x1, 0x0, 0x22,0x6c,0x0, 0x7e,0x70,0x9, ++0xac,0x71,0x19,0x3, 0x2f,0xad,0x22,0x3e,0x4, 0x3e,0x4, 0x3e,0x4, 0x3e,0x4, 0x22, ++0xca,0x79,0x6c,0xff,0x80,0x3c,0x9f,0x77,0x6d,0x33,0x12,0xa4,0xd0,0x6c,0xee,0x80, ++0x9, 0x7c,0xbf,0x7c,0x7e,0x12,0xa4,0xd9,0xb, 0xe0,0x7e,0x73,0x2a,0x6e,0xa, 0x17, ++0x1b,0x14,0xa, 0x2e,0xbd,0x21,0x48,0xe9,0xa, 0x17,0x6d,0x0, 0x1b,0xc, 0x7f,0x17, ++0x12,0x1f,0x8d,0x7f,0x71,0xbe,0x78,0x0, 0x0, 0x8, 0x5, 0x7d,0x3f,0x12,0xa4,0xd0, ++0xb, 0xf0,0x7e,0x73,0x2a,0x6d,0xbc,0x7f,0x38,0xbc,0x6c,0xff,0x80,0x27,0x7c,0xbf, ++0x12,0x38,0x82,0x7d,0x43,0x74,0x2, 0xac,0xbf,0x9, 0xa5,0x26,0xfa,0x74,0x2, 0xa4, ++0x49,0x55,0x1f,0x34,0x2e,0x57,0x2a,0x5a,0xbd,0x54,0x8, 0x7, 0x7c,0xbf,0x6c,0x77, ++0x12,0x33,0x1f,0xb, 0xf0,0x7e,0x73,0x28,0x84,0xbc,0x7f,0x38,0xd1,0xda,0x79,0x22, ++0x74,0x2, 0xac,0xbf,0x59,0x35,0x1f,0x34,0x22,0x12,0x2c,0x63,0x1a,0x26,0x1a,0x24, ++0x2f,0x71,0x22,0xca,0x79,0x7c,0xa7,0x7c,0x8b,0x7e,0xb3,0x2a,0x6f,0x7a,0xb3,0x1f, ++0x9a,0x7e,0xb3,0x2a,0x70,0x7a,0xb3,0x1f,0x9b,0x7e,0x70,0x2, 0xac,0x78,0x9, 0x93, ++0x26,0xfa,0x9, 0x83,0x26,0xfb,0x9f,0x77,0x1a,0x3a,0x1a,0x79,0x9d,0x73,0xa1,0x95, ++0x7a,0xf1,0x58,0xbe,0xf0,0x0, 0x58,0xe, 0x1a,0x3f,0x1a,0x29,0x9d,0x23,0x1a,0x39, ++0x2d,0x32,0x7c,0xb7,0xf5,0x58,0x7e,0xb3,0x1f,0x9a,0xbc,0xbf,0x18,0xe, 0x1a,0x39, ++0x1a,0x2f,0x9d,0x23,0x1a,0x39,0x9d,0x32,0x7c,0xb7,0xf5,0x58,0x1a,0x2a,0x1a,0x38, ++0x9d,0x32,0x7c,0xb7,0xf5,0x57,0x80,0x3d,0x85,0x57,0x59,0xe5,0x57,0xbe,0xb0,0x0, ++0x58,0x10,0xe5,0x57,0x1a,0x3b,0x1a,0x28,0x9d,0x23,0x1a,0x38,0x2d,0x32,0x7c,0xb7, ++0xf5,0x59,0x7e,0xb3,0x1f,0x9b,0xbe,0xb1,0x57,0x18,0x10,0x1a,0x38,0xe5,0x57,0x1a, ++0x2b,0x9d,0x23,0x1a,0x38,0x9d,0x32,0x7c,0xb7,0xf5,0x59,0xe5,0x58,0x7e,0x71,0x59, ++0x12,0xa4,0xd9,0x5, 0x57,0x1a,0x3a,0x1a,0x28,0x2d,0x23,0xe5,0x57,0x1a,0x3b,0xbd, ++0x32,0x8, 0xb5,0xb, 0xf0,0x1a,0x3a,0x1a,0x29,0x2d,0x23,0x1a,0x3f,0xbd,0x32,0x18, ++0x2, 0xa1,0x10,0x7f,0x17,0xda,0x79,0x22,0xca,0x3b,0x6d,0x44,0x7e,0xf3,0x28,0x84, ++0x6c,0xee,0x80,0x24,0x7c,0xbe,0x12,0x2d,0xb6,0x60,0x1b,0x74,0x2, 0xac,0xbe,0x9, ++0xd5,0x26,0xfa,0x9, 0xc5,0x26,0xfb,0x7c,0xbd,0x7c,0x7c,0x12,0x2c,0x63,0x7d,0xf3, ++0xbd,0x4f,0x58,0x2, 0x7d,0x4f,0xb, 0xe0,0xbc,0xfe,0x38,0xd8,0x7d,0x34,0xda,0x3b, ++0x22,0xe4,0x7a,0xb3,0x37,0xb4,0x7e,0xb3,0x28,0x84,0x60,0x6, 0x7e,0xb3,0x38,0x2d, ++0x60,0x5, 0xe4,0x7a,0xb3,0x38,0x2f,0x22,0x6c,0x99,0x6c,0x88,0x80,0xf, 0x7c,0xb8, ++0x12,0x38,0x82,0xbe,0x34,0x1, 0xf4,0x8, 0x2, 0xb, 0x90,0xb, 0x80,0x7e,0x73,0x28, ++0x84,0xbc,0x78,0x38,0xe9,0xbe,0x90,0x1, 0x38,0x2, 0xc3,0x22,0xd3,0x22,0x7e,0x63, ++0x2a,0x6e,0x90,0x60,0xa7,0xe4,0x93,0x60,0x6c,0xc2,0x15,0x6c,0x33,0x80,0x56,0x90, ++0x60,0xaa,0xe4,0x93,0x70,0x13,0x7c,0x96,0xac,0x93,0x90,0x60,0xab,0xe4,0x93,0xa, ++0x5b,0x1b,0x54,0x2d,0x45,0x7d,0xd4,0xb, 0xd4,0x7d,0x54,0x3e,0x54,0x7e,0x7f,0x13, ++0x8a,0x2d,0xf5,0xb, 0x7a,0x50,0xbe,0x57,0x2a,0x5a,0x8, 0x27,0x7c,0xb3,0x12,0x3e, ++0xd7,0x50,0x20,0x7d,0x5d,0x3e,0x54,0x7e,0x7f,0x13,0x8a,0x7f,0x57,0x2d,0xb5,0xb, ++0x5a,0xc0,0x7d,0x54,0x3e,0x54,0x2d,0xf5,0xb, 0x7a,0x50,0xbd,0x5c,0x8, 0x4, 0xd2, ++0x15,0x80,0xa, 0xb, 0x30,0x7e,0x73,0x2a,0x75,0xbc,0x73,0x38,0xa2,0x30,0x15,0x5, ++0xd2,0x0, 0x2, 0x3e,0xf9,0x22,0x90,0x60,0xa7,0xe4,0x93,0x60,0x8, 0x30,0x15,0x5, ++0x12,0x3e,0xa9,0xc2,0x15,0x22,0xca,0xd8,0xca,0x79,0x7c,0xfb,0x7f,0x70,0xc2,0x0, ++0x6c,0xdd,0x6d,0xdd,0x7e,0x34,0x23,0x11,0x7e,0x24,0x0, 0xff,0x7e,0x14,0x1f,0x34, ++0x74,0xc, 0x12,0x1f,0xe2,0x6d,0x11,0x7e,0x4, 0x7f,0xff,0x6c,0xee,0x80,0x13,0x12, ++0xa7,0xba,0x7d,0xc3,0xbd,0xdc,0x50,0x2, 0x7d,0xdc,0xbd,0xc, 0x28,0x2, 0x7d,0xc, ++0xb, 0xe0,0xbc,0xfe,0x38,0xe9,0xbe,0xd4,0x0, 0x1e,0x58,0xa, 0x7e,0xb3,0x28,0x94, ++0x70,0x4, 0x6d,0x33,0xe1,0xab,0xbe,0xd4,0x4, 0xb0,0x8, 0x2, 0xd2,0x0, 0x6c,0xee, ++0x74,0x4, 0xac,0xbe,0x49,0x45,0x1f,0x34,0xbd,0x4d,0x58,0x6, 0x49,0xd5,0x1f,0x36, ++0x80,0x7, 0xb, 0xe0,0xbe,0xe0,0x3, 0x40,0xe7,0xbe,0xe0,0x3, 0x78,0x4, 0x6d,0x33, ++0xe1,0xab,0xbd,0xd, 0x8, 0x5, 0x30,0x0, 0x2, 0x7d,0xd0,0x9f,0x55,0x6c,0xee,0x80, ++0xb, 0x12,0xa7,0xba,0x1a,0x26,0x1a,0x24,0x2f,0x51,0xb, 0xe0,0xbc,0xfe,0x38,0xf1, ++0xa, 0x1f,0x12,0xa7,0xb0,0x9f,0x55,0x6c,0xee,0x80,0x22,0x74,0x2, 0xac,0xbe,0x7f, ++0x17,0x2d,0x35,0xb, 0x1a,0x90,0x7d,0x39,0x12,0x21,0x48,0x7d,0xc3,0xbd,0x1c,0x28, ++0xa, 0x7d,0x39,0x1a,0x26,0x1a,0x24,0x2f,0x51,0xb, 0xd0,0xb, 0xe0,0xbc,0xfe,0x38, ++0xda,0x6d,0x11,0xbe,0xd0,0x0, 0x28,0x5, 0xa, 0x1d,0x12,0xa7,0xb0,0xbd,0x1d,0x8, ++0x4, 0x7d,0x1d,0x80,0xa, 0x6d,0x0, 0x9d,0xd, 0xbd,0x1, 0x8, 0x2, 0x7d,0x10,0x6c, ++0xee,0x80,0x12,0x74,0x2, 0xac,0xbe,0x7f,0x17,0x2d,0x35,0xb, 0x1a,0x0, 0x9d,0x1, ++0x1b,0x1a,0x0, 0xb, 0xe0,0xbc,0xfe,0x38,0xea,0x7d,0x31,0xda,0x79,0xda,0xd8,0x22, ++0x6d,0x0, 0x7f,0x15,0x12,0x1f,0x8d,0x7d,0x13,0x22,0x74,0x2, 0xac,0xbe,0x7f,0x17, ++0x2d,0x35,0xb, 0x1a,0x30,0x2, 0x21,0x48,0x7e,0xb3,0x2b,0x1d,0xb4,0x1, 0x31,0x12, ++0xc9,0x26,0x7e,0x1f,0x3b,0x21,0x7a,0x37,0x24,0xfa,0x7e,0x34,0xd, 0xc8,0x7a,0x37, ++0x24,0xf6,0x12,0x7f,0xe8,0x12,0x7f,0xf1,0xe4,0x7a,0xb3,0x24,0xf5,0x7e,0x34,0x0, ++0x20,0x7a,0x37,0x24,0xfc,0x7a,0xb3,0x24,0xf4,0x7e,0x8, 0x24,0xf2,0x2, 0xd, 0x7, ++0x22,0x7c,0xa7,0x7c,0x7b,0x90,0x60,0xaa,0xe4,0x93,0x60,0x2, 0x7c,0xa7,0x90,0x60, ++0xab,0xe4,0x93,0xbc,0xba,0x78,0x2, 0xd3,0x22,0xc3,0x22,0x6c,0xaa,0x80,0x23,0x7e, ++0x30,0x4, 0xac,0x3a,0x7d,0xf1,0x2e,0xf4,0x60,0xb1,0x7e,0xe4,0x0, 0xff,0xb, 0x7a, ++0x20,0xbd,0x23,0x38,0xb, 0x2e,0x14,0x60,0xb3,0x12,0x5f,0xec,0xbd,0x23,0x50,0xb, ++0xb, 0xa0,0x90,0x60,0xa7,0xe4,0x93,0xbc,0xba,0x38,0xd4,0x7c,0xba,0x22,0x12,0xa8, ++0x62,0x7e,0x14,0x62,0x7, 0x12,0x5f,0xec,0xbd,0x32,0x28,0x3, 0xd2,0x16,0x22,0xc2, ++0x16,0x22,0x6d,0x11,0xe4,0x12,0x0, 0x1e,0x6c,0xaa,0x80,0x5b,0x7e,0x10,0x2, 0xac, ++0x1a,0x7e,0x7f,0x33,0xf8,0x2d,0xf0,0x69,0x27,0x1, 0x0, 0x69,0x37,0x0, 0x80,0x9d, ++0x32,0x12,0x21,0x48,0xbd,0x31,0x28,0x16,0x7e,0x70,0x2, 0xac,0x7a,0x7e,0xf, 0x33, ++0xf8,0x2d,0x13,0x69,0x20,0x1, 0x0, 0x69,0x30,0x0, 0x80,0x12,0x8f,0x29,0x7e,0x10, ++0x2, 0xac,0x1a,0x7e,0x1f,0x33,0xf8,0x2d,0x30,0x69,0x1, 0x0, 0x80,0xbe,0x4, 0x7f, ++0xff,0x78,0x4, 0x7e,0x14,0x7f,0xff,0x69,0x1, 0x1, 0x0, 0xbe,0x4, 0x7f,0xff,0x78, ++0x4, 0x7e,0x14,0x7f,0xff,0xb, 0xa0,0x7e,0xb3,0x2a,0x74,0xbc,0xba,0x38,0x9d,0x7d, ++0x31,0x22,0x6c,0xaa,0x80,0x26,0x7e,0x50,0x2, 0xac,0x5a,0x49,0x12,0x5, 0xf8,0x49, ++0x32,0x4, 0x0, 0x2d,0x31,0x59,0x32,0x5, 0xf8,0x30,0x6, 0xe, 0x49,0x12,0x4, 0x7e, ++0x49,0x32,0x6, 0x76,0x2d,0x31,0x59,0x32,0x6, 0x76,0xb, 0xa0,0x7e,0xb3,0x2a,0x74, ++0xa, 0x3b,0x7e,0xb3,0x2a,0x73,0xa, 0x2b,0x2d,0x23,0xa, 0x3a,0xbd,0x32,0x48,0xc6, ++0x22,0xc2,0x0, 0x7e,0xa3,0x2a,0x70,0x7e,0xb3,0x26,0xf1,0x60,0x4, 0xd2,0x0, 0x80, ++0x33,0x7e,0x70,0x2, 0x80,0x22,0x7e,0x50,0x2, 0xac,0x57,0x49,0x12,0x4, 0xfc,0x7e, ++0xf4,0x61,0x59,0x7e,0xe4,0x0, 0xff,0xb, 0x7a,0x0, 0x6d,0x22,0x9d,0x20,0xbd,0x12, ++0x58,0x4, 0xd2,0x0, 0x80,0xe, 0xb, 0x70,0xa, 0x1a,0x9e,0x14,0x0, 0x3, 0xa, 0x27, ++0xbd,0x21,0x48,0xd2,0xa2,0x0, 0x22,0x7e,0x37,0x3b,0x1a,0x12,0x25,0x6f,0x7a,0x37, ++0x38,0xab,0x6c,0xaa,0x80,0x23,0x12,0x5f,0xf4,0x28,0x26,0xa, 0x4a,0x9, 0x64,0x38, ++0x44,0xbc,0x6b,0x50,0x12,0x7e,0x50,0x2, 0xac,0x5a,0x49,0x42,0x3b,0x14,0x7e,0x70, ++0xc, 0xac,0x67,0x59,0x43,0x38,0x4e,0xb, 0xa0,0x7e,0xb3,0x38,0x41,0xbc,0xba,0x38, ++0xd5,0x22,0x7d,0x23,0x7e,0x14,0x61,0xc8,0x12,0x5a,0xad,0x7e,0x14,0x0, 0x5, 0xad, ++0x13,0x1e,0x14,0xbd,0x12,0x50,0xd, 0x7e,0x33,0x38,0xaa,0xbe,0x30,0x8, 0x50,0x45, ++0x74,0x8, 0x80,0x3d,0x7d,0x13,0x3e,0x14,0xbd,0x12,0x50,0xd, 0x7e,0x33,0x38,0xaa, ++0xbe,0x30,0x6, 0x50,0x30,0x74,0x6, 0x80,0x28,0x7e,0x14,0x0, 0x3, 0xad,0x13,0x1e, ++0x14,0xbd,0x12,0x50,0xd, 0x7e,0x33,0x38,0xaa,0xbe,0x30,0x4, 0x50,0x17,0x74,0x4, ++0x80,0xf, 0xbd,0x32,0x50,0xf, 0x7e,0x73,0x38,0xaa,0xbe,0x70,0x2, 0x50,0x6, 0x74, ++0x2, 0x7a,0xb3,0x38,0xaa,0x7e,0xb3,0x38,0xaa,0xbe,0xb0,0x0, 0x28,0x1b,0x14,0x7a, ++0xb3,0x38,0xaa,0x74,0x1, 0x7a,0xb3,0x16,0x92,0x90,0x61,0xfd,0xe4,0x93,0xbe,0xb3, ++0x38,0xaa,0x50,0x5, 0xe4,0x7a,0xb3,0x16,0x91,0x22,0x7c,0x3b,0x7e,0x44,0xff,0xff, ++0x6c,0x22,0x80,0x2a,0x12,0xaa,0x93,0x68,0x23,0x7e,0x70,0xc, 0xac,0x72,0x12,0xc8, ++0x94,0x7d,0x23,0x7e,0x70,0xc, 0xac,0x72,0x59,0x23,0x38,0x50,0x49,0x3, 0x38,0x50, ++0x49,0x23,0x38,0x4c,0xbd,0x20,0x50,0x4, 0x59,0x3, 0x38,0x4c,0xb, 0x20,0xbc,0x32, ++0x50,0xd2,0x6c,0xaa,0x6c,0x22,0x80,0x18,0x12,0xaa,0x93,0x68,0x11,0x7e,0x70,0xc, ++0xac,0x72,0x49,0x3, 0x38,0x4c,0xbd,0x4, 0x50,0x4, 0x7d,0x40,0x7c,0xa2,0xb, 0x20, ++0xbc,0x32,0x50,0xe4,0x7e,0x37,0x38,0x32,0xbe,0x37,0x38,0xab,0x50,0x8, 0x7e,0x37, ++0x38,0xab,0x7a,0x37,0x38,0x32,0x12,0xab,0xc9,0x4d,0x33,0x78,0x3, 0x7e,0xa0,0xff, ++0x7c,0xba,0x22,0x7e,0x10,0x5, 0xac,0x12,0x9, 0xb0,0x26,0x33,0xbe,0xb3,0x2b,0xf, ++0x22,0xca,0xd8,0xca,0x79,0x7e,0xe0,0xff,0x12,0xaf,0xfa,0x7e,0xb3,0x38,0x39,0xb4, ++0x1, 0x8, 0x12,0x7e,0x21,0xe4,0x7a,0xb3,0x38,0x39,0x7e,0xb3,0x38,0x38,0x60,0x4, ++0x74,0xff,0x61,0xc4,0x7e,0xb3,0x38,0x37,0xb4,0x2, 0x2, 0x80,0x2, 0x61,0xb8,0x12, ++0xc9,0x45,0x38,0xc, 0x12,0xc9,0x3d,0x38,0x7, 0x12,0xc9,0x35,0x38,0x2, 0x61,0xb8, ++0x12,0xc9,0x2d,0xa, 0x3d,0x1b,0x34,0xbe,0x34,0x0, 0x3, 0x48,0x4, 0x74,0x3, 0x80, ++0x3, 0x7c,0xbd,0x14,0x12,0xaa,0x1a,0x7c,0xfb,0x7e,0xb3,0x38,0x36,0x4, 0x7a,0xb3, ++0x38,0x36,0x90,0x61,0xc5,0xe4,0x93,0x14,0x12,0xaa,0x1a,0x7c,0xab,0xbe,0xa0,0xff, ++0x68,0x2c,0xbe,0xf0,0xff,0x68,0x25,0x7e,0x30,0xc, 0xac,0x3f,0x49,0x21,0x38,0x4c, ++0x7e,0xf4,0x61,0xcc,0x7e,0xe4,0x0, 0xff,0xb, 0x7a,0x30,0xbd,0x23,0x28,0xf, 0x12, ++0xab,0xc9,0x3e,0x34,0xbd,0x23,0x28,0x6, 0x7c,0xfa,0x80,0x2, 0x7c,0xfa,0xbe,0xf0, ++0xff,0x78,0x11,0xe4,0x7a,0xb3,0x38,0x36,0x7a,0xb3,0x38,0x37,0x7a,0xb3,0x38,0x43, ++0x74,0xff,0x80,0x70,0x90,0x61,0xd4,0xe4,0x93,0xbe,0xb3,0x38,0x36,0x50,0x59,0x74, ++0xc, 0xac,0xbf,0x49,0x25,0x38,0x4c,0x7e,0x14,0x61,0xcc,0x12,0x5a,0xad,0xbd,0x23, ++0x50,0x3d,0x7e,0x34,0x61,0xd0,0x12,0x23,0xc9,0xbe,0x37,0x38,0x32,0x40,0xd, 0x7e, ++0x34,0x61,0xd2,0x12,0x23,0xc9,0xbe,0x37,0x38,0x3d,0x50,0x23,0x74,0x5, 0xac,0xbf, ++0x9, 0x75,0x26,0x33,0xbe,0x73,0x2b,0xf, 0x68,0x15,0x7c,0xef,0xbe,0xe0,0x4, 0x50, ++0x8, 0x12,0xab,0xd3,0xbe,0xb0,0x4, 0x40,0x6, 0x74,0x1, 0x7a,0xb3,0x38,0x39,0xe4, ++0x7a,0xb3,0x38,0x43,0x7a,0xb3,0x38,0x37,0xbe,0xe0,0xff,0x68,0x5, 0xe4,0x7a,0xb3, ++0x38,0x36,0x7c,0xbe,0xda,0x79,0xda,0xd8,0x22,0x7e,0x70,0xc, 0xac,0x7a,0x49,0x33, ++0x38,0x4c,0x22,0x7e,0xb3,0x2b,0xf, 0x7c,0xab,0x6c,0x77,0x7e,0x50,0x5, 0xac,0x57, ++0x9, 0x62,0x26,0x33,0xbc,0x6a,0x78,0x3, 0x7c,0xb7,0x22,0xb, 0x70,0xbe,0x70,0x4, ++0x40,0xe9,0x74,0xff,0x22,0x7c,0x2b,0x7e,0xb3,0x1f,0x33,0xbc,0x2b,0x68,0x55,0x12, ++0xab,0xd7,0x7c,0x3b,0x7c,0xb2,0x12,0xab,0xd7,0x7c,0xab,0xbe,0x30,0xff,0x68,0x44, ++0xbe,0xa0,0xff,0x68,0x3f,0x7e,0x70,0x4, 0xac,0x73,0xa, 0x2a,0x2d,0x32,0x2e,0x34, ++0x21,0x38,0x12,0x97,0xb6,0xbe,0xb0,0x2, 0x38,0x2a,0xa, 0x2b,0x7e,0x34,0x2, 0xe0, ++0xad,0x32,0x2e,0x34,0x16,0x93,0x6d,0x22,0x30,0x19,0x3, 0x2, 0xac,0x64,0x7e,0xb3, ++0x2b,0x1d,0xb4,0x1, 0xf, 0x12,0xc8,0x6c,0x7a,0x55,0x2a,0x7e,0x8, 0xd, 0xc8,0x74, ++0x1, 0x2, 0xac,0x95,0x22,0x7c,0xab,0x12,0xaf,0xf2,0xd2,0x19,0x7c,0xba,0x12,0xab, ++0xf5,0xc2,0x19,0x22,0x7c,0x7b,0x90,0x60,0x93,0xe4,0x93,0xa, 0x1b,0x7e,0x63,0x2a, ++0x71,0xa, 0x6, 0x2d,0x1, 0x7e,0x63,0x2a,0x6e,0xa, 0x16,0xad,0x10,0x7d,0x21,0x12, ++0x7f,0xd6,0xa, 0x26,0x7a,0x25,0x2a,0x74,0x1d,0xac,0x7b,0x2e,0x34,0x39,0x8c,0x6d, ++0x22,0xe4,0x2, 0xac,0x95,0x7c,0xab,0x6d,0x44,0x80,0x29,0x4c,0xaa,0x68,0x11,0x12, ++0xac,0xd8,0x60,0x5, 0x3e,0xe4,0x14,0x78,0xfb,0x12,0xac,0xcc,0x2d,0xfe,0x80,0xf, ++0x12,0xac,0xd8,0x60,0x5, 0x3e,0xe4,0x14,0x78,0xfb,0x12,0xac,0xcc,0x9d,0xfe,0x1b, ++0x6a,0xf0,0xb, 0x44,0x7e,0xf5,0x2a,0xbd,0xf4,0x38,0xd0,0x22,0x7d,0xf4,0x3e,0xf4, ++0x7f,0x60,0x2d,0xdf,0xb, 0x6a,0xf0,0x22,0x7f,0x71,0x2d,0xf4,0x7e,0x7b,0xb0,0x1a, ++0xeb,0x7f,0x61,0x2e,0xd5,0x2a,0x7e,0x6b,0xb0,0x22,0xca,0xf8,0x7e,0x45,0x24,0x7c, ++0xb9,0x7a,0xb3,0x3a,0x87,0x74,0xff,0x7a,0xb3,0x3a,0x86,0x6d,0x55,0x80,0x19,0x7d, ++0xf5,0x3e,0xf4,0x12,0xac,0xce,0x7d,0xe5,0x3e,0xe4,0x59,0xfe,0x1f,0x34,0x69,0xf6, ++0x0, 0x2, 0x59,0xfe,0x21,0x14,0xb, 0x54,0xbd,0x45,0x38,0xe3,0x7e,0x33,0x3a,0x87, ++0xbe,0x30,0x4, 0x38,0x2, 0xa1,0xac,0x69,0xf1,0x0, 0x1c,0x69,0x11,0x0, 0x1e,0xbd, ++0x1f,0x18,0x19,0x4d,0x11,0x78,0x4, 0x7e,0x14,0x0, 0x1, 0x7d,0x3f,0x7d,0x21,0x12, ++0x1e,0xee,0x7c,0xf7,0x74,0x40,0x7a,0xb3,0x3a,0x8a,0x80,0x43,0x4d,0xff,0x78,0x4, ++0x7e,0xf4,0x0, 0x1, 0x7d,0x31,0x7d,0x2f,0x12,0x1e,0xee,0x7c,0xf7,0x74,0x80,0x7a, ++0xb3,0x3a,0x8a,0x7d,0xf, 0x2d,0xf, 0xbd,0x1, 0x8, 0x24,0x1a,0x2, 0x1a,0x0, 0x7e, ++0x73,0x3a,0x8a,0xa, 0x37,0x6d,0x22,0x12,0x1f,0x20,0x7d,0x5f,0x1a,0x4a,0x1a,0x48, ++0x7d,0x1f,0x1a,0x2, 0x1a,0x0, 0x2f,0x2, 0x12,0x1f,0x3c,0x7a,0x73,0x3a,0x8a,0xbe, ++0xf0,0x5, 0x58,0x14,0x12,0xad,0xcb,0x12,0xc7,0xb6,0x12,0xad,0xcb,0x12,0xad,0xd4, ++0x12,0xad,0xcb,0x12,0xc6,0xf0,0x80,0xa, 0x74,0x7d,0x80,0x2, 0x74,0x7f,0x7a,0xb3, ++0x3a,0x86,0xe4,0x7a,0xb3,0x3a,0x87,0x7e,0x73,0x3b,0x51,0xbe,0x73,0x3a,0x86,0x48, ++0x6, 0x7e,0xb3,0x3a,0x88,0x80,0x1, 0xe4,0xda,0xf8,0x22,0x7e,0x8, 0x1f,0x34,0x7e, ++0x18,0x21,0x14,0x22,0xca,0x3b,0x7f,0x71,0x7e,0x60,0x1, 0xb, 0xa, 0x20,0xb, 0x7a, ++0x50,0x7c,0x4b,0x7a,0x53,0x22,0xf4,0x7a,0x43,0x23,0xe4,0x7e,0x70,0x1, 0x7e,0xa0, ++0x1, 0xc1,0xf5,0x7e,0x90,0x2, 0xac,0x9a,0x7f,0x60,0x2d,0xd4,0xb, 0x6a,0xd0,0x7d, ++0x7d,0x7c,0xbf,0xf5,0x26,0x7f,0x67,0x2d,0xd4,0xb, 0x6a,0x40,0xa, 0xd5,0xa, 0xbb, ++0x7d,0xab,0x9d,0xad,0x7d,0x7a,0x7c,0x8f,0xbe,0x80,0x0, 0x58,0x5, 0x6e,0x80,0xff, ++0xb, 0x80,0xa, 0xa4,0xa, 0x79,0x9d,0x7a,0xbe,0xf0,0x0, 0x58,0x5, 0x6e,0xf0,0xff, ++0xb, 0xf0,0xbe,0x80,0x2, 0x58,0x7, 0xbe,0xf0,0x2, 0x58,0x2, 0xc1,0xf3,0xbe,0x60, ++0x0, 0x18,0x2, 0xc1,0xdb,0xbe,0x70,0xec,0x28,0x2, 0xc1,0xff,0xbe,0x80,0x8, 0x58, ++0x5, 0xbe,0xf0,0x8, 0x48,0x61,0xa, 0xa7,0xb, 0xa4,0x7d,0x6a,0x7c,0x7d,0xa, 0xa5, ++0x2d,0xab,0x12,0xaf,0x43,0x19,0xba,0x22,0xf4,0xa, 0xd9,0xa, 0xa4,0x2d,0xad,0x12, ++0xaf,0x43,0x19,0xba,0x23,0xe4,0x9, 0xba,0x22,0xf4,0xa, 0xdb,0xa, 0xc5,0x2d,0xcd, ++0xe, 0xc4,0x7d,0x6c,0x7c,0xbd,0xa, 0xc7,0x19,0xbc,0x22,0xf3,0x9, 0xbc,0x23,0xe4, ++0xa, 0xcb,0xa, 0xa4,0x2d,0xac,0x12,0xaf,0x43,0x19,0xba,0x23,0xe3,0x2d,0xdb,0x12, ++0xaf,0x3a,0x19,0xbd,0x22,0xf5,0xa, 0xd9,0x12,0xaf,0x38,0x19,0xbd,0x23,0xe5,0xb, ++0xd5,0x7d,0x6d,0x7c,0x7d,0x80,0x24,0xbe,0x80,0x4, 0x58,0x5, 0xbe,0xf0,0x4, 0x48, ++0x1a,0xe5,0x26,0xa, 0xcb,0xa, 0xd5,0x12,0xaf,0x38,0x19,0xbd,0x22,0xf4,0xa, 0xc9, ++0xa, 0xd4,0x12,0xaf,0x38,0x19,0xbd,0x23,0xe4,0xb, 0x70,0xbe,0x70,0xf0,0x50,0x1f, ++0x7e,0x51,0x26,0x7c,0x49,0xe5,0x26,0xa, 0xd7,0x19,0xbd,0x22,0xf4,0x19,0x9d,0x23, ++0xe4,0xb, 0x70,0xb, 0xa0,0x7e,0xb3,0x3a,0x87,0xbc,0xba,0x28,0x2, 0xa1,0xf3,0x7a, ++0x73,0x3a,0x87,0x7e,0xa0,0x1, 0x80,0x25,0xa, 0x3a,0x9, 0xb3,0x22,0xf4,0xa, 0x2b, ++0x7e,0x70,0x2, 0xac,0x7a,0x7f,0x60,0x2d,0xd3,0x1b,0x6a,0x20,0xa, 0x2a,0x9, 0xb2, ++0x23,0xe4,0xa, 0x4b,0x2d,0x3f,0x7d,0x2e,0x1b,0x1a,0x40,0xb, 0xa0,0x7e,0xb3,0x3a, ++0x87,0xbc,0xba,0x38,0xd3,0xda,0x3b,0x22,0x2d,0xdc,0xe, 0xd4,0x7d,0x6d,0x7c,0xbd, ++0xa, 0xd7,0x22,0xe, 0xa4,0x7d,0x6a,0x7c,0xbd,0xa, 0xa7,0x22,0x12,0xaf,0xe9,0x7a, ++0x37,0x2f,0x9c,0x12,0xaf,0x74,0x7a,0x37,0x2f,0x9e,0x12,0x5d,0xe4,0x60,0x1, 0x22, ++0x7e,0x73,0x2f,0xa8,0xa, 0x37,0x7a,0x35,0x24,0x7e,0x8, 0x2b,0xbf,0x7e,0x18,0x2f, ++0x80,0x2, 0xac,0xea,0x7e,0x37,0x2f,0x96,0x9e,0x37,0x2f,0x8e,0x22,0x7e,0x17,0x2f, ++0x90,0xbd,0x13,0x28,0xa, 0x7a,0x37,0x2f,0x90,0x7a,0x27,0x2f,0x92,0x80,0x10,0x7e, ++0x17,0x2f,0x88,0xbd,0x13,0x50,0x8, 0x7a,0x37,0x2f,0x88,0x7a,0x27,0x2f,0x8a,0x7e, ++0x17,0x2f,0x8e,0xbd,0x12,0x28,0xa, 0x7a,0x27,0x2f,0x8e,0x7a,0x37,0x2f,0x8c,0x80, ++0x10,0x7e,0x17,0x2f,0x96,0xbd,0x12,0x50,0x8, 0x7a,0x27,0x2f,0x96,0x7a,0x37,0x2f, ++0x94,0x7e,0xb3,0x2f,0xa8,0xb4,0xa, 0xf, 0x12,0xaf,0xe9,0x7a,0x37,0x2f,0xa0,0x12, ++0xaf,0x74,0x7a,0x37,0x2f,0xa2,0x22,0xb4,0x14,0xe, 0x12,0xaf,0xe9,0x7a,0x37,0x2f, ++0xa4,0x12,0xaf,0x74,0x7a,0x37,0x2f,0xa6,0x22,0x7e,0x37,0x2f,0x88,0x9e,0x37,0x2f, ++0x90,0x22,0xa9,0xd1,0xcb,0x74,0x1, 0x2, 0x0, 0xe, 0x7e,0xb3,0x38,0x38,0xb4,0x1, ++0x27,0x7e,0xb3,0x38,0xae,0x4, 0x7a,0xb3,0x38,0xae,0x7e,0x73,0x38,0xae,0xbe,0x70, ++0x3, 0x40,0x15,0x12,0x7f,0x43,0x7e,0x73,0x38,0xae,0xbe,0x70,0x6, 0x40,0x9, 0xe4, ++0x7a,0xb3,0x38,0xae,0x7a,0xb3,0x38,0x38,0x22,0xca,0xf8,0x7f,0x71,0x6d,0xdd,0x6c, ++0xaa,0x7e,0xf0,0x80,0xc2,0x0, 0x6d,0x44,0x80,0x32,0x12,0xb0,0xca,0x12,0xa7,0xc2, ++0xbd,0x3d,0x48,0x26,0x12,0xb0,0xca,0xb, 0x1a,0x30,0xbe,0x34,0x0, 0x0, 0x8, 0x4, ++0xd2,0x0, 0x80,0x9, 0x12,0x21,0x48,0xbd,0x3d,0x68,0x2, 0xc2,0x0, 0x7d,0x34,0x3e, ++0x34,0x2d,0x3f,0x7d,0x2e,0x12,0xa7,0xc2,0x7d,0xd3,0xb, 0x44,0x7e,0xc5,0x35,0xbd, ++0xc4,0x38,0xc7,0x30,0x0, 0xc, 0x7e,0xf0,0x7f,0x80,0x7, 0xb, 0xa0,0xbe,0xa0,0x8, ++0x50,0x11,0x7c,0xba,0x7d,0x3d,0x60,0x5, 0xe, 0x34,0x14,0x78,0xfb,0xa, 0xcf,0xbd, ++0x3c,0x18,0xe8,0x7f,0x10,0x2e,0x35,0x35,0x7a,0x1b,0xa0,0x6d,0x44,0x80,0x21,0x7d, ++0x54,0x3e,0x54,0x7f,0x17,0x2d,0x35,0xb, 0x1a,0x30,0x7f,0x60,0x2e,0xd5,0x35,0x7e, ++0x6b,0xb0,0x60,0x5, 0xe, 0x34,0x14,0x78,0xfb,0x7c,0xb7,0x12,0xb0,0xd5,0xb, 0x44, ++0x7e,0x55,0x35,0xbd,0x54,0x38,0xd8,0xda,0xf8,0x22,0x7d,0xc4,0x3e,0xc4,0x7f,0x17, ++0x2d,0x3c,0x22,0xa, 0x4a,0x7f,0x10,0x2d,0x34,0x7a,0x1b,0xb0,0x22,0x90,0x60,0x93, ++0xe4,0x93,0xa, 0xb, 0x7e,0x73,0x2a,0x71,0xa, 0x17,0x2d,0x10,0x7e,0xa3,0x2a,0x6e, ++0xa, 0x3a,0xad,0x13,0x7d,0x21,0x6c,0x33,0x80,0x20,0xa, 0x3, 0x2d,0x2, 0x3e,0x4, ++0x7e,0x7f,0x3b,0x21,0x2d,0xf0,0xb, 0x7a,0x0, 0x7e,0x90,0x2, 0xac,0x93,0x49,0xf4, ++0x13,0x8e,0x9d,0xf, 0x59,0x4, 0x25,0xb6,0xb, 0x30,0xbc,0xa3,0x38,0xdc,0x7a,0x35, ++0x35,0x7e,0xf, 0x39,0x88,0x7e,0x18,0x25,0xb6,0x2, 0xb0,0x29,0xca,0x3b,0x7e,0xb3, ++0x2b,0xf, 0x7a,0xb3,0x1f,0x33,0x7e,0xf3,0x2b,0x62,0x12,0xab,0xd7,0x7c,0xdb,0xbe, ++0xd0,0xff,0x68,0x6a,0x6c,0xcc,0x12,0xb1,0xb1,0xf5,0x2a,0x7e,0x73,0x2b,0xf, 0xbe, ++0x71,0x2a,0x68,0x3c,0x7e,0x70,0x4, 0xac,0x7d,0xa, 0x2c,0x2d,0x32,0x2e,0x34,0x21, ++0x38,0x12,0x97,0xb6,0x7c,0xeb,0xbe,0xe0,0x2, 0x38,0x43,0xa, 0xe, 0x7e,0x14,0x2, ++0xe0,0xad,0x10,0x2e,0x14,0x16,0x93,0x6d,0x0, 0x7a,0xd, 0x2b,0x7e,0x70,0x1d,0xac, ++0x7e,0x2e,0x34,0x39,0x8c,0x6d,0x22,0x7a,0x1f,0x39,0x88,0x7c,0xbc,0x12,0x6e,0x4e, ++0xb, 0xc0,0xbe,0xc0,0x4, 0x40,0xaf,0x7e,0x73,0x2b,0x62,0xbc,0x7f,0x68,0x6, 0x7a, ++0xf3,0x2b,0x62,0xd2,0x10,0xd2,0x0, 0x7e,0xb3,0x1f,0x33,0x12,0x6c,0x1f,0xda,0x3b, ++0x22,0x74,0x5, 0xac,0xbc,0x9, 0xb5,0x26,0x33,0x22,0x6d,0x33,0x7d,0x23,0x7d,0x3, ++0x6c,0x33,0x80,0x45,0x6c,0x22,0x80,0x37,0x7e,0xb3,0x2a,0x6e,0xac,0xb3,0xa, 0x42, ++0x2d,0x54,0x7d,0x45,0x3e,0x44,0x7e,0x7f,0x13,0x8a,0x2d,0xf4,0xb, 0x7a,0x40,0xbe, ++0x44,0x0, 0x32,0x8, 0x8, 0xbe,0x44,0x2, 0x58,0x58,0x2, 0xb, 0x24,0xbe,0x44,0xff, ++0xce,0x58,0x8, 0xbe,0x44,0xfd,0xa8,0x8, 0x2, 0xb, 0x4, 0xb, 0x34,0xb, 0x21,0x7e, ++0x93,0x2a,0x6e,0xbc,0x92,0x38,0xc1,0xb, 0x31,0x7e,0xb3,0x2a,0x6d,0xbc,0xb3,0x38, ++0xb3,0x7e,0x54,0x0, 0x6, 0xad,0x53,0x7d,0x15,0x1e,0x14,0x1e,0x14,0x1e,0x14,0x12, ++0x25,0x71,0xbd,0x12,0x50,0x22,0xbd,0x30,0x28,0x1e,0xe4,0x7a,0xb3,0x3b,0x58,0x7e, ++0xb3,0x3b,0x59,0xbe,0xb0,0x5, 0x50,0x7, 0x4, 0x7a,0xb3,0x3b,0x59,0x80,0x3c,0xe4, ++0x7a,0xb3,0x3b,0x59,0x74,0x1, 0x80,0x2f,0xbd,0x10,0x50,0x22,0xbd,0x32,0x28,0x1e, ++0xe4,0x7a,0xb3,0x3b,0x59,0x7e,0xb3,0x3b,0x58,0xbe,0xb0,0x5, 0x50,0x7, 0x4, 0x7a, ++0xb3,0x3b,0x58,0x80,0x16,0xe4,0x7a,0xb3,0x3b,0x58,0x74,0x2, 0x80,0x9, 0xe4,0x7a, ++0xb3,0x3b,0x58,0x7a,0xb3,0x3b,0x59,0x7a,0xb3,0x3b,0x5a,0x7e,0xb3,0x3b,0x5a,0x22, ++0xe4,0x7a,0xb3,0x28,0xa8,0x7a,0xb3,0x3b,0x5b,0x22,0x6c,0x66,0x90,0x60,0xa7,0xe4, ++0x93,0xbe,0xb0,0x0, 0x28,0x71,0x90,0x60,0xaa,0xe4,0x93,0x70,0x6a,0x7e,0xb3,0x28, ++0xa8,0xb4,0x1, 0x63,0x7e,0x73,0x26,0xf2,0xbe,0x70,0x0, 0x28,0x5a,0x6c,0x33,0x80, ++0x4e,0xa, 0x23,0x9, 0x72,0x26,0xe6,0x7e,0xb3,0x2a,0x6e,0x14,0xbc,0x7b,0x78,0x3d, ++0x6c,0x22,0x80,0x27,0x7c,0xb2,0x7c,0x73,0x12,0x3f,0x59,0x50,0x1c,0xa, 0x22,0x7e, ++0x73,0x2a,0x6e,0xa, 0x7, 0x2d,0x2, 0x3e,0x4, 0x49,0x20,0x4, 0xfc,0x6d,0x0, 0x9e, ++0x7, 0x2a,0x4f,0xbd,0x20,0x58,0x2, 0xb, 0x60,0xb, 0x20,0x7e,0x73,0x2a,0x6d,0xbc, ++0x72,0x38,0xd1,0xbe,0x60,0x0, 0x28,0x3, 0x74,0x1, 0x22,0xe4,0x22,0xb, 0x30,0x7e, ++0x73,0x26,0xf2,0xbc,0x73,0x38,0xaa,0x74,0x1, 0x22,0x7c,0xab,0xbe,0xa0,0x0, 0x40, ++0x11,0x7e,0xb3,0x2a,0x6e,0xbc,0xba,0x28,0x9, 0x74,0x2, 0xa4,0x49,0x25,0x34,0x0, ++0x80,0x51,0x7e,0x13,0x2a,0x6e,0xbc,0x1a,0x38,0x1c,0x7e,0x3, 0x2a,0x6d,0xa, 0x10, ++0xa, 0x21,0x2d,0x12,0xa, 0x3a,0xbd,0x31,0x58,0xc, 0x9d,0x32,0x3e,0x34,0x3e,0x34, ++0x49,0x23,0x3, 0x6f,0x80,0x2d,0x7e,0x3, 0x2a,0x6d,0xa, 0x20,0xa, 0x11,0x7d,0x41, ++0x2d,0x42,0xa, 0x3a,0xbd,0x34,0x48,0x19,0x7e,0x10,0x2, 0xac,0x1, 0x2d,0x1, 0xbd, ++0x30,0x58,0xe, 0x9d,0x31,0x9d,0x32,0x3e,0x34,0x3e,0x34,0x49,0x23,0x3, 0x71,0x80, ++0x2, 0xe4,0x22,0x7e,0x34,0x0, 0x64,0xad,0x23,0x74,0xc, 0x1e,0x34,0x1e,0x24,0x50, ++0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,0x7c,0xb7,0x22,0xca,0xf8,0x80,0x38,0x7c,0xbf, ++0x12,0xb3,0xa, 0xa, 0x1b,0x7e,0x63,0x2a,0x6e,0x7e,0x70,0x2, 0xac,0x67,0x7e,0x10, ++0x2, 0xac,0x1f,0x2d,0x3, 0x7e,0x1f,0x13,0x8a,0x2d,0x30,0x12,0xb3,0xc9,0x9d,0x35, ++0x1b,0x1a,0x10,0xb, 0xf0,0x12,0xb3,0xc9,0x7e,0x73,0x2a,0x6e,0xa, 0x27,0x2d,0x25, ++0xa, 0x3f,0xbd,0x32,0x48,0xc8,0xda,0xf8,0x22,0x7e,0xa3,0x2a,0x6d,0x74,0x2, 0xa4, ++0x22,0xca,0x3b,0x7c,0xfb,0x75,0x3d,0x0, 0x7e,0xb3,0x2a,0x6f,0xf5,0x42,0x7e,0xb3, ++0x2a,0x70,0xf5,0x43,0x75,0x44,0x28,0x7e,0xd3,0x28,0x84,0xe4,0x7a,0xb3,0x31,0xfb, ++0x7a,0xb3,0x31,0xf7,0x7a,0xb3,0x31,0xf8,0x7e,0x8, 0x31,0xfc,0x12,0xb7,0xaa,0xe4, ++0x12,0x21,0x16,0x12,0xb7,0xaa,0x3e,0x34,0x7e,0x8, 0x32,0x1c,0xe4,0x12,0x21,0x16, ++0xbe,0xd0,0x2, 0x50,0x2, 0xe1,0xa7,0x6c,0xcc,0xe1,0xa1,0x12,0x67,0xed,0xf5,0x24, ++0x9, 0xb3,0x26,0xfb,0xf5,0x25,0x4c,0xcc,0x68,0x8, 0xa, 0x3c,0x9, 0xb3,0x31,0xfc, ++0x70,0xa, 0xa, 0x3c,0xb, 0x34,0xa, 0x2c,0x19,0x72,0x31,0xfc,0x7c,0xbd,0x14,0xbc, ++0xbc,0x78,0x2, 0xe1,0xa7,0xa, 0x5c,0xb, 0x54,0xf5,0x2e,0xe1,0x98,0x7e,0x71,0x2e, ++0x12,0xb7,0xd0,0x7a,0xa1,0x26,0x9, 0xb3,0x26,0xfb,0xf5,0x27,0xa, 0x2a,0xe5,0x24, ++0x12,0x3c,0xf, 0x7c,0xb7,0xf5,0x28,0xe5,0x27,0xa, 0x2b,0x12,0x3c,0xd, 0x7c,0xb7, ++0xf5,0x29,0xe5,0x28,0xbe,0xb0,0x5, 0x40,0x2, 0xe1,0x96,0xe5,0x29,0xbe,0xb0,0x5, ++0x40,0x2, 0xe1,0x96,0x12,0xb7,0xb1,0x12,0x65,0x8f,0x7a,0xb3,0x31,0xfa,0x85,0x25, ++0x54,0x85,0x26,0x55,0x85,0x27,0x56,0x7e,0x8, 0x0, 0x31,0x7e,0x18,0x0, 0x33,0xe5, ++0x24,0x12,0xb8,0xd0,0x75,0x3d,0x0, 0x6c,0xee,0x75,0x30,0x0, 0xe5,0x24,0x7e,0x71, ++0x25,0x12,0x2c,0x63,0x7a,0x35,0x35,0xe5,0x26,0x7e,0x71,0x27,0x12,0x2c,0x63,0x7a, ++0x35,0x37,0x7e,0x35,0x35,0xbe,0x35,0x37,0x8, 0x5, 0x7e,0x35,0x37,0x80,0x3, 0x7e, ++0x35,0x35,0x7a,0x35,0x3b,0xe, 0x34,0x7a,0x35,0x39,0xe5,0x28,0xbe,0xb0,0x1, 0x38, ++0x2c,0xe5,0x29,0xbe,0xb0,0x1, 0x38,0x25,0x7c,0xbf,0x30,0xe1,0x20,0xe5,0x26,0x7e, ++0x71,0x25,0x12,0x2c,0x63,0x7d,0x43,0xe5,0x24,0x7e,0x71,0x27,0x12,0x2c,0x63,0x2d, ++0x34,0xbe,0x35,0x39,0x18,0x2, 0xe1,0x31,0x75,0x30,0x1, 0xe1,0x31,0xe5,0x28,0xbe, ++0xb0,0x1, 0x38,0x9, 0xe5,0x29,0xbe,0xb0,0x1, 0x38,0x2, 0xe1,0x31,0xe5,0x28,0xbe, ++0xb0,0x5, 0x40,0x2, 0xe1,0x31,0xe5,0x29,0xbe,0xb0,0x5, 0x40,0x2, 0xe1,0x31,0x7c, ++0xbf,0x20,0xe0,0x2, 0xe1,0x31,0x6d,0x33,0x7a,0x35,0x4d,0x75,0x4f,0x0, 0x7a,0x35, ++0x50,0x75,0x52,0x0, 0xc2,0x2, 0xc2,0x3, 0xe5,0x26,0xbe,0xb1,0x24,0x28,0x4, 0xe5, ++0x24,0x80,0x2, 0xe5,0x26,0xf5,0x2a,0xe5,0x26,0xbe,0xb1,0x24,0x50,0x4, 0xe5,0x24, ++0x80,0x2, 0xe5,0x26,0xf5,0x2c,0xe5,0x27,0xbe,0xb1,0x25,0x28,0x4, 0xe5,0x25,0x80, ++0x2, 0xe5,0x27,0xf5,0x2b,0xe5,0x27,0xbe,0xb1,0x25,0x50,0x4, 0xe5,0x25,0x80,0x2, ++0xe5,0x27,0xf5,0x2d,0xe5,0x2c,0xbe,0xb1,0x2a,0x78,0x29,0xd2,0x2, 0xe5,0x2a,0x60, ++0x8, 0xe5,0x42,0x14,0xbe,0xb1,0x2a,0x78,0x2, 0xd2,0x3, 0xe5,0x2a,0xbe,0xb0,0x0, ++0x28,0x2, 0x15,0x2a,0xe5,0x42,0xa, 0x2b,0x1b,0x24,0xe5,0x2c,0xa, 0x3b,0xbd,0x32, ++0x58,0x2, 0x5, 0x2c,0xe5,0x2d,0xbe,0xb1,0x2b,0x78,0x29,0xd2,0x2, 0xe5,0x2b,0x60, ++0x8, 0xe5,0x43,0x14,0xbe,0xb1,0x2b,0x78,0x2, 0xd2,0x3, 0xe5,0x2b,0xbe,0xb0,0x0, ++0x28,0x2, 0x15,0x2b,0xe5,0x43,0xa, 0x2b,0x1b,0x24,0xe5,0x2d,0xa, 0x3b,0xbd,0x32, ++0x58,0x2, 0x5, 0x2d,0x85,0x2a,0x3e,0x80,0x5b,0x85,0x2b,0x3f,0x80,0x4d,0xe5,0x3e, ++0x7e,0x71,0x3f,0x12,0x2c,0x63,0x7a,0x35,0x40,0xe5,0x2a,0xbe,0xb1,0x3e,0x68,0x15, ++0xe5,0x2c,0xbe,0xb1,0x3e,0x68,0xe, 0xe5,0x2b,0xbe,0xb1,0x3f,0x68,0x7, 0xe5,0x2d, ++0xbe,0xb1,0x3f,0x78,0xd, 0x7e,0x35,0x40,0x2e,0x35,0x4d,0x7a,0x35,0x4d,0x5, 0x4f, ++0x80,0x17,0x5, 0x52,0x7e,0x35,0x40,0x2e,0x35,0x50,0x7a,0x35,0x50,0x7e,0x35,0x33, ++0xbe,0x35,0x40,0x58,0x2, 0x5, 0x3d,0xb, 0xe0,0x5, 0x3f,0xe5,0x2d,0xbe,0xb1,0x3f, ++0x50,0xac,0x5, 0x3e,0xe5,0x2c,0xbe,0xb1,0x3e,0x50,0x9e,0xe5,0x2c,0x7e,0x71,0x2b, ++0x12,0x2c,0x63,0x7e,0x45,0x4d,0x9d,0x43,0xe5,0x2a,0x7e,0x71,0x2d,0x12,0x2c,0x63, ++0x9d,0x43,0xe5,0x2a,0x7e,0x71,0x2b,0x12,0x2c,0x63,0x9d,0x43,0xe5,0x2c,0x7e,0x71, ++0x2d,0x12,0x2c,0x63,0x7d,0x23,0x7d,0x34,0x9d,0x32,0x7a,0x35,0x4d,0x7e,0x35,0x37, ++0x2e,0x35,0x35,0x7a,0x35,0x39,0x30,0x2, 0x10,0x20,0x3, 0xd, 0x7e,0x35,0x4d,0x9e, ++0x35,0x39,0x7a,0x35,0x4d,0x15,0x4f,0x15,0x4f,0xe5,0x4f,0xbe,0xb0,0x4, 0x28,0x6, ++0xe5,0x4f,0x24,0xfc,0xf5,0x4f,0x7e,0x35,0x4d,0xbe,0x34,0x0, 0x0, 0x58,0x5, 0x6d, ++0x33,0x7a,0x35,0x4d,0x75,0x44,0x28,0xe5,0x42,0x14,0xbe,0xb1,0x24,0x68,0xd, 0xbe, ++0xb1,0x26,0x68,0x8, 0xe5,0x24,0x60,0x4, 0xe5,0x26,0x70,0x8, 0x12,0xb7,0xbd,0x28, ++0x3, 0x75,0x44,0x2c,0x7e,0x15,0x50,0x1a,0x2, 0x1a,0x0, 0x7e,0x35,0x4d,0x1a,0x26, ++0x1a,0x24,0x2f,0x10,0xe5,0x44,0xa, 0x1b,0x6d,0x0, 0x12,0x1f,0x20,0x7f,0x71,0x7a, ++0x7d,0x45,0x7e,0x15,0x39,0x1a,0x2, 0x1a,0x0, 0x7e,0x35,0x31,0x1a,0x26,0x1a,0x24, ++0x12,0x1f,0x20,0xe5,0x52,0xa, 0xdb,0x6d,0xcc,0xe5,0x4f,0xa, 0x1b,0x6d,0x0, 0x2f, ++0x6, 0x12,0x1f,0x20,0x7a,0x1d,0x49,0xbf,0x71,0x8, 0x3, 0x75,0x30,0x2, 0xc2,0x1, ++0x20,0xc, 0xe, 0x12,0xb7,0xb1,0x12,0xb9,0x5f,0x92,0x1, 0x20,0x1, 0x3, 0x75,0x30, ++0x0, 0xe5,0x30,0xbe,0xb0,0x0, 0x28,0x5e,0xe5,0x30,0xa, 0x3b,0x2e,0x34,0x31,0xf6, ++0x12,0xb7,0xc5,0xe5,0x2e,0xa, 0x3b,0x9, 0xa3,0x31,0xfc,0x4c,0xaa,0x78,0xc, 0xa, ++0x2c,0x9, 0xb2,0x31,0xfc,0x19,0xb3,0x31,0xfc,0x80,0x3b,0xa, 0x2c,0x9, 0xb2,0x31, ++0xfc,0xf5,0x53,0xbc,0xba,0x28,0x3, 0x7a,0xa1,0x53,0x75,0x2f,0x0, 0x80,0x22,0x9, ++0x33,0x31,0xfc,0xe5,0x2f,0xa, 0x2b,0x9, 0x22,0x31,0xfc,0xbc,0x23,0x68,0xa, 0xa, ++0xc, 0x9, 0x30,0x31,0xfc,0xbc,0x23,0x78,0x6, 0xe5,0x53,0x19,0xb2,0x31,0xfc,0x5, ++0x2f,0xbe,0xd1,0x2f,0x38,0xd9,0x5, 0x2e,0xbe,0xd1,0x2e,0x28,0x2, 0x81,0x4d,0xb, ++0xc0,0xbc,0xdc,0x28,0x2, 0x81,0x1b,0xda,0x3b,0x22,0x90,0x60,0x9a,0x93,0xa, 0x3b, ++0x22,0xe5,0x24,0x7e,0x71,0x25,0x7e,0x61,0x26,0x7e,0x51,0x27,0x22,0x7e,0x73,0x31, ++0xfa,0xbe,0x70,0x5, 0x22,0x7e,0x39,0xb0,0x4, 0x7a,0x39,0xb0,0x22,0x7e,0x71,0x24, ++0x74,0x2, 0xac,0x7b,0x9, 0xa3,0x26,0xfa,0x22,0x7e,0x37,0x28,0x8a,0xbe,0x34,0x3, ++0xe8,0x8, 0xa, 0x12,0x3f,0x8d,0xbe,0xb0,0x8, 0x48,0x2, 0xd3,0x22,0xc3,0x22,0xca, ++0x3b,0x7c,0x45,0x7c,0x6, 0x7c,0x57,0x7c,0x1b,0x7e,0x34,0x4, 0xfc,0x7e,0xb3,0x26, ++0x83,0x7e,0xf3,0x2a,0x6e,0x7c,0x31,0x7c,0xe0,0x7c,0x25,0x7c,0xa4,0xbc,0x1, 0x50, ++0x4, 0x7c,0x30,0x7c,0xe1,0xbc,0x45,0x50,0x4, 0x7c,0x24,0x7c,0xa5,0xbe,0xb0,0x1, ++0x50,0x2, 0x1, 0xb8,0x7e,0x90,0x2, 0xac,0x9f,0x7e,0x50,0x2, 0xac,0x53,0x2d,0x24, ++0x2d,0x23,0xb, 0x28,0x20,0x7e,0x10,0x2, 0xac,0x1e,0x2d,0x4, 0x2d,0x3, 0xb, 0x8, ++0x40,0xa, 0x3, 0xb, 0x4, 0x7c,0x31,0x80,0x2a,0x7e,0xd0,0x2, 0xac,0xdf,0x7e,0x10, ++0x2, 0xac,0x13,0x2d,0x6, 0x12,0xb8,0xbc,0xbd,0xdb,0x58,0x15,0xad,0xf4,0xbd,0xdf, ++0x58,0xf, 0xbe,0x24,0x0, 0x0, 0x8, 0x9, 0xbe,0x44,0x0, 0x0, 0x8, 0x3, 0xc3,0x80, ++0x48,0xb, 0x30,0xbc,0xe3,0x38,0xd2,0x7e,0x50,0x2, 0xac,0x52,0x2d,0x23,0xb, 0x28, ++0x20,0x7e,0x90,0x2, 0xac,0x9a,0x2d,0x43,0xb, 0x48,0x40,0xa, 0x12,0xb, 0x14,0x80, ++0x23,0x7e,0x10,0x2, 0xac,0x13,0x12,0xb8,0xbc,0xbd,0xdb,0x58,0x15,0xad,0xf4,0xbd, ++0xdf,0x58,0xf, 0xbe,0x24,0x0, 0x0, 0x8, 0x9, 0xbe,0x44,0x0, 0x0, 0x8, 0x3, 0xc3, ++0x80,0x7, 0xb, 0x30,0xbc,0xa3,0x38,0xd9,0xd3,0xda,0x3b,0x22,0x2d,0x3, 0xb, 0x8, ++0x0, 0x7e,0xf4,0x0, 0x9, 0x7d,0xb2,0xad,0xbf,0x7e,0xd4,0x0, 0xa, 0xad,0xd0,0x22, ++0xca,0xf8,0x7c,0xfb,0x7f,0x61,0x7f,0x50,0x7e,0x34,0x22,0xe3,0x7e,0x24,0x0, 0xff, ++0x7e,0x14,0x1f,0x70,0x74,0x2a,0x12,0x1f,0xe2,0x7e,0x48,0x1f,0x70,0x12,0xb7,0xd9, ++0x92,0xc, 0x7c,0xbf,0x7e,0x71,0x54,0x12,0x2c,0x63,0x7d,0x43,0xe5,0x55,0x7e,0x71, ++0x56,0x12,0x2c,0x63,0x2d,0x34,0xe, 0x34,0x7f,0x4, 0x7e,0x50,0x7, 0xb, 0xa, 0x50, ++0xbd,0x53,0x58,0x10,0x69,0x30,0x0, 0x2, 0x1b,0x5a,0x30,0x69,0x30,0x0, 0x4, 0x1b, ++0x6a,0x30,0x80,0x8, 0x2e,0x14,0x0, 0x6, 0x1b,0x50,0x78,0xe1,0x12,0xb7,0xbd,0x28, ++0x2b,0xb, 0x5a,0x20,0x7e,0x34,0x0, 0xd, 0xad,0x32,0x7e,0x24,0x0, 0x10,0x12,0x1e, ++0xee,0x1b,0x5a,0x30,0xb, 0x6a,0x30,0x1a,0x26,0x1a,0x24,0x7e,0x14,0x0, 0xd, 0x12, ++0x1f,0x31,0x7e,0x8, 0x0, 0x10,0x12,0x1f,0x8d,0x1b,0x6a,0x30,0xda,0xf8,0x22,0x12, ++0xb7,0xef,0x92,0x4, 0x30,0x4, 0xc, 0x7e,0xb3,0x32,0x58,0xbe,0xb0,0xfa,0x50,0x11, ++0x4, 0x80,0xa, 0x7e,0xb3,0x32,0x58,0xbe,0xb0,0x0, 0x28,0x5, 0x14,0x7a,0xb3,0x32, ++0x58,0x7e,0xb3,0x32,0x58,0x70,0x2, 0xc3,0x22,0xd3,0x22,0x7e,0x8, 0x32,0x59,0x7e, ++0x34,0x0, 0xb4,0xe4,0x2, 0x21,0x16,0x7c,0x4b,0x74,0x2, 0xac,0xb4,0x9, 0x55,0x26, ++0xfa,0x9, 0x65,0x26,0xfb,0x7e,0x73,0x28,0x8c,0xbc,0x75,0x78,0xa, 0x7e,0x73,0x28, ++0x8d,0xbc,0x76,0x78,0x2, 0xd3,0x22,0xc3,0x22,0x6c,0xaa,0x80,0x1c,0x7e,0x50,0x2, ++0xac,0x5a,0x49,0x12,0x13,0xc6,0x49,0x32,0x13,0x8e,0xbd,0x31,0x28,0x9, 0x2e,0x24, ++0x13,0x8e,0x9d,0x31,0x1b,0x28,0x30,0xb, 0xa0,0x7e,0xb3,0x2a,0x6e,0xbc,0xba,0x38, ++0xdc,0x22,0xca,0x78,0xa9,0x31,0xe5,0x6, 0xa9,0xd5,0xea,0xa9,0xc5,0xea,0xa9,0x30, ++0xe5,0x19,0xa9,0xd0,0x9e,0xa9,0xd4,0x9e,0x5, 0x5d,0x7e,0x73,0x3b,0x56,0xbe,0x71, ++0x5d,0x38,0x2, 0xd2,0x1a,0xa9,0xd0,0x9e,0xa9,0xd7,0x9e,0xa9,0x34,0xe5,0x5, 0xa9, ++0xc4,0xcd,0xc2,0x95,0xa9,0x32,0xe5,0x3, 0xa9,0xc2,0xcd,0xa9,0x33,0xe5,0x3, 0xa9, ++0xc3,0xcd,0xa9,0x37,0xe5,0x3, 0xa9,0xc7,0xcd,0xa9,0x36,0xe5,0x3, 0xa9,0xc6,0xcd, ++0xda,0x78,0x32,0xc2,0x9a,0xa9,0xd4,0xa6,0xc2,0x88,0xd2,0xa8,0x22,0x7e,0x14,0xd7, ++0xe8,0x7e,0x4, 0x0, 0xff,0x7e,0x34,0x47,0x52,0x7e,0x24,0x55,0x50,0x79,0x30,0x0, ++0x2, 0x1b,0xa, 0x20,0x7e,0x34,0x45,0x20,0x7e,0x24,0x41,0x44,0x79,0x30,0x0, 0x6, ++0x79,0x20,0x0, 0x4, 0x7e,0x34,0x99,0x33,0x7e,0x24,0x66,0xcc,0x79,0x30,0x0, 0xa, ++0x79,0x20,0x0, 0x8, 0x7e,0x34,0x41,0x47,0x7e,0x24,0x46,0x4c,0x79,0x30,0x0, 0xe, ++0x79,0x20,0x0, 0xc, 0x22,0xa9,0xd0,0xce,0xa2,0x0, 0xa9,0x95,0xc9,0x22,0xa9,0xd5, ++0xcb,0x74,0x10,0x12,0x49,0x2a,0x7c,0x7b,0x12,0x4b,0xb1,0x30,0xe7,0x3, 0x7e,0x70, ++0x2, 0xd2,0xcd,0x7e,0x24,0x0, 0xef,0x7e,0xf, 0x3b,0x8, 0x79,0x20,0x0, 0x84,0x7e, ++0x24,0x20,0x5f,0x7e,0xf, 0x3b,0x8, 0x79,0x20,0x0, 0x82,0x7e,0x24,0x41,0x0, 0x7e, ++0xf, 0x3b,0x8, 0x79,0x20,0x0, 0x90,0x7c,0x67,0x6c,0x77,0x2e,0x34,0x0, 0xc1,0x7e, ++0xf, 0x3b,0x8, 0x79,0x30,0x0, 0x86,0x7e,0x34,0x29,0x90,0x7e,0xf, 0x3b,0x8, 0x79, ++0x30,0x0, 0x8a,0x7e,0x34,0x6a,0xd1,0x7e,0xf, 0x3b,0x8, 0x79,0x30,0x0, 0x8c,0x7e, ++0x34,0x3, 0x61,0x7e,0xf, 0x3b,0x8, 0x79,0x30,0x0, 0x8e,0x22,0xa9,0xc6,0xeb,0xa9, ++0xd6,0xac,0xa9,0xd6,0xec,0xd2,0x86,0xa9,0xc2,0xeb,0xa9,0xd2,0xac,0xa9,0xd2,0xec, ++0xd2,0x82,0x22,0x75,0x9a,0x2f,0xa9,0xd1,0x99,0xd2,0x9c,0xa9,0xd6,0xdf,0x22,0xc2, ++0x8e,0x43,0x89,0x20,0x75,0x8d,0x1, 0x75,0x8b,0x0, 0xd2,0x8e,0xd2,0xab,0x22,0x75, ++0xb7,0x0, 0x75,0xb8,0x0, 0x75,0xf7,0x0, 0x75,0xf8,0x0, 0xa9,0xd0,0xb7,0xd2,0xb8, ++0xa9,0xd5,0xb7,0xd2,0xbd,0xa9,0xd0,0xf7,0xd2,0xf8,0xa9,0xc1,0xb7,0xc2,0xb9,0xa9, ++0xc3,0xb7,0xc2,0xbb,0xa9,0xc6,0xb7,0xc2,0xbe,0x22,0x7e,0x37,0x3b,0x54,0xb, 0x34, ++0x7a,0x37,0x3b,0x54,0xbe,0x34,0xff,0x0, 0x40,0x8, 0x7e,0x34,0xff,0x0, 0x7a,0x37, ++0x3b,0x54,0x22,0x6d,0x22,0x80,0x13,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6, ++0xb3,0xe5,0xb5,0x7a,0xb, 0xb0,0xb, 0x14,0xb, 0x24,0xbd,0x32,0x38,0xe9,0x22,0x7f, ++0x71,0x69,0x37,0x0, 0x2, 0x7d,0x53,0x12,0xbb,0xe9,0xb, 0x7a,0x20,0x2d,0x25,0x1b, ++0xa, 0x20,0x69,0x27,0x0, 0x4, 0x7d,0x52,0xc4,0x54,0xf0,0x7c,0xab,0xe4,0x1e,0x34, ++0x1e,0x34,0x2d,0x35,0x79,0x30,0x0, 0x2, 0x69,0x37,0x0, 0x6, 0x7d,0x53,0x7c,0xab, ++0xe4,0x3e,0x54,0x3e,0x54,0x1e,0x24,0x1e,0x24,0x1e,0x24,0x1e,0x24,0x2d,0x25,0x79, ++0x20,0x0, 0x4, 0x69,0x27,0x0, 0x8, 0x7c,0x45,0x6c,0x55,0x12,0x25,0x6f,0x1e,0x34, ++0x1e,0x34,0x2d,0x32,0x79,0x30,0x0, 0x6, 0x22,0x3, 0x3, 0x54,0xc0,0x7c,0xab,0xe4, ++0x22,0x6d,0x33,0x90,0x60,0x91,0xe4,0x93,0xbe,0xb0,0x0, 0x28,0x3, 0x2, 0xbc,0xee, ++0x90,0x60,0x92,0xe4,0x93,0xbe,0xb0,0x0, 0x28,0x3, 0x2, 0xbc,0x55,0x22,0x12,0xaf, ++0xf2,0x7e,0x34,0xd, 0xc8,0x7e,0xb3,0x2a,0x6d,0x12,0xbc,0x2a,0x12,0xbb,0xf1,0x7a, ++0x37,0x3b,0x1e,0x74,0x1, 0x7a,0xb3,0x16,0x91,0x22,0x7a,0xb3,0x24,0xf2,0x7e,0x53, ++0x2a,0x6e,0x7a,0x53,0x24,0xf3,0x7a,0x37,0x24,0xfa,0xe4,0x7a,0xb3,0x24,0xf4,0x7a, ++0xb3,0x24,0xf5,0x7e,0x34,0x40,0x0, 0x7a,0x37,0x24,0xf6,0x7e,0x34,0x0, 0x20,0x12, ++0x7f,0xcd,0x2, 0xd, 0x7, 0xca,0xf8,0x6d,0xee,0x7d,0xfe,0x7e,0x83,0x2a,0x6e,0xa, ++0xd8,0x90,0x60,0x94,0xe4,0x93,0xb4,0xff,0x2f,0x7e,0x8, 0x13,0x8e,0x6c,0xaa,0x80, ++0x18,0x7e,0x70,0x2, 0xac,0x7a,0x49,0x23,0x13,0xfe,0x7f,0x50,0x2d,0xb3,0xb, 0x5a, ++0xc0,0x9d,0xc2,0x59,0xc3,0x13,0xc6,0xb, 0xa0,0xbc,0x8a,0x38,0xe4,0x90,0x60,0x92, ++0xe4,0x93,0x7c,0x9b,0x6d,0xdd,0x80,0x11,0x7e,0x8, 0x13,0xfe,0x90,0x60,0x92,0xe4, ++0x93,0xa, 0xcb,0x1b,0xc4,0x7d,0x3c,0x7c,0x97,0x6c,0xff,0x80,0x38,0x6c,0xaa,0x80, ++0x28,0xa, 0x3a,0x7d,0x23,0x2d,0x2e,0x3e,0x24,0x49,0xc2,0x13,0xfe,0x2d,0x3d,0x3e, ++0x34,0x2d,0x31,0x7d,0x20,0xb, 0x1a,0xb0,0x7d,0x3c,0x9d,0x3b,0x12,0x21,0x48,0x7d, ++0xa3,0xbd,0xfa,0x58,0x2, 0x7d,0xfa,0xb, 0xa0,0xbc,0x8a,0x38,0xd4,0xa, 0xc8,0x2d, ++0xec,0x2d,0xdc,0xb, 0xf0,0xbc,0x9f,0x38,0xc4,0x7d,0x3f,0xda,0xf8,0x22,0xca,0xf8, ++0x6d,0x44,0x7e,0xf3,0x2a,0x6e,0x90,0x60,0x93,0xe4,0x93,0xa, 0xfb,0x7e,0xb3,0x2a, ++0x6d,0xa, 0xeb,0x2d,0xef,0xa, 0xff,0xad,0xfe,0xa, 0xef,0x2d,0xef,0x90,0x60,0x94, ++0xe4,0x93,0xb4,0xff,0x31,0x7e,0x8, 0x13,0x8e,0x6c,0xaa,0x80,0x23,0xa, 0xda,0x2d, ++0xdf,0x3e,0xd4,0x7e,0x1f,0x3b,0x21,0x2d,0x3d,0xb, 0x1a,0xd0,0x7e,0x50,0x2, 0xac, ++0x5a,0x7f,0x50,0x2d,0xb2,0xb, 0x5a,0x30,0x9d,0x3d,0x59,0x32,0x13,0xc6,0xb, 0xa0, ++0xbc,0xfa,0x38,0xd9,0x80,0xa, 0x7d,0x5e,0x3e,0x54,0x7e,0xf, 0x3b,0x21,0x2d,0x15, ++0x6c,0xaa,0x80,0x2c,0xa, 0xea,0x2d,0xef,0x3e,0xe4,0x7e,0x1f,0x3b,0x21,0x2d,0x3e, ++0xb, 0x1a,0xe0,0x7e,0x70,0x2, 0xac,0x7a,0x2d,0x31,0x7d,0x20,0xb, 0x1a,0xd0,0x7d, ++0x3e,0x9d,0x3d,0x12,0x21,0x48,0x7d,0xc3,0xbd,0x4c,0x58,0x2, 0x7d,0x4c,0xb, 0xa0, ++0xbc,0xfa,0x38,0xd0,0x7d,0x34,0xda,0xf8,0x22,0x7e,0xb3,0x39,0x49,0x22,0x7c,0xab, ++0x9f,0x11,0x30,0x0, 0x22,0x6c,0x99,0x80,0x1a,0xa, 0xf9,0x2d,0xf1,0x7d,0xe0,0x7e, ++0x7b,0xb0,0x7e,0x78,0x0, 0x1, 0x60,0x5, 0x2f,0x77,0x14,0x78,0xfb,0x4d,0x3f,0x4d, ++0x2e,0xb, 0x90,0xbc,0xa9,0x38,0xe2,0x22,0xca,0xf8,0x90,0x60,0x51,0xe4,0x93,0x7c, ++0xfb,0x7e,0x8, 0x1f,0x34,0x12,0xbe,0x44,0x7e,0x8, 0x1f,0x3c,0x12,0xbe,0x4c,0xd2, ++0x0, 0x7e,0x8, 0x2a,0xdc,0x7c,0xbf,0x12,0xbd,0x8e,0x7e,0x8, 0x1f,0x34,0x7a,0xf, ++0x1f,0x58,0x7f,0x1, 0x7a,0x17,0x1f,0x5c,0x7d,0x32,0x7a,0x37,0x1f,0x5e,0x7e,0x18, ++0x1f,0x3c,0x7a,0x1f,0x1f,0x64,0x6c,0x77,0x80,0xe, 0x12,0xbe,0x94,0x50,0x7, 0x12, ++0xbe,0x8b,0x19,0x51,0x1f,0x3c,0xb, 0x70,0xbc,0xf7,0x38,0xee,0x12,0xbe,0x31,0xe4, ++0x12,0xbe,0x39,0xe4,0x12,0xc, 0x9b,0x6d,0x33,0x7a,0x37,0x1f,0x5c,0x7a,0x37,0x1f, ++0x5e,0x12,0xbe,0x31,0x74,0x1, 0x12,0xbe,0x39,0x74,0x1, 0x12,0xc, 0x9b,0xda,0xf8, ++0x22,0xa9,0xc6,0xea,0x7e,0x8, 0x1f,0x58,0x22,0x12,0xc, 0x9b,0xa9,0xd6,0xea,0x7e, ++0x8, 0x1f,0x58,0x22,0x7e,0x34,0x0, 0x8, 0xe4,0x2, 0x21,0x16,0x7e,0x34,0x0, 0x1c, ++0x74,0x3f,0x2, 0x21,0x16,0x7e,0x8, 0x1f,0x34,0x12,0xbe,0x4c,0x6c,0x77,0x80,0xe, ++0x12,0xbe,0x94,0x50,0x7, 0x12,0xbe,0x8b,0x19,0x51,0x1f,0x34,0xb, 0x70,0x7e,0x53, ++0x2a,0x6e,0xbc,0x57,0x38,0xea,0xa9,0xc6,0xea,0x7e,0x8, 0x1f,0x34,0xe4,0x12,0x11, ++0x38,0xa9,0xd6,0xea,0x7e,0x8, 0x1f,0x34,0x2, 0x11,0x38,0xa, 0x27,0x9, 0x52,0x2b, ++0x44,0xa, 0x16,0x22,0xa, 0x27,0x9, 0x62,0x2a,0xdc,0xbe,0x60,0x1c,0x22,0x7c,0x57, ++0x7c,0xab,0x6c,0x77,0x80,0x50,0xa, 0x47,0x7e,0x7d,0x24,0x2d,0xf4,0x7e,0x7b,0x60, ++0xa, 0x46,0x2e,0x44,0x20,0xab,0x7a,0x91,0x82,0x7a,0x81,0x83,0xe4,0x93,0x7c,0x6b, ++0xbe,0x60,0xd, 0x38,0x12,0x7e,0xd4,0x0, 0x1, 0x7c,0xb6,0x60,0x5, 0x3e,0xd4,0x14, ++0x78,0xfb,0x7e,0x7d,0x28,0x80,0x15,0x9e,0x60,0xe, 0x7e,0xd4,0x0, 0x1, 0x7c,0xb6, ++0x60,0x5, 0x3e,0xd4,0x14,0x78,0xfb,0x7e,0x7d,0x28,0xb, 0xf5,0xb, 0x7a,0x40,0x4d, ++0x4d,0x1b,0x7a,0x40,0xb, 0x70,0xbc,0x57,0x38,0xac,0x6c,0x77,0x80,0x58,0xa, 0x27, ++0x7f,0x70,0x2d,0xf2,0x7e,0x7b,0x60,0xbe,0x60,0xd, 0x38,0x11,0x12,0xbf,0x5b,0x60, ++0x5, 0x3e,0x44,0x14,0x78,0xfb,0x7e,0x7d,0x28,0xb, 0xf6,0x80,0x2f,0xbe,0x60,0x1b, ++0x38,0x16,0x9e,0x60,0xe, 0x12,0xbf,0x5b,0x60,0x5, 0x3e,0x44,0x14,0x78,0xfb,0x7e, ++0x7d,0x28,0x2e,0xf4,0x0, 0x6, 0x80,0x14,0x9e,0x60,0x1c,0x12,0xbf,0x5b,0x60,0x5, ++0x3e,0x44,0x14,0x78,0xfb,0x7e,0x7d,0x28,0x2e,0xf4,0x0, 0x8, 0xb, 0x7a,0x20,0x4d, ++0x24,0x1b,0x7a,0x20,0xb, 0x70,0xbc,0xa7,0x38,0xa4,0x22,0x7e,0x44,0x0, 0x1, 0x7c, ++0xb6,0x22,0x7c,0x7b,0xa5,0xbf,0x0, 0x3, 0x74,0x10,0x22,0xbe,0x70,0x4, 0x38,0x4, ++0x6c,0xaa,0x80,0x21,0xbe,0x70,0x8, 0x38,0x5, 0x7e,0xa0,0x1, 0x80,0x17,0xbe,0x70, ++0x10,0x38,0x5, 0x7e,0xa0,0x2, 0x80,0xd, 0xbe,0x70,0x20,0x38,0x5, 0x7e,0xa0,0x3, ++0x80,0x3, 0x7e,0xa0,0x4, 0xa, 0x47,0x3e,0x44,0x3e,0x44,0x3e,0x44,0x7c,0xba,0x60, ++0x5, 0x1e,0x44,0x14,0x78,0xfb,0x7c,0xb9,0x22,0x7a,0xb3,0x39,0x54,0x22,0x90,0x61, ++0x81,0xe4,0x93,0x22,0x7e,0x43,0x2a,0x6e,0x7e,0x53,0x2a,0x6d,0xac,0x54,0x7e,0x17, ++0x28,0xa1,0x12,0xc9,0x26,0x6d,0x0, 0x80,0x37,0x7d,0x40,0x3e,0x44,0x7e,0x7f,0x3b, ++0x21,0x2d,0xf4,0xb, 0x7a,0x30,0xbd,0x13,0x58,0x10,0x7d,0xf4,0x2e,0xf4,0x8, 0xa, ++0xb, 0xf8,0x50,0x9d,0x51,0x1b,0xf8,0x50,0x80,0x14,0x6d,0x55,0x9d,0x51,0xbd,0x53, ++0x8, 0xc, 0x2e,0x44,0x8, 0xa, 0xb, 0x48,0x50,0x2d,0x51,0x1b,0x48,0x50,0xb, 0x4, ++0xbd,0x20,0x38,0xc5,0x22,0x7e,0x27,0x28,0xa3,0x6d,0x11,0x9d,0x12,0x6c,0xaa,0x80, ++0x64,0x30,0x5, 0x2e,0x7e,0x90,0x2, 0xac,0x9a,0x49,0x34,0x5, 0xf8,0x49,0x4, 0x4, ++0x0, 0xbd,0x2, 0x8, 0x11,0x7e,0xb3,0x25,0xf6,0xb4,0x1, 0x16,0x7d,0xf2,0x2d,0xf3, ++0x59,0xf4,0x5, 0xf8,0x80,0xc, 0xbd,0x1, 0x58,0x8, 0x7d,0x3, 0x9d,0x2, 0x59,0x4, ++0x5, 0xf8,0x30,0x7, 0x2e,0x7e,0x90,0x2, 0xac,0x9a,0x49,0x34,0x6, 0x76,0x49,0x4, ++0x4, 0x7e,0xbd,0x2, 0x8, 0x11,0x7e,0xb3,0x25,0xf6,0xb4,0x1, 0x16,0x7d,0xf2,0x2d, ++0xf3,0x59,0xf4,0x6, 0x76,0x80,0xc, 0xbd,0x1, 0x58,0x8, 0x7d,0x3, 0x9d,0x2, 0x59, ++0x4, 0x6, 0x76,0xb, 0xa0,0x7e,0xb3,0x2a,0x74,0xa, 0xb, 0x7e,0xb3,0x2a,0x73,0xa, ++0x4b,0x2d,0x40,0xa, 0xa, 0xbd,0x4, 0x48,0x88,0x22,0x7c,0x7b,0xa, 0x57,0x9e,0x54, ++0x0, 0x20,0xe, 0x54,0xe, 0x54,0xe, 0x54,0xe, 0x54,0x7c,0xab,0x7c,0x67,0x5e,0x60, ++0xf0,0xa5,0xbe,0x20,0x1d,0x7c,0xb7,0x54,0xf, 0x7e,0x24,0x0, 0x1, 0x60,0x5, 0x3e, ++0x24,0x14,0x78,0xfb,0x7e,0x73,0x3b,0x4b,0xa, 0x47,0x5d,0x42,0x7e,0x73,0x39,0x7a, ++0x80,0x36,0xa5,0xbe,0x30,0x18,0x12,0xc0,0xfd,0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb, ++0x7e,0x53,0x3b,0x4c,0xa, 0x45,0x5d,0x43,0x7e,0x73,0x39,0x7b,0x80,0x1a,0x12,0xc0, ++0xfd,0x60,0x5, 0x3e,0x34,0x14,0x78,0xfb,0xa, 0x2a,0x9, 0xb2,0x3b,0x4b,0xa, 0x4b, ++0x5d,0x43,0xa, 0x5a,0x9, 0x75,0x39,0x7c,0xa, 0x57,0x5d,0x54,0x22,0x7c,0xb7,0x54, ++0xf, 0x7e,0x34,0x0, 0x1, 0x22,0x7e,0xb3,0x39,0x79,0x70,0x6, 0x12,0xc1,0x3f,0x2, ++0xc2,0x98,0x12,0x58,0xe3,0x12,0xc2,0x9e,0x50,0xa, 0x12,0xaf,0x4c,0x7c,0x3b,0x12, ++0xc1,0x3f,0x80,0x5, 0x12,0xc1,0x45,0x7c,0x3b,0x4c,0x33,0x68,0x11,0x7c,0xb3,0x12, ++0xc0,0x8a,0x60,0xa, 0x7a,0x33,0x39,0x7c,0x74,0x1, 0x7a,0xb3,0x2a,0x8, 0x22,0xe4, ++0x7a,0xb3,0x2f,0x80,0x22,0xca,0xd8,0xca,0x79,0x6c,0xff,0x6d,0xdd,0x7d,0xed,0x7d, ++0xfd,0x7e,0xd3,0x2a,0x2, 0x7e,0xe3,0x2a,0x3, 0x7e,0xb3,0x3b,0x36,0x60,0x11,0x7e, ++0xc7,0x3b,0x3f,0x4d,0xcc,0x78,0x2, 0x41,0x39,0xbe,0xd0,0x1, 0x28,0x2, 0x41,0x39, ++0xbe,0xd0,0x1, 0x78,0x1d,0xbe,0xb0,0x4, 0x78,0x2, 0x41,0x39,0x7e,0xe7,0x29,0x8, ++0x7e,0xf7,0x29,0xa, 0x7d,0x3e,0x7d,0x2f,0x12,0x5c,0xc2,0xbe,0xb0,0x1, 0x78,0x2, ++0x41,0x39,0x7e,0xa3,0x3b,0x36,0x7c,0xba,0x14,0x68,0x29,0x14,0x68,0x54,0x14,0x68, ++0x23,0x14,0x78,0x2, 0x41,0x36,0xb, 0xb2,0x68,0x2, 0x41,0x39,0xbe,0xd0,0x1, 0x68, ++0x2, 0x41,0x48,0x4c,0xee,0x68,0x2, 0x41,0x48,0x74,0x1, 0x7a,0xb3,0x3b,0x36,0x12, ++0xc2,0x4f,0x80,0x65,0x4c,0xdd,0x78,0x1d,0xbe,0xa0,0x1, 0x78,0xc, 0x74,0x2, 0x7a, ++0xb3,0x3b,0x36,0x7e,0x34,0x62,0x64,0x80,0x54,0x74,0x4, 0x7a,0xb3,0x3b,0x36,0x7e, ++0x34,0x62,0x68,0x80,0x48,0x12,0xc2,0x58,0x90,0x62,0x57,0x12,0xc2,0x61,0x68,0x49, ++0x80,0x56,0xbe,0xd0,0x1, 0x78,0x51,0x4c,0xee,0x78,0x4d,0x12,0xc2,0x58,0x7e,0x34, ++0x62,0x60,0x12,0x23,0xc9,0x7e,0x14,0x62,0x64,0x7e,0x4, 0x0, 0xff,0xb, 0xa, 0xc0, ++0x9d,0xc3,0xbe,0xc7,0x3b,0x3f,0x40,0x21,0x90,0x62,0x56,0x12,0xc2,0x61,0x68,0x19, ++0x12,0xc2,0x4f,0x74,0x3, 0x7a,0xb3,0x3b,0x36,0x7e,0x34,0x62,0x64,0x12,0x23,0xc9, ++0x7a,0x37,0x3b,0x3f,0x80,0x12,0x7e,0xf0,0x24,0xe4,0x7a,0xb3,0x3b,0x36,0x6d,0x33, ++0x7a,0x37,0x3b,0x3f,0x7c,0xbf,0x80,0x2, 0x7c,0xbf,0xda,0x79,0xda,0xd8,0x22,0x7a, ++0xe7,0x3b,0x37,0x7a,0xf7,0x3b,0x39,0x22,0x7a,0xe7,0x3b,0x3b,0x7a,0xf7,0x3b,0x3d, ++0x22,0xe4,0x93,0xa, 0x3b,0x12,0xc2,0x6d,0xa, 0xdb,0x4d,0xdd,0x22,0x7d,0x13,0x3e, ++0x14,0x3e,0x14,0x3e,0x14,0x7e,0x37,0x3b,0x3b,0x9e,0x37,0x3b,0x37,0x12,0x21,0x48, ++0xbd,0x31,0x38,0x12,0x7e,0x37,0x3b,0x3d,0x9e,0x37,0x3b,0x39,0x12,0x21,0x48,0xbd, ++0x31,0x38,0x3, 0x74,0x1, 0x22,0xe4,0x22,0xe4,0x7a,0xb3,0x3b,0x36,0x22,0x7e,0xb3, ++0x2f,0x80,0xb4,0x4, 0x2, 0xd3,0x22,0xc3,0x22,0x7d,0xf2,0x7d,0xe3,0x7e,0x8, 0x2f, ++0x80,0x7e,0x34,0x0, 0x28,0xe4,0x12,0x21,0x16,0x7e,0x8, 0x2b,0xbf,0x7e,0x34,0x3, ++0xc0,0x12,0x21,0x16,0x7a,0xb3,0x39,0x7c,0x7e,0x34,0x62,0x8e,0x12,0x23,0xc9,0x7a, ++0x37,0x2b,0xb7,0x7a,0xe7,0x2f,0x84,0x7a,0xf7,0x2f,0x86,0x7a,0xe7,0x2f,0x88,0x7a, ++0xe7,0x2f,0x8c,0x7a,0xe7,0x2f,0x90,0x7a,0xe7,0x2f,0x94,0x7a,0xf7,0x2f,0x8a,0x7a, ++0xf7,0x2f,0x8e,0x7a,0xf7,0x2f,0x92,0x7a,0xf7,0x2f,0x96,0x7a,0xe7,0x2b,0xbb,0x7a, ++0xf7,0x2b,0xbd,0x7a,0xb3,0x2f,0xa8,0x74,0x2, 0x7a,0xb3,0x2f,0x7f,0x22,0x74,0xfe, ++0x7a,0xb3,0x39,0x7c,0xe4,0x7a,0xb3,0x2f,0x80,0x22,0xca,0x3b,0xf5,0x2a,0x7f,0x31, ++0x7a,0xd, 0x26,0xe4,0x7a,0xb3,0x22,0xf6,0x7a,0xb3,0x22,0xf7,0x7a,0xb3,0x22,0xf8, ++0x7e,0x34,0x3, 0xe8,0x7a,0x37,0x22,0xfd,0x74,0x3c,0x7a,0xb3,0x22,0xf5,0x75,0x2f, ++0x46,0x75,0x2b,0x0, 0xa1,0xb, 0x12,0xc6,0xa6,0x28,0x1e,0x7e,0x34,0x0, 0x44,0xca, ++0x39,0x7e,0x71,0x2b,0x74,0x44,0xac,0x7b,0x2e,0x34,0x14,0x3b,0x7e,0x24,0x0, 0xff, ++0x7e,0x8, 0x22,0xff,0x12,0x20,0xf1,0x1b,0xfd,0x6d,0x33,0x7a,0x37,0x22,0xf9,0x7a, ++0x35,0x30,0x7a,0x37,0x22,0xfb,0x7a,0x35,0x32,0x7a,0x35,0x34,0x7e,0x34,0x22,0xff, ++0x7a,0x35,0x36,0x7e,0x34,0x23,0x1f,0x7a,0x35,0x38,0x75,0x2c,0x0, 0x80,0x59,0xe5, ++0x2c,0xa, 0x3b,0x7e,0xd, 0x26,0x12,0xc6,0xae,0x2e,0x35,0x36,0x12,0x67,0xae,0x7d, ++0xd3,0x7e,0xc7,0x22,0xfb,0xbd,0xcd,0x58,0x4, 0x7a,0xd7,0x22,0xfb,0xe5,0x2c,0xa, ++0x3b,0x7f,0x3, 0x12,0xc6,0xae,0x2e,0x35,0x38,0x12,0x67,0xae,0x7d,0xc3,0x7e,0x35, ++0x32,0xbd,0x3c,0x58,0x3, 0x7a,0xc5,0x32,0x7e,0x37,0x22,0xf9,0x2d,0x3d,0x7a,0x37, ++0x22,0xf9,0x7d,0x3c,0x2e,0x35,0x30,0x7a,0x35,0x30,0x2d,0xcd,0x7e,0x35,0x34,0xbd, ++0x3c,0x58,0x3, 0x7a,0xc5,0x34,0x5, 0x2c,0xe5,0x2a,0xbe,0xb1,0x2c,0x38,0xa0,0xe5, ++0x2a,0xb4,0xa, 0x2a,0x7e,0x37,0x22,0xfb,0xbe,0x34,0x0, 0x40,0x48,0xb, 0x7e,0x25, ++0x32,0xbe,0x24,0x0, 0x40,0x48,0x2, 0xa1,0x9, 0xbe,0x34,0x0, 0x60,0x8, 0x2, 0xa1, ++0x9, 0x7e,0x35,0x32,0xbe,0x34,0x0, 0x60,0x8, 0x2, 0xa1,0x9, 0x80,0x28,0x7e,0x37, ++0x22,0xfb,0xbe,0x34,0x0, 0x20,0x8, 0xb, 0x7e,0x25,0x32,0xbe,0x24,0x0, 0x20,0x8, ++0x2, 0xa1,0x9, 0xbe,0x34,0x0, 0x30,0x8, 0x2, 0xa1,0x9, 0x7e,0x35,0x32,0xbe,0x34, ++0x0, 0x30,0x8, 0x2, 0xa1,0x9, 0x7e,0xa3,0x3a,0x89,0x74,0xc, 0xa4,0xbe,0x57,0x22, ++0xf9,0x58,0x2, 0xa1,0x9, 0x7e,0xa3,0x3a,0x8a,0x74,0xc, 0xa4,0xbe,0x55,0x30,0x58, ++0x2, 0xa1,0x9, 0x7e,0x15,0x36,0x6d,0x0, 0x7e,0x1d,0x26,0xe5,0x2a,0x12,0xc5,0x46, ++0x7a,0xb3,0x22,0xf4,0x7e,0x15,0x38,0x6d,0x0, 0x7f,0x13,0xe5,0x2a,0x12,0xc5,0x46, ++0xf5,0x2d,0x7e,0x73,0x22,0xf5,0xbe,0x73,0x22,0xf4,0x38,0x7d,0xbe,0x71,0x2d,0x38, ++0x78,0xe5,0x2d,0x7e,0x31,0x2d,0xac,0x3b,0x1a,0x2, 0x1a,0x0, 0x7e,0x73,0x22,0xf4, ++0xac,0x77,0x1a,0x26,0x1a,0x24,0x2f,0x10,0xe5,0x2d,0xa, 0x5b,0x6d,0x44,0x7e,0x33, ++0x22,0xf4,0xa, 0x13,0x6d,0x0, 0x2f,0x2, 0x12,0x1f,0x3c,0x7c,0xb7,0xf5,0x2e,0xe5, ++0x2f,0xbe,0xb1,0x2e,0x38,0x43,0x7e,0x37,0x22,0xfb,0x2e,0x35,0x32,0x2e,0x35,0x34, ++0x7a,0x35,0x3a,0xe5,0x2e,0xa, 0x2b,0x7e,0x34,0x0, 0x64,0x9d,0x32,0x3e,0x34,0x2e, ++0x35,0x3a,0x7a,0x35,0x3a,0x7e,0x37,0x22,0xfd,0xbe,0x35,0x3a,0x8, 0x1b,0x7e,0x35, ++0x3a,0x7a,0x37,0x22,0xfd,0xe5,0x2e,0x7a,0xb3,0x22,0xf7,0x7e,0x73,0x23,0x41,0x7a, ++0x73,0x22,0xf8,0xe5,0x2b,0x7a,0xb3,0x22,0xf6,0x5, 0x2b,0x12,0xc6,0xa6,0x28,0x2, ++0x61,0x46,0x7e,0xa3,0x22,0xf7,0xbe,0xa1,0x2f,0x40,0x20,0x7e,0xb3,0x22,0xf8,0xbe, ++0xb0,0x0, 0x28,0x17,0xbe,0xb0,0xff,0x50,0x12,0x7e,0x73,0x22,0xf6,0xa, 0x37,0xb, ++0x34,0x7a,0x73,0x3a,0x86,0x7a,0xb3,0x3a,0x88,0x80,0x6, 0x74,0x7c,0x7a,0xb3,0x3a, ++0x86,0x7c,0xba,0xda,0x3b,0x22,0xca,0x3b,0x7c,0xfb,0x7f,0x61,0x7f,0x40,0x9f,0x11, ++0x7f,0x51,0x7f,0x71,0x7a,0x1d,0x3c,0x7a,0x1d,0x40,0x7a,0x1d,0x44,0xbe,0xf0,0xa, ++0x78,0x6, 0x7e,0x54,0x1, 0x3c,0x80,0x4, 0x7e,0x54,0x2, 0x35,0x7a,0x57,0x23,0x43, ++0x6c,0xee,0x80,0x60,0xa, 0x5e,0x7f,0x14,0x12,0xc6,0x9e,0x7a,0x55,0x4a,0xa, 0x5e, ++0x7f,0x16,0x12,0xc6,0x9e,0x7a,0x55,0x48,0x7e,0x35,0x48,0x12,0xc6,0x97,0x2f,0x50, ++0x7e,0x65,0x4a,0x7d,0x16,0x1a,0x2, 0x1a,0x0, 0x2f,0x70,0x12,0xc6,0x97,0x12,0xc6, ++0x8d,0x7e,0x1d,0x3c,0x2f,0x10,0x7a,0x1d,0x3c,0x7d,0x16,0x1a,0x2, 0x1a,0x0, 0x7e, ++0x35,0x4a,0x12,0xc6,0x8d,0x7e,0x1d,0x40,0x2f,0x10,0x7a,0x1d,0x40,0x7e,0x15,0x4a, ++0x1a,0x2, 0x1a,0x0, 0x7e,0x35,0x48,0x12,0xc6,0x8d,0x7e,0x1d,0x44,0x2f,0x10,0x7a, ++0x1d,0x44,0xb, 0xe0,0xbc,0xfe,0x38,0x9c,0xa, 0xdf,0x6d,0xcc,0x7f,0x15,0x7f,0x6, ++0x12,0x1f,0x8d,0x7f,0x51,0x7f,0x17,0x7f,0x6, 0x12,0x1f,0x8d,0x7f,0x71,0x7e,0x94, ++0x0, 0x64,0x7e,0x1d,0x3c,0x7d,0x19,0x12,0x1f,0x31,0x7e,0x87,0x23,0x43,0x7d,0x18, ++0x7d,0xd8,0x1a,0x12,0x1a,0xc2,0x7f,0x6, 0x12,0x1f,0x8d,0x7a,0x1d,0x3c,0x7e,0x1d, ++0x40,0x7d,0x19,0x12,0x1f,0x31,0x7f,0x6, 0x12,0x1f,0x8d,0x7a,0x1d,0x40,0x7e,0x1d, ++0x44,0x7d,0x19,0x12,0x1f,0x31,0x7d,0x18,0x1a,0x2, 0x1a,0x0, 0x12,0x1f,0x8d,0x7a, ++0x1d,0x44,0x7f,0x15,0x7f,0x7, 0x12,0x1f,0x20,0x7e,0x6d,0x44,0x9f,0x61,0x7f,0x15, ++0x7f,0x5, 0x12,0x1f,0x20,0x7e,0x5d,0x3c,0x9f,0x51,0x7f,0x17,0x7f,0x7, 0x12,0x1f, ++0x20,0x7e,0x7d,0x40,0x9f,0x71,0xbe,0x58,0x0, 0x0, 0x68,0x6, 0xbe,0x78,0x0, 0x0, ++0x78,0x6, 0x7e,0x44,0x0, 0x64,0x80,0x18,0x7f,0x16,0x7d,0x19,0x12,0x1f,0x31,0x7f, ++0x5, 0x12,0x1f,0x8d,0x7f,0x6, 0x12,0x1f,0x20,0x7f,0x7, 0x12,0x1f,0x8d,0x7d,0x43, ++0xbe,0x44,0x0, 0x0, 0x18,0x2, 0x6d,0x44,0x7c,0xb9,0xda,0x3b,0x22,0x1a,0x26,0x1a, ++0x24,0x12,0x1f,0x20,0x7f,0x1, 0x22,0x7d,0x13,0x1a,0x2, 0x1a,0x0, 0x22,0x2d,0x35, ++0x7e,0x1b,0x70,0xa, 0x57,0x22,0x7e,0x73,0x3b,0x51,0xbe,0x71,0x2b,0x22,0x2d,0x13, ++0x7e,0xb, 0x50,0xa, 0x25,0x22,0xca,0x79,0x6c,0xaa,0x12,0xc7,0xac,0xb, 0x7a,0xf0, ++0x7d,0x7f,0x7c,0xbf,0xa, 0xfa,0x19,0xbf,0x3a,0x8b,0x7f,0x71,0x2d,0xf4,0xb, 0x7a, ++0x40,0x7c,0xb9,0xa, 0x4a,0x19,0xb4,0x3a,0xab,0xb, 0xa0,0xbe,0xa0,0x20,0x40,0xda, ++0x7e,0x8, 0x3a,0x8b,0x7e,0x18,0x3a,0xab,0x74,0x20,0x12,0xc3,0x1a,0xda,0x79,0x22, ++0xca,0x3b,0x7f,0x61,0x7f,0x50,0x7e,0x73,0x3a,0x87,0xbe,0x70,0x20,0x40,0x52,0x7e, ++0xf0,0x2, 0x80,0x3c,0xa, 0x3f,0x6d,0x22,0x74,0x5, 0x2f,0x11,0x14,0x78,0xfb,0x7e, ++0x33,0x3a,0x87,0xa, 0x13,0x6d,0x0, 0x12,0x1f,0x3c,0x7c,0xe7,0xbe,0xe0,0x2, 0x50, ++0x3, 0x7e,0xe0,0x2, 0xa, 0x6f,0x1b,0x64,0xa, 0x3e,0x1b,0x34,0x7c,0xc7,0x7f,0x5, ++0x7c,0xbd,0x12,0xc7,0x5a,0x7f,0x6, 0x7c,0xbd,0x7c,0x7c,0x12,0xc7,0x5a,0xb, 0xf0, ++0x7e,0x73,0x3a,0x87,0xbc,0x7f,0x50,0xbc,0x7f,0x5, 0x7f,0x16,0x12,0xc6,0xb6,0x80, ++0x6, 0x74,0x7e,0x7a,0xb3,0x3a,0x86,0xda,0x3b,0x22,0x7c,0x97,0x7c,0xab,0x7f,0x10, ++0x7e,0x30,0x2, 0xac,0x3a,0x2d,0x13,0x7d,0x2, 0xb, 0xa, 0x10,0x7e,0x10,0x2, 0xac, ++0x19,0x7f,0x71,0x2d,0xf0,0xb, 0x7a,0x0, 0x7c,0x21,0xa5,0xba,0x0, 0x14,0x1a,0x3, ++0x1b,0x7a,0x0, 0xbc,0x9a,0x68,0x24,0x6d,0x44,0x74,0x2, 0xa4,0x2d,0x35,0x1b,0x1a, ++0x40,0x22,0xbc,0x9a,0x68,0x15,0x1a,0x2, 0x1a,0x13,0x2d,0x10,0xe, 0x14,0x1b,0x7a, ++0x10,0x6d,0x11,0x74,0x2, 0xa4,0x2d,0x35,0x1b,0x1a,0x10,0x22,0x7e,0x90,0x2, 0xac, ++0x9a,0x7f,0x70,0x2d,0xf4,0x22,0xca,0xf8,0x7f,0x51,0x7f,0x40,0x7e,0x37,0x2f,0x90, ++0x7a,0x35,0x2a,0x7e,0x37,0x2f,0x8e,0x7a,0x35,0x2c,0x7e,0x37,0x2f,0x9c,0x7a,0x35, ++0x26,0x7e,0x37,0x2f,0x9e,0x7a,0x35,0x28,0x6c,0xff,0x80,0x1e,0x7e,0x34,0x0, 0x26, ++0x7e,0x14,0x0, 0x2f,0x74,0x9, 0x12,0x1f,0xc1,0x74,0x2, 0xac,0xbf,0x7f,0x4, 0x2d, ++0x15,0x7f,0x15,0x2d,0x35,0x12,0xc8,0x5, 0xb, 0xf0,0x7e,0x73,0x3a,0x87,0xbc,0x7f, ++0x38,0xda,0xda,0xf8,0x22,0x7f,0x71,0x7f,0x60,0x7e,0x35,0x2f,0xbe,0x34,0x0, 0x0, ++0x38,0x7, 0x7e,0x34,0x0, 0x1, 0x7a,0x35,0x2f,0x7e,0x35,0x31,0xbe,0x34,0x0, 0x0, ++0x38,0x7, 0x7e,0x34,0x0, 0x1, 0x7a,0x35,0x31,0xb, 0x6a,0x30,0x9e,0x35,0x33,0x6d, ++0x22,0x7e,0x33,0x3a,0x89,0x12,0xc8,0x5a,0x7e,0x15,0x2f,0x12,0x1f,0x3a,0x1b,0x6a, ++0x30,0xb, 0x7a,0x30,0x9e,0x35,0x35,0x6d,0x22,0x7e,0x33,0x3a,0x8a,0x12,0xc8,0x5a, ++0x7e,0x15,0x31,0x12,0x1f,0x3a,0x1b,0x7a,0x30,0x22,0xa, 0x13,0x6d,0x0, 0x2, 0x1f, ++0x20,0x74,0x1, 0x7a,0xb3,0x39,0xe8,0x7e,0x34,0x60,0xa3,0x22,0x7e,0xa3,0x2a,0x6e, ++0x7e,0xb3,0x2a,0x6d,0xa4,0x22,0x74,0x1, 0x7a,0xb3,0x2b,0x1, 0x7a,0xb3,0x2b,0x1d, ++0x22,0x7e,0x18,0x5, 0xf8,0x7a,0x1f,0x6, 0xf4,0x22,0xa, 0x3b,0x2d,0x39,0x7d,0x28, ++0x7e,0x1b,0xb0,0x22,0x49,0x23,0x38,0x52,0x49,0x33,0x38,0x4e,0x9d,0x32,0x2, 0x21, ++0x48,0xa, 0x47,0x7f,0x70,0x2d,0xf4,0x7e,0x7b,0x60,0xbc,0x6b,0x22,0x3e,0x44,0x7e, ++0x1f,0x13,0x8a,0x2d,0x34,0x1b,0x1a,0x50,0x22,0x6d,0x33,0xe4,0x6c,0x55,0x2, 0x13, ++0x36,0x6e,0x34,0xff,0xff,0xb, 0x34,0x7a,0x37,0x2a,0x5e,0x22,0xe4,0x7a,0xb3,0x38, ++0x37,0x7a,0xb3,0x38,0x3f,0x22,0xa, 0x2c,0x2e,0x27,0x2a,0xfe,0x7e,0x29,0x70,0x22, ++0x7e,0x34,0x0, 0x3e,0x74,0xff,0x2, 0x21,0x16,0x7a,0x37,0x2a,0x4f,0x7e,0x34,0x61, ++0x57,0x22,0x7e,0xe3,0x2a,0x6f,0x7e,0xd3,0x2a,0x70,0x22,0x7e,0x37,0x25,0xf4,0x7a, ++0x37,0x36,0xaa,0x22,0x7e,0x34,0xd, 0xc8,0x7a,0x37,0x36,0xac,0x22,0x7e,0x73,0x3a, ++0x5, 0x7a,0x73,0x2b,0x20,0x22,0x7e,0x24,0x0, 0xff,0xb, 0x1a,0x80,0x22,0x12,0x0, ++0x1e,0x7e,0xb3,0x2a,0xfc,0x22,0xa9,0xd1,0xcb,0xe4,0x2, 0x0, 0xe, 0x90,0x61,0xc5, ++0xe4,0x93,0x7c,0xdb,0x22,0x7e,0x73,0x26,0xf5,0xbe,0x70,0x0, 0x22,0x7e,0x73,0x26, ++0xf4,0xbe,0x70,0x0, 0x22,0x7e,0x73,0x28,0x92,0xbe,0x70,0x0, 0x22,0x7e,0xb3,0x39, ++0x79,0xbe,0xb0,0x1, 0x22,0x7e,0x73,0x2a,0x2, 0xbe,0x70,0x0, 0x22,0x90,0x60,0xa7, +0xe4,0x93,0x7c,0xab,0x22,0xff,0xc9,0x66,0x36,0x99,0x9e,0x61,0x15,0x79, \ No newline at end of file diff --git a/drivers/input/touchscreen/gsl3673.c b/drivers/input/touchscreen/gsl3673.c new file mode 100755 -index 000000000000..2191bb6af26b +index 000000000..2191bb6af --- /dev/null +++ b/drivers/input/touchscreen/gsl3673.c @@ -0,0 +1,1302 @@ @@ -724969,7 +725030,7 @@ index 000000000000..2191bb6af26b +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gsl3673.h b/drivers/input/touchscreen/gsl3673.h new file mode 100755 -index 000000000000..5d8d8ef02bec +index 000000000..5d8d8ef02 --- /dev/null +++ b/drivers/input/touchscreen/gsl3673.h @@ -0,0 +1,5091 @@ @@ -730066,7 +730127,7 @@ index 000000000000..5d8d8ef02bec +#endif diff --git a/drivers/input/touchscreen/gsl3673_800x1280.c b/drivers/input/touchscreen/gsl3673_800x1280.c new file mode 100755 -index 000000000000..191029084c22 +index 000000000..191029084 --- /dev/null +++ b/drivers/input/touchscreen/gsl3673_800x1280.c @@ -0,0 +1,1247 @@ @@ -731319,7 +731380,7 @@ index 000000000000..191029084c22 +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gsl3673_800x1280.h b/drivers/input/touchscreen/gsl3673_800x1280.h new file mode 100755 -index 000000000000..38fa03963eb1 +index 000000000..38fa03963 --- /dev/null +++ b/drivers/input/touchscreen/gsl3673_800x1280.h @@ -0,0 +1,5187 @@ @@ -736512,7 +736573,7 @@ index 000000000000..38fa03963eb1 +#endif diff --git a/drivers/input/touchscreen/gsl3676/Makefile b/drivers/input/touchscreen/gsl3676/Makefile new file mode 100755 -index 000000000000..27c3264812e1 +index 000000000..27c326481 --- /dev/null +++ b/drivers/input/touchscreen/gsl3676/Makefile @@ -0,0 +1,3 @@ @@ -736521,7 +736582,7 @@ index 000000000000..27c3264812e1 + diff --git a/drivers/input/touchscreen/gsl3676/gsl3676.c b/drivers/input/touchscreen/gsl3676/gsl3676.c new file mode 100755 -index 000000000000..4b1baca365fd +index 000000000..4b1baca36 --- /dev/null +++ b/drivers/input/touchscreen/gsl3676/gsl3676.c @@ -0,0 +1,1261 @@ @@ -737788,7 +737849,7 @@ index 000000000000..4b1baca365fd +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gsl3676/rk3368_th863c_10.h b/drivers/input/touchscreen/gsl3676/rk3368_th863c_10.h new file mode 100755 -index 000000000000..617860f76401 +index 000000000..617860f76 --- /dev/null +++ b/drivers/input/touchscreen/gsl3676/rk3368_th863c_10.h @@ -0,0 +1,5331 @@ @@ -743125,7 +743186,7 @@ index 000000000000..617860f76401 +#endif diff --git a/drivers/input/touchscreen/gsl_point_id.c b/drivers/input/touchscreen/gsl_point_id.c new file mode 100755 -index 000000000000..624502b6bacc +index 000000000..624502b6b --- /dev/null +++ b/drivers/input/touchscreen/gsl_point_id.c @@ -0,0 +1,3100 @@ @@ -746231,7 +746292,7 @@ index 000000000000..624502b6bacc +}*/ diff --git a/drivers/input/touchscreen/gslx680.c b/drivers/input/touchscreen/gslx680.c new file mode 100755 -index 000000000000..ab970845c64f +index 000000000..ab970845c --- /dev/null +++ b/drivers/input/touchscreen/gslx680.c @@ -0,0 +1,1905 @@ @@ -748142,7 +748203,7 @@ index 000000000000..ab970845c64f +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gslx680.h b/drivers/input/touchscreen/gslx680.h new file mode 100755 -index 000000000000..2a76ec410c81 +index 000000000..2a76ec410 --- /dev/null +++ b/drivers/input/touchscreen/gslx680.h @@ -0,0 +1,10368 @@ @@ -758516,7 +758577,7 @@ index 000000000000..2a76ec410c81 +#endif diff --git a/drivers/input/touchscreen/gslx6801.c b/drivers/input/touchscreen/gslx6801.c new file mode 100755 -index 000000000000..3c1e1655c0a8 +index 000000000..3c1e1655c --- /dev/null +++ b/drivers/input/touchscreen/gslx6801.c @@ -0,0 +1,1680 @@ @@ -760202,7 +760263,7 @@ index 000000000000..3c1e1655c0a8 +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gslx6801.h b/drivers/input/touchscreen/gslx6801.h new file mode 100755 -index 000000000000..45bb3469d2ea +index 000000000..45bb3469d --- /dev/null +++ b/drivers/input/touchscreen/gslx6801.h @@ -0,0 +1,4955 @@ @@ -765163,7 +765224,7 @@ index 000000000000..45bb3469d2ea +#endif diff --git a/drivers/input/touchscreen/gslx680_d708/Makefile b/drivers/input/touchscreen/gslx680_d708/Makefile new file mode 100755 -index 000000000000..86d995c5e6c5 +index 000000000..86d995c5e --- /dev/null +++ b/drivers/input/touchscreen/gslx680_d708/Makefile @@ -0,0 +1,9 @@ @@ -765178,7 +765239,7 @@ index 000000000000..86d995c5e6c5 + diff --git a/drivers/input/touchscreen/gslx680_d708/rockchip_gsl3670.h b/drivers/input/touchscreen/gslx680_d708/rockchip_gsl3670.h new file mode 100755 -index 000000000000..89b74fe3e23c +index 000000000..89b74fe3e --- /dev/null +++ b/drivers/input/touchscreen/gslx680_d708/rockchip_gsl3670.h @@ -0,0 +1,5047 @@ @@ -770231,7 +770292,7 @@ index 000000000000..89b74fe3e23c +#endif diff --git a/drivers/input/touchscreen/gslx680_d708/rockchip_gslX680.c b/drivers/input/touchscreen/gslx680_d708/rockchip_gslX680.c new file mode 100755 -index 000000000000..f75586e2d37a +index 000000000..f75586e2d --- /dev/null +++ b/drivers/input/touchscreen/gslx680_d708/rockchip_gslX680.c @@ -0,0 +1,1393 @@ @@ -771630,7 +771691,7 @@ index 000000000000..f75586e2d37a +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gslx680_d708/rockchip_gslX680_88v.h b/drivers/input/touchscreen/gslx680_d708/rockchip_gslX680_88v.h new file mode 100755 -index 000000000000..f58ba4a8a72b +index 000000000..f58ba4a8a --- /dev/null +++ b/drivers/input/touchscreen/gslx680_d708/rockchip_gslX680_88v.h @@ -0,0 +1,5248 @@ @@ -776884,7 +776945,7 @@ index 000000000000..f58ba4a8a72b + diff --git a/drivers/input/touchscreen/gslx680_firefly.c b/drivers/input/touchscreen/gslx680_firefly.c new file mode 100755 -index 000000000000..0786b5ecb311 +index 000000000..0786b5ecb --- /dev/null +++ b/drivers/input/touchscreen/gslx680_firefly.c @@ -0,0 +1,1130 @@ @@ -778020,7 +778081,7 @@ index 000000000000..0786b5ecb311 +MODULE_DESCRIPTION("GSLX680 touchscreen controller driver"); diff --git a/drivers/input/touchscreen/gslx680_firefly.h b/drivers/input/touchscreen/gslx680_firefly.h new file mode 100755 -index 000000000000..8f40c59d7d2d +index 000000000..8f40c59d7 --- /dev/null +++ b/drivers/input/touchscreen/gslx680_firefly.h @@ -0,0 +1,5120 @@ @@ -783146,7 +783207,7 @@ index 000000000000..8f40c59d7d2d +#endif diff --git a/drivers/input/touchscreen/gslx680_pad.c b/drivers/input/touchscreen/gslx680_pad.c new file mode 100755 -index 000000000000..d61a5ec76e94 +index 000000000..d61a5ec76 --- /dev/null +++ b/drivers/input/touchscreen/gslx680_pad.c @@ -0,0 +1,1198 @@ @@ -784350,7 +784411,7 @@ index 000000000000..d61a5ec76e94 +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gslx680_pad.h b/drivers/input/touchscreen/gslx680_pad.h new file mode 100755 -index 000000000000..aab1786f221a +index 000000000..aab1786f2 --- /dev/null +++ b/drivers/input/touchscreen/gslx680_pad.h @@ -0,0 +1,10232 @@ @@ -794588,7 +794649,7 @@ index 000000000000..aab1786f221a +#endif diff --git a/drivers/input/touchscreen/gslx680a.c b/drivers/input/touchscreen/gslx680a.c new file mode 100755 -index 000000000000..380a0fd93fa0 +index 000000000..380a0fd93 --- /dev/null +++ b/drivers/input/touchscreen/gslx680a.c @@ -0,0 +1,1320 @@ @@ -795914,14 +795975,14 @@ index 000000000000..380a0fd93fa0 +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gt1x/GT5688_Config_20170713_1080_1920.cfg b/drivers/input/touchscreen/gt1x/GT5688_Config_20170713_1080_1920.cfg new file mode 100755 -index 000000000000..2f65c7ee0482 +index 000000000..2f65c7ee0 --- /dev/null +++ b/drivers/input/touchscreen/gt1x/GT5688_Config_20170713_1080_1920.cfg @@ -0,0 +1 @@ +0x88,0x38,0x04,0x80,0x07,0x05,0x35,0x1E,0x05,0x40,0x00,0x08,0x50,0x3C,0x53,0x11,0x00,0x00,0x11,0x11,0x14,0x17,0x19,0x1C,0x0A,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x1E,0x28,0x8B,0x2B,0x0C,0x15,0x17,0xDF,0x07,0x04,0xA1,0x00,0x03,0x02,0x24,0x00,0x00,0x28,0x50,0x80,0x14,0x02,0x00,0x00,0x54,0xAD,0x2E,0x9B,0x35,0x8C,0x3B,0x81,0x42,0x79,0x49,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x50,0x3C,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x20,0x78,0x78,0x64,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0x02,0x09,0x03,0x0A,0x04,0x0B,0x05,0x0C,0x06,0x0D,0xFF,0xFF,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x15,0x14,0x13,0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x0B,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x05,0x1E,0x00,0x02,0x2A,0x1E,0x19,0x14,0x02,0x00,0x03,0x0A,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x86,0x22,0x03,0x00,0x00,0x33,0x00,0x0F,0x00,0x00,0x00,0x50,0x3C,0x50,0x00,0x00,0x00,0x23,0x13,0x01 diff --git a/drivers/input/touchscreen/gt1x/Makefile b/drivers/input/touchscreen/gt1x/Makefile new file mode 100755 -index 000000000000..2b3fa3680e98 +index 000000000..2b3fa3680 --- /dev/null +++ b/drivers/input/touchscreen/gt1x/Makefile @@ -0,0 +1,8 @@ @@ -795935,7 +795996,7 @@ index 000000000000..2b3fa3680e98 + diff --git a/drivers/input/touchscreen/gt1x/gt1x.c b/drivers/input/touchscreen/gt1x/gt1x.c new file mode 100755 -index 000000000000..f65ca3b916e4 +index 000000000..f65ca3b91 --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x.c @@ -0,0 +1,809 @@ @@ -796750,7 +796811,7 @@ index 000000000000..f65ca3b916e4 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/touchscreen/gt1x/gt1x.h b/drivers/input/touchscreen/gt1x/gt1x.h new file mode 100755 -index 000000000000..b9339f10b0ad +index 000000000..b9339f10b --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x.h @@ -0,0 +1,64 @@ @@ -796820,7 +796881,7 @@ index 000000000000..b9339f10b0ad +#endif /* _GOODIX_GT1X_H_ */ diff --git a/drivers/input/touchscreen/gt1x/gt1x_cfg.h b/drivers/input/touchscreen/gt1x/gt1x_cfg.h new file mode 100755 -index 000000000000..6581aebfeda7 +index 000000000..6581aebfe --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x_cfg.h @@ -0,0 +1,27 @@ @@ -796853,7 +796914,7 @@ index 000000000000..6581aebfeda7 +#endif /* _GOODIX_GT1X_CFG_H_ */ diff --git a/drivers/input/touchscreen/gt1x/gt1x_extents.c b/drivers/input/touchscreen/gt1x/gt1x_extents.c new file mode 100755 -index 000000000000..ed087d8f0031 +index 000000000..ed087d8f0 --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x_extents.c @@ -0,0 +1,928 @@ @@ -797787,7 +797848,7 @@ index 000000000000..ed087d8f0031 +} diff --git a/drivers/input/touchscreen/gt1x/gt1x_firmware.h b/drivers/input/touchscreen/gt1x/gt1x_firmware.h new file mode 100755 -index 000000000000..7588633397f5 +index 000000000..758863339 --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x_firmware.h @@ -0,0 +1,548 @@ @@ -798341,7 +798402,7 @@ index 000000000000..7588633397f5 +#endif diff --git a/drivers/input/touchscreen/gt1x/gt1x_generic.c b/drivers/input/touchscreen/gt1x/gt1x_generic.c new file mode 100755 -index 000000000000..48b29ab50bcd +index 000000000..48b29ab50 --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x_generic.c @@ -0,0 +1,2445 @@ @@ -800792,7 +800853,7 @@ index 000000000000..48b29ab50bcd + diff --git a/drivers/input/touchscreen/gt1x/gt1x_generic.h b/drivers/input/touchscreen/gt1x/gt1x_generic.h new file mode 100755 -index 000000000000..7acc390d47ef +index 000000000..7acc390d4 --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x_generic.h @@ -0,0 +1,595 @@ @@ -801393,7 +801454,7 @@ index 000000000000..7acc390d47ef + diff --git a/drivers/input/touchscreen/gt1x/gt1x_tools.c b/drivers/input/touchscreen/gt1x/gt1x_tools.c new file mode 100755 -index 000000000000..1d824bdafd8a +index 000000000..1d824bdaf --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x_tools.c @@ -0,0 +1,433 @@ @@ -801832,7 +801893,7 @@ index 000000000000..1d824bdafd8a +} diff --git a/drivers/input/touchscreen/gt1x/gt1x_update.c b/drivers/input/touchscreen/gt1x/gt1x_update.c new file mode 100755 -index 000000000000..0979bb32d52f +index 000000000..0979bb32d --- /dev/null +++ b/drivers/input/touchscreen/gt1x/gt1x_update.c @@ -0,0 +1,1456 @@ @@ -803294,33 +803355,33 @@ index 000000000000..0979bb32d52f +} diff --git a/drivers/input/touchscreen/gt9xx/GT9110P(2020)V71_Config_20201028_170326.cfg b/drivers/input/touchscreen/gt9xx/GT9110P(2020)V71_Config_20201028_170326.cfg new file mode 100755 -index 000000000000..62a3d0e496c6 +index 000000000..71738f447 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/GT9110P(2020)V71_Config_20201028_170326.cfg @@ -0,0 +1,19 @@ -+0x47,0x80,0x07,0xB0,0x04,0x0A,0x7C,0x00,0x01,0x08, -+0x28,0x05,0x5A,0x3C,0x03,0x04,0x00,0x00,0x08,0x00, -+0x00,0x00,0x00,0x17,0x19,0x1D,0x14,0x95,0x35,0xFF, -+0x3C,0x3E,0x0C,0x08,0x00,0x00,0x00,0xBA,0x02,0x2C, -+0x17,0x19,0x1B,0x90,0x83,0x32,0x50,0x3C,0x28,0x4A, -+0x30,0x32,0x96,0x94,0xC5,0x02,0x07,0x00,0x00,0x04, -+0x83,0x38,0x00,0x79,0x45,0x00,0x71,0x57,0x00,0x6B, -+0x6C,0x00,0x68,0x87,0x00,0x68,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x03, -+0x00,0x48,0x21,0x10,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, -+0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11, -+0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B, -+0x1C,0x1D,0x2A,0x29,0x28,0x27,0x26,0x25,0x24,0x23, -+0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1C,0x1B,0x19,0x18, -+0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0F,0x0E, -+0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04, ++0x47,0x80,0x07,0xB0,0x04,0x0A,0x7C,0x00,0x01,0x08, ++0x28,0x05,0x5A,0x3C,0x03,0x04,0x00,0x00,0x08,0x00, ++0x00,0x00,0x00,0x17,0x19,0x1D,0x14,0x95,0x35,0xFF, ++0x3C,0x3E,0x0C,0x08,0x00,0x00,0x00,0xBA,0x02,0x2C, ++0x17,0x19,0x1B,0x90,0x83,0x32,0x50,0x3C,0x28,0x4A, ++0x30,0x32,0x96,0x94,0xC5,0x02,0x07,0x00,0x00,0x04, ++0x83,0x38,0x00,0x79,0x45,0x00,0x71,0x57,0x00,0x6B, ++0x6C,0x00,0x68,0x87,0x00,0x68,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x03, ++0x00,0x48,0x21,0x10,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, ++0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11, ++0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B, ++0x1C,0x1D,0x2A,0x29,0x28,0x27,0x26,0x25,0x24,0x23, ++0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1C,0x1B,0x19,0x18, ++0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0F,0x0E, ++0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04, +0x03,0x02,0x01,0x00,0x53,0x01 \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/GT9110P_Config_20160217_1526_2048_97.cfg b/drivers/input/touchscreen/gt9xx/GT9110P_Config_20160217_1526_2048_97.cfg new file mode 100755 -index 000000000000..952ea845390e +index 000000000..952ea8453 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/GT9110P_Config_20160217_1526_2048_97.cfg @@ -0,0 +1 @@ @@ -803328,7 +803389,7 @@ index 000000000000..952ea845390e \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/GT9271_Config_20170526.cfg b/drivers/input/touchscreen/gt9xx/GT9271_Config_20170526.cfg new file mode 100755 -index 000000000000..a7ac38fe331e +index 000000000..a7ac38fe3 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/GT9271_Config_20170526.cfg @@ -0,0 +1 @@ @@ -803336,7 +803397,7 @@ index 000000000000..a7ac38fe331e \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/HLS-0102-1398V1-1060-GT911_Config_20201204_V66.cfg b/drivers/input/touchscreen/gt9xx/HLS-0102-1398V1-1060-GT911_Config_20201204_V66.cfg new file mode 100755 -index 000000000000..77b72c416bea +index 000000000..77b72c416 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/HLS-0102-1398V1-1060-GT911_Config_20201204_V66.cfg @@ -0,0 +1 @@ @@ -803344,7 +803405,7 @@ index 000000000000..77b72c416bea \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/Makefile b/drivers/input/touchscreen/gt9xx/Makefile new file mode 100755 -index 000000000000..f63b5f2783a5 +index 000000000..f63b5f278 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/Makefile @@ -0,0 +1,6 @@ @@ -803356,7 +803417,7 @@ index 000000000000..f63b5f2783a5 +goodix_gt9xx-y +=gt9xx_update.o diff --git a/drivers/input/touchscreen/gt9xx/WGJ10162B_GT9271_1060_Config_20140821_1341110X42.cfg b/drivers/input/touchscreen/gt9xx/WGJ10162B_GT9271_1060_Config_20140821_1341110X42.cfg new file mode 100755 -index 000000000000..db5ed0f34b82 +index 000000000..db5ed0f34 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/WGJ10162B_GT9271_1060_Config_20140821_1341110X42.cfg @@ -0,0 +1 @@ @@ -803364,7 +803425,7 @@ index 000000000000..db5ed0f34b82 \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/WGJ10162_GT9271_Config_20140820_182456.cfg b/drivers/input/touchscreen/gt9xx/WGJ10162_GT9271_Config_20140820_182456.cfg new file mode 100755 -index 000000000000..96bf8cb7961c +index 000000000..96bf8cb79 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/WGJ10162_GT9271_Config_20140820_182456.cfg @@ -0,0 +1 @@ @@ -803372,7 +803433,7 @@ index 000000000000..96bf8cb7961c \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/WGJ10187_GT910_Config_20140623_104014_0X41.cfg b/drivers/input/touchscreen/gt9xx/WGJ10187_GT910_Config_20140623_104014_0X41.cfg new file mode 100755 -index 000000000000..ffc4679bf2d9 +index 000000000..ffc4679bf --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/WGJ10187_GT910_Config_20140623_104014_0X41.cfg @@ -0,0 +1 @@ @@ -803380,7 +803441,7 @@ index 000000000000..ffc4679bf2d9 \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/WGJ10187_GT9271_Config_20140623_104014_0X41.cfg b/drivers/input/touchscreen/gt9xx/WGJ10187_GT9271_Config_20140623_104014_0X41.cfg new file mode 100755 -index 000000000000..ffbfe3d547da +index 000000000..ffbfe3d54 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/WGJ10187_GT9271_Config_20140623_104014_0X41.cfg @@ -0,0 +1 @@ @@ -803388,7 +803449,7 @@ index 000000000000..ffbfe3d547da \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/WGJ89006B_GT911_Config_20140625_085816_0X43.cfg b/drivers/input/touchscreen/gt9xx/WGJ89006B_GT911_Config_20140625_085816_0X43.cfg new file mode 100755 -index 000000000000..1c42d9ef7ce1 +index 000000000..1c42d9ef7 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/WGJ89006B_GT911_Config_20140625_085816_0X43.cfg @@ -0,0 +1 @@ @@ -803396,7 +803457,7 @@ index 000000000000..1c42d9ef7ce1 \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/WGJ89006B_GT9271_Config_20140625_085816_0X41.cfg b/drivers/input/touchscreen/gt9xx/WGJ89006B_GT9271_Config_20140625_085816_0X41.cfg new file mode 100755 -index 000000000000..7ed0266acfaa +index 000000000..7ed0266ac --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/WGJ89006B_GT9271_Config_20140625_085816_0X41.cfg @@ -0,0 +1 @@ @@ -803404,640 +803465,640 @@ index 000000000000..7ed0266acfaa \ No newline at end of file diff --git a/drivers/input/touchscreen/gt9xx/goodix_tool.c b/drivers/input/touchscreen/gt9xx/goodix_tool.c new file mode 100755 -index 000000000000..b2dffcb5e105 +index 000000000..6b0089ea5 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/goodix_tool.c @@ -0,0 +1,627 @@ -+/* drivers/input/touchscreen/goodix_tool.c -+ * -+ * 2010 - 2012 Goodix Technology. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be a reference -+ * to you, when you are integrating the GOODiX's CTP IC into your system, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * General Public License for more details. -+ * -+ * Version:2.2 -+ * V1.0:2012/05/01,create file. -+ * V1.2:2012/06/08,modify some warning. -+ * V1.4:2012/08/28,modified to support GT9XX -+ * V1.6:new proc name -+ * V2.2: compatible with Linux 3.10, 2014/01/14 -+ */ -+ -+#include "gt9xx.h" -+ -+#define DATA_LENGTH_UINT 512 -+#define CMD_HEAD_LENGTH (sizeof(st_cmd_head) - sizeof(u8*)) -+static char procname[20] = {0}; -+ -+#define UPDATE_FUNCTIONS -+ -+#ifdef UPDATE_FUNCTIONS -+extern s32 gup_enter_update_mode(struct i2c_client *client); -+extern void gup_leave_update_mode(void); -+extern s32 gup_update_proc(void *dir); -+#endif -+ -+extern void gtp_irq_disable(struct goodix_ts_data *); -+extern void gtp_irq_enable(struct goodix_ts_data *); -+ -+#pragma pack(1) -+typedef struct{ -+ u8 wr; //write read flag£¬0:R 1:W 2:PID 3: -+ u8 flag; //0:no need flag/int 1: need flag 2:need int -+ u8 flag_addr[2]; //flag address -+ u8 flag_val; //flag val -+ u8 flag_relation; //flag_val:flag 0:not equal 1:equal 2:> 3:< -+ u16 circle; //polling cycle -+ u8 times; //plling times -+ u8 retry; //I2C retry times -+ u16 delay; //delay befor read or after write -+ u16 data_len; //data length -+ u8 addr_len; //address length -+ u8 addr[2]; //address -+ u8 res[3]; //reserved -+ u8* data; //data pointer -+}st_cmd_head; -+#pragma pack() -+st_cmd_head cmd_head; -+ -+static struct i2c_client *gt_client = NULL; -+ -+static struct proc_dir_entry *goodix_proc_entry; -+ -+static ssize_t goodix_tool_read(struct file *, char __user *, size_t, loff_t *); -+static ssize_t goodix_tool_write(struct file *, const char __user *, size_t, loff_t *); -+static const struct file_operations tool_ops = { -+ .owner = THIS_MODULE, -+ .read = goodix_tool_read, -+ .write = goodix_tool_write, -+}; -+ -+//static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigned long len, void *data); -+//static s32 goodix_tool_read( char *page, char **start, off_t off, int count, int *eof, void *data ); -+static s32 (*tool_i2c_read)(u8 *, u16); -+static s32 (*tool_i2c_write)(u8 *, u16); -+ -+#if GTP_ESD_PROTECT -+extern void gtp_esd_switch(struct i2c_client *, s32); -+#endif -+s32 DATA_LENGTH = 0; -+s8 IC_TYPE[16] = "GT9XX"; -+ -+static void tool_set_proc_name(char * procname) -+{ -+ char *months[12] = {"Jan", "Feb", "Mar", "Apr", "May", -+ "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; -+ char date[20] = {0}; -+ char month[4] = {0}; -+ int i = 0, n_month = 1, n_day = 0, n_year = 0; -+ -+ sprintf(date, "%s", __DATE__); -+ -+ //GTP_DEBUG("compile date: %s", date); -+ -+ sscanf(date, "%s %d %d", month, &n_day, &n_year); -+ -+ for (i = 0; i < 12; ++i) -+ { -+ if (!memcmp(months[i], month, 3)) -+ { -+ n_month = i+1; -+ break; -+ } -+ } -+ -+ sprintf(procname, "gmnode%04d%02d%02d", n_year, n_month, n_day); -+ //sprintf(procname, "goodix_tool"); -+ //GTP_DEBUG("procname = %s", procname); -+} -+ -+ -+static s32 tool_i2c_read_no_extra(u8* buf, u16 len) -+{ -+ s32 ret = -1; -+ s32 i = 0; -+ struct i2c_msg msgs[2]; -+ -+ msgs[0].flags = !I2C_M_RD; -+ msgs[0].addr = gt_client->addr; -+ msgs[0].len = cmd_head.addr_len; -+ msgs[0].buf = &buf[0]; -+ -+ msgs[1].flags = I2C_M_RD; -+ msgs[1].addr = gt_client->addr; -+ msgs[1].len = len; -+ msgs[1].buf = &buf[GTP_ADDR_LENGTH]; -+ -+ for (i = 0; i < cmd_head.retry; i++) -+ { -+ ret=i2c_transfer(gt_client->adapter, msgs, 2); -+ if (ret > 0) -+ { -+ break; -+ } -+ } -+ return ret; -+} -+ -+static s32 tool_i2c_write_no_extra(u8* buf, u16 len) -+{ -+ s32 ret = -1; -+ s32 i = 0; -+ struct i2c_msg msg; -+ -+ msg.flags = !I2C_M_RD; -+ msg.addr = gt_client->addr; -+ msg.len = len; -+ msg.buf = buf; -+ -+ for (i = 0; i < cmd_head.retry; i++) -+ { -+ ret=i2c_transfer(gt_client->adapter, &msg, 1); -+ if (ret > 0) -+ { -+ break; -+ } -+ } -+ return ret; -+} -+ -+static s32 tool_i2c_read_with_extra(u8* buf, u16 len) -+{ -+ s32 ret = -1; -+ u8 pre[2] = {0x0f, 0xff}; -+ u8 end[2] = {0x80, 0x00}; -+ -+ tool_i2c_write_no_extra(pre, 2); -+ ret = tool_i2c_read_no_extra(buf, len); -+ tool_i2c_write_no_extra(end, 2); -+ -+ return ret; -+} -+ -+static s32 tool_i2c_write_with_extra(u8* buf, u16 len) -+{ -+ s32 ret = -1; -+ u8 pre[2] = {0x0f, 0xff}; -+ u8 end[2] = {0x80, 0x00}; -+ -+ tool_i2c_write_no_extra(pre, 2); -+ ret = tool_i2c_write_no_extra(buf, len); -+ tool_i2c_write_no_extra(end, 2); -+ -+ return ret; -+} -+ -+static void register_i2c_func(void) -+{ -+// if (!strncmp(IC_TYPE, "GT818", 5) || !strncmp(IC_TYPE, "GT816", 5) -+// || !strncmp(IC_TYPE, "GT811", 5) || !strncmp(IC_TYPE, "GT818F", 6) -+// || !strncmp(IC_TYPE, "GT827", 5) || !strncmp(IC_TYPE,"GT828", 5) -+// || !strncmp(IC_TYPE, "GT813", 5)) -+ if (strncmp(IC_TYPE, "GT8110", 6) && strncmp(IC_TYPE, "GT8105", 6) -+ && strncmp(IC_TYPE, "GT801", 5) && strncmp(IC_TYPE, "GT800", 5) -+ && strncmp(IC_TYPE, "GT801PLUS", 9) && strncmp(IC_TYPE, "GT811", 5) -+ && strncmp(IC_TYPE, "GTxxx", 5) && strncmp(IC_TYPE, "GT9XX", 5)) -+ { -+ tool_i2c_read = tool_i2c_read_with_extra; -+ tool_i2c_write = tool_i2c_write_with_extra; -+ GTP_DEBUG("I2C function: with pre and end cmd!"); -+ } -+ else -+ { -+ tool_i2c_read = tool_i2c_read_no_extra; -+ tool_i2c_write = tool_i2c_write_no_extra; -+ GTP_INFO("I2C function: without pre and end cmd!"); -+ } -+} -+ -+static void unregister_i2c_func(void) -+{ -+ tool_i2c_read = NULL; -+ tool_i2c_write = NULL; -+ GTP_INFO("I2C function: unregister i2c transfer function!"); -+} -+ -+s32 init_wr_node(struct i2c_client *client) -+{ -+ s32 i; -+ -+ gt_client = client; -+ memset(&cmd_head, 0, sizeof(cmd_head)); -+ cmd_head.data = NULL; -+ -+ i = 5; -+ while ((!cmd_head.data) && i) -+ { -+ cmd_head.data = kzalloc(i * DATA_LENGTH_UINT, GFP_KERNEL); -+ if (NULL != cmd_head.data) -+ { -+ break; -+ } -+ i--; -+ } -+ if (i) -+ { -+ DATA_LENGTH = i * DATA_LENGTH_UINT + GTP_ADDR_LENGTH; -+ GTP_INFO("Applied memory size:%d.", DATA_LENGTH); -+ } -+ else -+ { -+ GTP_ERROR("Apply for memory failed."); -+ return FAIL; -+ } -+ -+ cmd_head.addr_len = 2; -+ cmd_head.retry = 5; -+ -+ register_i2c_func(); -+ -+ tool_set_proc_name(procname); -+ //goodix_proc_entry = create_proc_entry(procname, 0666, NULL); -+ goodix_proc_entry = proc_create(procname, 0666, NULL, &tool_ops); -+ if (goodix_proc_entry == NULL) -+ { -+ GTP_ERROR("Couldn't create proc entry!"); -+ return FAIL; -+ } -+ else -+ { -+ GTP_INFO("Create proc entry success!"); -+ //goodix_proc_entry->write_proc = goodix_tool_write; -+ //goodix_proc_entry->read_proc = goodix_tool_read; -+ } -+ -+ return SUCCESS; -+} -+ -+void uninit_wr_node(void) -+{ -+ kfree(cmd_head.data); -+ cmd_head.data = NULL; -+ unregister_i2c_func(); -+ remove_proc_entry(procname, NULL); -+} -+ -+static u8 relation(u8 src, u8 dst, u8 rlt) -+{ -+ u8 ret = 0; -+ -+ switch (rlt) -+ { -+ case 0: -+ ret = (src != dst) ? true : false; -+ break; -+ -+ case 1: -+ ret = (src == dst) ? true : false; -+ GTP_DEBUG("equal:src:0x%02x dst:0x%02x ret:%d.", src, dst, (s32)ret); -+ break; -+ -+ case 2: -+ ret = (src > dst) ? true : false; -+ break; -+ -+ case 3: -+ ret = (src < dst) ? true : false; -+ break; -+ -+ case 4: -+ ret = (src & dst) ? true : false; -+ break; -+ -+ case 5: -+ ret = (!(src | dst)) ? true : false; -+ break; -+ -+ default: -+ ret = false; -+ break; -+ } -+ -+ return ret; -+} -+ -+/******************************************************* -+Function: -+ Comfirm function. -+Input: -+ None. -+Output: -+ Return write length. -+********************************************************/ -+static u8 comfirm(void) -+{ -+ s32 i = 0; -+ u8 buf[32]; -+ -+// memcpy(&buf[GTP_ADDR_LENGTH - cmd_head.addr_len], &cmd_head.flag_addr, cmd_head.addr_len); -+// memcpy(buf, &cmd_head.flag_addr, cmd_head.addr_len);//Modified by Scott, 2012-02-17 -+ memcpy(buf, cmd_head.flag_addr, cmd_head.addr_len); -+ -+ for (i = 0; i < cmd_head.times; i++) -+ { -+ if (tool_i2c_read(buf, 1) <= 0) -+ { -+ GTP_ERROR("Read flag data failed!"); -+ return FAIL; -+ } -+ if (true == relation(buf[GTP_ADDR_LENGTH], cmd_head.flag_val, cmd_head.flag_relation)) -+ { -+ GTP_DEBUG("value at flag addr:0x%02x.", buf[GTP_ADDR_LENGTH]); -+ GTP_DEBUG("flag value:0x%02x.", cmd_head.flag_val); -+ break; -+ } -+ -+ msleep(cmd_head.circle); -+ } -+ -+ if (i >= cmd_head.times) -+ { -+ GTP_ERROR("Didn't get the flag to continue!"); -+ return FAIL; -+ } -+ -+ return SUCCESS; -+} -+ -+/******************************************************* -+Function: -+ Goodix tool write function. -+Input: -+ standard proc write function param. -+Output: -+ Return write length. -+********************************************************/ -+//static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigned long len, void *data) -+ssize_t goodix_tool_write(struct file *filp, const char __user *buff, size_t len, loff_t *off) -+{ -+ s32 ret = 0; -+ -+ GTP_DEBUG_FUNC(); -+ GTP_DEBUG_ARRAY((u8*)buff, len); -+ -+ ret = copy_from_user(&cmd_head, buff, CMD_HEAD_LENGTH); -+ if(ret) -+ { -+ GTP_ERROR("copy_from_user failed."); -+ return -EPERM; -+ } -+ -+ -+ GTP_DEBUG("[Operation]wr: %02X", cmd_head.wr); -+ GTP_DEBUG("[Flag]flag: %02X, addr: %02X%02X, value: %02X, relation: %02X", cmd_head.flag, cmd_head.flag_addr[0], -+ cmd_head.flag_addr[1], cmd_head.flag_val, cmd_head.flag_relation); -+ GTP_DEBUG("[Retry]circle: %d, times: %d, retry: %d, delay: %d", (s32)cmd_head.circle, (s32)cmd_head.times, -+ (s32)cmd_head.retry, (s32)cmd_head.delay); -+ GTP_DEBUG("[Data]data len: %d, addr len: %d, addr: %02X%02X, buffer len: %d, data[0]: %02X", (s32)cmd_head.data_len, -+ (s32)cmd_head.addr_len, cmd_head.addr[0], cmd_head.addr[1], (s32)len, buff[CMD_HEAD_LENGTH]); -+ -+ if (1 == cmd_head.wr) -+ { -+ ret = copy_from_user(&cmd_head.data[GTP_ADDR_LENGTH], &buff[CMD_HEAD_LENGTH], cmd_head.data_len); -+ if(ret) -+ { -+ GTP_ERROR("copy_from_user failed."); -+ return -EPERM; -+ } -+ memcpy(&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len], cmd_head.addr, cmd_head.addr_len); -+ -+ GTP_DEBUG_ARRAY(cmd_head.data, cmd_head.data_len + cmd_head.addr_len); -+ GTP_DEBUG_ARRAY((u8*)&buff[CMD_HEAD_LENGTH], cmd_head.data_len); -+ -+ if (1 == cmd_head.flag) -+ { -+ if (FAIL == comfirm()) -+ { -+ GTP_ERROR("[WRITE]Comfirm fail!"); -+ return -EPERM; -+ } -+ } -+ else if (2 == cmd_head.flag) -+ { -+ //Need interrupt! -+ } -+ if (tool_i2c_write(&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len], -+ cmd_head.data_len + cmd_head.addr_len) <= 0) -+ { -+ GTP_ERROR("[WRITE]Write data failed!"); -+ return -EPERM; -+ } -+ -+ GTP_DEBUG_ARRAY(&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len],cmd_head.data_len + cmd_head.addr_len); -+ if (cmd_head.delay) -+ { -+ msleep(cmd_head.delay); -+ } -+ } -+ else if (3 == cmd_head.wr) //Write ic type -+ { -+ ret = copy_from_user(&cmd_head.data[0], &buff[CMD_HEAD_LENGTH], cmd_head.data_len); -+ if(ret) -+ { -+ GTP_ERROR("copy_from_user failed."); -+ return -EPERM; -+ } -+ memcpy(IC_TYPE, cmd_head.data, cmd_head.data_len); -+ -+ register_i2c_func(); -+ } -+ else if (5 == cmd_head.wr) -+ { -+ //memcpy(IC_TYPE, cmd_head.data, cmd_head.data_len); -+ } -+ else if (7 == cmd_head.wr)//disable irq! -+ { -+ gtp_irq_disable(i2c_get_clientdata(gt_client)); -+ -+ #if GTP_ESD_PROTECT -+ gtp_esd_switch(gt_client, SWITCH_OFF); -+ #endif -+ } -+ else if (9 == cmd_head.wr) //enable irq! -+ { -+ gtp_irq_enable(i2c_get_clientdata(gt_client)); -+ -+ #if GTP_ESD_PROTECT -+ gtp_esd_switch(gt_client, SWITCH_ON); -+ #endif -+ } -+ else if(17 == cmd_head.wr) -+ { -+ struct goodix_ts_data *ts = i2c_get_clientdata(gt_client); -+ ret = copy_from_user(&cmd_head.data[GTP_ADDR_LENGTH], &buff[CMD_HEAD_LENGTH], cmd_head.data_len); -+ if(ret) -+ { -+ GTP_DEBUG("copy_from_user failed."); -+ return -EPERM; -+ } -+ if(cmd_head.data[GTP_ADDR_LENGTH]) -+ { -+ GTP_INFO("gtp enter rawdiff."); -+ ts->gtp_rawdiff_mode = true; -+ } -+ else -+ { -+ ts->gtp_rawdiff_mode = false; -+ GTP_INFO("gtp leave rawdiff."); -+ } -+ } -+#ifdef UPDATE_FUNCTIONS -+ else if (11 == cmd_head.wr)//Enter update mode! -+ { -+ if (FAIL == gup_enter_update_mode(gt_client)) -+ { -+ return -EPERM; -+ } -+ } -+ else if (13 == cmd_head.wr)//Leave update mode! -+ { -+ gup_leave_update_mode(); -+ } -+ else if (15 == cmd_head.wr) //Update firmware! -+ { -+ show_len = 0; -+ total_len = 0; -+ memset(cmd_head.data, 0, cmd_head.data_len + 1); -+ memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len); -+ -+ if (FAIL == gup_update_proc((void*)cmd_head.data)) -+ { -+ return -EPERM; -+ } -+ } -+ -+#endif -+ -+ return len; -+} -+ -+/******************************************************* -+Function: -+ Goodix tool read function. -+Input: -+ standard proc read function param. -+Output: -+ Return read length. -+********************************************************/ -+//static s32 goodix_tool_read( char *page, char **start, off_t off, int count, int *eof, void *data ) -+ssize_t goodix_tool_read(struct file *file, char __user *page, size_t size, loff_t *ppos) -+{ -+ s32 ret = 0; -+ -+ GTP_DEBUG_FUNC(); -+ -+ if (*ppos) // ADB call again -+ { -+ //GTP_DEBUG("[HEAD]wr: %d", cmd_head.wr); -+ //GTP_DEBUG("[PARAM]size: %d, *ppos: %d", size, (int)*ppos); -+ //GTP_DEBUG("[TOOL_READ]ADB call again, return it."); -+ return 0; -+ } -+ -+ if (cmd_head.wr % 2) -+ { -+ return -EPERM; -+ } -+ else if (!cmd_head.wr) -+ { -+ u16 len = 0; -+ s16 data_len = 0; -+ u16 loc = 0; -+ -+ if (1 == cmd_head.flag) -+ { -+ if (FAIL == comfirm()) -+ { -+ GTP_ERROR("[READ]Comfirm fail!"); -+ return -EPERM; -+ } -+ } -+ else if (2 == cmd_head.flag) -+ { -+ //Need interrupt! -+ } -+ -+ memcpy(cmd_head.data, cmd_head.addr, cmd_head.addr_len); -+ -+ GTP_DEBUG("[CMD HEAD DATA] ADDR:0x%02x%02x.", cmd_head.data[0], cmd_head.data[1]); -+ GTP_DEBUG("[CMD HEAD ADDR] ADDR:0x%02x%02x.", cmd_head.addr[0], cmd_head.addr[1]); -+ -+ if (cmd_head.delay) -+ { -+ msleep(cmd_head.delay); -+ } -+ -+ data_len = cmd_head.data_len; -+ -+ while(data_len > 0) -+ { -+ if (data_len > DATA_LENGTH) -+ { -+ len = DATA_LENGTH; -+ } -+ else -+ { -+ len = data_len; -+ } -+ data_len -= len; -+ -+ if (tool_i2c_read(cmd_head.data, len) <= 0) -+ { -+ GTP_ERROR("[READ]Read data failed!"); -+ return -EPERM; -+ } -+ -+ //memcpy(&page[loc], &cmd_head.data[GTP_ADDR_LENGTH], len); -+ ret = simple_read_from_buffer(&page[loc], size, ppos, &cmd_head.data[GTP_ADDR_LENGTH], len); -+ if (ret < 0) -+ { -+ return ret; -+ } -+ loc += len; -+ -+ GTP_DEBUG_ARRAY(&cmd_head.data[GTP_ADDR_LENGTH], len); -+ GTP_DEBUG_ARRAY(page, len); -+ } -+ return cmd_head.data_len; -+ } -+ else if (2 == cmd_head.wr) -+ { -+ ret = simple_read_from_buffer(page, size, ppos, IC_TYPE, sizeof(IC_TYPE)); -+ return ret; -+ } -+ else if (4 == cmd_head.wr) -+ { -+ u8 progress_buf[4]; -+ progress_buf[0] = show_len >> 8; -+ progress_buf[1] = show_len & 0xff; -+ progress_buf[2] = total_len >> 8; -+ progress_buf[3] = total_len & 0xff; -+ -+ ret = simple_read_from_buffer(page, size, ppos, progress_buf, 4); -+ return ret; -+ } -+ else if (6 == cmd_head.wr) -+ { -+ //Read error code! -+ } -+ else if (8 == cmd_head.wr) //Read driver version -+ { -+ ret = simple_read_from_buffer(page, size, ppos, GTP_DRIVER_VERSION, strlen(GTP_DRIVER_VERSION)); -+ return ret; -+ } -+ return -EPERM; -+} ++/* drivers/input/touchscreen/goodix_tool.c ++ * ++ * 2010 - 2012 Goodix Technology. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be a reference ++ * to you, when you are integrating the GOODiX's CTP IC into your system, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * Version:2.2 ++ * V1.0:2012/05/01,create file. ++ * V1.2:2012/06/08,modify some warning. ++ * V1.4:2012/08/28,modified to support GT9XX ++ * V1.6:new proc name ++ * V2.2: compatible with Linux 3.10, 2014/01/14 ++ */ ++ ++#include "gt9xx.h" ++ ++#define DATA_LENGTH_UINT 512 ++#define CMD_HEAD_LENGTH (sizeof(st_cmd_head) - sizeof(u8*)) ++static char procname[20] = {0}; ++ ++#define UPDATE_FUNCTIONS ++ ++#ifdef UPDATE_FUNCTIONS ++extern s32 gup_enter_update_mode(struct i2c_client *client); ++extern void gup_leave_update_mode(void); ++extern s32 gup_update_proc(void *dir); ++#endif ++ ++extern void gtp_irq_disable(struct goodix_ts_data *); ++extern void gtp_irq_enable(struct goodix_ts_data *); ++ ++#pragma pack(1) ++typedef struct{ ++ u8 wr; //write read flag£¬0:R 1:W 2:PID 3: ++ u8 flag; //0:no need flag/int 1: need flag 2:need int ++ u8 flag_addr[2]; //flag address ++ u8 flag_val; //flag val ++ u8 flag_relation; //flag_val:flag 0:not equal 1:equal 2:> 3:< ++ u16 circle; //polling cycle ++ u8 times; //plling times ++ u8 retry; //I2C retry times ++ u16 delay; //delay befor read or after write ++ u16 data_len; //data length ++ u8 addr_len; //address length ++ u8 addr[2]; //address ++ u8 res[3]; //reserved ++ u8* data; //data pointer ++}st_cmd_head; ++#pragma pack() ++st_cmd_head cmd_head; ++ ++static struct i2c_client *gt_client = NULL; ++ ++static struct proc_dir_entry *goodix_proc_entry; ++ ++static ssize_t goodix_tool_read(struct file *, char __user *, size_t, loff_t *); ++static ssize_t goodix_tool_write(struct file *, const char __user *, size_t, loff_t *); ++static const struct file_operations tool_ops = { ++ .owner = THIS_MODULE, ++ .read = goodix_tool_read, ++ .write = goodix_tool_write, ++}; ++ ++//static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigned long len, void *data); ++//static s32 goodix_tool_read( char *page, char **start, off_t off, int count, int *eof, void *data ); ++static s32 (*tool_i2c_read)(u8 *, u16); ++static s32 (*tool_i2c_write)(u8 *, u16); ++ ++#if GTP_ESD_PROTECT ++extern void gtp_esd_switch(struct i2c_client *, s32); ++#endif ++s32 DATA_LENGTH = 0; ++s8 IC_TYPE[16] = "GT9XX"; ++ ++static void tool_set_proc_name(char * procname) ++{ ++ char *months[12] = {"Jan", "Feb", "Mar", "Apr", "May", ++ "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; ++ char date[20] = {0}; ++ char month[4] = {0}; ++ int i = 0, n_month = 1, n_day = 0, n_year = 0; ++ ++ sprintf(date, "%s", __DATE__); ++ ++ //GTP_DEBUG("compile date: %s", date); ++ ++ sscanf(date, "%s %d %d", month, &n_day, &n_year); ++ ++ for (i = 0; i < 12; ++i) ++ { ++ if (!memcmp(months[i], month, 3)) ++ { ++ n_month = i+1; ++ break; ++ } ++ } ++ ++ sprintf(procname, "gmnode%04d%02d%02d", n_year, n_month, n_day); ++ //sprintf(procname, "goodix_tool"); ++ //GTP_DEBUG("procname = %s", procname); ++} ++ ++ ++static s32 tool_i2c_read_no_extra(u8* buf, u16 len) ++{ ++ s32 ret = -1; ++ s32 i = 0; ++ struct i2c_msg msgs[2]; ++ ++ msgs[0].flags = !I2C_M_RD; ++ msgs[0].addr = gt_client->addr; ++ msgs[0].len = cmd_head.addr_len; ++ msgs[0].buf = &buf[0]; ++ ++ msgs[1].flags = I2C_M_RD; ++ msgs[1].addr = gt_client->addr; ++ msgs[1].len = len; ++ msgs[1].buf = &buf[GTP_ADDR_LENGTH]; ++ ++ for (i = 0; i < cmd_head.retry; i++) ++ { ++ ret=i2c_transfer(gt_client->adapter, msgs, 2); ++ if (ret > 0) ++ { ++ break; ++ } ++ } ++ return ret; ++} ++ ++static s32 tool_i2c_write_no_extra(u8* buf, u16 len) ++{ ++ s32 ret = -1; ++ s32 i = 0; ++ struct i2c_msg msg; ++ ++ msg.flags = !I2C_M_RD; ++ msg.addr = gt_client->addr; ++ msg.len = len; ++ msg.buf = buf; ++ ++ for (i = 0; i < cmd_head.retry; i++) ++ { ++ ret=i2c_transfer(gt_client->adapter, &msg, 1); ++ if (ret > 0) ++ { ++ break; ++ } ++ } ++ return ret; ++} ++ ++static s32 tool_i2c_read_with_extra(u8* buf, u16 len) ++{ ++ s32 ret = -1; ++ u8 pre[2] = {0x0f, 0xff}; ++ u8 end[2] = {0x80, 0x00}; ++ ++ tool_i2c_write_no_extra(pre, 2); ++ ret = tool_i2c_read_no_extra(buf, len); ++ tool_i2c_write_no_extra(end, 2); ++ ++ return ret; ++} ++ ++static s32 tool_i2c_write_with_extra(u8* buf, u16 len) ++{ ++ s32 ret = -1; ++ u8 pre[2] = {0x0f, 0xff}; ++ u8 end[2] = {0x80, 0x00}; ++ ++ tool_i2c_write_no_extra(pre, 2); ++ ret = tool_i2c_write_no_extra(buf, len); ++ tool_i2c_write_no_extra(end, 2); ++ ++ return ret; ++} ++ ++static void register_i2c_func(void) ++{ ++// if (!strncmp(IC_TYPE, "GT818", 5) || !strncmp(IC_TYPE, "GT816", 5) ++// || !strncmp(IC_TYPE, "GT811", 5) || !strncmp(IC_TYPE, "GT818F", 6) ++// || !strncmp(IC_TYPE, "GT827", 5) || !strncmp(IC_TYPE,"GT828", 5) ++// || !strncmp(IC_TYPE, "GT813", 5)) ++ if (strncmp(IC_TYPE, "GT8110", 6) && strncmp(IC_TYPE, "GT8105", 6) ++ && strncmp(IC_TYPE, "GT801", 5) && strncmp(IC_TYPE, "GT800", 5) ++ && strncmp(IC_TYPE, "GT801PLUS", 9) && strncmp(IC_TYPE, "GT811", 5) ++ && strncmp(IC_TYPE, "GTxxx", 5) && strncmp(IC_TYPE, "GT9XX", 5)) ++ { ++ tool_i2c_read = tool_i2c_read_with_extra; ++ tool_i2c_write = tool_i2c_write_with_extra; ++ GTP_DEBUG("I2C function: with pre and end cmd!"); ++ } ++ else ++ { ++ tool_i2c_read = tool_i2c_read_no_extra; ++ tool_i2c_write = tool_i2c_write_no_extra; ++ GTP_INFO("I2C function: without pre and end cmd!"); ++ } ++} ++ ++static void unregister_i2c_func(void) ++{ ++ tool_i2c_read = NULL; ++ tool_i2c_write = NULL; ++ GTP_INFO("I2C function: unregister i2c transfer function!"); ++} ++ ++s32 init_wr_node(struct i2c_client *client) ++{ ++ s32 i; ++ ++ gt_client = client; ++ memset(&cmd_head, 0, sizeof(cmd_head)); ++ cmd_head.data = NULL; ++ ++ i = 5; ++ while ((!cmd_head.data) && i) ++ { ++ cmd_head.data = kzalloc(i * DATA_LENGTH_UINT, GFP_KERNEL); ++ if (NULL != cmd_head.data) ++ { ++ break; ++ } ++ i--; ++ } ++ if (i) ++ { ++ DATA_LENGTH = i * DATA_LENGTH_UINT + GTP_ADDR_LENGTH; ++ GTP_INFO("Applied memory size:%d.", DATA_LENGTH); ++ } ++ else ++ { ++ GTP_ERROR("Apply for memory failed."); ++ return FAIL; ++ } ++ ++ cmd_head.addr_len = 2; ++ cmd_head.retry = 5; ++ ++ register_i2c_func(); ++ ++ tool_set_proc_name(procname); ++ //goodix_proc_entry = create_proc_entry(procname, 0666, NULL); ++ goodix_proc_entry = proc_create(procname, 0666, NULL, &tool_ops); ++ if (goodix_proc_entry == NULL) ++ { ++ GTP_ERROR("Couldn't create proc entry!"); ++ return FAIL; ++ } ++ else ++ { ++ GTP_INFO("Create proc entry success!"); ++ //goodix_proc_entry->write_proc = goodix_tool_write; ++ //goodix_proc_entry->read_proc = goodix_tool_read; ++ } ++ ++ return SUCCESS; ++} ++ ++void uninit_wr_node(void) ++{ ++ kfree(cmd_head.data); ++ cmd_head.data = NULL; ++ unregister_i2c_func(); ++ remove_proc_entry(procname, NULL); ++} ++ ++static u8 relation(u8 src, u8 dst, u8 rlt) ++{ ++ u8 ret = 0; ++ ++ switch (rlt) ++ { ++ case 0: ++ ret = (src != dst) ? true : false; ++ break; ++ ++ case 1: ++ ret = (src == dst) ? true : false; ++ GTP_DEBUG("equal:src:0x%02x dst:0x%02x ret:%d.", src, dst, (s32)ret); ++ break; ++ ++ case 2: ++ ret = (src > dst) ? true : false; ++ break; ++ ++ case 3: ++ ret = (src < dst) ? true : false; ++ break; ++ ++ case 4: ++ ret = (src & dst) ? true : false; ++ break; ++ ++ case 5: ++ ret = (!(src | dst)) ? true : false; ++ break; ++ ++ default: ++ ret = false; ++ break; ++ } ++ ++ return ret; ++} ++ ++/******************************************************* ++Function: ++ Comfirm function. ++Input: ++ None. ++Output: ++ Return write length. ++********************************************************/ ++static u8 comfirm(void) ++{ ++ s32 i = 0; ++ u8 buf[32]; ++ ++// memcpy(&buf[GTP_ADDR_LENGTH - cmd_head.addr_len], &cmd_head.flag_addr, cmd_head.addr_len); ++// memcpy(buf, &cmd_head.flag_addr, cmd_head.addr_len);//Modified by Scott, 2012-02-17 ++ memcpy(buf, cmd_head.flag_addr, cmd_head.addr_len); ++ ++ for (i = 0; i < cmd_head.times; i++) ++ { ++ if (tool_i2c_read(buf, 1) <= 0) ++ { ++ GTP_ERROR("Read flag data failed!"); ++ return FAIL; ++ } ++ if (true == relation(buf[GTP_ADDR_LENGTH], cmd_head.flag_val, cmd_head.flag_relation)) ++ { ++ GTP_DEBUG("value at flag addr:0x%02x.", buf[GTP_ADDR_LENGTH]); ++ GTP_DEBUG("flag value:0x%02x.", cmd_head.flag_val); ++ break; ++ } ++ ++ msleep(cmd_head.circle); ++ } ++ ++ if (i >= cmd_head.times) ++ { ++ GTP_ERROR("Didn't get the flag to continue!"); ++ return FAIL; ++ } ++ ++ return SUCCESS; ++} ++ ++/******************************************************* ++Function: ++ Goodix tool write function. ++Input: ++ standard proc write function param. ++Output: ++ Return write length. ++********************************************************/ ++//static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigned long len, void *data) ++ssize_t goodix_tool_write(struct file *filp, const char __user *buff, size_t len, loff_t *off) ++{ ++ s32 ret = 0; ++ ++ GTP_DEBUG_FUNC(); ++ GTP_DEBUG_ARRAY((u8*)buff, len); ++ ++ ret = copy_from_user(&cmd_head, buff, CMD_HEAD_LENGTH); ++ if(ret) ++ { ++ GTP_ERROR("copy_from_user failed."); ++ return -EPERM; ++ } ++ ++ ++ GTP_DEBUG("[Operation]wr: %02X", cmd_head.wr); ++ GTP_DEBUG("[Flag]flag: %02X, addr: %02X%02X, value: %02X, relation: %02X", cmd_head.flag, cmd_head.flag_addr[0], ++ cmd_head.flag_addr[1], cmd_head.flag_val, cmd_head.flag_relation); ++ GTP_DEBUG("[Retry]circle: %d, times: %d, retry: %d, delay: %d", (s32)cmd_head.circle, (s32)cmd_head.times, ++ (s32)cmd_head.retry, (s32)cmd_head.delay); ++ GTP_DEBUG("[Data]data len: %d, addr len: %d, addr: %02X%02X, buffer len: %d, data[0]: %02X", (s32)cmd_head.data_len, ++ (s32)cmd_head.addr_len, cmd_head.addr[0], cmd_head.addr[1], (s32)len, buff[CMD_HEAD_LENGTH]); ++ ++ if (1 == cmd_head.wr) ++ { ++ ret = copy_from_user(&cmd_head.data[GTP_ADDR_LENGTH], &buff[CMD_HEAD_LENGTH], cmd_head.data_len); ++ if(ret) ++ { ++ GTP_ERROR("copy_from_user failed."); ++ return -EPERM; ++ } ++ memcpy(&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len], cmd_head.addr, cmd_head.addr_len); ++ ++ GTP_DEBUG_ARRAY(cmd_head.data, cmd_head.data_len + cmd_head.addr_len); ++ GTP_DEBUG_ARRAY((u8*)&buff[CMD_HEAD_LENGTH], cmd_head.data_len); ++ ++ if (1 == cmd_head.flag) ++ { ++ if (FAIL == comfirm()) ++ { ++ GTP_ERROR("[WRITE]Comfirm fail!"); ++ return -EPERM; ++ } ++ } ++ else if (2 == cmd_head.flag) ++ { ++ //Need interrupt! ++ } ++ if (tool_i2c_write(&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len], ++ cmd_head.data_len + cmd_head.addr_len) <= 0) ++ { ++ GTP_ERROR("[WRITE]Write data failed!"); ++ return -EPERM; ++ } ++ ++ GTP_DEBUG_ARRAY(&cmd_head.data[GTP_ADDR_LENGTH - cmd_head.addr_len],cmd_head.data_len + cmd_head.addr_len); ++ if (cmd_head.delay) ++ { ++ msleep(cmd_head.delay); ++ } ++ } ++ else if (3 == cmd_head.wr) //Write ic type ++ { ++ ret = copy_from_user(&cmd_head.data[0], &buff[CMD_HEAD_LENGTH], cmd_head.data_len); ++ if(ret) ++ { ++ GTP_ERROR("copy_from_user failed."); ++ return -EPERM; ++ } ++ memcpy(IC_TYPE, cmd_head.data, cmd_head.data_len); ++ ++ register_i2c_func(); ++ } ++ else if (5 == cmd_head.wr) ++ { ++ //memcpy(IC_TYPE, cmd_head.data, cmd_head.data_len); ++ } ++ else if (7 == cmd_head.wr)//disable irq! ++ { ++ gtp_irq_disable(i2c_get_clientdata(gt_client)); ++ ++ #if GTP_ESD_PROTECT ++ gtp_esd_switch(gt_client, SWITCH_OFF); ++ #endif ++ } ++ else if (9 == cmd_head.wr) //enable irq! ++ { ++ gtp_irq_enable(i2c_get_clientdata(gt_client)); ++ ++ #if GTP_ESD_PROTECT ++ gtp_esd_switch(gt_client, SWITCH_ON); ++ #endif ++ } ++ else if(17 == cmd_head.wr) ++ { ++ struct goodix_ts_data *ts = i2c_get_clientdata(gt_client); ++ ret = copy_from_user(&cmd_head.data[GTP_ADDR_LENGTH], &buff[CMD_HEAD_LENGTH], cmd_head.data_len); ++ if(ret) ++ { ++ GTP_DEBUG("copy_from_user failed."); ++ return -EPERM; ++ } ++ if(cmd_head.data[GTP_ADDR_LENGTH]) ++ { ++ GTP_INFO("gtp enter rawdiff."); ++ ts->gtp_rawdiff_mode = true; ++ } ++ else ++ { ++ ts->gtp_rawdiff_mode = false; ++ GTP_INFO("gtp leave rawdiff."); ++ } ++ } ++#ifdef UPDATE_FUNCTIONS ++ else if (11 == cmd_head.wr)//Enter update mode! ++ { ++ if (FAIL == gup_enter_update_mode(gt_client)) ++ { ++ return -EPERM; ++ } ++ } ++ else if (13 == cmd_head.wr)//Leave update mode! ++ { ++ gup_leave_update_mode(); ++ } ++ else if (15 == cmd_head.wr) //Update firmware! ++ { ++ show_len = 0; ++ total_len = 0; ++ memset(cmd_head.data, 0, cmd_head.data_len + 1); ++ memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len); ++ ++ if (FAIL == gup_update_proc((void*)cmd_head.data)) ++ { ++ return -EPERM; ++ } ++ } ++ ++#endif ++ ++ return len; ++} ++ ++/******************************************************* ++Function: ++ Goodix tool read function. ++Input: ++ standard proc read function param. ++Output: ++ Return read length. ++********************************************************/ ++//static s32 goodix_tool_read( char *page, char **start, off_t off, int count, int *eof, void *data ) ++ssize_t goodix_tool_read(struct file *file, char __user *page, size_t size, loff_t *ppos) ++{ ++ s32 ret = 0; ++ ++ GTP_DEBUG_FUNC(); ++ ++ if (*ppos) // ADB call again ++ { ++ //GTP_DEBUG("[HEAD]wr: %d", cmd_head.wr); ++ //GTP_DEBUG("[PARAM]size: %d, *ppos: %d", size, (int)*ppos); ++ //GTP_DEBUG("[TOOL_READ]ADB call again, return it."); ++ return 0; ++ } ++ ++ if (cmd_head.wr % 2) ++ { ++ return -EPERM; ++ } ++ else if (!cmd_head.wr) ++ { ++ u16 len = 0; ++ s16 data_len = 0; ++ u16 loc = 0; ++ ++ if (1 == cmd_head.flag) ++ { ++ if (FAIL == comfirm()) ++ { ++ GTP_ERROR("[READ]Comfirm fail!"); ++ return -EPERM; ++ } ++ } ++ else if (2 == cmd_head.flag) ++ { ++ //Need interrupt! ++ } ++ ++ memcpy(cmd_head.data, cmd_head.addr, cmd_head.addr_len); ++ ++ GTP_DEBUG("[CMD HEAD DATA] ADDR:0x%02x%02x.", cmd_head.data[0], cmd_head.data[1]); ++ GTP_DEBUG("[CMD HEAD ADDR] ADDR:0x%02x%02x.", cmd_head.addr[0], cmd_head.addr[1]); ++ ++ if (cmd_head.delay) ++ { ++ msleep(cmd_head.delay); ++ } ++ ++ data_len = cmd_head.data_len; ++ ++ while(data_len > 0) ++ { ++ if (data_len > DATA_LENGTH) ++ { ++ len = DATA_LENGTH; ++ } ++ else ++ { ++ len = data_len; ++ } ++ data_len -= len; ++ ++ if (tool_i2c_read(cmd_head.data, len) <= 0) ++ { ++ GTP_ERROR("[READ]Read data failed!"); ++ return -EPERM; ++ } ++ ++ //memcpy(&page[loc], &cmd_head.data[GTP_ADDR_LENGTH], len); ++ ret = simple_read_from_buffer(&page[loc], size, ppos, &cmd_head.data[GTP_ADDR_LENGTH], len); ++ if (ret < 0) ++ { ++ return ret; ++ } ++ loc += len; ++ ++ GTP_DEBUG_ARRAY(&cmd_head.data[GTP_ADDR_LENGTH], len); ++ GTP_DEBUG_ARRAY(page, len); ++ } ++ return cmd_head.data_len; ++ } ++ else if (2 == cmd_head.wr) ++ { ++ ret = simple_read_from_buffer(page, size, ppos, IC_TYPE, sizeof(IC_TYPE)); ++ return ret; ++ } ++ else if (4 == cmd_head.wr) ++ { ++ u8 progress_buf[4]; ++ progress_buf[0] = show_len >> 8; ++ progress_buf[1] = show_len & 0xff; ++ progress_buf[2] = total_len >> 8; ++ progress_buf[3] = total_len & 0xff; ++ ++ ret = simple_read_from_buffer(page, size, ppos, progress_buf, 4); ++ return ret; ++ } ++ else if (6 == cmd_head.wr) ++ { ++ //Read error code! ++ } ++ else if (8 == cmd_head.wr) //Read driver version ++ { ++ ret = simple_read_from_buffer(page, size, ppos, GTP_DRIVER_VERSION, strlen(GTP_DRIVER_VERSION)); ++ return ret; ++ } ++ return -EPERM; ++} diff --git a/drivers/input/touchscreen/gt9xx/gt9xx.c b/drivers/input/touchscreen/gt9xx/gt9xx.c new file mode 100755 -index 000000000000..cdc421cfd093 +index 000000000..cdc421cfd --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/gt9xx.c @@ -0,0 +1,3236 @@ @@ -807279,7 +807340,7 @@ index 000000000000..cdc421cfd093 +MODULE_LICENSE("GPL"); diff --git a/drivers/input/touchscreen/gt9xx/gt9xx.h b/drivers/input/touchscreen/gt9xx/gt9xx.h new file mode 100755 -index 000000000000..acc288575691 +index 000000000..acc288575 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/gt9xx.h @@ -0,0 +1,397 @@ @@ -807682,7 +807743,7 @@ index 000000000000..acc288575691 +#endif /* _GOODIX_GT9XX_H_ */ diff --git a/drivers/input/touchscreen/gt9xx/gt9xx_cfg.h b/drivers/input/touchscreen/gt9xx/gt9xx_cfg.h new file mode 100755 -index 000000000000..2b083c5655f8 +index 000000000..2b083c565 --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/gt9xx_cfg.h @@ -0,0 +1,65 @@ @@ -807753,7 +807814,7 @@ index 000000000000..2b083c5655f8 +#endif /* _GOODIX_GT9XX_CFG_H_ */ diff --git a/drivers/input/touchscreen/gt9xx/gt9xx_firmware.h b/drivers/input/touchscreen/gt9xx/gt9xx_firmware.h new file mode 100755 -index 000000000000..7dce6045b736 +index 000000000..7dce6045b --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/gt9xx_firmware.h @@ -0,0 +1,2338 @@ @@ -810097,7 +810158,7 @@ index 000000000000..7dce6045b736 +#endif diff --git a/drivers/input/touchscreen/gt9xx/gt9xx_update.c b/drivers/input/touchscreen/gt9xx/gt9xx_update.c new file mode 100755 -index 000000000000..312b1f93be60 +index 000000000..312b1f93b --- /dev/null +++ b/drivers/input/touchscreen/gt9xx/gt9xx_update.c @@ -0,0 +1,3637 @@ @@ -813740,1047 +813801,1047 @@ index 000000000000..312b1f93be60 +//**************** For GT9XXF End ********************// diff --git a/drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D863_7.h b/drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D863_7.h new file mode 100755 -index 000000000000..af607b6f7c6a +index 000000000..b367ab257 --- /dev/null +++ b/drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D863_7.h @@ -0,0 +1,514 @@ -+/* -+ * drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D863_7.h -+ * -+ * hynitron TouchScreen driver. -+ * -+ * Copyright (c) 2015 hynitron -+ * -+ * This software is licensed under the terms of the GNU General Public -+ * License version 2, as published by the Free Software Foundation, and -+ * may be copied, distributed, and modified under those terms. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * VERSION DATE AUTHOR -+ * 1.0 2015-10-12 Tim -+ * -+ * note: only support mulititouch -+ */ -+#ifndef __CST2xxSE_FW_H__ -+#define __CST2xxSE_FW_H__ -+ -+static unsigned char fwbin[] = { -+0x6c,0x03,0x00,0x20,0x49,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x03,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0xdd,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -+0x2f,0x01,0x00,0x00,0x00,0xf0,0x02,0xf8,0x00,0xf0,0x32,0xf8,0x0c,0xa0,0x30,0xc8, -+0x08,0x38,0x24,0x18,0x2d,0x18,0xa2,0x46,0x67,0x1e,0xab,0x46,0x54,0x46,0x5d,0x46, -+0xac,0x42,0x01,0xd1,0x00,0xf0,0x24,0xf8,0x7e,0x46,0x0f,0x3e,0x0f,0xcc,0xb6,0x46, -+0x01,0x26,0x33,0x42,0x00,0xd0,0xfb,0x1a,0xa2,0x46,0xab,0x46,0x33,0x43,0x18,0x47, -+0xa0,0x11,0x00,0x00,0xb0,0x11,0x00,0x00,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26, -+0x10,0x3a,0x01,0xd3,0x78,0xc1,0xfb,0xd8,0x52,0x07,0x00,0xd3,0x30,0xc1,0x00,0xd5, -+0x0b,0x60,0x70,0x47,0x1f,0xb5,0xc0,0x46,0xc0,0x46,0x1f,0xbd,0x10,0xb5,0x10,0xbd, -+0x00,0xf0,0xdb,0xfe,0x11,0x46,0xff,0xf7,0xf5,0xff,0x00,0xf0,0x08,0xf9,0x00,0xf0, -+0xf3,0xfe,0xff,0xf7,0xf3,0xff,0x00,0xf0,0xf9,0xfe,0x00,0x00,0xfe,0xe7,0x1d,0x49, -+0x48,0x88,0x48,0x80,0x1c,0x48,0x02,0x7c,0xff,0x2a,0x02,0xd2,0x02,0x7c,0x52,0x1c, -+0x02,0x74,0x00,0x7c,0x18,0x28,0x01,0xd2,0x00,0x20,0x88,0x80,0x70,0x47,0x17,0x49, -+0x8a,0x79,0x15,0x48,0x20,0x30,0x80,0x6b,0x43,0x7a,0x9a,0x43,0x8a,0x71,0x40,0x7a, -+0x48,0x72,0x11,0x49,0x01,0x20,0x08,0x74,0x70,0x47,0x10,0xb5,0x0f,0x48,0x80,0x30, -+0x81,0x88,0x80,0x22,0x11,0x43,0x81,0x80,0x0d,0xf0,0xfa,0xfe,0x10,0xbd,0x10,0xb5, -+0x09,0x48,0x20,0x30,0x01,0x78,0x49,0x06,0x08,0xd5,0x02,0x78,0x80,0x21,0x0a,0x43, -+0x02,0x70,0x07,0x4a,0x50,0x88,0x88,0x43,0x50,0x80,0x10,0xbd,0x00,0xf0,0x9a,0xfb, -+0x10,0xbd,0x00,0x00,0x00,0x02,0x00,0x40,0x90,0x0a,0x00,0x20,0x00,0x10,0x00,0x40, -+0x00,0x20,0x00,0x40,0x10,0xb5,0x65,0x48,0x65,0x4c,0x80,0x6b,0x01,0x46,0x80,0x30, -+0x03,0x7f,0x08,0x46,0x60,0x30,0x42,0x79,0x00,0x2b,0x06,0xd0,0x1b,0x02,0x13,0x43, -+0x63,0x81,0xff,0x22,0x23,0x32,0x62,0x80,0x03,0xe0,0x62,0x81,0xff,0x22,0x03,0x32, -+0x62,0x80,0xa0,0x31,0x89,0x8a,0xe1,0x80,0x81,0x79,0x02,0x79,0x09,0x02,0x11,0x43, -+0x21,0x81,0x01,0x7a,0xc0,0x79,0x09,0x02,0x01,0x43,0x55,0x48,0x20,0x38,0xc1,0x81, -+0x10,0xbd,0x10,0xb5,0x51,0x48,0x53,0x49,0x81,0x63,0x01,0x46,0x52,0x4a,0x40,0x39, -+0xca,0x61,0x52,0x4a,0x0a,0x62,0x52,0x4a,0x4a,0x62,0x52,0x4a,0x8a,0x62,0x52,0x4a, -+0xca,0x62,0x52,0x49,0xc1,0x63,0x52,0x49,0x41,0x60,0x52,0x49,0x81,0x60,0x52,0x49, -+0xc1,0x60,0x52,0x49,0x01,0x61,0x52,0x49,0x41,0x61,0x45,0x49,0xf0,0x20,0x60,0x39, -+0x88,0x75,0x4a,0x48,0xa8,0x21,0x40,0x30,0x01,0x73,0x00,0x21,0xc1,0x72,0xef,0x21, -+0x81,0x72,0x03,0x21,0x41,0x72,0x0d,0xf0,0xef,0xfe,0x0d,0xf0,0xe9,0xfe,0x3c,0x20, -+0x0d,0xf0,0xe2,0xfe,0x0d,0xf0,0xdc,0xfe,0x0d,0xf0,0xd6,0xfe,0x00,0xf0,0x8c,0xf9, -+0x0d,0xf0,0xce,0xfe,0x00,0xf0,0xf3,0xf9,0x10,0xbd,0x70,0xb5,0x33,0x4c,0x20,0x78, -+0x01,0x25,0x28,0x43,0x20,0x70,0x3f,0x4e,0x4d,0xe0,0x0d,0xf0,0xbd,0xfe,0x30,0x7a, -+0x00,0x28,0x03,0xd0,0x2d,0x49,0x18,0x20,0x20,0x39,0x08,0x74,0x0d,0xf0,0xb0,0xfe, -+0x20,0x78,0xc0,0x07,0x01,0xd0,0x55,0x20,0x70,0x70,0x0d,0xf0,0xa5,0xfe,0xa0,0x6b, -+0x20,0x30,0x40,0x78,0x00,0x28,0x01,0xd0,0x0d,0xf0,0x9a,0xfe,0xa0,0x6b,0x21,0x21, -+0x09,0x5c,0x09,0x09,0x06,0xd0,0x21,0x49,0x60,0x30,0xa0,0x39,0x89,0x7b,0xc0,0x7a, -+0x81,0x42,0x24,0xd1,0x0d,0xf0,0x88,0xfe,0x0d,0xf0,0x82,0xfe,0x0d,0xf0,0x7c,0xfe, -+0xa0,0x78,0x00,0x28,0x02,0xd0,0xa0,0x78,0x02,0x28,0x09,0xd1,0x18,0x4a,0x80,0x3a, -+0x11,0x78,0xa0,0x6b,0x20,0x30,0x83,0x79,0x28,0x46,0x98,0x40,0x81,0x43,0x11,0x70, -+0x0d,0xf0,0x66,0xfe,0x0d,0xf0,0x5c,0xfe,0x0d,0xf0,0x56,0xfe,0x1e,0x48,0x0d,0xf0, -+0x4f,0xfe,0x0d,0xf0,0x49,0xfe,0x0d,0xf0,0x43,0xfe,0x00,0xf0,0x61,0xf9,0x00,0xf0, -+0x85,0xf8,0x00,0xf0,0x57,0xf8,0xa0,0x78,0x06,0x28,0xae,0xd1,0x70,0xbd,0x10,0xb5, -+0xff,0xf7,0x67,0xff,0x05,0x4c,0xa0,0x78,0x00,0x28,0x04,0xd0,0x06,0x28,0xfa,0xd1, -+0x0d,0xf0,0x1a,0xfe,0xf7,0xe7,0xff,0xf7,0x98,0xff,0xf4,0xe7,0xb0,0x0a,0x00,0x20, -+0x80,0x10,0x00,0x40,0xe4,0x0e,0x00,0x00,0x16,0x11,0x00,0x00,0x28,0x11,0x00,0x00, -+0x04,0x12,0x00,0x00,0xe4,0x10,0x00,0x00,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x20, -+0x71,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0xd1,0x06,0x00,0x00,0x71,0x09,0x00,0x00, -+0x65,0x01,0x00,0x00,0x54,0x00,0x00,0x20,0xaf,0x04,0x00,0x00,0x0b,0x49,0x0a,0x48, -+0xc8,0x60,0xbf,0xf3,0x40,0x8f,0xfe,0xe7,0x10,0xb5,0xff,0xf7,0xc8,0xff,0x10,0xbd, -+0x0f,0xb5,0x00,0x90,0x01,0x91,0x01,0x98,0x02,0x90,0x00,0x98,0x03,0x90,0x68,0x46, -+0x0f,0xc8,0x04,0xb0,0x00,0xbd,0x00,0x00,0x04,0x00,0xfa,0x05,0x00,0xed,0x00,0xe0, -+0x10,0xb5,0x00,0xf0,0xdf,0xfc,0x10,0xbd,0x10,0xb5,0x00,0xf0,0xdb,0xfc,0x08,0x46, -+0x10,0xbd,0x00,0x00,0x30,0xb5,0xf8,0x48,0x00,0xe0,0x30,0xbf,0x01,0x7c,0x00,0x29, -+0xfb,0xd0,0xf5,0x48,0x20,0x30,0x01,0x78,0x09,0x07,0x15,0xd5,0xf3,0x4c,0x01,0x23, -+0x23,0x76,0x9a,0x07,0x11,0x68,0x08,0x25,0x29,0x43,0x11,0x60,0x01,0x78,0xef,0x22, -+0x11,0x40,0x01,0x70,0x00,0xe0,0x30,0xbf,0x01,0x78,0xc9,0x06,0xfb,0xd5,0x00,0x21, -+0x21,0x76,0x01,0x78,0x19,0x43,0x01,0x70,0xe9,0x48,0x41,0x68,0x49,0x1c,0x41,0x60, -+0x00,0x7a,0x00,0x28,0x01,0xd0,0x30,0xbf,0xfd,0xe7,0x30,0xbd,0xf8,0xb5,0xe2,0x4c, -+0x20,0x34,0xa0,0x78,0x00,0x28,0x03,0xd0,0x0d,0xf0,0xa6,0xfd,0x00,0x28,0x3b,0xd1, -+0xdd,0x49,0xde,0x4d,0x80,0x39,0xc8,0x7c,0x20,0x3d,0x01,0x26,0xdd,0x4a,0x00,0x28, -+0x0a,0xd1,0xa7,0x6b,0x08,0x46,0x40,0x30,0x20,0x37,0x83,0x7d,0x3f,0x7a,0xbb,0x42, -+0x07,0xd3,0x00,0x7c,0x00,0x06,0x04,0xd5,0xd3,0x48,0x20,0x38,0x40,0x78,0x00,0x28, -+0x23,0xd0,0xd3,0x4b,0x58,0x78,0x55,0x28,0x05,0xd0,0x18,0x78,0x55,0x28,0x1b,0xd1, -+0x48,0x7b,0x06,0x28,0x18,0xd1,0x00,0x20,0x18,0x70,0x58,0x70,0x10,0x70,0xab,0x21, -+0x91,0x71,0x50,0x71,0x29,0x78,0xa0,0x6b,0x20,0x30,0x82,0x79,0x30,0x46,0x90,0x40, -+0x01,0x43,0x29,0x70,0x28,0x20,0x0d,0xf0,0x5e,0xf8,0x29,0x78,0xa0,0x6b,0x20,0x30, -+0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xc1,0x48,0x55,0x21,0x01,0x70, -+0x00,0x20,0xc1,0x49,0x13,0x78,0xab,0x2b,0x03,0xd0,0x40,0x1c,0x80,0xb2,0x88,0x42, -+0xf8,0xd3,0xe2,0x63,0x0d,0xf0,0x5c,0xfd,0x28,0x78,0xa1,0x6b,0x20,0x31,0x8a,0x79, -+0x31,0x46,0x91,0x40,0x08,0x43,0x28,0x70,0x28,0x20,0x0d,0xf0,0x3c,0xf8,0x29,0x78, -+0xa0,0x6b,0x20,0x30,0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xf8,0xb5, -+0xad,0x48,0x20,0x30,0x80,0x6b,0x05,0x79,0xc0,0x78,0x00,0x90,0x00,0x26,0x37,0xe0, -+0x00,0x20,0x00,0x21,0x32,0x46,0x6a,0x43,0x53,0x00,0xac,0x4a,0x9b,0x18,0x5f,0x22, -+0xd2,0x00,0x9a,0x18,0x14,0x46,0x00,0x23,0x07,0xe0,0x17,0x88,0x38,0x18,0x00,0xb2, -+0x49,0x1c,0x09,0xb2,0x92,0x1c,0x5b,0x1c,0xdb,0xb2,0xab,0x42,0xf5,0xd3,0x00,0xf0, -+0x21,0xfc,0x0a,0x30,0x00,0xb2,0x00,0x21,0x16,0xe0,0x00,0x28,0x0b,0xdd,0x00,0x22, -+0xa2,0x5e,0x82,0x42,0x02,0xdb,0x12,0x1a,0x22,0x80,0x0a,0xe0,0x00,0x2a,0x08,0xdd, -+0x01,0x22,0x22,0x80,0x05,0xe0,0x00,0x22,0xa2,0x5e,0x82,0x42,0x01,0xdc,0x12,0x1a, -+0x22,0x80,0xa4,0x1c,0x49,0x1c,0xc9,0xb2,0xa9,0x42,0xe6,0xd3,0x76,0x1c,0xf6,0xb2, -+0x00,0x98,0x86,0x42,0xc4,0xd3,0xf8,0xbd,0x30,0xb5,0x8c,0x48,0x20,0x38,0x84,0x78, -+0x89,0x49,0x01,0x22,0x20,0x31,0x89,0x6b,0x13,0x46,0x20,0x31,0x8d,0x79,0xab,0x40, -+0x9c,0x43,0x84,0x70,0x43,0x78,0x8d,0x79,0x14,0x46,0xac,0x40,0xa3,0x43,0x43,0x70, -+0x04,0x78,0x8d,0x79,0x13,0x46,0xab,0x40,0x9c,0x43,0x04,0x70,0xc3,0x78,0x8d,0x79, -+0x14,0x46,0xac,0x40,0x23,0x43,0xc3,0x70,0x43,0x79,0x8d,0x79,0x14,0x46,0xac,0x40, -+0xa3,0x43,0x43,0x71,0x03,0x79,0x89,0x79,0x8a,0x40,0x13,0x43,0x03,0x71,0x30,0xbd, -+0x70,0xb5,0x75,0x4d,0x20,0x3d,0x68,0x78,0x00,0x28,0x28,0xd0,0x2c,0x46,0x40,0x34, -+0xa0,0x6b,0xff,0x30,0xc1,0x30,0x80,0x6b,0x00,0x28,0x20,0xd0,0x0d,0xf0,0xcc,0xfc, -+0x00,0x21,0xff,0x28,0x1c,0xd1,0xa0,0x6b,0x60,0x30,0x82,0x7a,0x20,0x46,0xa0,0x38, -+0x82,0x73,0x02,0x22,0x03,0x46,0x20,0x33,0x5a,0x70,0x41,0x73,0x00,0x20,0x0f,0x22, -+0x17,0x25,0x6a,0x4b,0xad,0x01,0x06,0xe0,0x24,0x21,0x41,0x43,0xc9,0x18,0x49,0x19, -+0x8a,0x73,0x40,0x1c,0xc0,0xb2,0xa1,0x6b,0xc9,0x7a,0x81,0x42,0xf4,0xd8,0x70,0xbd, -+0xfe,0x28,0xfc,0xd0,0x00,0x28,0xfa,0xd0,0xa2,0x6b,0xff,0x32,0xc1,0x32,0x93,0x6b, -+0x40,0x1e,0x01,0x22,0x82,0x40,0x13,0x42,0xf1,0xd0,0x69,0x70,0x70,0xbd,0x58,0x49, -+0x00,0x20,0x08,0x70,0x48,0x70,0x48,0x60,0x88,0x70,0x08,0x72,0x70,0x47,0xf8,0xb5, -+0x57,0x4a,0x54,0x4b,0x40,0x33,0xd8,0x7a,0x00,0x28,0x50,0xd0,0x00,0x21,0x00,0x25, -+0x32,0x24,0x4d,0x48,0x20,0x30,0x00,0x90,0x86,0x6b,0xf0,0x79,0x00,0x28,0x00,0xd0, -+0x28,0x24,0x00,0x20,0x08,0xe0,0x00,0x27,0xd7,0x5f,0x0a,0x2f,0x01,0xdb,0x49,0x1c, -+0x89,0xb2,0x92,0x1c,0x40,0x1c,0x80,0xb2,0xa0,0x42,0xf4,0xd3,0x44,0x4a,0x0a,0x29, -+0x09,0xd2,0x06,0x29,0x02,0xd3,0xd8,0x7a,0x40,0x06,0x04,0xd1,0x3e,0x48,0x80,0x38, -+0xc0,0x7b,0x02,0x28,0x08,0xd9,0xd8,0x7a,0x80,0x28,0x00,0xd1,0x01,0x25,0x81,0x20, -+0xd8,0x72,0x14,0x20,0x90,0x70,0x0b,0xe0,0x90,0x78,0x00,0x28,0x02,0xd0,0x40,0x1e, -+0x90,0x70,0x05,0xe0,0xd8,0x7a,0x81,0x28,0x00,0xd1,0x01,0x25,0x80,0x20,0xd8,0x72, -+0x00,0x2d,0x14,0xd0,0x31,0x4c,0x20,0x3c,0x20,0x78,0x20,0x36,0xb2,0x79,0x01,0x25, -+0x29,0x46,0x91,0x40,0x88,0x43,0x20,0x70,0x28,0x20,0x0c,0xf0,0x2c,0xff,0x20,0x78, -+0x00,0x99,0x89,0x6b,0x20,0x31,0x89,0x79,0x8d,0x40,0x28,0x43,0x20,0x70,0xf8,0xbd, -+0xf8,0xb5,0x0d,0x46,0x07,0x9f,0x06,0x9e,0x11,0x46,0x23,0x4a,0x20,0x32,0x90,0x6b, -+0x40,0x30,0x00,0x2d,0x07,0xd0,0x00,0x2e,0x02,0xd0,0x1e,0x24,0x04,0x57,0x09,0xe0, -+0x1d,0x24,0x04,0x57,0x06,0xe0,0x00,0x2f,0x02,0xd0,0x1c,0x24,0x04,0x57,0x01,0xe0, -+0x1b,0x24,0x04,0x57,0x00,0x20,0x18,0x5e,0x00,0x28,0x00,0xda,0x40,0x42,0xc0,0x01, -+0x0b,0x46,0x00,0x21,0x52,0x68,0x59,0x5e,0x90,0x47,0x7f,0x28,0x00,0xdd,0x7f,0x20, -+0xff,0x21,0x01,0x31,0x00,0x2e,0x01,0xd0,0x00,0x2d,0x03,0xd1,0x00,0x2f,0x02,0xd0, -+0x00,0x2d,0x00,0xd1,0x08,0x1a,0x00,0x19,0x88,0x42,0x01,0xdd,0x08,0x46,0xf8,0xbd, -+0x00,0x28,0xfc,0xda,0x00,0x20,0xf8,0xbd,0xf0,0xb5,0x87,0xb0,0x0c,0x4e,0x06,0x48, -+0x20,0x30,0x80,0x6b,0x01,0x79,0x03,0x91,0xc0,0x78,0x02,0x90,0x00,0x25,0x02,0x48, -+0x80,0x38,0x06,0x90,0x48,0xe0,0x00,0x00,0x90,0x0a,0x00,0x20,0x20,0x10,0x00,0x40, -+0x54,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x7c,0x92,0x00,0x00,0x70,0x03,0x00,0x20, -+0x68,0x06,0x00,0x20,0x68,0x00,0x34,0x5e,0x80,0x19,0x14,0x27,0x05,0x90,0xc7,0x5f, -+0x06,0x98,0x80,0x7a,0xa0,0x42,0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11, -+0x10,0x21,0x09,0x1a,0x20,0x46,0x00,0xf0,0xc5,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42, -+0x01,0xdb,0x64,0x1e,0x20,0xb2,0x05,0x99,0x88,0x82,0x05,0x98,0xff,0x30,0x01,0x30, -+0x18,0x24,0x04,0x90,0x04,0x5f,0x04,0x27,0xc7,0x5f,0x06,0x98,0x80,0x7a,0xa0,0x42, -+0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, -+0x00,0xf0,0xa8,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2, -+0x04,0x99,0x88,0x80,0x6d,0x1c,0xed,0xb2,0x03,0x98,0x85,0x42,0xc2,0xd3,0x00,0x27, -+0x3a,0xe0,0x38,0x46,0x14,0x21,0x48,0x43,0x34,0x5e,0x85,0x19,0x02,0x20,0x28,0x5e, -+0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda,0x01,0x98,0x40,0x00,0xa0,0x42, -+0x0d,0xda,0x21,0x11,0x10,0x20,0x41,0x1a,0x20,0x46,0x00,0xf0,0x83,0xfa,0x01,0x99, -+0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2,0x68,0x80,0x12,0x24, -+0x2c,0x5f,0x10,0x20,0x28,0x5e,0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda, -+0x01,0x98,0x40,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, -+0x00,0xf0,0x68,0xfa,0x01,0x99,0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e, -+0x20,0xb2,0x28,0x82,0x7f,0x1c,0xff,0xb2,0x02,0x98,0x87,0x42,0xc1,0xd3,0x07,0xb0, -+0xf0,0xbd,0x70,0x47,0xf8,0xb5,0xfd,0x4c,0xa3,0x88,0xcf,0x20,0x03,0x40,0x1d,0x21, -+0xfb,0x48,0x89,0x01,0x42,0x18,0x35,0x21,0x49,0x01,0x45,0x18,0x0d,0x21,0xc9,0x01, -+0x40,0x18,0xf8,0x4f,0xd6,0x6b,0x81,0x6b,0x01,0x2b,0x1a,0xd0,0x05,0x2b,0x09,0xd0, -+0x00,0x22,0x09,0x2b,0x5a,0xd1,0x6a,0x75,0xe2,0x88,0xd2,0x07,0x02,0xd1,0x10,0x20, -+0xa0,0x80,0xf8,0xbd,0xb9,0x42,0x02,0xd1,0xa5,0x20,0xe0,0x80,0x06,0xe0,0x72,0x5c, -+0xe2,0x80,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63,0x14,0x20,0xa0,0x80, -+0xf8,0xbd,0x6b,0x7d,0x02,0x2b,0x31,0xd2,0x00,0x2b,0x04,0xd1,0xe6,0x49,0xd1,0x63, -+0xe1,0x88,0x81,0x63,0x34,0xe0,0xe3,0x88,0x09,0x02,0xc9,0x18,0x8e,0xb2,0xd1,0x21, -+0x09,0x02,0x71,0x1a,0x20,0x29,0x0f,0xd8,0xf0,0xb2,0x08,0xf0,0x8d,0xf8,0xdf,0x48, -+0x86,0x42,0x25,0xd1,0x01,0x20,0x0d,0xf0,0x5f,0xfb,0xdd,0x49,0x18,0x20,0x08,0x74, -+0xdc,0x49,0x01,0x20,0x08,0x72,0x1b,0xe0,0xdb,0x49,0x71,0x18,0x23,0x29,0x04,0xd8, -+0x81,0x63,0xef,0x20,0x40,0x01,0xd0,0x63,0x12,0xe0,0x0d,0x21,0x09,0x03,0x71,0x1a, -+0x50,0x29,0x01,0xd8,0x81,0x63,0x0b,0xe0,0x87,0x63,0x09,0xe0,0xb9,0x42,0x07,0xd0, -+0xe2,0x88,0x72,0x54,0x81,0x6b,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63, -+0x68,0x7d,0x40,0x1c,0x68,0x75,0x10,0x20,0xa0,0x80,0xf8,0xbd,0xa2,0x80,0xf8,0xbd, -+0xf7,0xb5,0xa0,0xb0,0x0d,0x46,0x00,0x20,0x0f,0x90,0x0e,0x90,0xc4,0x48,0x20,0x30, -+0x1f,0x90,0x80,0x6b,0x04,0x79,0x81,0x79,0x49,0x1e,0xc9,0xb2,0x0d,0x91,0x00,0x21, -+0x0c,0x91,0x0b,0x91,0x0a,0x91,0x41,0x78,0x49,0x00,0x18,0x91,0xb2,0x21,0x41,0x5e, -+0x17,0x91,0xbb,0x48,0x91,0x22,0x80,0x38,0xc1,0x7a,0xb5,0x48,0x92,0x00,0x82,0x18, -+0x1e,0x92,0x02,0x46,0x28,0x32,0xdc,0x30,0x1d,0x92,0x1c,0x90,0x01,0x29,0x18,0xd1, -+0x28,0x46,0x1c,0x99,0x60,0x43,0x46,0x18,0x1e,0x99,0x42,0x18,0x1d,0x99,0x47,0x18, -+0x20,0x98,0x00,0x21,0x0b,0xe0,0x03,0x88,0x33,0x70,0x03,0x88,0x13,0x70,0x03,0x88, -+0x3b,0x70,0x76,0x1c,0x80,0x1c,0x52,0x1c,0x7f,0x1c,0x49,0x1c,0x49,0xb2,0xa1,0x42, -+0xf1,0xdb,0x00,0x20,0x12,0x90,0x13,0x90,0x14,0x90,0x20,0x98,0x02,0x90,0x05,0xa8, -+0x84,0x46,0x28,0x46,0x60,0x43,0x1c,0x99,0x1b,0x90,0x47,0x18,0x1a,0x97,0x1f,0x98, -+0xc2,0x69,0x1f,0x98,0xc3,0x6a,0x00,0x21,0x23,0xe0,0x02,0x98,0x3e,0x78,0x00,0x88, -+0x80,0x1b,0x00,0xb2,0x66,0x46,0x30,0x80,0xd6,0x07,0x04,0xd0,0x14,0x9e,0x80,0x19, -+0x00,0xb2,0x14,0x90,0x0a,0xe0,0xde,0x07,0x04,0xd0,0x13,0x9e,0x80,0x19,0x00,0xb2, -+0x13,0x90,0x03,0xe0,0x12,0x9e,0x80,0x19,0x00,0xb2,0x12,0x90,0x60,0x46,0x80,0x1c, -+0x84,0x46,0x02,0x98,0x80,0x1c,0x02,0x90,0x7f,0x1c,0x52,0x08,0x5b,0x08,0x49,0x1c, -+0x49,0xb2,0xa1,0x42,0xd9,0xdb,0x8a,0x4e,0x40,0x36,0x31,0x7d,0x00,0x29,0x05,0xdd, -+0x1f,0x98,0x42,0x68,0x14,0x98,0x90,0x47,0x00,0xb2,0x14,0x90,0x71,0x7d,0x00,0x29, -+0x0b,0xdd,0x01,0x29,0x03,0xd1,0x13,0x98,0x40,0x10,0x13,0x90,0x05,0xe0,0x1f,0x98, -+0x42,0x68,0x13,0x98,0x90,0x47,0x00,0xb2,0x13,0x90,0xb1,0x7d,0x00,0x29,0x0b,0xdd, -+0x01,0x29,0x03,0xd1,0x12,0x98,0x40,0x10,0x12,0x90,0x05,0xe0,0x1f,0x98,0x42,0x68, -+0x12,0x98,0x90,0x47,0x00,0xb2,0x12,0x90,0x20,0x98,0x05,0xa9,0x8c,0x46,0x1a,0x99, -+0x04,0x91,0x1f,0x99,0xc9,0x69,0x11,0x91,0x1f,0x99,0xc9,0x6a,0x10,0x91,0x1f,0x99, -+0x8a,0x6b,0xd1,0x7c,0xc9,0x07,0x0e,0xd0,0x1f,0x99,0x09,0x6a,0x1f,0x9b,0x5b,0x6a, -+0x0f,0x93,0x1f,0x9b,0x9b,0x6a,0x0e,0x93,0x13,0x7d,0x0c,0x93,0x53,0x7d,0x0b,0x93, -+0x92,0x7d,0x0a,0x92,0x00,0xe0,0x00,0x21,0x1d,0x9b,0x1b,0x9a,0xd2,0x18,0x03,0x92, -+0x00,0x22,0x19,0x92,0x9a,0xe0,0x11,0x9a,0xd2,0x07,0x01,0xd0,0x14,0x9a,0x05,0xe0, -+0x10,0x9a,0xd2,0x07,0x01,0xd0,0x13,0x9a,0x00,0xe0,0x12,0x9a,0x00,0x2a,0x0c,0xdd, -+0x66,0x46,0x00,0x23,0xf3,0x5e,0x00,0x2b,0x07,0xdd,0x93,0x42,0x00,0xda,0x1a,0x46, -+0x03,0x88,0x9a,0x1a,0x13,0xb2,0x03,0x80,0x32,0xe0,0x66,0x46,0x00,0x23,0xf3,0x5e, -+0x00,0x2b,0x2b,0xda,0x00,0x2a,0x05,0xda,0x93,0x42,0x00,0xdd,0x1a,0x46,0x03,0x88, -+0x9a,0x1a,0x02,0x80,0x00,0x23,0xc3,0x5e,0xca,0x07,0x21,0xd0,0x04,0x9a,0x12,0x78, -+0x17,0x46,0xd2,0x1a,0x12,0xb2,0x0e,0x9e,0xf6,0x07,0x06,0xd0,0x0a,0x9e,0xb2,0x42, -+0x16,0xdd,0x0a,0x9e,0xba,0x1b,0x02,0x80,0x12,0xe0,0x0f,0x9e,0xf6,0x07,0x06,0xd0, -+0x0b,0x9e,0xb2,0x42,0x0c,0xdd,0x0b,0x9e,0xba,0x1b,0x02,0x80,0x08,0xe0,0x0c,0x9e, -+0xb2,0x42,0x05,0xdd,0x0c,0x9e,0xba,0x1b,0x02,0x80,0x01,0xe0,0x00,0x23,0xc3,0x5e, -+0x03,0x9a,0x12,0x78,0xd2,0x1a,0x12,0xb2,0x18,0x9b,0x9a,0x42,0x02,0xda,0x17,0x9b, -+0x9a,0x42,0x26,0xdc,0x01,0x22,0xaa,0x40,0xd3,0x17,0x22,0x9e,0x01,0x93,0x00,0x92, -+0x37,0x68,0x76,0x68,0x3a,0x43,0x33,0x43,0x22,0x9e,0x0c,0xc6,0x00,0x2d,0x09,0xd0, -+0x6f,0x1e,0x01,0x26,0xbe,0x40,0xf7,0x17,0x00,0x96,0x16,0x43,0x01,0x97,0x22,0x9a, -+0x1f,0x43,0xc0,0xc2,0x0d,0x9a,0x95,0x42,0x0b,0xd2,0x6b,0x1c,0x01,0x22,0x9a,0x40, -+0xd3,0x17,0x22,0x9f,0x01,0x93,0x00,0x92,0xc0,0xcf,0x32,0x43,0x22,0x9e,0x3b,0x43, -+0x0c,0xc6,0x03,0x9a,0x52,0x1c,0x03,0x92,0x80,0x1c,0x04,0x9a,0x52,0x1c,0x04,0x92, -+0x62,0x46,0x92,0x1c,0x94,0x46,0x11,0x9a,0x52,0x08,0x11,0x92,0x10,0x9a,0x52,0x08, -+0x10,0x92,0x00,0x29,0x06,0xd0,0x49,0x08,0x0f,0x9a,0x52,0x08,0x0f,0x92,0x0e,0x9a, -+0x52,0x08,0x0e,0x92,0x19,0x9a,0x52,0x1c,0x52,0xb2,0x19,0x92,0x19,0x9a,0xa2,0x42, -+0x00,0xda,0x60,0xe7,0x1a,0x9d,0x1e,0x99,0x1b,0x98,0x47,0x18,0x20,0x9e,0x1f,0x98, -+0x80,0x6b,0x80,0x30,0x00,0x7e,0x01,0x28,0x2c,0xd1,0x00,0x23,0x26,0xe0,0x00,0x22, -+0xb2,0x5e,0x28,0x78,0x39,0x78,0x38,0x70,0x2a,0x70,0x88,0x42,0x02,0xdd,0x84,0x46, -+0x08,0x46,0x61,0x46,0x82,0x42,0x11,0xdc,0x30,0x80,0x12,0xe0,0x00,0x20,0x00,0x40, -+0x70,0x03,0x00,0x20,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x20,0x0e,0xd1,0x00,0x00, -+0x90,0x0a,0x00,0x20,0x54,0x00,0x00,0x20,0x10,0x2e,0xff,0xff,0x8a,0x42,0x00,0xdb, -+0x31,0x80,0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x5b,0x1c,0x5b,0xb2,0xa3,0x42,0xd6,0xdb, -+0x23,0xb0,0xf0,0xbd,0x02,0x28,0x25,0xd1,0x00,0x20,0x19,0x90,0x1e,0xe0,0x00,0x21, -+0x71,0x5e,0x16,0x91,0x28,0x78,0x39,0x78,0x15,0x91,0x16,0x99,0x08,0x18,0x15,0x99, -+0x40,0x18,0x1f,0x99,0x4a,0x68,0x03,0x21,0x90,0x47,0x00,0xb2,0x38,0x70,0x16,0x99, -+0x29,0x70,0x15,0x99,0x4a,0x00,0x89,0x18,0x08,0x18,0x80,0x10,0x30,0x80,0x6d,0x1c, -+0x7f,0x1c,0xb6,0x1c,0x19,0x98,0x40,0x1c,0x40,0xb2,0x19,0x90,0x19,0x98,0xa0,0x42, -+0xdd,0xdb,0xd5,0xe7,0x00,0x20,0x08,0xe0,0x29,0x78,0x39,0x70,0x31,0x88,0x29,0x70, -+0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x40,0x1c,0x40,0xb2,0xa0,0x42,0xf4,0xdb,0xc7,0xe7, -+0x00,0x22,0x03,0x09,0x8b,0x42,0x2c,0xd3,0x03,0x0a,0x8b,0x42,0x11,0xd3,0x00,0x23, -+0x9c,0x46,0x4e,0xe0,0x03,0x46,0x0b,0x43,0x3c,0xd4,0x00,0x22,0x43,0x08,0x8b,0x42, -+0x31,0xd3,0x03,0x09,0x8b,0x42,0x1c,0xd3,0x03,0x0a,0x8b,0x42,0x01,0xd3,0x94,0x46, -+0x3f,0xe0,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01,0xc0,0x1a,0x52,0x41,0x83,0x09, -+0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41,0x43,0x09,0x8b,0x42,0x01,0xd3, -+0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42,0x01,0xd3,0x0b,0x01,0xc0,0x1a, -+0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00,0xc0,0x1a,0x52,0x41,0x83,0x08, -+0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41,0x43,0x08,0x8b,0x42,0x01,0xd3, -+0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a,0x00,0xd2,0x01,0x46,0x52,0x41,0x10,0x46, -+0x70,0x47,0x5d,0xe0,0xca,0x0f,0x00,0xd0,0x49,0x42,0x03,0x10,0x00,0xd3,0x40,0x42, -+0x53,0x40,0x00,0x22,0x9c,0x46,0x03,0x09,0x8b,0x42,0x2d,0xd3,0x03,0x0a,0x8b,0x42, -+0x12,0xd3,0xfc,0x22,0x89,0x01,0x12,0xba,0x03,0x0a,0x8b,0x42,0x0c,0xd3,0x89,0x01, -+0x92,0x11,0x8b,0x42,0x08,0xd3,0x89,0x01,0x92,0x11,0x8b,0x42,0x04,0xd3,0x89,0x01, -+0x3a,0xd0,0x92,0x11,0x00,0xe0,0x89,0x09,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01, -+0xc0,0x1a,0x52,0x41,0x83,0x09,0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41, -+0x43,0x09,0x8b,0x42,0x01,0xd3,0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42, -+0x01,0xd3,0x0b,0x01,0xc0,0x1a,0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00, -+0xc0,0x1a,0x52,0x41,0x83,0x08,0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41, -+0xd9,0xd2,0x43,0x08,0x8b,0x42,0x01,0xd3,0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a, -+0x00,0xd2,0x01,0x46,0x63,0x46,0x52,0x41,0x5b,0x10,0x10,0x46,0x01,0xd3,0x40,0x42, -+0x00,0x2b,0x00,0xd5,0x49,0x42,0x70,0x47,0x63,0x46,0x5b,0x10,0x00,0xd3,0x40,0x42, -+0x01,0xb5,0x00,0x20,0xc0,0x46,0xc0,0x46,0x02,0xbd,0x75,0x46,0x00,0xf0,0x22,0xf8, -+0xae,0x46,0x05,0x00,0x69,0x46,0x53,0x46,0xc0,0x08,0xc0,0x00,0x85,0x46,0x18,0xb0, -+0x20,0xb5,0xff,0xf7,0x5d,0xfa,0x60,0xbc,0x00,0x27,0x49,0x08,0xb6,0x46,0x00,0x26, -+0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5, -+0x40,0x3d,0x49,0x00,0x8d,0x46,0x70,0x47,0x04,0x46,0xc0,0x46,0xc0,0x46,0x20,0x46, -+0xff,0xf7,0x07,0xf9,0x00,0x48,0x70,0x47,0x60,0x00,0x00,0x20,0x02,0x48,0x03,0x49, -+0xab,0xbe,0x70,0x47,0x0d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x26,0x00,0x02,0x00, -+0x70,0x47,0x00,0x00,0x25,0x0c,0x28,0x0f,0x0a,0x0a,0x0f,0x00,0x02,0x02,0x70,0x06, -+0x00,0x00,0x01,0x01,0x08,0x08,0x10,0x85,0x1d,0x0e,0x07,0x03,0x0a,0x1e,0x64,0x50, -+0xa0,0x50,0x08,0x02,0x16,0x01,0x00,0x00,0x10,0x0a,0x02,0x00,0x06,0x04,0x14,0x14, -+0x0a,0x06,0x28,0x1e,0x3c,0x64,0x01,0x08,0x04,0x02,0x01,0x08,0x04,0x04,0x02,0x01, -+0x08,0x04,0x02,0x01,0x08,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x04, -+0x08,0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x01,0x01,0x01,0x01,0xd8,0xe2,0xf6,0x0a, -+0xf6,0x0a,0xf6,0x00,0x01,0x00,0x01,0x01,0x02,0x02,0x06,0x0c,0x10,0x00,0x14,0x0a, -+0x01,0x02,0x02,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, -+0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x1e,0x1e,0x3c,0x00,0x14, -+0xc8,0x14,0x00,0x03,0x84,0x04,0x02,0x02,0x5a,0x00,0x5a,0x01,0x02,0x0a,0x00,0x01, -+0x00,0x00,0x00,0x00,0x20,0x03,0x00,0x05,0xb4,0x00,0x09,0x00,0x90,0x01,0x02,0x01, -+0x68,0x01,0x20,0x00,0x00,0x00,0xf4,0xff,0x33,0x01,0x03,0x01,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x55,0x55,0x00,0x00,0x19,0x10,0x00,0x40, -+0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x29,0x10,0x00,0x40,0x29,0x10,0x00,0x40, -+0x29,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40, -+0x25,0x10,0x00,0x40,0x21,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x19,0x10,0x00,0x40, -+0x19,0x10,0x00,0x40,0x19,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40, -+0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x21,0x10,0x00,0x40,0x21,0x10,0x00,0x40, -+0x21,0x10,0x00,0x40,0x64,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x44,0x10,0x00,0x40, -+0x48,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x50,0x10,0x00,0x40,0x54,0x10,0x00,0x40, -+0x58,0x10,0x00,0x40,0x5c,0x10,0x00,0x40,0x60,0x10,0x00,0x40,0x11,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x40,0x10,0x00,0x40, -+0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x60,0x10,0x00,0x40, -+0x5c,0x10,0x00,0x40,0x58,0x10,0x00,0x40,0x54,0x10,0x00,0x40,0x50,0x10,0x00,0x40, -+0x4c,0x10,0x00,0x40,0x48,0x10,0x00,0x40,0x58,0x10,0x00,0x40,0x54,0x10,0x00,0x40, -+0x50,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x48,0x10,0x00,0x40,0x44,0x10,0x00,0x40, -+0x40,0x10,0x00,0x40,0x64,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, -+0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, -+0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0xff,0xff,0x00,0x80, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xff,0x00,0xff,0xff,0xff,0xff,0x00, -+0xff,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0x63,0x65,0x07,0x56,0xaa,0x78,0xa1,0x21,0x00, -+0x00,0x00,0x00,0x00,0x21,0xaa,0x43,0xaa,0x56,0xaa,0x81,0xa7,0x21,0x00,0x67,0xaa, -+0x23,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xa1, -+0x71,0x06,0x87,0xaa,0x23,0xaa,0x87,0xaa,0x32,0xaa,0x00,0x00,0x87,0xaa,0x23,0xaa, -+0x00,0x00,0x00,0x00,0x00,0x00,0x65,0xaa,0x87,0xaa,0x51,0xa6,0x47,0x06,0x45,0x00, -+0x28,0xa1,0x76,0xaa,0x12,0xa8,0x00,0x00,0x00,0x00,0x34,0xaa,0x56,0xaa,0x78,0xa1, -+0x21,0x00,0x00,0x00,0x67,0xaa,0x23,0xaa,0xa1,0xaa,0x87,0xaa,0x32,0xaa,0x67,0xaa, -+0x23,0xaa,0x87,0xaa,0x32,0xaa,0xa1,0xaa,0x21,0xaa,0x56,0xaa,0x81,0xa7,0x21,0xaa, -+0x00,0x00,0x34,0xaa,0x65,0xaa,0x87,0xaa,0x51,0x46,0x47,0x03,0xa8,0xaa,0x21,0xaa, -+0x43,0xaa,0x56,0xaa,0x81,0xa7,0x34,0xaa,0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0xa3, -+0x23,0xa4,0x21,0xa8,0x87,0xa6,0x32,0xa4,0x78,0x21,0x76,0xa5,0x23,0xa1,0x45,0x63, -+0x65,0x07,0x00,0x00,0x01,0x00,0x00,0xff,0xff,0x00,0x00,0x01,0x02,0x02,0x02,0x01, -+0x02,0x02,0x01,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02, -+0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -+0xfc,0x1d,0x00,0x00,0x00,0x00,0x00,0x20,0xf0,0x0a,0x00,0x00,0x98,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x20,0x07,0x00,0x00,0xdc,0x5f,0xca,0xca, -+0xef,0x03,0x00,0x00,0x06,0x0a,0xa8,0x00,0x04,0x00,0x01,0x02,0xe1,0x24,0x24,0xf3 -+}; -+ -+#define FW_INFO_SIZE (0x18) -+#define FW_REAL_SIZE (sizeof(fwbin)) -+#define FW_BIN_SIZE (7*1024+512) //7.5K byte -+ -+ -+#endif -+ ++/* ++ * drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D863_7.h ++ * ++ * hynitron TouchScreen driver. ++ * ++ * Copyright (c) 2015 hynitron ++ * ++ * This software is licensed under the terms of the GNU General Public ++ * License version 2, as published by the Free Software Foundation, and ++ * may be copied, distributed, and modified under those terms. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * VERSION DATE AUTHOR ++ * 1.0 2015-10-12 Tim ++ * ++ * note: only support mulititouch ++ */ ++#ifndef __CST2xxSE_FW_H__ ++#define __CST2xxSE_FW_H__ ++ ++static unsigned char fwbin[] = { ++0x6c,0x03,0x00,0x20,0x49,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x03,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0xdd,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, ++0x2f,0x01,0x00,0x00,0x00,0xf0,0x02,0xf8,0x00,0xf0,0x32,0xf8,0x0c,0xa0,0x30,0xc8, ++0x08,0x38,0x24,0x18,0x2d,0x18,0xa2,0x46,0x67,0x1e,0xab,0x46,0x54,0x46,0x5d,0x46, ++0xac,0x42,0x01,0xd1,0x00,0xf0,0x24,0xf8,0x7e,0x46,0x0f,0x3e,0x0f,0xcc,0xb6,0x46, ++0x01,0x26,0x33,0x42,0x00,0xd0,0xfb,0x1a,0xa2,0x46,0xab,0x46,0x33,0x43,0x18,0x47, ++0xa0,0x11,0x00,0x00,0xb0,0x11,0x00,0x00,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26, ++0x10,0x3a,0x01,0xd3,0x78,0xc1,0xfb,0xd8,0x52,0x07,0x00,0xd3,0x30,0xc1,0x00,0xd5, ++0x0b,0x60,0x70,0x47,0x1f,0xb5,0xc0,0x46,0xc0,0x46,0x1f,0xbd,0x10,0xb5,0x10,0xbd, ++0x00,0xf0,0xdb,0xfe,0x11,0x46,0xff,0xf7,0xf5,0xff,0x00,0xf0,0x08,0xf9,0x00,0xf0, ++0xf3,0xfe,0xff,0xf7,0xf3,0xff,0x00,0xf0,0xf9,0xfe,0x00,0x00,0xfe,0xe7,0x1d,0x49, ++0x48,0x88,0x48,0x80,0x1c,0x48,0x02,0x7c,0xff,0x2a,0x02,0xd2,0x02,0x7c,0x52,0x1c, ++0x02,0x74,0x00,0x7c,0x18,0x28,0x01,0xd2,0x00,0x20,0x88,0x80,0x70,0x47,0x17,0x49, ++0x8a,0x79,0x15,0x48,0x20,0x30,0x80,0x6b,0x43,0x7a,0x9a,0x43,0x8a,0x71,0x40,0x7a, ++0x48,0x72,0x11,0x49,0x01,0x20,0x08,0x74,0x70,0x47,0x10,0xb5,0x0f,0x48,0x80,0x30, ++0x81,0x88,0x80,0x22,0x11,0x43,0x81,0x80,0x0d,0xf0,0xfa,0xfe,0x10,0xbd,0x10,0xb5, ++0x09,0x48,0x20,0x30,0x01,0x78,0x49,0x06,0x08,0xd5,0x02,0x78,0x80,0x21,0x0a,0x43, ++0x02,0x70,0x07,0x4a,0x50,0x88,0x88,0x43,0x50,0x80,0x10,0xbd,0x00,0xf0,0x9a,0xfb, ++0x10,0xbd,0x00,0x00,0x00,0x02,0x00,0x40,0x90,0x0a,0x00,0x20,0x00,0x10,0x00,0x40, ++0x00,0x20,0x00,0x40,0x10,0xb5,0x65,0x48,0x65,0x4c,0x80,0x6b,0x01,0x46,0x80,0x30, ++0x03,0x7f,0x08,0x46,0x60,0x30,0x42,0x79,0x00,0x2b,0x06,0xd0,0x1b,0x02,0x13,0x43, ++0x63,0x81,0xff,0x22,0x23,0x32,0x62,0x80,0x03,0xe0,0x62,0x81,0xff,0x22,0x03,0x32, ++0x62,0x80,0xa0,0x31,0x89,0x8a,0xe1,0x80,0x81,0x79,0x02,0x79,0x09,0x02,0x11,0x43, ++0x21,0x81,0x01,0x7a,0xc0,0x79,0x09,0x02,0x01,0x43,0x55,0x48,0x20,0x38,0xc1,0x81, ++0x10,0xbd,0x10,0xb5,0x51,0x48,0x53,0x49,0x81,0x63,0x01,0x46,0x52,0x4a,0x40,0x39, ++0xca,0x61,0x52,0x4a,0x0a,0x62,0x52,0x4a,0x4a,0x62,0x52,0x4a,0x8a,0x62,0x52,0x4a, ++0xca,0x62,0x52,0x49,0xc1,0x63,0x52,0x49,0x41,0x60,0x52,0x49,0x81,0x60,0x52,0x49, ++0xc1,0x60,0x52,0x49,0x01,0x61,0x52,0x49,0x41,0x61,0x45,0x49,0xf0,0x20,0x60,0x39, ++0x88,0x75,0x4a,0x48,0xa8,0x21,0x40,0x30,0x01,0x73,0x00,0x21,0xc1,0x72,0xef,0x21, ++0x81,0x72,0x03,0x21,0x41,0x72,0x0d,0xf0,0xef,0xfe,0x0d,0xf0,0xe9,0xfe,0x3c,0x20, ++0x0d,0xf0,0xe2,0xfe,0x0d,0xf0,0xdc,0xfe,0x0d,0xf0,0xd6,0xfe,0x00,0xf0,0x8c,0xf9, ++0x0d,0xf0,0xce,0xfe,0x00,0xf0,0xf3,0xf9,0x10,0xbd,0x70,0xb5,0x33,0x4c,0x20,0x78, ++0x01,0x25,0x28,0x43,0x20,0x70,0x3f,0x4e,0x4d,0xe0,0x0d,0xf0,0xbd,0xfe,0x30,0x7a, ++0x00,0x28,0x03,0xd0,0x2d,0x49,0x18,0x20,0x20,0x39,0x08,0x74,0x0d,0xf0,0xb0,0xfe, ++0x20,0x78,0xc0,0x07,0x01,0xd0,0x55,0x20,0x70,0x70,0x0d,0xf0,0xa5,0xfe,0xa0,0x6b, ++0x20,0x30,0x40,0x78,0x00,0x28,0x01,0xd0,0x0d,0xf0,0x9a,0xfe,0xa0,0x6b,0x21,0x21, ++0x09,0x5c,0x09,0x09,0x06,0xd0,0x21,0x49,0x60,0x30,0xa0,0x39,0x89,0x7b,0xc0,0x7a, ++0x81,0x42,0x24,0xd1,0x0d,0xf0,0x88,0xfe,0x0d,0xf0,0x82,0xfe,0x0d,0xf0,0x7c,0xfe, ++0xa0,0x78,0x00,0x28,0x02,0xd0,0xa0,0x78,0x02,0x28,0x09,0xd1,0x18,0x4a,0x80,0x3a, ++0x11,0x78,0xa0,0x6b,0x20,0x30,0x83,0x79,0x28,0x46,0x98,0x40,0x81,0x43,0x11,0x70, ++0x0d,0xf0,0x66,0xfe,0x0d,0xf0,0x5c,0xfe,0x0d,0xf0,0x56,0xfe,0x1e,0x48,0x0d,0xf0, ++0x4f,0xfe,0x0d,0xf0,0x49,0xfe,0x0d,0xf0,0x43,0xfe,0x00,0xf0,0x61,0xf9,0x00,0xf0, ++0x85,0xf8,0x00,0xf0,0x57,0xf8,0xa0,0x78,0x06,0x28,0xae,0xd1,0x70,0xbd,0x10,0xb5, ++0xff,0xf7,0x67,0xff,0x05,0x4c,0xa0,0x78,0x00,0x28,0x04,0xd0,0x06,0x28,0xfa,0xd1, ++0x0d,0xf0,0x1a,0xfe,0xf7,0xe7,0xff,0xf7,0x98,0xff,0xf4,0xe7,0xb0,0x0a,0x00,0x20, ++0x80,0x10,0x00,0x40,0xe4,0x0e,0x00,0x00,0x16,0x11,0x00,0x00,0x28,0x11,0x00,0x00, ++0x04,0x12,0x00,0x00,0xe4,0x10,0x00,0x00,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x20, ++0x71,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0xd1,0x06,0x00,0x00,0x71,0x09,0x00,0x00, ++0x65,0x01,0x00,0x00,0x54,0x00,0x00,0x20,0xaf,0x04,0x00,0x00,0x0b,0x49,0x0a,0x48, ++0xc8,0x60,0xbf,0xf3,0x40,0x8f,0xfe,0xe7,0x10,0xb5,0xff,0xf7,0xc8,0xff,0x10,0xbd, ++0x0f,0xb5,0x00,0x90,0x01,0x91,0x01,0x98,0x02,0x90,0x00,0x98,0x03,0x90,0x68,0x46, ++0x0f,0xc8,0x04,0xb0,0x00,0xbd,0x00,0x00,0x04,0x00,0xfa,0x05,0x00,0xed,0x00,0xe0, ++0x10,0xb5,0x00,0xf0,0xdf,0xfc,0x10,0xbd,0x10,0xb5,0x00,0xf0,0xdb,0xfc,0x08,0x46, ++0x10,0xbd,0x00,0x00,0x30,0xb5,0xf8,0x48,0x00,0xe0,0x30,0xbf,0x01,0x7c,0x00,0x29, ++0xfb,0xd0,0xf5,0x48,0x20,0x30,0x01,0x78,0x09,0x07,0x15,0xd5,0xf3,0x4c,0x01,0x23, ++0x23,0x76,0x9a,0x07,0x11,0x68,0x08,0x25,0x29,0x43,0x11,0x60,0x01,0x78,0xef,0x22, ++0x11,0x40,0x01,0x70,0x00,0xe0,0x30,0xbf,0x01,0x78,0xc9,0x06,0xfb,0xd5,0x00,0x21, ++0x21,0x76,0x01,0x78,0x19,0x43,0x01,0x70,0xe9,0x48,0x41,0x68,0x49,0x1c,0x41,0x60, ++0x00,0x7a,0x00,0x28,0x01,0xd0,0x30,0xbf,0xfd,0xe7,0x30,0xbd,0xf8,0xb5,0xe2,0x4c, ++0x20,0x34,0xa0,0x78,0x00,0x28,0x03,0xd0,0x0d,0xf0,0xa6,0xfd,0x00,0x28,0x3b,0xd1, ++0xdd,0x49,0xde,0x4d,0x80,0x39,0xc8,0x7c,0x20,0x3d,0x01,0x26,0xdd,0x4a,0x00,0x28, ++0x0a,0xd1,0xa7,0x6b,0x08,0x46,0x40,0x30,0x20,0x37,0x83,0x7d,0x3f,0x7a,0xbb,0x42, ++0x07,0xd3,0x00,0x7c,0x00,0x06,0x04,0xd5,0xd3,0x48,0x20,0x38,0x40,0x78,0x00,0x28, ++0x23,0xd0,0xd3,0x4b,0x58,0x78,0x55,0x28,0x05,0xd0,0x18,0x78,0x55,0x28,0x1b,0xd1, ++0x48,0x7b,0x06,0x28,0x18,0xd1,0x00,0x20,0x18,0x70,0x58,0x70,0x10,0x70,0xab,0x21, ++0x91,0x71,0x50,0x71,0x29,0x78,0xa0,0x6b,0x20,0x30,0x82,0x79,0x30,0x46,0x90,0x40, ++0x01,0x43,0x29,0x70,0x28,0x20,0x0d,0xf0,0x5e,0xf8,0x29,0x78,0xa0,0x6b,0x20,0x30, ++0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xc1,0x48,0x55,0x21,0x01,0x70, ++0x00,0x20,0xc1,0x49,0x13,0x78,0xab,0x2b,0x03,0xd0,0x40,0x1c,0x80,0xb2,0x88,0x42, ++0xf8,0xd3,0xe2,0x63,0x0d,0xf0,0x5c,0xfd,0x28,0x78,0xa1,0x6b,0x20,0x31,0x8a,0x79, ++0x31,0x46,0x91,0x40,0x08,0x43,0x28,0x70,0x28,0x20,0x0d,0xf0,0x3c,0xf8,0x29,0x78, ++0xa0,0x6b,0x20,0x30,0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xf8,0xb5, ++0xad,0x48,0x20,0x30,0x80,0x6b,0x05,0x79,0xc0,0x78,0x00,0x90,0x00,0x26,0x37,0xe0, ++0x00,0x20,0x00,0x21,0x32,0x46,0x6a,0x43,0x53,0x00,0xac,0x4a,0x9b,0x18,0x5f,0x22, ++0xd2,0x00,0x9a,0x18,0x14,0x46,0x00,0x23,0x07,0xe0,0x17,0x88,0x38,0x18,0x00,0xb2, ++0x49,0x1c,0x09,0xb2,0x92,0x1c,0x5b,0x1c,0xdb,0xb2,0xab,0x42,0xf5,0xd3,0x00,0xf0, ++0x21,0xfc,0x0a,0x30,0x00,0xb2,0x00,0x21,0x16,0xe0,0x00,0x28,0x0b,0xdd,0x00,0x22, ++0xa2,0x5e,0x82,0x42,0x02,0xdb,0x12,0x1a,0x22,0x80,0x0a,0xe0,0x00,0x2a,0x08,0xdd, ++0x01,0x22,0x22,0x80,0x05,0xe0,0x00,0x22,0xa2,0x5e,0x82,0x42,0x01,0xdc,0x12,0x1a, ++0x22,0x80,0xa4,0x1c,0x49,0x1c,0xc9,0xb2,0xa9,0x42,0xe6,0xd3,0x76,0x1c,0xf6,0xb2, ++0x00,0x98,0x86,0x42,0xc4,0xd3,0xf8,0xbd,0x30,0xb5,0x8c,0x48,0x20,0x38,0x84,0x78, ++0x89,0x49,0x01,0x22,0x20,0x31,0x89,0x6b,0x13,0x46,0x20,0x31,0x8d,0x79,0xab,0x40, ++0x9c,0x43,0x84,0x70,0x43,0x78,0x8d,0x79,0x14,0x46,0xac,0x40,0xa3,0x43,0x43,0x70, ++0x04,0x78,0x8d,0x79,0x13,0x46,0xab,0x40,0x9c,0x43,0x04,0x70,0xc3,0x78,0x8d,0x79, ++0x14,0x46,0xac,0x40,0x23,0x43,0xc3,0x70,0x43,0x79,0x8d,0x79,0x14,0x46,0xac,0x40, ++0xa3,0x43,0x43,0x71,0x03,0x79,0x89,0x79,0x8a,0x40,0x13,0x43,0x03,0x71,0x30,0xbd, ++0x70,0xb5,0x75,0x4d,0x20,0x3d,0x68,0x78,0x00,0x28,0x28,0xd0,0x2c,0x46,0x40,0x34, ++0xa0,0x6b,0xff,0x30,0xc1,0x30,0x80,0x6b,0x00,0x28,0x20,0xd0,0x0d,0xf0,0xcc,0xfc, ++0x00,0x21,0xff,0x28,0x1c,0xd1,0xa0,0x6b,0x60,0x30,0x82,0x7a,0x20,0x46,0xa0,0x38, ++0x82,0x73,0x02,0x22,0x03,0x46,0x20,0x33,0x5a,0x70,0x41,0x73,0x00,0x20,0x0f,0x22, ++0x17,0x25,0x6a,0x4b,0xad,0x01,0x06,0xe0,0x24,0x21,0x41,0x43,0xc9,0x18,0x49,0x19, ++0x8a,0x73,0x40,0x1c,0xc0,0xb2,0xa1,0x6b,0xc9,0x7a,0x81,0x42,0xf4,0xd8,0x70,0xbd, ++0xfe,0x28,0xfc,0xd0,0x00,0x28,0xfa,0xd0,0xa2,0x6b,0xff,0x32,0xc1,0x32,0x93,0x6b, ++0x40,0x1e,0x01,0x22,0x82,0x40,0x13,0x42,0xf1,0xd0,0x69,0x70,0x70,0xbd,0x58,0x49, ++0x00,0x20,0x08,0x70,0x48,0x70,0x48,0x60,0x88,0x70,0x08,0x72,0x70,0x47,0xf8,0xb5, ++0x57,0x4a,0x54,0x4b,0x40,0x33,0xd8,0x7a,0x00,0x28,0x50,0xd0,0x00,0x21,0x00,0x25, ++0x32,0x24,0x4d,0x48,0x20,0x30,0x00,0x90,0x86,0x6b,0xf0,0x79,0x00,0x28,0x00,0xd0, ++0x28,0x24,0x00,0x20,0x08,0xe0,0x00,0x27,0xd7,0x5f,0x0a,0x2f,0x01,0xdb,0x49,0x1c, ++0x89,0xb2,0x92,0x1c,0x40,0x1c,0x80,0xb2,0xa0,0x42,0xf4,0xd3,0x44,0x4a,0x0a,0x29, ++0x09,0xd2,0x06,0x29,0x02,0xd3,0xd8,0x7a,0x40,0x06,0x04,0xd1,0x3e,0x48,0x80,0x38, ++0xc0,0x7b,0x02,0x28,0x08,0xd9,0xd8,0x7a,0x80,0x28,0x00,0xd1,0x01,0x25,0x81,0x20, ++0xd8,0x72,0x14,0x20,0x90,0x70,0x0b,0xe0,0x90,0x78,0x00,0x28,0x02,0xd0,0x40,0x1e, ++0x90,0x70,0x05,0xe0,0xd8,0x7a,0x81,0x28,0x00,0xd1,0x01,0x25,0x80,0x20,0xd8,0x72, ++0x00,0x2d,0x14,0xd0,0x31,0x4c,0x20,0x3c,0x20,0x78,0x20,0x36,0xb2,0x79,0x01,0x25, ++0x29,0x46,0x91,0x40,0x88,0x43,0x20,0x70,0x28,0x20,0x0c,0xf0,0x2c,0xff,0x20,0x78, ++0x00,0x99,0x89,0x6b,0x20,0x31,0x89,0x79,0x8d,0x40,0x28,0x43,0x20,0x70,0xf8,0xbd, ++0xf8,0xb5,0x0d,0x46,0x07,0x9f,0x06,0x9e,0x11,0x46,0x23,0x4a,0x20,0x32,0x90,0x6b, ++0x40,0x30,0x00,0x2d,0x07,0xd0,0x00,0x2e,0x02,0xd0,0x1e,0x24,0x04,0x57,0x09,0xe0, ++0x1d,0x24,0x04,0x57,0x06,0xe0,0x00,0x2f,0x02,0xd0,0x1c,0x24,0x04,0x57,0x01,0xe0, ++0x1b,0x24,0x04,0x57,0x00,0x20,0x18,0x5e,0x00,0x28,0x00,0xda,0x40,0x42,0xc0,0x01, ++0x0b,0x46,0x00,0x21,0x52,0x68,0x59,0x5e,0x90,0x47,0x7f,0x28,0x00,0xdd,0x7f,0x20, ++0xff,0x21,0x01,0x31,0x00,0x2e,0x01,0xd0,0x00,0x2d,0x03,0xd1,0x00,0x2f,0x02,0xd0, ++0x00,0x2d,0x00,0xd1,0x08,0x1a,0x00,0x19,0x88,0x42,0x01,0xdd,0x08,0x46,0xf8,0xbd, ++0x00,0x28,0xfc,0xda,0x00,0x20,0xf8,0xbd,0xf0,0xb5,0x87,0xb0,0x0c,0x4e,0x06,0x48, ++0x20,0x30,0x80,0x6b,0x01,0x79,0x03,0x91,0xc0,0x78,0x02,0x90,0x00,0x25,0x02,0x48, ++0x80,0x38,0x06,0x90,0x48,0xe0,0x00,0x00,0x90,0x0a,0x00,0x20,0x20,0x10,0x00,0x40, ++0x54,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x7c,0x92,0x00,0x00,0x70,0x03,0x00,0x20, ++0x68,0x06,0x00,0x20,0x68,0x00,0x34,0x5e,0x80,0x19,0x14,0x27,0x05,0x90,0xc7,0x5f, ++0x06,0x98,0x80,0x7a,0xa0,0x42,0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11, ++0x10,0x21,0x09,0x1a,0x20,0x46,0x00,0xf0,0xc5,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42, ++0x01,0xdb,0x64,0x1e,0x20,0xb2,0x05,0x99,0x88,0x82,0x05,0x98,0xff,0x30,0x01,0x30, ++0x18,0x24,0x04,0x90,0x04,0x5f,0x04,0x27,0xc7,0x5f,0x06,0x98,0x80,0x7a,0xa0,0x42, ++0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, ++0x00,0xf0,0xa8,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2, ++0x04,0x99,0x88,0x80,0x6d,0x1c,0xed,0xb2,0x03,0x98,0x85,0x42,0xc2,0xd3,0x00,0x27, ++0x3a,0xe0,0x38,0x46,0x14,0x21,0x48,0x43,0x34,0x5e,0x85,0x19,0x02,0x20,0x28,0x5e, ++0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda,0x01,0x98,0x40,0x00,0xa0,0x42, ++0x0d,0xda,0x21,0x11,0x10,0x20,0x41,0x1a,0x20,0x46,0x00,0xf0,0x83,0xfa,0x01,0x99, ++0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2,0x68,0x80,0x12,0x24, ++0x2c,0x5f,0x10,0x20,0x28,0x5e,0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda, ++0x01,0x98,0x40,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, ++0x00,0xf0,0x68,0xfa,0x01,0x99,0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e, ++0x20,0xb2,0x28,0x82,0x7f,0x1c,0xff,0xb2,0x02,0x98,0x87,0x42,0xc1,0xd3,0x07,0xb0, ++0xf0,0xbd,0x70,0x47,0xf8,0xb5,0xfd,0x4c,0xa3,0x88,0xcf,0x20,0x03,0x40,0x1d,0x21, ++0xfb,0x48,0x89,0x01,0x42,0x18,0x35,0x21,0x49,0x01,0x45,0x18,0x0d,0x21,0xc9,0x01, ++0x40,0x18,0xf8,0x4f,0xd6,0x6b,0x81,0x6b,0x01,0x2b,0x1a,0xd0,0x05,0x2b,0x09,0xd0, ++0x00,0x22,0x09,0x2b,0x5a,0xd1,0x6a,0x75,0xe2,0x88,0xd2,0x07,0x02,0xd1,0x10,0x20, ++0xa0,0x80,0xf8,0xbd,0xb9,0x42,0x02,0xd1,0xa5,0x20,0xe0,0x80,0x06,0xe0,0x72,0x5c, ++0xe2,0x80,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63,0x14,0x20,0xa0,0x80, ++0xf8,0xbd,0x6b,0x7d,0x02,0x2b,0x31,0xd2,0x00,0x2b,0x04,0xd1,0xe6,0x49,0xd1,0x63, ++0xe1,0x88,0x81,0x63,0x34,0xe0,0xe3,0x88,0x09,0x02,0xc9,0x18,0x8e,0xb2,0xd1,0x21, ++0x09,0x02,0x71,0x1a,0x20,0x29,0x0f,0xd8,0xf0,0xb2,0x08,0xf0,0x8d,0xf8,0xdf,0x48, ++0x86,0x42,0x25,0xd1,0x01,0x20,0x0d,0xf0,0x5f,0xfb,0xdd,0x49,0x18,0x20,0x08,0x74, ++0xdc,0x49,0x01,0x20,0x08,0x72,0x1b,0xe0,0xdb,0x49,0x71,0x18,0x23,0x29,0x04,0xd8, ++0x81,0x63,0xef,0x20,0x40,0x01,0xd0,0x63,0x12,0xe0,0x0d,0x21,0x09,0x03,0x71,0x1a, ++0x50,0x29,0x01,0xd8,0x81,0x63,0x0b,0xe0,0x87,0x63,0x09,0xe0,0xb9,0x42,0x07,0xd0, ++0xe2,0x88,0x72,0x54,0x81,0x6b,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63, ++0x68,0x7d,0x40,0x1c,0x68,0x75,0x10,0x20,0xa0,0x80,0xf8,0xbd,0xa2,0x80,0xf8,0xbd, ++0xf7,0xb5,0xa0,0xb0,0x0d,0x46,0x00,0x20,0x0f,0x90,0x0e,0x90,0xc4,0x48,0x20,0x30, ++0x1f,0x90,0x80,0x6b,0x04,0x79,0x81,0x79,0x49,0x1e,0xc9,0xb2,0x0d,0x91,0x00,0x21, ++0x0c,0x91,0x0b,0x91,0x0a,0x91,0x41,0x78,0x49,0x00,0x18,0x91,0xb2,0x21,0x41,0x5e, ++0x17,0x91,0xbb,0x48,0x91,0x22,0x80,0x38,0xc1,0x7a,0xb5,0x48,0x92,0x00,0x82,0x18, ++0x1e,0x92,0x02,0x46,0x28,0x32,0xdc,0x30,0x1d,0x92,0x1c,0x90,0x01,0x29,0x18,0xd1, ++0x28,0x46,0x1c,0x99,0x60,0x43,0x46,0x18,0x1e,0x99,0x42,0x18,0x1d,0x99,0x47,0x18, ++0x20,0x98,0x00,0x21,0x0b,0xe0,0x03,0x88,0x33,0x70,0x03,0x88,0x13,0x70,0x03,0x88, ++0x3b,0x70,0x76,0x1c,0x80,0x1c,0x52,0x1c,0x7f,0x1c,0x49,0x1c,0x49,0xb2,0xa1,0x42, ++0xf1,0xdb,0x00,0x20,0x12,0x90,0x13,0x90,0x14,0x90,0x20,0x98,0x02,0x90,0x05,0xa8, ++0x84,0x46,0x28,0x46,0x60,0x43,0x1c,0x99,0x1b,0x90,0x47,0x18,0x1a,0x97,0x1f,0x98, ++0xc2,0x69,0x1f,0x98,0xc3,0x6a,0x00,0x21,0x23,0xe0,0x02,0x98,0x3e,0x78,0x00,0x88, ++0x80,0x1b,0x00,0xb2,0x66,0x46,0x30,0x80,0xd6,0x07,0x04,0xd0,0x14,0x9e,0x80,0x19, ++0x00,0xb2,0x14,0x90,0x0a,0xe0,0xde,0x07,0x04,0xd0,0x13,0x9e,0x80,0x19,0x00,0xb2, ++0x13,0x90,0x03,0xe0,0x12,0x9e,0x80,0x19,0x00,0xb2,0x12,0x90,0x60,0x46,0x80,0x1c, ++0x84,0x46,0x02,0x98,0x80,0x1c,0x02,0x90,0x7f,0x1c,0x52,0x08,0x5b,0x08,0x49,0x1c, ++0x49,0xb2,0xa1,0x42,0xd9,0xdb,0x8a,0x4e,0x40,0x36,0x31,0x7d,0x00,0x29,0x05,0xdd, ++0x1f,0x98,0x42,0x68,0x14,0x98,0x90,0x47,0x00,0xb2,0x14,0x90,0x71,0x7d,0x00,0x29, ++0x0b,0xdd,0x01,0x29,0x03,0xd1,0x13,0x98,0x40,0x10,0x13,0x90,0x05,0xe0,0x1f,0x98, ++0x42,0x68,0x13,0x98,0x90,0x47,0x00,0xb2,0x13,0x90,0xb1,0x7d,0x00,0x29,0x0b,0xdd, ++0x01,0x29,0x03,0xd1,0x12,0x98,0x40,0x10,0x12,0x90,0x05,0xe0,0x1f,0x98,0x42,0x68, ++0x12,0x98,0x90,0x47,0x00,0xb2,0x12,0x90,0x20,0x98,0x05,0xa9,0x8c,0x46,0x1a,0x99, ++0x04,0x91,0x1f,0x99,0xc9,0x69,0x11,0x91,0x1f,0x99,0xc9,0x6a,0x10,0x91,0x1f,0x99, ++0x8a,0x6b,0xd1,0x7c,0xc9,0x07,0x0e,0xd0,0x1f,0x99,0x09,0x6a,0x1f,0x9b,0x5b,0x6a, ++0x0f,0x93,0x1f,0x9b,0x9b,0x6a,0x0e,0x93,0x13,0x7d,0x0c,0x93,0x53,0x7d,0x0b,0x93, ++0x92,0x7d,0x0a,0x92,0x00,0xe0,0x00,0x21,0x1d,0x9b,0x1b,0x9a,0xd2,0x18,0x03,0x92, ++0x00,0x22,0x19,0x92,0x9a,0xe0,0x11,0x9a,0xd2,0x07,0x01,0xd0,0x14,0x9a,0x05,0xe0, ++0x10,0x9a,0xd2,0x07,0x01,0xd0,0x13,0x9a,0x00,0xe0,0x12,0x9a,0x00,0x2a,0x0c,0xdd, ++0x66,0x46,0x00,0x23,0xf3,0x5e,0x00,0x2b,0x07,0xdd,0x93,0x42,0x00,0xda,0x1a,0x46, ++0x03,0x88,0x9a,0x1a,0x13,0xb2,0x03,0x80,0x32,0xe0,0x66,0x46,0x00,0x23,0xf3,0x5e, ++0x00,0x2b,0x2b,0xda,0x00,0x2a,0x05,0xda,0x93,0x42,0x00,0xdd,0x1a,0x46,0x03,0x88, ++0x9a,0x1a,0x02,0x80,0x00,0x23,0xc3,0x5e,0xca,0x07,0x21,0xd0,0x04,0x9a,0x12,0x78, ++0x17,0x46,0xd2,0x1a,0x12,0xb2,0x0e,0x9e,0xf6,0x07,0x06,0xd0,0x0a,0x9e,0xb2,0x42, ++0x16,0xdd,0x0a,0x9e,0xba,0x1b,0x02,0x80,0x12,0xe0,0x0f,0x9e,0xf6,0x07,0x06,0xd0, ++0x0b,0x9e,0xb2,0x42,0x0c,0xdd,0x0b,0x9e,0xba,0x1b,0x02,0x80,0x08,0xe0,0x0c,0x9e, ++0xb2,0x42,0x05,0xdd,0x0c,0x9e,0xba,0x1b,0x02,0x80,0x01,0xe0,0x00,0x23,0xc3,0x5e, ++0x03,0x9a,0x12,0x78,0xd2,0x1a,0x12,0xb2,0x18,0x9b,0x9a,0x42,0x02,0xda,0x17,0x9b, ++0x9a,0x42,0x26,0xdc,0x01,0x22,0xaa,0x40,0xd3,0x17,0x22,0x9e,0x01,0x93,0x00,0x92, ++0x37,0x68,0x76,0x68,0x3a,0x43,0x33,0x43,0x22,0x9e,0x0c,0xc6,0x00,0x2d,0x09,0xd0, ++0x6f,0x1e,0x01,0x26,0xbe,0x40,0xf7,0x17,0x00,0x96,0x16,0x43,0x01,0x97,0x22,0x9a, ++0x1f,0x43,0xc0,0xc2,0x0d,0x9a,0x95,0x42,0x0b,0xd2,0x6b,0x1c,0x01,0x22,0x9a,0x40, ++0xd3,0x17,0x22,0x9f,0x01,0x93,0x00,0x92,0xc0,0xcf,0x32,0x43,0x22,0x9e,0x3b,0x43, ++0x0c,0xc6,0x03,0x9a,0x52,0x1c,0x03,0x92,0x80,0x1c,0x04,0x9a,0x52,0x1c,0x04,0x92, ++0x62,0x46,0x92,0x1c,0x94,0x46,0x11,0x9a,0x52,0x08,0x11,0x92,0x10,0x9a,0x52,0x08, ++0x10,0x92,0x00,0x29,0x06,0xd0,0x49,0x08,0x0f,0x9a,0x52,0x08,0x0f,0x92,0x0e,0x9a, ++0x52,0x08,0x0e,0x92,0x19,0x9a,0x52,0x1c,0x52,0xb2,0x19,0x92,0x19,0x9a,0xa2,0x42, ++0x00,0xda,0x60,0xe7,0x1a,0x9d,0x1e,0x99,0x1b,0x98,0x47,0x18,0x20,0x9e,0x1f,0x98, ++0x80,0x6b,0x80,0x30,0x00,0x7e,0x01,0x28,0x2c,0xd1,0x00,0x23,0x26,0xe0,0x00,0x22, ++0xb2,0x5e,0x28,0x78,0x39,0x78,0x38,0x70,0x2a,0x70,0x88,0x42,0x02,0xdd,0x84,0x46, ++0x08,0x46,0x61,0x46,0x82,0x42,0x11,0xdc,0x30,0x80,0x12,0xe0,0x00,0x20,0x00,0x40, ++0x70,0x03,0x00,0x20,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x20,0x0e,0xd1,0x00,0x00, ++0x90,0x0a,0x00,0x20,0x54,0x00,0x00,0x20,0x10,0x2e,0xff,0xff,0x8a,0x42,0x00,0xdb, ++0x31,0x80,0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x5b,0x1c,0x5b,0xb2,0xa3,0x42,0xd6,0xdb, ++0x23,0xb0,0xf0,0xbd,0x02,0x28,0x25,0xd1,0x00,0x20,0x19,0x90,0x1e,0xe0,0x00,0x21, ++0x71,0x5e,0x16,0x91,0x28,0x78,0x39,0x78,0x15,0x91,0x16,0x99,0x08,0x18,0x15,0x99, ++0x40,0x18,0x1f,0x99,0x4a,0x68,0x03,0x21,0x90,0x47,0x00,0xb2,0x38,0x70,0x16,0x99, ++0x29,0x70,0x15,0x99,0x4a,0x00,0x89,0x18,0x08,0x18,0x80,0x10,0x30,0x80,0x6d,0x1c, ++0x7f,0x1c,0xb6,0x1c,0x19,0x98,0x40,0x1c,0x40,0xb2,0x19,0x90,0x19,0x98,0xa0,0x42, ++0xdd,0xdb,0xd5,0xe7,0x00,0x20,0x08,0xe0,0x29,0x78,0x39,0x70,0x31,0x88,0x29,0x70, ++0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x40,0x1c,0x40,0xb2,0xa0,0x42,0xf4,0xdb,0xc7,0xe7, ++0x00,0x22,0x03,0x09,0x8b,0x42,0x2c,0xd3,0x03,0x0a,0x8b,0x42,0x11,0xd3,0x00,0x23, ++0x9c,0x46,0x4e,0xe0,0x03,0x46,0x0b,0x43,0x3c,0xd4,0x00,0x22,0x43,0x08,0x8b,0x42, ++0x31,0xd3,0x03,0x09,0x8b,0x42,0x1c,0xd3,0x03,0x0a,0x8b,0x42,0x01,0xd3,0x94,0x46, ++0x3f,0xe0,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01,0xc0,0x1a,0x52,0x41,0x83,0x09, ++0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41,0x43,0x09,0x8b,0x42,0x01,0xd3, ++0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42,0x01,0xd3,0x0b,0x01,0xc0,0x1a, ++0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00,0xc0,0x1a,0x52,0x41,0x83,0x08, ++0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41,0x43,0x08,0x8b,0x42,0x01,0xd3, ++0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a,0x00,0xd2,0x01,0x46,0x52,0x41,0x10,0x46, ++0x70,0x47,0x5d,0xe0,0xca,0x0f,0x00,0xd0,0x49,0x42,0x03,0x10,0x00,0xd3,0x40,0x42, ++0x53,0x40,0x00,0x22,0x9c,0x46,0x03,0x09,0x8b,0x42,0x2d,0xd3,0x03,0x0a,0x8b,0x42, ++0x12,0xd3,0xfc,0x22,0x89,0x01,0x12,0xba,0x03,0x0a,0x8b,0x42,0x0c,0xd3,0x89,0x01, ++0x92,0x11,0x8b,0x42,0x08,0xd3,0x89,0x01,0x92,0x11,0x8b,0x42,0x04,0xd3,0x89,0x01, ++0x3a,0xd0,0x92,0x11,0x00,0xe0,0x89,0x09,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01, ++0xc0,0x1a,0x52,0x41,0x83,0x09,0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41, ++0x43,0x09,0x8b,0x42,0x01,0xd3,0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42, ++0x01,0xd3,0x0b,0x01,0xc0,0x1a,0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00, ++0xc0,0x1a,0x52,0x41,0x83,0x08,0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41, ++0xd9,0xd2,0x43,0x08,0x8b,0x42,0x01,0xd3,0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a, ++0x00,0xd2,0x01,0x46,0x63,0x46,0x52,0x41,0x5b,0x10,0x10,0x46,0x01,0xd3,0x40,0x42, ++0x00,0x2b,0x00,0xd5,0x49,0x42,0x70,0x47,0x63,0x46,0x5b,0x10,0x00,0xd3,0x40,0x42, ++0x01,0xb5,0x00,0x20,0xc0,0x46,0xc0,0x46,0x02,0xbd,0x75,0x46,0x00,0xf0,0x22,0xf8, ++0xae,0x46,0x05,0x00,0x69,0x46,0x53,0x46,0xc0,0x08,0xc0,0x00,0x85,0x46,0x18,0xb0, ++0x20,0xb5,0xff,0xf7,0x5d,0xfa,0x60,0xbc,0x00,0x27,0x49,0x08,0xb6,0x46,0x00,0x26, ++0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5, ++0x40,0x3d,0x49,0x00,0x8d,0x46,0x70,0x47,0x04,0x46,0xc0,0x46,0xc0,0x46,0x20,0x46, ++0xff,0xf7,0x07,0xf9,0x00,0x48,0x70,0x47,0x60,0x00,0x00,0x20,0x02,0x48,0x03,0x49, ++0xab,0xbe,0x70,0x47,0x0d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x26,0x00,0x02,0x00, ++0x70,0x47,0x00,0x00,0x25,0x0c,0x28,0x0f,0x0a,0x0a,0x0f,0x00,0x02,0x02,0x70,0x06, ++0x00,0x00,0x01,0x01,0x08,0x08,0x10,0x85,0x1d,0x0e,0x07,0x03,0x0a,0x1e,0x64,0x50, ++0xa0,0x50,0x08,0x02,0x16,0x01,0x00,0x00,0x10,0x0a,0x02,0x00,0x06,0x04,0x14,0x14, ++0x0a,0x06,0x28,0x1e,0x3c,0x64,0x01,0x08,0x04,0x02,0x01,0x08,0x04,0x04,0x02,0x01, ++0x08,0x04,0x02,0x01,0x08,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x04, ++0x08,0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x01,0x01,0x01,0x01,0xd8,0xe2,0xf6,0x0a, ++0xf6,0x0a,0xf6,0x00,0x01,0x00,0x01,0x01,0x02,0x02,0x06,0x0c,0x10,0x00,0x14,0x0a, ++0x01,0x02,0x02,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, ++0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x1e,0x1e,0x3c,0x00,0x14, ++0xc8,0x14,0x00,0x03,0x84,0x04,0x02,0x02,0x5a,0x00,0x5a,0x01,0x02,0x0a,0x00,0x01, ++0x00,0x00,0x00,0x00,0x20,0x03,0x00,0x05,0xb4,0x00,0x09,0x00,0x90,0x01,0x02,0x01, ++0x68,0x01,0x20,0x00,0x00,0x00,0xf4,0xff,0x33,0x01,0x03,0x01,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x55,0x55,0x00,0x00,0x19,0x10,0x00,0x40, ++0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x29,0x10,0x00,0x40,0x29,0x10,0x00,0x40, ++0x29,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40, ++0x25,0x10,0x00,0x40,0x21,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x19,0x10,0x00,0x40, ++0x19,0x10,0x00,0x40,0x19,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40, ++0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x21,0x10,0x00,0x40,0x21,0x10,0x00,0x40, ++0x21,0x10,0x00,0x40,0x64,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x44,0x10,0x00,0x40, ++0x48,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x50,0x10,0x00,0x40,0x54,0x10,0x00,0x40, ++0x58,0x10,0x00,0x40,0x5c,0x10,0x00,0x40,0x60,0x10,0x00,0x40,0x11,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x40,0x10,0x00,0x40, ++0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x60,0x10,0x00,0x40, ++0x5c,0x10,0x00,0x40,0x58,0x10,0x00,0x40,0x54,0x10,0x00,0x40,0x50,0x10,0x00,0x40, ++0x4c,0x10,0x00,0x40,0x48,0x10,0x00,0x40,0x58,0x10,0x00,0x40,0x54,0x10,0x00,0x40, ++0x50,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x48,0x10,0x00,0x40,0x44,0x10,0x00,0x40, ++0x40,0x10,0x00,0x40,0x64,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, ++0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, ++0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0xff,0xff,0x00,0x80, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xff,0x00,0xff,0xff,0xff,0xff,0x00, ++0xff,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0x63,0x65,0x07,0x56,0xaa,0x78,0xa1,0x21,0x00, ++0x00,0x00,0x00,0x00,0x21,0xaa,0x43,0xaa,0x56,0xaa,0x81,0xa7,0x21,0x00,0x67,0xaa, ++0x23,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xa1, ++0x71,0x06,0x87,0xaa,0x23,0xaa,0x87,0xaa,0x32,0xaa,0x00,0x00,0x87,0xaa,0x23,0xaa, ++0x00,0x00,0x00,0x00,0x00,0x00,0x65,0xaa,0x87,0xaa,0x51,0xa6,0x47,0x06,0x45,0x00, ++0x28,0xa1,0x76,0xaa,0x12,0xa8,0x00,0x00,0x00,0x00,0x34,0xaa,0x56,0xaa,0x78,0xa1, ++0x21,0x00,0x00,0x00,0x67,0xaa,0x23,0xaa,0xa1,0xaa,0x87,0xaa,0x32,0xaa,0x67,0xaa, ++0x23,0xaa,0x87,0xaa,0x32,0xaa,0xa1,0xaa,0x21,0xaa,0x56,0xaa,0x81,0xa7,0x21,0xaa, ++0x00,0x00,0x34,0xaa,0x65,0xaa,0x87,0xaa,0x51,0x46,0x47,0x03,0xa8,0xaa,0x21,0xaa, ++0x43,0xaa,0x56,0xaa,0x81,0xa7,0x34,0xaa,0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0xa3, ++0x23,0xa4,0x21,0xa8,0x87,0xa6,0x32,0xa4,0x78,0x21,0x76,0xa5,0x23,0xa1,0x45,0x63, ++0x65,0x07,0x00,0x00,0x01,0x00,0x00,0xff,0xff,0x00,0x00,0x01,0x02,0x02,0x02,0x01, ++0x02,0x02,0x01,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02, ++0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, ++0xfc,0x1d,0x00,0x00,0x00,0x00,0x00,0x20,0xf0,0x0a,0x00,0x00,0x98,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x20,0x07,0x00,0x00,0xdc,0x5f,0xca,0xca, ++0xef,0x03,0x00,0x00,0x06,0x0a,0xa8,0x00,0x04,0x00,0x01,0x02,0xe1,0x24,0x24,0xf3 ++}; ++ ++#define FW_INFO_SIZE (0x18) ++#define FW_REAL_SIZE (sizeof(fwbin)) ++#define FW_BIN_SIZE (7*1024+512) //7.5K byte ++ ++ ++#endif ++ diff --git a/drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D89.h b/drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D89.h new file mode 100755 -index 000000000000..2a2045660c0a +index 000000000..715ff3bd3 --- /dev/null +++ b/drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D89.h @@ -0,0 +1,514 @@ -+/* -+ * drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D89.h -+ * -+ * hynitron TouchScreen driver. -+ * -+ * Copyright (c) 2015 hynitron -+ * -+ * This software is licensed under the terms of the GNU General Public -+ * License version 2, as published by the Free Software Foundation, and -+ * may be copied, distributed, and modified under those terms. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * VERSION DATE AUTHOR -+ * 1.0 2015-10-12 Tim -+ * -+ * note: only support mulititouch -+ */ -+#ifndef __CST2xxSE_FW_H__ -+#define __CST2xxSE_FW_H__ -+ -+static unsigned char fwbin[] = { -+0x6c,0x03,0x00,0x20,0x49,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x03,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0xdd,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, -+0x2f,0x01,0x00,0x00,0x00,0xf0,0x02,0xf8,0x00,0xf0,0x32,0xf8,0x0c,0xa0,0x30,0xc8, -+0x08,0x38,0x24,0x18,0x2d,0x18,0xa2,0x46,0x67,0x1e,0xab,0x46,0x54,0x46,0x5d,0x46, -+0xac,0x42,0x01,0xd1,0x00,0xf0,0x24,0xf8,0x7e,0x46,0x0f,0x3e,0x0f,0xcc,0xb6,0x46, -+0x01,0x26,0x33,0x42,0x00,0xd0,0xfb,0x1a,0xa2,0x46,0xab,0x46,0x33,0x43,0x18,0x47, -+0xa0,0x11,0x00,0x00,0xb0,0x11,0x00,0x00,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26, -+0x10,0x3a,0x01,0xd3,0x78,0xc1,0xfb,0xd8,0x52,0x07,0x00,0xd3,0x30,0xc1,0x00,0xd5, -+0x0b,0x60,0x70,0x47,0x1f,0xb5,0xc0,0x46,0xc0,0x46,0x1f,0xbd,0x10,0xb5,0x10,0xbd, -+0x00,0xf0,0xdb,0xfe,0x11,0x46,0xff,0xf7,0xf5,0xff,0x00,0xf0,0x08,0xf9,0x00,0xf0, -+0xf3,0xfe,0xff,0xf7,0xf3,0xff,0x00,0xf0,0xf9,0xfe,0x00,0x00,0xfe,0xe7,0x1d,0x49, -+0x48,0x88,0x48,0x80,0x1c,0x48,0x02,0x7c,0xff,0x2a,0x02,0xd2,0x02,0x7c,0x52,0x1c, -+0x02,0x74,0x00,0x7c,0x18,0x28,0x01,0xd2,0x00,0x20,0x88,0x80,0x70,0x47,0x17,0x49, -+0x8a,0x79,0x15,0x48,0x20,0x30,0x80,0x6b,0x43,0x7a,0x9a,0x43,0x8a,0x71,0x40,0x7a, -+0x48,0x72,0x11,0x49,0x01,0x20,0x08,0x74,0x70,0x47,0x10,0xb5,0x0f,0x48,0x80,0x30, -+0x81,0x88,0x80,0x22,0x11,0x43,0x81,0x80,0x0d,0xf0,0xfa,0xfe,0x10,0xbd,0x10,0xb5, -+0x09,0x48,0x20,0x30,0x01,0x78,0x49,0x06,0x08,0xd5,0x02,0x78,0x80,0x21,0x0a,0x43, -+0x02,0x70,0x07,0x4a,0x50,0x88,0x88,0x43,0x50,0x80,0x10,0xbd,0x00,0xf0,0x9a,0xfb, -+0x10,0xbd,0x00,0x00,0x00,0x02,0x00,0x40,0x90,0x0a,0x00,0x20,0x00,0x10,0x00,0x40, -+0x00,0x20,0x00,0x40,0x10,0xb5,0x65,0x48,0x65,0x4c,0x80,0x6b,0x01,0x46,0x80,0x30, -+0x03,0x7f,0x08,0x46,0x60,0x30,0x42,0x79,0x00,0x2b,0x06,0xd0,0x1b,0x02,0x13,0x43, -+0x63,0x81,0xff,0x22,0x23,0x32,0x62,0x80,0x03,0xe0,0x62,0x81,0xff,0x22,0x03,0x32, -+0x62,0x80,0xa0,0x31,0x89,0x8a,0xe1,0x80,0x81,0x79,0x02,0x79,0x09,0x02,0x11,0x43, -+0x21,0x81,0x01,0x7a,0xc0,0x79,0x09,0x02,0x01,0x43,0x55,0x48,0x20,0x38,0xc1,0x81, -+0x10,0xbd,0x10,0xb5,0x51,0x48,0x53,0x49,0x81,0x63,0x01,0x46,0x52,0x4a,0x40,0x39, -+0xca,0x61,0x52,0x4a,0x0a,0x62,0x52,0x4a,0x4a,0x62,0x52,0x4a,0x8a,0x62,0x52,0x4a, -+0xca,0x62,0x52,0x49,0xc1,0x63,0x52,0x49,0x41,0x60,0x52,0x49,0x81,0x60,0x52,0x49, -+0xc1,0x60,0x52,0x49,0x01,0x61,0x52,0x49,0x41,0x61,0x45,0x49,0xf0,0x20,0x60,0x39, -+0x88,0x75,0x4a,0x48,0xa8,0x21,0x40,0x30,0x01,0x73,0x00,0x21,0xc1,0x72,0xef,0x21, -+0x81,0x72,0x03,0x21,0x41,0x72,0x0d,0xf0,0xef,0xfe,0x0d,0xf0,0xe9,0xfe,0x3c,0x20, -+0x0d,0xf0,0xe2,0xfe,0x0d,0xf0,0xdc,0xfe,0x0d,0xf0,0xd6,0xfe,0x00,0xf0,0x8c,0xf9, -+0x0d,0xf0,0xce,0xfe,0x00,0xf0,0xf3,0xf9,0x10,0xbd,0x70,0xb5,0x33,0x4c,0x20,0x78, -+0x01,0x25,0x28,0x43,0x20,0x70,0x3f,0x4e,0x4d,0xe0,0x0d,0xf0,0xbd,0xfe,0x30,0x7a, -+0x00,0x28,0x03,0xd0,0x2d,0x49,0x18,0x20,0x20,0x39,0x08,0x74,0x0d,0xf0,0xb0,0xfe, -+0x20,0x78,0xc0,0x07,0x01,0xd0,0x55,0x20,0x70,0x70,0x0d,0xf0,0xa5,0xfe,0xa0,0x6b, -+0x20,0x30,0x40,0x78,0x00,0x28,0x01,0xd0,0x0d,0xf0,0x9a,0xfe,0xa0,0x6b,0x21,0x21, -+0x09,0x5c,0x09,0x09,0x06,0xd0,0x21,0x49,0x60,0x30,0xa0,0x39,0x89,0x7b,0xc0,0x7a, -+0x81,0x42,0x24,0xd1,0x0d,0xf0,0x88,0xfe,0x0d,0xf0,0x82,0xfe,0x0d,0xf0,0x7c,0xfe, -+0xa0,0x78,0x00,0x28,0x02,0xd0,0xa0,0x78,0x02,0x28,0x09,0xd1,0x18,0x4a,0x80,0x3a, -+0x11,0x78,0xa0,0x6b,0x20,0x30,0x83,0x79,0x28,0x46,0x98,0x40,0x81,0x43,0x11,0x70, -+0x0d,0xf0,0x66,0xfe,0x0d,0xf0,0x5c,0xfe,0x0d,0xf0,0x56,0xfe,0x1e,0x48,0x0d,0xf0, -+0x4f,0xfe,0x0d,0xf0,0x49,0xfe,0x0d,0xf0,0x43,0xfe,0x00,0xf0,0x61,0xf9,0x00,0xf0, -+0x85,0xf8,0x00,0xf0,0x57,0xf8,0xa0,0x78,0x06,0x28,0xae,0xd1,0x70,0xbd,0x10,0xb5, -+0xff,0xf7,0x67,0xff,0x05,0x4c,0xa0,0x78,0x00,0x28,0x04,0xd0,0x06,0x28,0xfa,0xd1, -+0x0d,0xf0,0x1a,0xfe,0xf7,0xe7,0xff,0xf7,0x98,0xff,0xf4,0xe7,0xb0,0x0a,0x00,0x20, -+0x80,0x10,0x00,0x40,0xe4,0x0e,0x00,0x00,0x16,0x11,0x00,0x00,0x28,0x11,0x00,0x00, -+0x04,0x12,0x00,0x00,0xe4,0x10,0x00,0x00,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x20, -+0x71,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0xd1,0x06,0x00,0x00,0x71,0x09,0x00,0x00, -+0x65,0x01,0x00,0x00,0x54,0x00,0x00,0x20,0xaf,0x04,0x00,0x00,0x0b,0x49,0x0a,0x48, -+0xc8,0x60,0xbf,0xf3,0x40,0x8f,0xfe,0xe7,0x10,0xb5,0xff,0xf7,0xc8,0xff,0x10,0xbd, -+0x0f,0xb5,0x00,0x90,0x01,0x91,0x01,0x98,0x02,0x90,0x00,0x98,0x03,0x90,0x68,0x46, -+0x0f,0xc8,0x04,0xb0,0x00,0xbd,0x00,0x00,0x04,0x00,0xfa,0x05,0x00,0xed,0x00,0xe0, -+0x10,0xb5,0x00,0xf0,0xdf,0xfc,0x10,0xbd,0x10,0xb5,0x00,0xf0,0xdb,0xfc,0x08,0x46, -+0x10,0xbd,0x00,0x00,0x30,0xb5,0xf8,0x48,0x00,0xe0,0x30,0xbf,0x01,0x7c,0x00,0x29, -+0xfb,0xd0,0xf5,0x48,0x20,0x30,0x01,0x78,0x09,0x07,0x15,0xd5,0xf3,0x4c,0x01,0x23, -+0x23,0x76,0x9a,0x07,0x11,0x68,0x08,0x25,0x29,0x43,0x11,0x60,0x01,0x78,0xef,0x22, -+0x11,0x40,0x01,0x70,0x00,0xe0,0x30,0xbf,0x01,0x78,0xc9,0x06,0xfb,0xd5,0x00,0x21, -+0x21,0x76,0x01,0x78,0x19,0x43,0x01,0x70,0xe9,0x48,0x41,0x68,0x49,0x1c,0x41,0x60, -+0x00,0x7a,0x00,0x28,0x01,0xd0,0x30,0xbf,0xfd,0xe7,0x30,0xbd,0xf8,0xb5,0xe2,0x4c, -+0x20,0x34,0xa0,0x78,0x00,0x28,0x03,0xd0,0x0d,0xf0,0xa6,0xfd,0x00,0x28,0x3b,0xd1, -+0xdd,0x49,0xde,0x4d,0x80,0x39,0xc8,0x7c,0x20,0x3d,0x01,0x26,0xdd,0x4a,0x00,0x28, -+0x0a,0xd1,0xa7,0x6b,0x08,0x46,0x40,0x30,0x20,0x37,0x83,0x7d,0x3f,0x7a,0xbb,0x42, -+0x07,0xd3,0x00,0x7c,0x00,0x06,0x04,0xd5,0xd3,0x48,0x20,0x38,0x40,0x78,0x00,0x28, -+0x23,0xd0,0xd3,0x4b,0x58,0x78,0x55,0x28,0x05,0xd0,0x18,0x78,0x55,0x28,0x1b,0xd1, -+0x48,0x7b,0x06,0x28,0x18,0xd1,0x00,0x20,0x18,0x70,0x58,0x70,0x10,0x70,0xab,0x21, -+0x91,0x71,0x50,0x71,0x29,0x78,0xa0,0x6b,0x20,0x30,0x82,0x79,0x30,0x46,0x90,0x40, -+0x01,0x43,0x29,0x70,0x28,0x20,0x0d,0xf0,0x5e,0xf8,0x29,0x78,0xa0,0x6b,0x20,0x30, -+0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xc1,0x48,0x55,0x21,0x01,0x70, -+0x00,0x20,0xc1,0x49,0x13,0x78,0xab,0x2b,0x03,0xd0,0x40,0x1c,0x80,0xb2,0x88,0x42, -+0xf8,0xd3,0xe2,0x63,0x0d,0xf0,0x5c,0xfd,0x28,0x78,0xa1,0x6b,0x20,0x31,0x8a,0x79, -+0x31,0x46,0x91,0x40,0x08,0x43,0x28,0x70,0x28,0x20,0x0d,0xf0,0x3c,0xf8,0x29,0x78, -+0xa0,0x6b,0x20,0x30,0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xf8,0xb5, -+0xad,0x48,0x20,0x30,0x80,0x6b,0x05,0x79,0xc0,0x78,0x00,0x90,0x00,0x26,0x37,0xe0, -+0x00,0x20,0x00,0x21,0x32,0x46,0x6a,0x43,0x53,0x00,0xac,0x4a,0x9b,0x18,0x5f,0x22, -+0xd2,0x00,0x9a,0x18,0x14,0x46,0x00,0x23,0x07,0xe0,0x17,0x88,0x38,0x18,0x00,0xb2, -+0x49,0x1c,0x09,0xb2,0x92,0x1c,0x5b,0x1c,0xdb,0xb2,0xab,0x42,0xf5,0xd3,0x00,0xf0, -+0x21,0xfc,0x0a,0x30,0x00,0xb2,0x00,0x21,0x16,0xe0,0x00,0x28,0x0b,0xdd,0x00,0x22, -+0xa2,0x5e,0x82,0x42,0x02,0xdb,0x12,0x1a,0x22,0x80,0x0a,0xe0,0x00,0x2a,0x08,0xdd, -+0x01,0x22,0x22,0x80,0x05,0xe0,0x00,0x22,0xa2,0x5e,0x82,0x42,0x01,0xdc,0x12,0x1a, -+0x22,0x80,0xa4,0x1c,0x49,0x1c,0xc9,0xb2,0xa9,0x42,0xe6,0xd3,0x76,0x1c,0xf6,0xb2, -+0x00,0x98,0x86,0x42,0xc4,0xd3,0xf8,0xbd,0x30,0xb5,0x8c,0x48,0x20,0x38,0x84,0x78, -+0x89,0x49,0x01,0x22,0x20,0x31,0x89,0x6b,0x13,0x46,0x20,0x31,0x8d,0x79,0xab,0x40, -+0x9c,0x43,0x84,0x70,0x43,0x78,0x8d,0x79,0x14,0x46,0xac,0x40,0xa3,0x43,0x43,0x70, -+0x04,0x78,0x8d,0x79,0x13,0x46,0xab,0x40,0x9c,0x43,0x04,0x70,0xc3,0x78,0x8d,0x79, -+0x14,0x46,0xac,0x40,0x23,0x43,0xc3,0x70,0x43,0x79,0x8d,0x79,0x14,0x46,0xac,0x40, -+0xa3,0x43,0x43,0x71,0x03,0x79,0x89,0x79,0x8a,0x40,0x13,0x43,0x03,0x71,0x30,0xbd, -+0x70,0xb5,0x75,0x4d,0x20,0x3d,0x68,0x78,0x00,0x28,0x28,0xd0,0x2c,0x46,0x40,0x34, -+0xa0,0x6b,0xff,0x30,0xc1,0x30,0x80,0x6b,0x00,0x28,0x20,0xd0,0x0d,0xf0,0xcc,0xfc, -+0x00,0x21,0xff,0x28,0x1c,0xd1,0xa0,0x6b,0x60,0x30,0x82,0x7a,0x20,0x46,0xa0,0x38, -+0x82,0x73,0x02,0x22,0x03,0x46,0x20,0x33,0x5a,0x70,0x41,0x73,0x00,0x20,0x0f,0x22, -+0x17,0x25,0x6a,0x4b,0xad,0x01,0x06,0xe0,0x24,0x21,0x41,0x43,0xc9,0x18,0x49,0x19, -+0x8a,0x73,0x40,0x1c,0xc0,0xb2,0xa1,0x6b,0xc9,0x7a,0x81,0x42,0xf4,0xd8,0x70,0xbd, -+0xfe,0x28,0xfc,0xd0,0x00,0x28,0xfa,0xd0,0xa2,0x6b,0xff,0x32,0xc1,0x32,0x93,0x6b, -+0x40,0x1e,0x01,0x22,0x82,0x40,0x13,0x42,0xf1,0xd0,0x69,0x70,0x70,0xbd,0x58,0x49, -+0x00,0x20,0x08,0x70,0x48,0x70,0x48,0x60,0x88,0x70,0x08,0x72,0x70,0x47,0xf8,0xb5, -+0x57,0x4a,0x54,0x4b,0x40,0x33,0xd8,0x7a,0x00,0x28,0x50,0xd0,0x00,0x21,0x00,0x25, -+0x32,0x24,0x4d,0x48,0x20,0x30,0x00,0x90,0x86,0x6b,0xf0,0x79,0x00,0x28,0x00,0xd0, -+0x28,0x24,0x00,0x20,0x08,0xe0,0x00,0x27,0xd7,0x5f,0x0a,0x2f,0x01,0xdb,0x49,0x1c, -+0x89,0xb2,0x92,0x1c,0x40,0x1c,0x80,0xb2,0xa0,0x42,0xf4,0xd3,0x44,0x4a,0x0a,0x29, -+0x09,0xd2,0x06,0x29,0x02,0xd3,0xd8,0x7a,0x40,0x06,0x04,0xd1,0x3e,0x48,0x80,0x38, -+0xc0,0x7b,0x02,0x28,0x08,0xd9,0xd8,0x7a,0x80,0x28,0x00,0xd1,0x01,0x25,0x81,0x20, -+0xd8,0x72,0x14,0x20,0x90,0x70,0x0b,0xe0,0x90,0x78,0x00,0x28,0x02,0xd0,0x40,0x1e, -+0x90,0x70,0x05,0xe0,0xd8,0x7a,0x81,0x28,0x00,0xd1,0x01,0x25,0x80,0x20,0xd8,0x72, -+0x00,0x2d,0x14,0xd0,0x31,0x4c,0x20,0x3c,0x20,0x78,0x20,0x36,0xb2,0x79,0x01,0x25, -+0x29,0x46,0x91,0x40,0x88,0x43,0x20,0x70,0x28,0x20,0x0c,0xf0,0x2c,0xff,0x20,0x78, -+0x00,0x99,0x89,0x6b,0x20,0x31,0x89,0x79,0x8d,0x40,0x28,0x43,0x20,0x70,0xf8,0xbd, -+0xf8,0xb5,0x0d,0x46,0x07,0x9f,0x06,0x9e,0x11,0x46,0x23,0x4a,0x20,0x32,0x90,0x6b, -+0x40,0x30,0x00,0x2d,0x07,0xd0,0x00,0x2e,0x02,0xd0,0x1e,0x24,0x04,0x57,0x09,0xe0, -+0x1d,0x24,0x04,0x57,0x06,0xe0,0x00,0x2f,0x02,0xd0,0x1c,0x24,0x04,0x57,0x01,0xe0, -+0x1b,0x24,0x04,0x57,0x00,0x20,0x18,0x5e,0x00,0x28,0x00,0xda,0x40,0x42,0xc0,0x01, -+0x0b,0x46,0x00,0x21,0x52,0x68,0x59,0x5e,0x90,0x47,0x7f,0x28,0x00,0xdd,0x7f,0x20, -+0xff,0x21,0x01,0x31,0x00,0x2e,0x01,0xd0,0x00,0x2d,0x03,0xd1,0x00,0x2f,0x02,0xd0, -+0x00,0x2d,0x00,0xd1,0x08,0x1a,0x00,0x19,0x88,0x42,0x01,0xdd,0x08,0x46,0xf8,0xbd, -+0x00,0x28,0xfc,0xda,0x00,0x20,0xf8,0xbd,0xf0,0xb5,0x87,0xb0,0x0c,0x4e,0x06,0x48, -+0x20,0x30,0x80,0x6b,0x01,0x79,0x03,0x91,0xc0,0x78,0x02,0x90,0x00,0x25,0x02,0x48, -+0x80,0x38,0x06,0x90,0x48,0xe0,0x00,0x00,0x90,0x0a,0x00,0x20,0x20,0x10,0x00,0x40, -+0x54,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x7c,0x92,0x00,0x00,0x70,0x03,0x00,0x20, -+0x68,0x06,0x00,0x20,0x68,0x00,0x34,0x5e,0x80,0x19,0x14,0x27,0x05,0x90,0xc7,0x5f, -+0x06,0x98,0x80,0x7a,0xa0,0x42,0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11, -+0x10,0x21,0x09,0x1a,0x20,0x46,0x00,0xf0,0xc5,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42, -+0x01,0xdb,0x64,0x1e,0x20,0xb2,0x05,0x99,0x88,0x82,0x05,0x98,0xff,0x30,0x01,0x30, -+0x18,0x24,0x04,0x90,0x04,0x5f,0x04,0x27,0xc7,0x5f,0x06,0x98,0x80,0x7a,0xa0,0x42, -+0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, -+0x00,0xf0,0xa8,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2, -+0x04,0x99,0x88,0x80,0x6d,0x1c,0xed,0xb2,0x03,0x98,0x85,0x42,0xc2,0xd3,0x00,0x27, -+0x3a,0xe0,0x38,0x46,0x14,0x21,0x48,0x43,0x34,0x5e,0x85,0x19,0x02,0x20,0x28,0x5e, -+0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda,0x01,0x98,0x40,0x00,0xa0,0x42, -+0x0d,0xda,0x21,0x11,0x10,0x20,0x41,0x1a,0x20,0x46,0x00,0xf0,0x83,0xfa,0x01,0x99, -+0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2,0x68,0x80,0x12,0x24, -+0x2c,0x5f,0x10,0x20,0x28,0x5e,0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda, -+0x01,0x98,0x40,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, -+0x00,0xf0,0x68,0xfa,0x01,0x99,0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e, -+0x20,0xb2,0x28,0x82,0x7f,0x1c,0xff,0xb2,0x02,0x98,0x87,0x42,0xc1,0xd3,0x07,0xb0, -+0xf0,0xbd,0x70,0x47,0xf8,0xb5,0xfd,0x4c,0xa3,0x88,0xcf,0x20,0x03,0x40,0x1d,0x21, -+0xfb,0x48,0x89,0x01,0x42,0x18,0x35,0x21,0x49,0x01,0x45,0x18,0x0d,0x21,0xc9,0x01, -+0x40,0x18,0xf8,0x4f,0xd6,0x6b,0x81,0x6b,0x01,0x2b,0x1a,0xd0,0x05,0x2b,0x09,0xd0, -+0x00,0x22,0x09,0x2b,0x5a,0xd1,0x6a,0x75,0xe2,0x88,0xd2,0x07,0x02,0xd1,0x10,0x20, -+0xa0,0x80,0xf8,0xbd,0xb9,0x42,0x02,0xd1,0xa5,0x20,0xe0,0x80,0x06,0xe0,0x72,0x5c, -+0xe2,0x80,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63,0x14,0x20,0xa0,0x80, -+0xf8,0xbd,0x6b,0x7d,0x02,0x2b,0x31,0xd2,0x00,0x2b,0x04,0xd1,0xe6,0x49,0xd1,0x63, -+0xe1,0x88,0x81,0x63,0x34,0xe0,0xe3,0x88,0x09,0x02,0xc9,0x18,0x8e,0xb2,0xd1,0x21, -+0x09,0x02,0x71,0x1a,0x20,0x29,0x0f,0xd8,0xf0,0xb2,0x08,0xf0,0x8d,0xf8,0xdf,0x48, -+0x86,0x42,0x25,0xd1,0x01,0x20,0x0d,0xf0,0x5f,0xfb,0xdd,0x49,0x18,0x20,0x08,0x74, -+0xdc,0x49,0x01,0x20,0x08,0x72,0x1b,0xe0,0xdb,0x49,0x71,0x18,0x23,0x29,0x04,0xd8, -+0x81,0x63,0xef,0x20,0x40,0x01,0xd0,0x63,0x12,0xe0,0x0d,0x21,0x09,0x03,0x71,0x1a, -+0x50,0x29,0x01,0xd8,0x81,0x63,0x0b,0xe0,0x87,0x63,0x09,0xe0,0xb9,0x42,0x07,0xd0, -+0xe2,0x88,0x72,0x54,0x81,0x6b,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63, -+0x68,0x7d,0x40,0x1c,0x68,0x75,0x10,0x20,0xa0,0x80,0xf8,0xbd,0xa2,0x80,0xf8,0xbd, -+0xf7,0xb5,0xa0,0xb0,0x0d,0x46,0x00,0x20,0x0f,0x90,0x0e,0x90,0xc4,0x48,0x20,0x30, -+0x1f,0x90,0x80,0x6b,0x04,0x79,0x81,0x79,0x49,0x1e,0xc9,0xb2,0x0d,0x91,0x00,0x21, -+0x0c,0x91,0x0b,0x91,0x0a,0x91,0x41,0x78,0x49,0x00,0x18,0x91,0xb2,0x21,0x41,0x5e, -+0x17,0x91,0xbb,0x48,0x91,0x22,0x80,0x38,0xc1,0x7a,0xb5,0x48,0x92,0x00,0x82,0x18, -+0x1e,0x92,0x02,0x46,0x28,0x32,0xdc,0x30,0x1d,0x92,0x1c,0x90,0x01,0x29,0x18,0xd1, -+0x28,0x46,0x1c,0x99,0x60,0x43,0x46,0x18,0x1e,0x99,0x42,0x18,0x1d,0x99,0x47,0x18, -+0x20,0x98,0x00,0x21,0x0b,0xe0,0x03,0x88,0x33,0x70,0x03,0x88,0x13,0x70,0x03,0x88, -+0x3b,0x70,0x76,0x1c,0x80,0x1c,0x52,0x1c,0x7f,0x1c,0x49,0x1c,0x49,0xb2,0xa1,0x42, -+0xf1,0xdb,0x00,0x20,0x12,0x90,0x13,0x90,0x14,0x90,0x20,0x98,0x02,0x90,0x05,0xa8, -+0x84,0x46,0x28,0x46,0x60,0x43,0x1c,0x99,0x1b,0x90,0x47,0x18,0x1a,0x97,0x1f,0x98, -+0xc2,0x69,0x1f,0x98,0xc3,0x6a,0x00,0x21,0x23,0xe0,0x02,0x98,0x3e,0x78,0x00,0x88, -+0x80,0x1b,0x00,0xb2,0x66,0x46,0x30,0x80,0xd6,0x07,0x04,0xd0,0x14,0x9e,0x80,0x19, -+0x00,0xb2,0x14,0x90,0x0a,0xe0,0xde,0x07,0x04,0xd0,0x13,0x9e,0x80,0x19,0x00,0xb2, -+0x13,0x90,0x03,0xe0,0x12,0x9e,0x80,0x19,0x00,0xb2,0x12,0x90,0x60,0x46,0x80,0x1c, -+0x84,0x46,0x02,0x98,0x80,0x1c,0x02,0x90,0x7f,0x1c,0x52,0x08,0x5b,0x08,0x49,0x1c, -+0x49,0xb2,0xa1,0x42,0xd9,0xdb,0x8a,0x4e,0x40,0x36,0x31,0x7d,0x00,0x29,0x05,0xdd, -+0x1f,0x98,0x42,0x68,0x14,0x98,0x90,0x47,0x00,0xb2,0x14,0x90,0x71,0x7d,0x00,0x29, -+0x0b,0xdd,0x01,0x29,0x03,0xd1,0x13,0x98,0x40,0x10,0x13,0x90,0x05,0xe0,0x1f,0x98, -+0x42,0x68,0x13,0x98,0x90,0x47,0x00,0xb2,0x13,0x90,0xb1,0x7d,0x00,0x29,0x0b,0xdd, -+0x01,0x29,0x03,0xd1,0x12,0x98,0x40,0x10,0x12,0x90,0x05,0xe0,0x1f,0x98,0x42,0x68, -+0x12,0x98,0x90,0x47,0x00,0xb2,0x12,0x90,0x20,0x98,0x05,0xa9,0x8c,0x46,0x1a,0x99, -+0x04,0x91,0x1f,0x99,0xc9,0x69,0x11,0x91,0x1f,0x99,0xc9,0x6a,0x10,0x91,0x1f,0x99, -+0x8a,0x6b,0xd1,0x7c,0xc9,0x07,0x0e,0xd0,0x1f,0x99,0x09,0x6a,0x1f,0x9b,0x5b,0x6a, -+0x0f,0x93,0x1f,0x9b,0x9b,0x6a,0x0e,0x93,0x13,0x7d,0x0c,0x93,0x53,0x7d,0x0b,0x93, -+0x92,0x7d,0x0a,0x92,0x00,0xe0,0x00,0x21,0x1d,0x9b,0x1b,0x9a,0xd2,0x18,0x03,0x92, -+0x00,0x22,0x19,0x92,0x9a,0xe0,0x11,0x9a,0xd2,0x07,0x01,0xd0,0x14,0x9a,0x05,0xe0, -+0x10,0x9a,0xd2,0x07,0x01,0xd0,0x13,0x9a,0x00,0xe0,0x12,0x9a,0x00,0x2a,0x0c,0xdd, -+0x66,0x46,0x00,0x23,0xf3,0x5e,0x00,0x2b,0x07,0xdd,0x93,0x42,0x00,0xda,0x1a,0x46, -+0x03,0x88,0x9a,0x1a,0x13,0xb2,0x03,0x80,0x32,0xe0,0x66,0x46,0x00,0x23,0xf3,0x5e, -+0x00,0x2b,0x2b,0xda,0x00,0x2a,0x05,0xda,0x93,0x42,0x00,0xdd,0x1a,0x46,0x03,0x88, -+0x9a,0x1a,0x02,0x80,0x00,0x23,0xc3,0x5e,0xca,0x07,0x21,0xd0,0x04,0x9a,0x12,0x78, -+0x17,0x46,0xd2,0x1a,0x12,0xb2,0x0e,0x9e,0xf6,0x07,0x06,0xd0,0x0a,0x9e,0xb2,0x42, -+0x16,0xdd,0x0a,0x9e,0xba,0x1b,0x02,0x80,0x12,0xe0,0x0f,0x9e,0xf6,0x07,0x06,0xd0, -+0x0b,0x9e,0xb2,0x42,0x0c,0xdd,0x0b,0x9e,0xba,0x1b,0x02,0x80,0x08,0xe0,0x0c,0x9e, -+0xb2,0x42,0x05,0xdd,0x0c,0x9e,0xba,0x1b,0x02,0x80,0x01,0xe0,0x00,0x23,0xc3,0x5e, -+0x03,0x9a,0x12,0x78,0xd2,0x1a,0x12,0xb2,0x18,0x9b,0x9a,0x42,0x02,0xda,0x17,0x9b, -+0x9a,0x42,0x26,0xdc,0x01,0x22,0xaa,0x40,0xd3,0x17,0x22,0x9e,0x01,0x93,0x00,0x92, -+0x37,0x68,0x76,0x68,0x3a,0x43,0x33,0x43,0x22,0x9e,0x0c,0xc6,0x00,0x2d,0x09,0xd0, -+0x6f,0x1e,0x01,0x26,0xbe,0x40,0xf7,0x17,0x00,0x96,0x16,0x43,0x01,0x97,0x22,0x9a, -+0x1f,0x43,0xc0,0xc2,0x0d,0x9a,0x95,0x42,0x0b,0xd2,0x6b,0x1c,0x01,0x22,0x9a,0x40, -+0xd3,0x17,0x22,0x9f,0x01,0x93,0x00,0x92,0xc0,0xcf,0x32,0x43,0x22,0x9e,0x3b,0x43, -+0x0c,0xc6,0x03,0x9a,0x52,0x1c,0x03,0x92,0x80,0x1c,0x04,0x9a,0x52,0x1c,0x04,0x92, -+0x62,0x46,0x92,0x1c,0x94,0x46,0x11,0x9a,0x52,0x08,0x11,0x92,0x10,0x9a,0x52,0x08, -+0x10,0x92,0x00,0x29,0x06,0xd0,0x49,0x08,0x0f,0x9a,0x52,0x08,0x0f,0x92,0x0e,0x9a, -+0x52,0x08,0x0e,0x92,0x19,0x9a,0x52,0x1c,0x52,0xb2,0x19,0x92,0x19,0x9a,0xa2,0x42, -+0x00,0xda,0x60,0xe7,0x1a,0x9d,0x1e,0x99,0x1b,0x98,0x47,0x18,0x20,0x9e,0x1f,0x98, -+0x80,0x6b,0x80,0x30,0x00,0x7e,0x01,0x28,0x2c,0xd1,0x00,0x23,0x26,0xe0,0x00,0x22, -+0xb2,0x5e,0x28,0x78,0x39,0x78,0x38,0x70,0x2a,0x70,0x88,0x42,0x02,0xdd,0x84,0x46, -+0x08,0x46,0x61,0x46,0x82,0x42,0x11,0xdc,0x30,0x80,0x12,0xe0,0x00,0x20,0x00,0x40, -+0x70,0x03,0x00,0x20,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x20,0x0e,0xd1,0x00,0x00, -+0x90,0x0a,0x00,0x20,0x54,0x00,0x00,0x20,0x10,0x2e,0xff,0xff,0x8a,0x42,0x00,0xdb, -+0x31,0x80,0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x5b,0x1c,0x5b,0xb2,0xa3,0x42,0xd6,0xdb, -+0x23,0xb0,0xf0,0xbd,0x02,0x28,0x25,0xd1,0x00,0x20,0x19,0x90,0x1e,0xe0,0x00,0x21, -+0x71,0x5e,0x16,0x91,0x28,0x78,0x39,0x78,0x15,0x91,0x16,0x99,0x08,0x18,0x15,0x99, -+0x40,0x18,0x1f,0x99,0x4a,0x68,0x03,0x21,0x90,0x47,0x00,0xb2,0x38,0x70,0x16,0x99, -+0x29,0x70,0x15,0x99,0x4a,0x00,0x89,0x18,0x08,0x18,0x80,0x10,0x30,0x80,0x6d,0x1c, -+0x7f,0x1c,0xb6,0x1c,0x19,0x98,0x40,0x1c,0x40,0xb2,0x19,0x90,0x19,0x98,0xa0,0x42, -+0xdd,0xdb,0xd5,0xe7,0x00,0x20,0x08,0xe0,0x29,0x78,0x39,0x70,0x31,0x88,0x29,0x70, -+0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x40,0x1c,0x40,0xb2,0xa0,0x42,0xf4,0xdb,0xc7,0xe7, -+0x00,0x22,0x03,0x09,0x8b,0x42,0x2c,0xd3,0x03,0x0a,0x8b,0x42,0x11,0xd3,0x00,0x23, -+0x9c,0x46,0x4e,0xe0,0x03,0x46,0x0b,0x43,0x3c,0xd4,0x00,0x22,0x43,0x08,0x8b,0x42, -+0x31,0xd3,0x03,0x09,0x8b,0x42,0x1c,0xd3,0x03,0x0a,0x8b,0x42,0x01,0xd3,0x94,0x46, -+0x3f,0xe0,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01,0xc0,0x1a,0x52,0x41,0x83,0x09, -+0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41,0x43,0x09,0x8b,0x42,0x01,0xd3, -+0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42,0x01,0xd3,0x0b,0x01,0xc0,0x1a, -+0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00,0xc0,0x1a,0x52,0x41,0x83,0x08, -+0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41,0x43,0x08,0x8b,0x42,0x01,0xd3, -+0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a,0x00,0xd2,0x01,0x46,0x52,0x41,0x10,0x46, -+0x70,0x47,0x5d,0xe0,0xca,0x0f,0x00,0xd0,0x49,0x42,0x03,0x10,0x00,0xd3,0x40,0x42, -+0x53,0x40,0x00,0x22,0x9c,0x46,0x03,0x09,0x8b,0x42,0x2d,0xd3,0x03,0x0a,0x8b,0x42, -+0x12,0xd3,0xfc,0x22,0x89,0x01,0x12,0xba,0x03,0x0a,0x8b,0x42,0x0c,0xd3,0x89,0x01, -+0x92,0x11,0x8b,0x42,0x08,0xd3,0x89,0x01,0x92,0x11,0x8b,0x42,0x04,0xd3,0x89,0x01, -+0x3a,0xd0,0x92,0x11,0x00,0xe0,0x89,0x09,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01, -+0xc0,0x1a,0x52,0x41,0x83,0x09,0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41, -+0x43,0x09,0x8b,0x42,0x01,0xd3,0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42, -+0x01,0xd3,0x0b,0x01,0xc0,0x1a,0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00, -+0xc0,0x1a,0x52,0x41,0x83,0x08,0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41, -+0xd9,0xd2,0x43,0x08,0x8b,0x42,0x01,0xd3,0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a, -+0x00,0xd2,0x01,0x46,0x63,0x46,0x52,0x41,0x5b,0x10,0x10,0x46,0x01,0xd3,0x40,0x42, -+0x00,0x2b,0x00,0xd5,0x49,0x42,0x70,0x47,0x63,0x46,0x5b,0x10,0x00,0xd3,0x40,0x42, -+0x01,0xb5,0x00,0x20,0xc0,0x46,0xc0,0x46,0x02,0xbd,0x75,0x46,0x00,0xf0,0x22,0xf8, -+0xae,0x46,0x05,0x00,0x69,0x46,0x53,0x46,0xc0,0x08,0xc0,0x00,0x85,0x46,0x18,0xb0, -+0x20,0xb5,0xff,0xf7,0x5d,0xfa,0x60,0xbc,0x00,0x27,0x49,0x08,0xb6,0x46,0x00,0x26, -+0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5, -+0x40,0x3d,0x49,0x00,0x8d,0x46,0x70,0x47,0x04,0x46,0xc0,0x46,0xc0,0x46,0x20,0x46, -+0xff,0xf7,0x07,0xf9,0x00,0x48,0x70,0x47,0x60,0x00,0x00,0x20,0x02,0x48,0x03,0x49, -+0xab,0xbe,0x70,0x47,0x0d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x26,0x00,0x02,0x00, -+0x70,0x47,0x00,0x00,0x25,0x0c,0x28,0x0f,0x0a,0x0a,0x0f,0x00,0x02,0x02,0x70,0x06, -+0x00,0x00,0x01,0x01,0x08,0x08,0x10,0x85,0x1d,0x0e,0x07,0x03,0x0a,0x1e,0x64,0x50, -+0xa0,0x50,0x08,0x02,0x16,0x01,0x00,0x00,0x10,0x0a,0x02,0x00,0x06,0x04,0x14,0x14, -+0x0a,0x06,0x28,0x1e,0x3c,0x64,0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x01,0x08,0x04, -+0x02,0x01,0x08,0x04,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x04, -+0x08,0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x01,0x01,0x01,0x01,0xd8,0xe2,0xf6,0x0a, -+0xf6,0x14,0xec,0x00,0x01,0x00,0x01,0x01,0x02,0x04,0x06,0x0c,0x10,0x00,0x14,0x0a, -+0x01,0x02,0x02,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, -+0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x1e,0x1e,0x3c,0x00,0x14, -+0xc8,0x14,0x00,0x03,0x84,0x04,0x02,0x02,0x5a,0x00,0x5a,0x01,0x02,0x0a,0x00,0x01, -+0x00,0x00,0x00,0x00,0x20,0x03,0x00,0x05,0xb4,0x00,0x0b,0x00,0x90,0x01,0x02,0x01, -+0x68,0x01,0x20,0x00,0x00,0x00,0xf4,0xff,0x03,0x01,0x03,0x01,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x55,0x55,0x00,0x00,0x25,0x10,0x00,0x40, -+0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x29,0x10,0x00,0x40, -+0x29,0x10,0x00,0x40,0x29,0x10,0x00,0x40,0x19,0x10,0x00,0x40,0x15,0x10,0x00,0x40, -+0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x11,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x19,0x10,0x00,0x40, -+0x19,0x10,0x00,0x40,0x19,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40, -+0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x21,0x10,0x00,0x40,0x21,0x10,0x00,0x40, -+0x21,0x10,0x00,0x40,0x64,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x44,0x10,0x00,0x40, -+0x48,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x50,0x10,0x00,0x40,0x54,0x10,0x00,0x40, -+0x58,0x10,0x00,0x40,0x5c,0x10,0x00,0x40,0x60,0x10,0x00,0x40,0x11,0x10,0x00,0x40, -+0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x40,0x10,0x00,0x40, -+0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, -+0x44,0x10,0x00,0x40,0x48,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x50,0x10,0x00,0x40, -+0x54,0x10,0x00,0x40,0x58,0x10,0x00,0x40,0x60,0x10,0x00,0x40,0x5c,0x10,0x00,0x40, -+0x58,0x10,0x00,0x40,0x54,0x10,0x00,0x40,0x50,0x10,0x00,0x40,0x4c,0x10,0x00,0x40, -+0x48,0x10,0x00,0x40,0x44,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, -+0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, -+0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0xff,0xff,0x00,0x80, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xff,0x00,0xff,0xff,0xff,0xff,0x00, -+0xff,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0x63,0x65,0x07,0x56,0xaa,0x78,0xa1,0x21,0x00, -+0x00,0x00,0x00,0x00,0x21,0xaa,0x43,0xaa,0x56,0xaa,0x81,0xa7,0x21,0x00,0x67,0xaa, -+0x23,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xa1, -+0x71,0x06,0x87,0xaa,0x23,0xaa,0x87,0xaa,0x32,0xaa,0x00,0x00,0x87,0xaa,0x23,0xaa, -+0x00,0x00,0x00,0x00,0x00,0x00,0x65,0xaa,0x87,0xaa,0x51,0xa6,0x47,0x06,0x45,0x00, -+0x28,0xa1,0x76,0xaa,0x12,0xa8,0x00,0x00,0x00,0x00,0x34,0xaa,0x56,0xaa,0x78,0xa1, -+0x21,0x00,0x00,0x00,0x67,0xaa,0x23,0xaa,0xa1,0xaa,0x87,0xaa,0x32,0xaa,0x67,0xaa, -+0x23,0xaa,0x87,0xaa,0x32,0xaa,0xa1,0xaa,0x21,0xaa,0x56,0xaa,0x81,0xa7,0x21,0xaa, -+0x00,0x00,0x34,0xaa,0x65,0xaa,0x87,0xaa,0x51,0x46,0x47,0x03,0xa8,0xaa,0x21,0xaa, -+0x43,0xaa,0x56,0xaa,0x81,0xa7,0x34,0xaa,0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0xa3, -+0x23,0xa4,0x21,0xa8,0x87,0xa6,0x32,0xa4,0x78,0x21,0x76,0xa5,0x23,0xa1,0x45,0x63, -+0x65,0x07,0x00,0x00,0x01,0x00,0x00,0xff,0xff,0x00,0x00,0x01,0x02,0x02,0x02,0x01, -+0x02,0x02,0x01,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02, -+0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -+0xfc,0x1d,0x00,0x00,0x00,0x00,0x00,0x20,0xf0,0x0a,0x00,0x00,0x98,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+0x00,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x20,0x07,0x00,0x00,0xdc,0x5f,0xca,0xca, -+0xef,0x03,0x00,0x00,0xb8,0x42,0xa8,0x00,0x04,0x00,0x01,0x02,0x27,0x69,0x28,0xed -+}; -+ -+#define FW_INFO_SIZE (0x18) -+#define FW_REAL_SIZE (sizeof(fwbin)) -+#define FW_BIN_SIZE (7*1024+512) //7.5K byte -+ -+ -+#endif -+ ++/* ++ * drivers/input/touchscreen/hyn_cst2xx/CST21680SE_S126_D89.h ++ * ++ * hynitron TouchScreen driver. ++ * ++ * Copyright (c) 2015 hynitron ++ * ++ * This software is licensed under the terms of the GNU General Public ++ * License version 2, as published by the Free Software Foundation, and ++ * may be copied, distributed, and modified under those terms. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * VERSION DATE AUTHOR ++ * 1.0 2015-10-12 Tim ++ * ++ * note: only support mulititouch ++ */ ++#ifndef __CST2xxSE_FW_H__ ++#define __CST2xxSE_FW_H__ ++ ++static unsigned char fwbin[] = { ++0x6c,0x03,0x00,0x20,0x49,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3d,0x03,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0xdd,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x1b,0x01,0x00,0x00, ++0x2f,0x01,0x00,0x00,0x00,0xf0,0x02,0xf8,0x00,0xf0,0x32,0xf8,0x0c,0xa0,0x30,0xc8, ++0x08,0x38,0x24,0x18,0x2d,0x18,0xa2,0x46,0x67,0x1e,0xab,0x46,0x54,0x46,0x5d,0x46, ++0xac,0x42,0x01,0xd1,0x00,0xf0,0x24,0xf8,0x7e,0x46,0x0f,0x3e,0x0f,0xcc,0xb6,0x46, ++0x01,0x26,0x33,0x42,0x00,0xd0,0xfb,0x1a,0xa2,0x46,0xab,0x46,0x33,0x43,0x18,0x47, ++0xa0,0x11,0x00,0x00,0xb0,0x11,0x00,0x00,0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26, ++0x10,0x3a,0x01,0xd3,0x78,0xc1,0xfb,0xd8,0x52,0x07,0x00,0xd3,0x30,0xc1,0x00,0xd5, ++0x0b,0x60,0x70,0x47,0x1f,0xb5,0xc0,0x46,0xc0,0x46,0x1f,0xbd,0x10,0xb5,0x10,0xbd, ++0x00,0xf0,0xdb,0xfe,0x11,0x46,0xff,0xf7,0xf5,0xff,0x00,0xf0,0x08,0xf9,0x00,0xf0, ++0xf3,0xfe,0xff,0xf7,0xf3,0xff,0x00,0xf0,0xf9,0xfe,0x00,0x00,0xfe,0xe7,0x1d,0x49, ++0x48,0x88,0x48,0x80,0x1c,0x48,0x02,0x7c,0xff,0x2a,0x02,0xd2,0x02,0x7c,0x52,0x1c, ++0x02,0x74,0x00,0x7c,0x18,0x28,0x01,0xd2,0x00,0x20,0x88,0x80,0x70,0x47,0x17,0x49, ++0x8a,0x79,0x15,0x48,0x20,0x30,0x80,0x6b,0x43,0x7a,0x9a,0x43,0x8a,0x71,0x40,0x7a, ++0x48,0x72,0x11,0x49,0x01,0x20,0x08,0x74,0x70,0x47,0x10,0xb5,0x0f,0x48,0x80,0x30, ++0x81,0x88,0x80,0x22,0x11,0x43,0x81,0x80,0x0d,0xf0,0xfa,0xfe,0x10,0xbd,0x10,0xb5, ++0x09,0x48,0x20,0x30,0x01,0x78,0x49,0x06,0x08,0xd5,0x02,0x78,0x80,0x21,0x0a,0x43, ++0x02,0x70,0x07,0x4a,0x50,0x88,0x88,0x43,0x50,0x80,0x10,0xbd,0x00,0xf0,0x9a,0xfb, ++0x10,0xbd,0x00,0x00,0x00,0x02,0x00,0x40,0x90,0x0a,0x00,0x20,0x00,0x10,0x00,0x40, ++0x00,0x20,0x00,0x40,0x10,0xb5,0x65,0x48,0x65,0x4c,0x80,0x6b,0x01,0x46,0x80,0x30, ++0x03,0x7f,0x08,0x46,0x60,0x30,0x42,0x79,0x00,0x2b,0x06,0xd0,0x1b,0x02,0x13,0x43, ++0x63,0x81,0xff,0x22,0x23,0x32,0x62,0x80,0x03,0xe0,0x62,0x81,0xff,0x22,0x03,0x32, ++0x62,0x80,0xa0,0x31,0x89,0x8a,0xe1,0x80,0x81,0x79,0x02,0x79,0x09,0x02,0x11,0x43, ++0x21,0x81,0x01,0x7a,0xc0,0x79,0x09,0x02,0x01,0x43,0x55,0x48,0x20,0x38,0xc1,0x81, ++0x10,0xbd,0x10,0xb5,0x51,0x48,0x53,0x49,0x81,0x63,0x01,0x46,0x52,0x4a,0x40,0x39, ++0xca,0x61,0x52,0x4a,0x0a,0x62,0x52,0x4a,0x4a,0x62,0x52,0x4a,0x8a,0x62,0x52,0x4a, ++0xca,0x62,0x52,0x49,0xc1,0x63,0x52,0x49,0x41,0x60,0x52,0x49,0x81,0x60,0x52,0x49, ++0xc1,0x60,0x52,0x49,0x01,0x61,0x52,0x49,0x41,0x61,0x45,0x49,0xf0,0x20,0x60,0x39, ++0x88,0x75,0x4a,0x48,0xa8,0x21,0x40,0x30,0x01,0x73,0x00,0x21,0xc1,0x72,0xef,0x21, ++0x81,0x72,0x03,0x21,0x41,0x72,0x0d,0xf0,0xef,0xfe,0x0d,0xf0,0xe9,0xfe,0x3c,0x20, ++0x0d,0xf0,0xe2,0xfe,0x0d,0xf0,0xdc,0xfe,0x0d,0xf0,0xd6,0xfe,0x00,0xf0,0x8c,0xf9, ++0x0d,0xf0,0xce,0xfe,0x00,0xf0,0xf3,0xf9,0x10,0xbd,0x70,0xb5,0x33,0x4c,0x20,0x78, ++0x01,0x25,0x28,0x43,0x20,0x70,0x3f,0x4e,0x4d,0xe0,0x0d,0xf0,0xbd,0xfe,0x30,0x7a, ++0x00,0x28,0x03,0xd0,0x2d,0x49,0x18,0x20,0x20,0x39,0x08,0x74,0x0d,0xf0,0xb0,0xfe, ++0x20,0x78,0xc0,0x07,0x01,0xd0,0x55,0x20,0x70,0x70,0x0d,0xf0,0xa5,0xfe,0xa0,0x6b, ++0x20,0x30,0x40,0x78,0x00,0x28,0x01,0xd0,0x0d,0xf0,0x9a,0xfe,0xa0,0x6b,0x21,0x21, ++0x09,0x5c,0x09,0x09,0x06,0xd0,0x21,0x49,0x60,0x30,0xa0,0x39,0x89,0x7b,0xc0,0x7a, ++0x81,0x42,0x24,0xd1,0x0d,0xf0,0x88,0xfe,0x0d,0xf0,0x82,0xfe,0x0d,0xf0,0x7c,0xfe, ++0xa0,0x78,0x00,0x28,0x02,0xd0,0xa0,0x78,0x02,0x28,0x09,0xd1,0x18,0x4a,0x80,0x3a, ++0x11,0x78,0xa0,0x6b,0x20,0x30,0x83,0x79,0x28,0x46,0x98,0x40,0x81,0x43,0x11,0x70, ++0x0d,0xf0,0x66,0xfe,0x0d,0xf0,0x5c,0xfe,0x0d,0xf0,0x56,0xfe,0x1e,0x48,0x0d,0xf0, ++0x4f,0xfe,0x0d,0xf0,0x49,0xfe,0x0d,0xf0,0x43,0xfe,0x00,0xf0,0x61,0xf9,0x00,0xf0, ++0x85,0xf8,0x00,0xf0,0x57,0xf8,0xa0,0x78,0x06,0x28,0xae,0xd1,0x70,0xbd,0x10,0xb5, ++0xff,0xf7,0x67,0xff,0x05,0x4c,0xa0,0x78,0x00,0x28,0x04,0xd0,0x06,0x28,0xfa,0xd1, ++0x0d,0xf0,0x1a,0xfe,0xf7,0xe7,0xff,0xf7,0x98,0xff,0xf4,0xe7,0xb0,0x0a,0x00,0x20, ++0x80,0x10,0x00,0x40,0xe4,0x0e,0x00,0x00,0x16,0x11,0x00,0x00,0x28,0x11,0x00,0x00, ++0x04,0x12,0x00,0x00,0xe4,0x10,0x00,0x00,0x04,0x11,0x00,0x00,0x00,0x00,0x00,0x20, ++0x71,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0xd1,0x06,0x00,0x00,0x71,0x09,0x00,0x00, ++0x65,0x01,0x00,0x00,0x54,0x00,0x00,0x20,0xaf,0x04,0x00,0x00,0x0b,0x49,0x0a,0x48, ++0xc8,0x60,0xbf,0xf3,0x40,0x8f,0xfe,0xe7,0x10,0xb5,0xff,0xf7,0xc8,0xff,0x10,0xbd, ++0x0f,0xb5,0x00,0x90,0x01,0x91,0x01,0x98,0x02,0x90,0x00,0x98,0x03,0x90,0x68,0x46, ++0x0f,0xc8,0x04,0xb0,0x00,0xbd,0x00,0x00,0x04,0x00,0xfa,0x05,0x00,0xed,0x00,0xe0, ++0x10,0xb5,0x00,0xf0,0xdf,0xfc,0x10,0xbd,0x10,0xb5,0x00,0xf0,0xdb,0xfc,0x08,0x46, ++0x10,0xbd,0x00,0x00,0x30,0xb5,0xf8,0x48,0x00,0xe0,0x30,0xbf,0x01,0x7c,0x00,0x29, ++0xfb,0xd0,0xf5,0x48,0x20,0x30,0x01,0x78,0x09,0x07,0x15,0xd5,0xf3,0x4c,0x01,0x23, ++0x23,0x76,0x9a,0x07,0x11,0x68,0x08,0x25,0x29,0x43,0x11,0x60,0x01,0x78,0xef,0x22, ++0x11,0x40,0x01,0x70,0x00,0xe0,0x30,0xbf,0x01,0x78,0xc9,0x06,0xfb,0xd5,0x00,0x21, ++0x21,0x76,0x01,0x78,0x19,0x43,0x01,0x70,0xe9,0x48,0x41,0x68,0x49,0x1c,0x41,0x60, ++0x00,0x7a,0x00,0x28,0x01,0xd0,0x30,0xbf,0xfd,0xe7,0x30,0xbd,0xf8,0xb5,0xe2,0x4c, ++0x20,0x34,0xa0,0x78,0x00,0x28,0x03,0xd0,0x0d,0xf0,0xa6,0xfd,0x00,0x28,0x3b,0xd1, ++0xdd,0x49,0xde,0x4d,0x80,0x39,0xc8,0x7c,0x20,0x3d,0x01,0x26,0xdd,0x4a,0x00,0x28, ++0x0a,0xd1,0xa7,0x6b,0x08,0x46,0x40,0x30,0x20,0x37,0x83,0x7d,0x3f,0x7a,0xbb,0x42, ++0x07,0xd3,0x00,0x7c,0x00,0x06,0x04,0xd5,0xd3,0x48,0x20,0x38,0x40,0x78,0x00,0x28, ++0x23,0xd0,0xd3,0x4b,0x58,0x78,0x55,0x28,0x05,0xd0,0x18,0x78,0x55,0x28,0x1b,0xd1, ++0x48,0x7b,0x06,0x28,0x18,0xd1,0x00,0x20,0x18,0x70,0x58,0x70,0x10,0x70,0xab,0x21, ++0x91,0x71,0x50,0x71,0x29,0x78,0xa0,0x6b,0x20,0x30,0x82,0x79,0x30,0x46,0x90,0x40, ++0x01,0x43,0x29,0x70,0x28,0x20,0x0d,0xf0,0x5e,0xf8,0x29,0x78,0xa0,0x6b,0x20,0x30, ++0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xc1,0x48,0x55,0x21,0x01,0x70, ++0x00,0x20,0xc1,0x49,0x13,0x78,0xab,0x2b,0x03,0xd0,0x40,0x1c,0x80,0xb2,0x88,0x42, ++0xf8,0xd3,0xe2,0x63,0x0d,0xf0,0x5c,0xfd,0x28,0x78,0xa1,0x6b,0x20,0x31,0x8a,0x79, ++0x31,0x46,0x91,0x40,0x08,0x43,0x28,0x70,0x28,0x20,0x0d,0xf0,0x3c,0xf8,0x29,0x78, ++0xa0,0x6b,0x20,0x30,0x80,0x79,0x86,0x40,0xb1,0x43,0x29,0x70,0xf8,0xbd,0xf8,0xb5, ++0xad,0x48,0x20,0x30,0x80,0x6b,0x05,0x79,0xc0,0x78,0x00,0x90,0x00,0x26,0x37,0xe0, ++0x00,0x20,0x00,0x21,0x32,0x46,0x6a,0x43,0x53,0x00,0xac,0x4a,0x9b,0x18,0x5f,0x22, ++0xd2,0x00,0x9a,0x18,0x14,0x46,0x00,0x23,0x07,0xe0,0x17,0x88,0x38,0x18,0x00,0xb2, ++0x49,0x1c,0x09,0xb2,0x92,0x1c,0x5b,0x1c,0xdb,0xb2,0xab,0x42,0xf5,0xd3,0x00,0xf0, ++0x21,0xfc,0x0a,0x30,0x00,0xb2,0x00,0x21,0x16,0xe0,0x00,0x28,0x0b,0xdd,0x00,0x22, ++0xa2,0x5e,0x82,0x42,0x02,0xdb,0x12,0x1a,0x22,0x80,0x0a,0xe0,0x00,0x2a,0x08,0xdd, ++0x01,0x22,0x22,0x80,0x05,0xe0,0x00,0x22,0xa2,0x5e,0x82,0x42,0x01,0xdc,0x12,0x1a, ++0x22,0x80,0xa4,0x1c,0x49,0x1c,0xc9,0xb2,0xa9,0x42,0xe6,0xd3,0x76,0x1c,0xf6,0xb2, ++0x00,0x98,0x86,0x42,0xc4,0xd3,0xf8,0xbd,0x30,0xb5,0x8c,0x48,0x20,0x38,0x84,0x78, ++0x89,0x49,0x01,0x22,0x20,0x31,0x89,0x6b,0x13,0x46,0x20,0x31,0x8d,0x79,0xab,0x40, ++0x9c,0x43,0x84,0x70,0x43,0x78,0x8d,0x79,0x14,0x46,0xac,0x40,0xa3,0x43,0x43,0x70, ++0x04,0x78,0x8d,0x79,0x13,0x46,0xab,0x40,0x9c,0x43,0x04,0x70,0xc3,0x78,0x8d,0x79, ++0x14,0x46,0xac,0x40,0x23,0x43,0xc3,0x70,0x43,0x79,0x8d,0x79,0x14,0x46,0xac,0x40, ++0xa3,0x43,0x43,0x71,0x03,0x79,0x89,0x79,0x8a,0x40,0x13,0x43,0x03,0x71,0x30,0xbd, ++0x70,0xb5,0x75,0x4d,0x20,0x3d,0x68,0x78,0x00,0x28,0x28,0xd0,0x2c,0x46,0x40,0x34, ++0xa0,0x6b,0xff,0x30,0xc1,0x30,0x80,0x6b,0x00,0x28,0x20,0xd0,0x0d,0xf0,0xcc,0xfc, ++0x00,0x21,0xff,0x28,0x1c,0xd1,0xa0,0x6b,0x60,0x30,0x82,0x7a,0x20,0x46,0xa0,0x38, ++0x82,0x73,0x02,0x22,0x03,0x46,0x20,0x33,0x5a,0x70,0x41,0x73,0x00,0x20,0x0f,0x22, ++0x17,0x25,0x6a,0x4b,0xad,0x01,0x06,0xe0,0x24,0x21,0x41,0x43,0xc9,0x18,0x49,0x19, ++0x8a,0x73,0x40,0x1c,0xc0,0xb2,0xa1,0x6b,0xc9,0x7a,0x81,0x42,0xf4,0xd8,0x70,0xbd, ++0xfe,0x28,0xfc,0xd0,0x00,0x28,0xfa,0xd0,0xa2,0x6b,0xff,0x32,0xc1,0x32,0x93,0x6b, ++0x40,0x1e,0x01,0x22,0x82,0x40,0x13,0x42,0xf1,0xd0,0x69,0x70,0x70,0xbd,0x58,0x49, ++0x00,0x20,0x08,0x70,0x48,0x70,0x48,0x60,0x88,0x70,0x08,0x72,0x70,0x47,0xf8,0xb5, ++0x57,0x4a,0x54,0x4b,0x40,0x33,0xd8,0x7a,0x00,0x28,0x50,0xd0,0x00,0x21,0x00,0x25, ++0x32,0x24,0x4d,0x48,0x20,0x30,0x00,0x90,0x86,0x6b,0xf0,0x79,0x00,0x28,0x00,0xd0, ++0x28,0x24,0x00,0x20,0x08,0xe0,0x00,0x27,0xd7,0x5f,0x0a,0x2f,0x01,0xdb,0x49,0x1c, ++0x89,0xb2,0x92,0x1c,0x40,0x1c,0x80,0xb2,0xa0,0x42,0xf4,0xd3,0x44,0x4a,0x0a,0x29, ++0x09,0xd2,0x06,0x29,0x02,0xd3,0xd8,0x7a,0x40,0x06,0x04,0xd1,0x3e,0x48,0x80,0x38, ++0xc0,0x7b,0x02,0x28,0x08,0xd9,0xd8,0x7a,0x80,0x28,0x00,0xd1,0x01,0x25,0x81,0x20, ++0xd8,0x72,0x14,0x20,0x90,0x70,0x0b,0xe0,0x90,0x78,0x00,0x28,0x02,0xd0,0x40,0x1e, ++0x90,0x70,0x05,0xe0,0xd8,0x7a,0x81,0x28,0x00,0xd1,0x01,0x25,0x80,0x20,0xd8,0x72, ++0x00,0x2d,0x14,0xd0,0x31,0x4c,0x20,0x3c,0x20,0x78,0x20,0x36,0xb2,0x79,0x01,0x25, ++0x29,0x46,0x91,0x40,0x88,0x43,0x20,0x70,0x28,0x20,0x0c,0xf0,0x2c,0xff,0x20,0x78, ++0x00,0x99,0x89,0x6b,0x20,0x31,0x89,0x79,0x8d,0x40,0x28,0x43,0x20,0x70,0xf8,0xbd, ++0xf8,0xb5,0x0d,0x46,0x07,0x9f,0x06,0x9e,0x11,0x46,0x23,0x4a,0x20,0x32,0x90,0x6b, ++0x40,0x30,0x00,0x2d,0x07,0xd0,0x00,0x2e,0x02,0xd0,0x1e,0x24,0x04,0x57,0x09,0xe0, ++0x1d,0x24,0x04,0x57,0x06,0xe0,0x00,0x2f,0x02,0xd0,0x1c,0x24,0x04,0x57,0x01,0xe0, ++0x1b,0x24,0x04,0x57,0x00,0x20,0x18,0x5e,0x00,0x28,0x00,0xda,0x40,0x42,0xc0,0x01, ++0x0b,0x46,0x00,0x21,0x52,0x68,0x59,0x5e,0x90,0x47,0x7f,0x28,0x00,0xdd,0x7f,0x20, ++0xff,0x21,0x01,0x31,0x00,0x2e,0x01,0xd0,0x00,0x2d,0x03,0xd1,0x00,0x2f,0x02,0xd0, ++0x00,0x2d,0x00,0xd1,0x08,0x1a,0x00,0x19,0x88,0x42,0x01,0xdd,0x08,0x46,0xf8,0xbd, ++0x00,0x28,0xfc,0xda,0x00,0x20,0xf8,0xbd,0xf0,0xb5,0x87,0xb0,0x0c,0x4e,0x06,0x48, ++0x20,0x30,0x80,0x6b,0x01,0x79,0x03,0x91,0xc0,0x78,0x02,0x90,0x00,0x25,0x02,0x48, ++0x80,0x38,0x06,0x90,0x48,0xe0,0x00,0x00,0x90,0x0a,0x00,0x20,0x20,0x10,0x00,0x40, ++0x54,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x7c,0x92,0x00,0x00,0x70,0x03,0x00,0x20, ++0x68,0x06,0x00,0x20,0x68,0x00,0x34,0x5e,0x80,0x19,0x14,0x27,0x05,0x90,0xc7,0x5f, ++0x06,0x98,0x80,0x7a,0xa0,0x42,0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11, ++0x10,0x21,0x09,0x1a,0x20,0x46,0x00,0xf0,0xc5,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42, ++0x01,0xdb,0x64,0x1e,0x20,0xb2,0x05,0x99,0x88,0x82,0x05,0x98,0xff,0x30,0x01,0x30, ++0x18,0x24,0x04,0x90,0x04,0x5f,0x04,0x27,0xc7,0x5f,0x06,0x98,0x80,0x7a,0xa0,0x42, ++0x10,0xda,0x78,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, ++0x00,0xf0,0xa8,0xfa,0xc0,0x19,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2, ++0x04,0x99,0x88,0x80,0x6d,0x1c,0xed,0xb2,0x03,0x98,0x85,0x42,0xc2,0xd3,0x00,0x27, ++0x3a,0xe0,0x38,0x46,0x14,0x21,0x48,0x43,0x34,0x5e,0x85,0x19,0x02,0x20,0x28,0x5e, ++0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda,0x01,0x98,0x40,0x00,0xa0,0x42, ++0x0d,0xda,0x21,0x11,0x10,0x20,0x41,0x1a,0x20,0x46,0x00,0xf0,0x83,0xfa,0x01,0x99, ++0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e,0x20,0xb2,0x68,0x80,0x12,0x24, ++0x2c,0x5f,0x10,0x20,0x28,0x5e,0x01,0x90,0x06,0x98,0x80,0x7a,0xa0,0x42,0x11,0xda, ++0x01,0x98,0x40,0x00,0xa0,0x42,0x0d,0xda,0x20,0x11,0x10,0x21,0x09,0x1a,0x20,0x46, ++0x00,0xf0,0x68,0xfa,0x01,0x99,0x40,0x18,0x00,0xb2,0xa0,0x42,0x01,0xdb,0x64,0x1e, ++0x20,0xb2,0x28,0x82,0x7f,0x1c,0xff,0xb2,0x02,0x98,0x87,0x42,0xc1,0xd3,0x07,0xb0, ++0xf0,0xbd,0x70,0x47,0xf8,0xb5,0xfd,0x4c,0xa3,0x88,0xcf,0x20,0x03,0x40,0x1d,0x21, ++0xfb,0x48,0x89,0x01,0x42,0x18,0x35,0x21,0x49,0x01,0x45,0x18,0x0d,0x21,0xc9,0x01, ++0x40,0x18,0xf8,0x4f,0xd6,0x6b,0x81,0x6b,0x01,0x2b,0x1a,0xd0,0x05,0x2b,0x09,0xd0, ++0x00,0x22,0x09,0x2b,0x5a,0xd1,0x6a,0x75,0xe2,0x88,0xd2,0x07,0x02,0xd1,0x10,0x20, ++0xa0,0x80,0xf8,0xbd,0xb9,0x42,0x02,0xd1,0xa5,0x20,0xe0,0x80,0x06,0xe0,0x72,0x5c, ++0xe2,0x80,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63,0x14,0x20,0xa0,0x80, ++0xf8,0xbd,0x6b,0x7d,0x02,0x2b,0x31,0xd2,0x00,0x2b,0x04,0xd1,0xe6,0x49,0xd1,0x63, ++0xe1,0x88,0x81,0x63,0x34,0xe0,0xe3,0x88,0x09,0x02,0xc9,0x18,0x8e,0xb2,0xd1,0x21, ++0x09,0x02,0x71,0x1a,0x20,0x29,0x0f,0xd8,0xf0,0xb2,0x08,0xf0,0x8d,0xf8,0xdf,0x48, ++0x86,0x42,0x25,0xd1,0x01,0x20,0x0d,0xf0,0x5f,0xfb,0xdd,0x49,0x18,0x20,0x08,0x74, ++0xdc,0x49,0x01,0x20,0x08,0x72,0x1b,0xe0,0xdb,0x49,0x71,0x18,0x23,0x29,0x04,0xd8, ++0x81,0x63,0xef,0x20,0x40,0x01,0xd0,0x63,0x12,0xe0,0x0d,0x21,0x09,0x03,0x71,0x1a, ++0x50,0x29,0x01,0xd8,0x81,0x63,0x0b,0xe0,0x87,0x63,0x09,0xe0,0xb9,0x42,0x07,0xd0, ++0xe2,0x88,0x72,0x54,0x81,0x6b,0x49,0x1c,0x81,0x63,0x51,0x29,0x00,0xd3,0x87,0x63, ++0x68,0x7d,0x40,0x1c,0x68,0x75,0x10,0x20,0xa0,0x80,0xf8,0xbd,0xa2,0x80,0xf8,0xbd, ++0xf7,0xb5,0xa0,0xb0,0x0d,0x46,0x00,0x20,0x0f,0x90,0x0e,0x90,0xc4,0x48,0x20,0x30, ++0x1f,0x90,0x80,0x6b,0x04,0x79,0x81,0x79,0x49,0x1e,0xc9,0xb2,0x0d,0x91,0x00,0x21, ++0x0c,0x91,0x0b,0x91,0x0a,0x91,0x41,0x78,0x49,0x00,0x18,0x91,0xb2,0x21,0x41,0x5e, ++0x17,0x91,0xbb,0x48,0x91,0x22,0x80,0x38,0xc1,0x7a,0xb5,0x48,0x92,0x00,0x82,0x18, ++0x1e,0x92,0x02,0x46,0x28,0x32,0xdc,0x30,0x1d,0x92,0x1c,0x90,0x01,0x29,0x18,0xd1, ++0x28,0x46,0x1c,0x99,0x60,0x43,0x46,0x18,0x1e,0x99,0x42,0x18,0x1d,0x99,0x47,0x18, ++0x20,0x98,0x00,0x21,0x0b,0xe0,0x03,0x88,0x33,0x70,0x03,0x88,0x13,0x70,0x03,0x88, ++0x3b,0x70,0x76,0x1c,0x80,0x1c,0x52,0x1c,0x7f,0x1c,0x49,0x1c,0x49,0xb2,0xa1,0x42, ++0xf1,0xdb,0x00,0x20,0x12,0x90,0x13,0x90,0x14,0x90,0x20,0x98,0x02,0x90,0x05,0xa8, ++0x84,0x46,0x28,0x46,0x60,0x43,0x1c,0x99,0x1b,0x90,0x47,0x18,0x1a,0x97,0x1f,0x98, ++0xc2,0x69,0x1f,0x98,0xc3,0x6a,0x00,0x21,0x23,0xe0,0x02,0x98,0x3e,0x78,0x00,0x88, ++0x80,0x1b,0x00,0xb2,0x66,0x46,0x30,0x80,0xd6,0x07,0x04,0xd0,0x14,0x9e,0x80,0x19, ++0x00,0xb2,0x14,0x90,0x0a,0xe0,0xde,0x07,0x04,0xd0,0x13,0x9e,0x80,0x19,0x00,0xb2, ++0x13,0x90,0x03,0xe0,0x12,0x9e,0x80,0x19,0x00,0xb2,0x12,0x90,0x60,0x46,0x80,0x1c, ++0x84,0x46,0x02,0x98,0x80,0x1c,0x02,0x90,0x7f,0x1c,0x52,0x08,0x5b,0x08,0x49,0x1c, ++0x49,0xb2,0xa1,0x42,0xd9,0xdb,0x8a,0x4e,0x40,0x36,0x31,0x7d,0x00,0x29,0x05,0xdd, ++0x1f,0x98,0x42,0x68,0x14,0x98,0x90,0x47,0x00,0xb2,0x14,0x90,0x71,0x7d,0x00,0x29, ++0x0b,0xdd,0x01,0x29,0x03,0xd1,0x13,0x98,0x40,0x10,0x13,0x90,0x05,0xe0,0x1f,0x98, ++0x42,0x68,0x13,0x98,0x90,0x47,0x00,0xb2,0x13,0x90,0xb1,0x7d,0x00,0x29,0x0b,0xdd, ++0x01,0x29,0x03,0xd1,0x12,0x98,0x40,0x10,0x12,0x90,0x05,0xe0,0x1f,0x98,0x42,0x68, ++0x12,0x98,0x90,0x47,0x00,0xb2,0x12,0x90,0x20,0x98,0x05,0xa9,0x8c,0x46,0x1a,0x99, ++0x04,0x91,0x1f,0x99,0xc9,0x69,0x11,0x91,0x1f,0x99,0xc9,0x6a,0x10,0x91,0x1f,0x99, ++0x8a,0x6b,0xd1,0x7c,0xc9,0x07,0x0e,0xd0,0x1f,0x99,0x09,0x6a,0x1f,0x9b,0x5b,0x6a, ++0x0f,0x93,0x1f,0x9b,0x9b,0x6a,0x0e,0x93,0x13,0x7d,0x0c,0x93,0x53,0x7d,0x0b,0x93, ++0x92,0x7d,0x0a,0x92,0x00,0xe0,0x00,0x21,0x1d,0x9b,0x1b,0x9a,0xd2,0x18,0x03,0x92, ++0x00,0x22,0x19,0x92,0x9a,0xe0,0x11,0x9a,0xd2,0x07,0x01,0xd0,0x14,0x9a,0x05,0xe0, ++0x10,0x9a,0xd2,0x07,0x01,0xd0,0x13,0x9a,0x00,0xe0,0x12,0x9a,0x00,0x2a,0x0c,0xdd, ++0x66,0x46,0x00,0x23,0xf3,0x5e,0x00,0x2b,0x07,0xdd,0x93,0x42,0x00,0xda,0x1a,0x46, ++0x03,0x88,0x9a,0x1a,0x13,0xb2,0x03,0x80,0x32,0xe0,0x66,0x46,0x00,0x23,0xf3,0x5e, ++0x00,0x2b,0x2b,0xda,0x00,0x2a,0x05,0xda,0x93,0x42,0x00,0xdd,0x1a,0x46,0x03,0x88, ++0x9a,0x1a,0x02,0x80,0x00,0x23,0xc3,0x5e,0xca,0x07,0x21,0xd0,0x04,0x9a,0x12,0x78, ++0x17,0x46,0xd2,0x1a,0x12,0xb2,0x0e,0x9e,0xf6,0x07,0x06,0xd0,0x0a,0x9e,0xb2,0x42, ++0x16,0xdd,0x0a,0x9e,0xba,0x1b,0x02,0x80,0x12,0xe0,0x0f,0x9e,0xf6,0x07,0x06,0xd0, ++0x0b,0x9e,0xb2,0x42,0x0c,0xdd,0x0b,0x9e,0xba,0x1b,0x02,0x80,0x08,0xe0,0x0c,0x9e, ++0xb2,0x42,0x05,0xdd,0x0c,0x9e,0xba,0x1b,0x02,0x80,0x01,0xe0,0x00,0x23,0xc3,0x5e, ++0x03,0x9a,0x12,0x78,0xd2,0x1a,0x12,0xb2,0x18,0x9b,0x9a,0x42,0x02,0xda,0x17,0x9b, ++0x9a,0x42,0x26,0xdc,0x01,0x22,0xaa,0x40,0xd3,0x17,0x22,0x9e,0x01,0x93,0x00,0x92, ++0x37,0x68,0x76,0x68,0x3a,0x43,0x33,0x43,0x22,0x9e,0x0c,0xc6,0x00,0x2d,0x09,0xd0, ++0x6f,0x1e,0x01,0x26,0xbe,0x40,0xf7,0x17,0x00,0x96,0x16,0x43,0x01,0x97,0x22,0x9a, ++0x1f,0x43,0xc0,0xc2,0x0d,0x9a,0x95,0x42,0x0b,0xd2,0x6b,0x1c,0x01,0x22,0x9a,0x40, ++0xd3,0x17,0x22,0x9f,0x01,0x93,0x00,0x92,0xc0,0xcf,0x32,0x43,0x22,0x9e,0x3b,0x43, ++0x0c,0xc6,0x03,0x9a,0x52,0x1c,0x03,0x92,0x80,0x1c,0x04,0x9a,0x52,0x1c,0x04,0x92, ++0x62,0x46,0x92,0x1c,0x94,0x46,0x11,0x9a,0x52,0x08,0x11,0x92,0x10,0x9a,0x52,0x08, ++0x10,0x92,0x00,0x29,0x06,0xd0,0x49,0x08,0x0f,0x9a,0x52,0x08,0x0f,0x92,0x0e,0x9a, ++0x52,0x08,0x0e,0x92,0x19,0x9a,0x52,0x1c,0x52,0xb2,0x19,0x92,0x19,0x9a,0xa2,0x42, ++0x00,0xda,0x60,0xe7,0x1a,0x9d,0x1e,0x99,0x1b,0x98,0x47,0x18,0x20,0x9e,0x1f,0x98, ++0x80,0x6b,0x80,0x30,0x00,0x7e,0x01,0x28,0x2c,0xd1,0x00,0x23,0x26,0xe0,0x00,0x22, ++0xb2,0x5e,0x28,0x78,0x39,0x78,0x38,0x70,0x2a,0x70,0x88,0x42,0x02,0xdd,0x84,0x46, ++0x08,0x46,0x61,0x46,0x82,0x42,0x11,0xdc,0x30,0x80,0x12,0xe0,0x00,0x20,0x00,0x40, ++0x70,0x03,0x00,0x20,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x20,0x0e,0xd1,0x00,0x00, ++0x90,0x0a,0x00,0x20,0x54,0x00,0x00,0x20,0x10,0x2e,0xff,0xff,0x8a,0x42,0x00,0xdb, ++0x31,0x80,0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x5b,0x1c,0x5b,0xb2,0xa3,0x42,0xd6,0xdb, ++0x23,0xb0,0xf0,0xbd,0x02,0x28,0x25,0xd1,0x00,0x20,0x19,0x90,0x1e,0xe0,0x00,0x21, ++0x71,0x5e,0x16,0x91,0x28,0x78,0x39,0x78,0x15,0x91,0x16,0x99,0x08,0x18,0x15,0x99, ++0x40,0x18,0x1f,0x99,0x4a,0x68,0x03,0x21,0x90,0x47,0x00,0xb2,0x38,0x70,0x16,0x99, ++0x29,0x70,0x15,0x99,0x4a,0x00,0x89,0x18,0x08,0x18,0x80,0x10,0x30,0x80,0x6d,0x1c, ++0x7f,0x1c,0xb6,0x1c,0x19,0x98,0x40,0x1c,0x40,0xb2,0x19,0x90,0x19,0x98,0xa0,0x42, ++0xdd,0xdb,0xd5,0xe7,0x00,0x20,0x08,0xe0,0x29,0x78,0x39,0x70,0x31,0x88,0x29,0x70, ++0x6d,0x1c,0x7f,0x1c,0xb6,0x1c,0x40,0x1c,0x40,0xb2,0xa0,0x42,0xf4,0xdb,0xc7,0xe7, ++0x00,0x22,0x03,0x09,0x8b,0x42,0x2c,0xd3,0x03,0x0a,0x8b,0x42,0x11,0xd3,0x00,0x23, ++0x9c,0x46,0x4e,0xe0,0x03,0x46,0x0b,0x43,0x3c,0xd4,0x00,0x22,0x43,0x08,0x8b,0x42, ++0x31,0xd3,0x03,0x09,0x8b,0x42,0x1c,0xd3,0x03,0x0a,0x8b,0x42,0x01,0xd3,0x94,0x46, ++0x3f,0xe0,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01,0xc0,0x1a,0x52,0x41,0x83,0x09, ++0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41,0x43,0x09,0x8b,0x42,0x01,0xd3, ++0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42,0x01,0xd3,0x0b,0x01,0xc0,0x1a, ++0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00,0xc0,0x1a,0x52,0x41,0x83,0x08, ++0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41,0x43,0x08,0x8b,0x42,0x01,0xd3, ++0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a,0x00,0xd2,0x01,0x46,0x52,0x41,0x10,0x46, ++0x70,0x47,0x5d,0xe0,0xca,0x0f,0x00,0xd0,0x49,0x42,0x03,0x10,0x00,0xd3,0x40,0x42, ++0x53,0x40,0x00,0x22,0x9c,0x46,0x03,0x09,0x8b,0x42,0x2d,0xd3,0x03,0x0a,0x8b,0x42, ++0x12,0xd3,0xfc,0x22,0x89,0x01,0x12,0xba,0x03,0x0a,0x8b,0x42,0x0c,0xd3,0x89,0x01, ++0x92,0x11,0x8b,0x42,0x08,0xd3,0x89,0x01,0x92,0x11,0x8b,0x42,0x04,0xd3,0x89,0x01, ++0x3a,0xd0,0x92,0x11,0x00,0xe0,0x89,0x09,0xc3,0x09,0x8b,0x42,0x01,0xd3,0xcb,0x01, ++0xc0,0x1a,0x52,0x41,0x83,0x09,0x8b,0x42,0x01,0xd3,0x8b,0x01,0xc0,0x1a,0x52,0x41, ++0x43,0x09,0x8b,0x42,0x01,0xd3,0x4b,0x01,0xc0,0x1a,0x52,0x41,0x03,0x09,0x8b,0x42, ++0x01,0xd3,0x0b,0x01,0xc0,0x1a,0x52,0x41,0xc3,0x08,0x8b,0x42,0x01,0xd3,0xcb,0x00, ++0xc0,0x1a,0x52,0x41,0x83,0x08,0x8b,0x42,0x01,0xd3,0x8b,0x00,0xc0,0x1a,0x52,0x41, ++0xd9,0xd2,0x43,0x08,0x8b,0x42,0x01,0xd3,0x4b,0x00,0xc0,0x1a,0x52,0x41,0x41,0x1a, ++0x00,0xd2,0x01,0x46,0x63,0x46,0x52,0x41,0x5b,0x10,0x10,0x46,0x01,0xd3,0x40,0x42, ++0x00,0x2b,0x00,0xd5,0x49,0x42,0x70,0x47,0x63,0x46,0x5b,0x10,0x00,0xd3,0x40,0x42, ++0x01,0xb5,0x00,0x20,0xc0,0x46,0xc0,0x46,0x02,0xbd,0x75,0x46,0x00,0xf0,0x22,0xf8, ++0xae,0x46,0x05,0x00,0x69,0x46,0x53,0x46,0xc0,0x08,0xc0,0x00,0x85,0x46,0x18,0xb0, ++0x20,0xb5,0xff,0xf7,0x5d,0xfa,0x60,0xbc,0x00,0x27,0x49,0x08,0xb6,0x46,0x00,0x26, ++0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5,0xc0,0xc5, ++0x40,0x3d,0x49,0x00,0x8d,0x46,0x70,0x47,0x04,0x46,0xc0,0x46,0xc0,0x46,0x20,0x46, ++0xff,0xf7,0x07,0xf9,0x00,0x48,0x70,0x47,0x60,0x00,0x00,0x20,0x02,0x48,0x03,0x49, ++0xab,0xbe,0x70,0x47,0x0d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x26,0x00,0x02,0x00, ++0x70,0x47,0x00,0x00,0x25,0x0c,0x28,0x0f,0x0a,0x0a,0x0f,0x00,0x02,0x02,0x70,0x06, ++0x00,0x00,0x01,0x01,0x08,0x08,0x10,0x85,0x1d,0x0e,0x07,0x03,0x0a,0x1e,0x64,0x50, ++0xa0,0x50,0x08,0x02,0x16,0x01,0x00,0x00,0x10,0x0a,0x02,0x00,0x06,0x04,0x14,0x14, ++0x0a,0x06,0x28,0x1e,0x3c,0x64,0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x01,0x08,0x04, ++0x02,0x01,0x08,0x04,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x04, ++0x08,0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x01,0x01,0x01,0x01,0xd8,0xe2,0xf6,0x0a, ++0xf6,0x14,0xec,0x00,0x01,0x00,0x01,0x01,0x02,0x04,0x06,0x0c,0x10,0x00,0x14,0x0a, ++0x01,0x02,0x02,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, ++0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x1e,0x1e,0x3c,0x00,0x14, ++0xc8,0x14,0x00,0x03,0x84,0x04,0x02,0x02,0x5a,0x00,0x5a,0x01,0x02,0x0a,0x00,0x01, ++0x00,0x00,0x00,0x00,0x20,0x03,0x00,0x05,0xb4,0x00,0x0b,0x00,0x90,0x01,0x02,0x01, ++0x68,0x01,0x20,0x00,0x00,0x00,0xf4,0xff,0x03,0x01,0x03,0x01,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x55,0x55,0x00,0x00,0x25,0x10,0x00,0x40, ++0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x25,0x10,0x00,0x40,0x29,0x10,0x00,0x40, ++0x29,0x10,0x00,0x40,0x29,0x10,0x00,0x40,0x19,0x10,0x00,0x40,0x15,0x10,0x00,0x40, ++0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x15,0x10,0x00,0x40,0x11,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x19,0x10,0x00,0x40, ++0x19,0x10,0x00,0x40,0x19,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40, ++0x1d,0x10,0x00,0x40,0x1d,0x10,0x00,0x40,0x21,0x10,0x00,0x40,0x21,0x10,0x00,0x40, ++0x21,0x10,0x00,0x40,0x64,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x44,0x10,0x00,0x40, ++0x48,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x50,0x10,0x00,0x40,0x54,0x10,0x00,0x40, ++0x58,0x10,0x00,0x40,0x5c,0x10,0x00,0x40,0x60,0x10,0x00,0x40,0x11,0x10,0x00,0x40, ++0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x11,0x10,0x00,0x40,0x40,0x10,0x00,0x40, ++0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, ++0x44,0x10,0x00,0x40,0x48,0x10,0x00,0x40,0x4c,0x10,0x00,0x40,0x50,0x10,0x00,0x40, ++0x54,0x10,0x00,0x40,0x58,0x10,0x00,0x40,0x60,0x10,0x00,0x40,0x5c,0x10,0x00,0x40, ++0x58,0x10,0x00,0x40,0x54,0x10,0x00,0x40,0x50,0x10,0x00,0x40,0x4c,0x10,0x00,0x40, ++0x48,0x10,0x00,0x40,0x44,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, ++0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40, ++0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0x40,0x10,0x00,0x40,0xff,0xff,0x00,0x80, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xff,0x00,0xff,0xff,0xff,0xff,0x00, ++0xff,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0x63,0x65,0x07,0x56,0xaa,0x78,0xa1,0x21,0x00, ++0x00,0x00,0x00,0x00,0x21,0xaa,0x43,0xaa,0x56,0xaa,0x81,0xa7,0x21,0x00,0x67,0xaa, ++0x23,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xaa,0x32,0xaa,0x87,0xa1, ++0x71,0x06,0x87,0xaa,0x23,0xaa,0x87,0xaa,0x32,0xaa,0x00,0x00,0x87,0xaa,0x23,0xaa, ++0x00,0x00,0x00,0x00,0x00,0x00,0x65,0xaa,0x87,0xaa,0x51,0xa6,0x47,0x06,0x45,0x00, ++0x28,0xa1,0x76,0xaa,0x12,0xa8,0x00,0x00,0x00,0x00,0x34,0xaa,0x56,0xaa,0x78,0xa1, ++0x21,0x00,0x00,0x00,0x67,0xaa,0x23,0xaa,0xa1,0xaa,0x87,0xaa,0x32,0xaa,0x67,0xaa, ++0x23,0xaa,0x87,0xaa,0x32,0xaa,0xa1,0xaa,0x21,0xaa,0x56,0xaa,0x81,0xa7,0x21,0xaa, ++0x00,0x00,0x34,0xaa,0x65,0xaa,0x87,0xaa,0x51,0x46,0x47,0x03,0xa8,0xaa,0x21,0xaa, ++0x43,0xaa,0x56,0xaa,0x81,0xa7,0x34,0xaa,0x76,0xa5,0x18,0xa7,0x23,0xa1,0x45,0xa3, ++0x23,0xa4,0x21,0xa8,0x87,0xa6,0x32,0xa4,0x78,0x21,0x76,0xa5,0x23,0xa1,0x45,0x63, ++0x65,0x07,0x00,0x00,0x01,0x00,0x00,0xff,0xff,0x00,0x00,0x01,0x02,0x02,0x02,0x01, ++0x02,0x02,0x01,0x01,0x01,0x02,0x01,0x02,0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02, ++0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, ++0xfc,0x1d,0x00,0x00,0x00,0x00,0x00,0x20,0xf0,0x0a,0x00,0x00,0x98,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x20,0x07,0x00,0x00,0xdc,0x5f,0xca,0xca, ++0xef,0x03,0x00,0x00,0xb8,0x42,0xa8,0x00,0x04,0x00,0x01,0x02,0x27,0x69,0x28,0xed ++}; ++ ++#define FW_INFO_SIZE (0x18) ++#define FW_REAL_SIZE (sizeof(fwbin)) ++#define FW_BIN_SIZE (7*1024+512) //7.5K byte ++ ++ ++#endif ++ diff --git a/drivers/input/touchscreen/hyn_cst2xx/Makefile b/drivers/input/touchscreen/hyn_cst2xx/Makefile new file mode 100755 -index 000000000000..247b6045dd13 +index 000000000..247b6045d --- /dev/null +++ b/drivers/input/touchscreen/hyn_cst2xx/Makefile @@ -0,0 +1,2 @@ @@ -814788,7 +814849,7 @@ index 000000000000..247b6045dd13 + diff --git a/drivers/input/touchscreen/hyn_cst2xx/hyn_cst2xx.c b/drivers/input/touchscreen/hyn_cst2xx/hyn_cst2xx.c new file mode 100755 -index 000000000000..689e0a8a7e26 +index 000000000..689e0a8a7 --- /dev/null +++ b/drivers/input/touchscreen/hyn_cst2xx/hyn_cst2xx.c @@ -0,0 +1,1970 @@ @@ -816764,7 +816825,7 @@ index 000000000000..689e0a8a7e26 + diff --git a/drivers/input/touchscreen/tp_gslx680_board.h b/drivers/input/touchscreen/tp_gslx680_board.h new file mode 100755 -index 000000000000..bc90005e215d +index 000000000..bc90005e2 --- /dev/null +++ b/drivers/input/touchscreen/tp_gslx680_board.h @@ -0,0 +1,4908 @@ @@ -821678,7 +821739,7 @@ index 000000000000..bc90005e215d +#endif diff --git a/drivers/input/touchscreen/tp_suspend.h b/drivers/input/touchscreen/tp_suspend.h new file mode 100755 -index 000000000000..e4248663febc +index 000000000..e4248663f --- /dev/null +++ b/drivers/input/touchscreen/tp_suspend.h @@ -0,0 +1,109 @@ @@ -821793,4110 +821854,4110 @@ index 000000000000..e4248663febc +#endif diff --git a/drivers/input/touchscreen/vtl_ts/LX20JS06_A1_CT363_V03_5198_121015.dat b/drivers/input/touchscreen/vtl_ts/LX20JS06_A1_CT363_V03_5198_121015.dat new file mode 100755 -index 000000000000..dd2c3d8b25b4 +index 000000000..a946eda1b --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/LX20JS06_A1_CT363_V03_5198_121015.dat @@ -0,0 +1,4096 @@ -+ 0x02, 0x65, 0x1E, 0x02, 0x00, 0x3F, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x02, 0x78, 0xC9, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x02, 0x27, 0xFF, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x02, 0x65, 0x17, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x02, 0x64, 0xE8, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x02, 0x78, 0xA0, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x02, 0x27, 0xFC, 0x75, 0x86, -+ 0x09, 0x75, 0x84, 0x9C, 0xD2, 0xA9, 0x22, 0x32, -+ 0x90, 0x3F, 0xF0, 0x74, 0x56, 0xF0, 0xA3, 0x74, -+ 0x54, 0xF0, 0xA3, 0x74, 0x4C, 0xF0, 0x22, 0x78, -+ 0xE4, 0x7C, 0x12, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, -+ 0x78, 0x79, 0x7D, 0x7E, 0x00, 0x7F, 0x05, 0x12, -+ 0x59, 0x49, 0x90, 0x12, 0xF2, 0x12, 0x5B, 0x94, -+ 0xFF, 0xFF, 0xFF, 0xFF, 0x90, 0x12, 0xF6, 0x12, -+ 0x5B, 0x94, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0A, -+ 0x7C, 0x13, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x78, -+ 0x79, 0x82, 0x7E, 0x00, 0x7F, 0x0A, 0x12, 0x59, -+ 0x49, 0x78, 0x14, 0x7C, 0x13, 0x7D, 0x01, 0x7B, -+ 0xFF, 0x7A, 0x78, 0x79, 0x8C, 0x7E, 0x00, 0x7F, -+ 0x14, 0x12, 0x59, 0x49, 0xC2, 0x1A, 0xE4, 0x90, -+ 0xED, 0x9F, 0x0F, 0x6F, 0xED, 0x6D, 0x0F, 0x6F, -+ 0xED, 0x6C, 0x0F, 0x6F, 0xEC, 0xF6, 0x8B, 0xFC, -+ 0xF0, 0x30, 0x15, 0x0A, 0x90, 0x88, 0xB0, 0xE0, -+ 0x90, 0x88, 0xC1, 0xF0, 0x80, 0x05, 0xE4, 0x90, -+ 0x88, 0xC1, 0xF0, 0xE4, 0x90, 0x12, 0xDF, 0xF0, -+ 0xC2, 0x0F, 0xC2, 0x11, 0x90, 0x13, 0x09, 0xE0, -+ 0xFF, 0x90, 0x88, 0xC1, 0xE0, 0xD3, 0x9F, 0x40, -+ 0x03, 0x02, 0x03, 0xB1, 0x90, 0x88, 0xC0, 0xE0, -+ 0x9F, 0x40, 0x03, 0x02, 0x03, 0xB1, 0xE4, 0xF0, -+ 0x75, 0x9E, 0x55, 0x90, 0x12, 0xDB, 0xF0, 0x90, -+ 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, -+ 0x03, 0x02, 0x03, 0x71, 0x75, 0x9E, 0x55, 0x74, -+ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0xE0, 0x64, 0x01, 0x60, 0x15, 0x90, 0x12, -+ 0xDB, 0xE0, 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, -+ 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x02, 0x60, 0x03, -+ 0x02, 0x03, 0x59, 0x90, 0x12, 0xDB, 0xE0, 0xFF, -+ 0x90, 0x88, 0xC0, 0xE0, 0x24, 0x04, 0xF5, 0x82, -+ 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xEF, 0xF0, 0x74, -+ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x12, 0xDC, -+ 0xF0, 0x90, 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDC, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, 0x02, -+ 0x03, 0x51, 0x75, 0x9E, 0x55, 0x90, 0x12, 0xDB, -+ 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xC3, 0x9D, -+ 0xEA, 0x9C, 0x40, 0x36, 0xEF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, -+ 0x12, 0xDC, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, 0xEC, -+ 0x9E, 0x90, 0x12, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x80, 0x37, 0x90, 0x12, 0xDC, 0xE0, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, -+ 0xEC, 0x9E, 0x90, 0x12, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0x90, 0x12, 0xDC, 0xE0, 0xFE, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xC3, 0x9D, -+ 0xEA, 0x9C, 0x40, 0x33, 0xEF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, -+ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, 0x9C, 0x90, 0x12, -+ 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x37, 0x90, -+ 0x12, 0xDC, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xDB, -+ 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, 0xEC, 0x9E, 0x90, -+ 0x12, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, -+ 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xFB, 0xAA, -+ 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xF0, 0xE0, -+ 0xA3, 0xE0, 0xE4, 0xFC, 0xFD, 0x12, 0x5A, 0x34, -+ 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, -+ 0x90, 0x12, 0xEE, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, -+ 0xEE, 0xE0, 0xA3, 0xE0, 0xE4, 0xFC, 0xFD, 0x12, -+ 0x5A, 0x34, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, -+ 0xD0, 0x00, 0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, -+ 0xED, 0x39, 0xFD, 0xEC, 0x38, 0xFC, 0x90, 0x88, -+ 0xC0, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, -+ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, -+ 0x83, 0xC0, 0x82, 0x90, 0x12, 0xDC, 0xE0, 0xD0, -+ 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, -+ 0xC5, 0x12, 0x5B, 0x88, 0x90, 0x88, 0xC0, 0xE0, -+ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, -+ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, -+ 0x82, 0x90, 0x12, 0xDC, 0xE0, 0xD0, 0x82, 0xD0, -+ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0xE4, 0x7B, 0x32, 0xFA, 0xF9, 0xF8, -+ 0xD3, 0x12, 0x5B, 0x51, 0x40, 0x02, 0xD2, 0x1A, -+ 0x90, 0x12, 0xDC, 0xE0, 0x04, 0xF0, 0x02, 0x01, -+ 0x49, 0x90, 0x88, 0xC0, 0xE0, 0x04, 0xF0, 0x80, -+ 0x0F, 0x90, 0x12, 0xDB, 0xE0, 0x24, 0xE5, 0xF5, -+ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x90, 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x02, 0x00, -+ 0xEF, 0xE4, 0x90, 0x12, 0xDC, 0xF0, 0x90, 0x13, -+ 0x09, 0xE0, 0xFF, 0x90, 0x12, 0xDC, 0xE0, 0xFE, -+ 0xC3, 0x9F, 0x50, 0x2D, 0x90, 0x88, 0xC1, 0xE0, -+ 0xFF, 0xEE, 0xC3, 0x9F, 0x50, 0x0F, 0x74, 0xA0, -+ 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, -+ 0x74, 0x01, 0xF0, 0x80, 0x0C, 0x74, 0xA0, 0x2E, -+ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xE4, -+ 0xF0, 0x90, 0x12, 0xDC, 0xE0, 0x04, 0xF0, 0x80, -+ 0xC5, 0x75, 0x9E, 0x55, 0x90, 0x13, 0x09, 0xE0, -+ 0xFF, 0x90, 0x88, 0xC1, 0xE0, 0xD3, 0x9F, 0x40, -+ 0x03, 0x02, 0x1B, 0x20, 0x90, 0x88, 0xC0, 0xE0, -+ 0x9F, 0x40, 0x03, 0x02, 0x1B, 0x20, 0x30, 0x1A, -+ 0x03, 0x02, 0x1B, 0x20, 0xE0, 0x94, 0x00, 0x50, -+ 0x03, 0x02, 0x18, 0x51, 0x90, 0x88, 0xC1, 0xE0, -+ 0xD3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x18, 0x51, -+ 0xE0, 0xFF, 0x90, 0x88, 0xC0, 0xE0, 0xD3, 0x9F, -+ 0x40, 0x03, 0x02, 0x0E, 0x23, 0x90, 0x88, 0xC0, -+ 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x88, 0xC1, 0xE0, -+ 0xFE, 0xEF, 0x6E, 0x70, 0x03, 0x02, 0x06, 0x01, -+ 0x75, 0x9E, 0x55, 0xE4, 0x90, 0x12, 0xDA, 0xF0, -+ 0x90, 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x14, 0x74, 0xE9, -+ 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE4, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, -+ 0x80, 0xDE, 0xC2, 0x19, 0xE4, 0x90, 0x12, 0xDA, -+ 0xF0, 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x4E, 0x74, -+ 0xE4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0xFF, 0x90, 0x88, 0xC1, 0xE0, 0xFE, -+ 0xEF, 0xB5, 0x06, 0x04, 0xD2, 0x19, 0x80, 0x35, -+ 0x74, 0xE9, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0xE0, 0x70, 0x1C, 0x90, 0x12, 0xDA, -+ 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0xE0, 0x24, 0xE9, 0xF5, 0x82, 0xE4, -+ 0x34, 0x12, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, -+ 0x04, 0xD2, 0x19, 0x80, 0x08, 0x90, 0x12, 0xDA, -+ 0xE0, 0x04, 0xF0, 0x80, 0xA4, 0x90, 0x12, 0xF6, -+ 0x12, 0x5B, 0x94, 0x00, 0x00, 0x00, 0x00, 0x30, -+ 0x19, 0x03, 0x02, 0x05, 0x9E, 0xE4, 0x90, 0x12, -+ 0xDA, 0xF0, 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, -+ 0x12, 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x77, -+ 0xE0, 0xFF, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xFA, 0x2F, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xED, -+ 0xF0, 0x90, 0x12, 0xF6, 0xE0, 0xF8, 0xA3, 0xE0, -+ 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xEE, -+ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, -+ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, -+ 0x82, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xE4, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xD0, -+ 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, -+ 0xC5, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xEB, 0x2F, 0xFF, 0xEA, -+ 0x3E, 0xFE, 0xE9, 0x3D, 0xFD, 0xE8, 0x3C, 0xFC, -+ 0x90, 0x12, 0xF6, 0x12, 0x5B, 0x88, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x04, 0xB2, 0x90, -+ 0x12, 0xF2, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0xF8, -+ 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, -+ 0xFB, 0xC3, 0x12, 0x5B, 0x51, 0x50, 0x47, 0x90, -+ 0x12, 0xF6, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xF2, -+ 0x12, 0x5B, 0x88, 0xE4, 0x90, 0x12, 0xDA, 0xF0, -+ 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x20, 0x74, 0xFA, -+ 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE0, 0xFF, 0x74, 0xFF, 0x2E, 0xF5, 0x82, 0xE4, -+ 0x34, 0x12, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xD2, 0xC2, 0x18, -+ 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x88, 0xC0, -+ 0xE0, 0x14, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, -+ 0xC3, 0x9F, 0x50, 0x3E, 0x74, 0xE4, 0x2E, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFF, -+ 0x90, 0x88, 0xC1, 0xE0, 0xFE, 0xEF, 0xB5, 0x06, -+ 0x21, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x24, 0xE4, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, -+ 0xF0, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0xD2, 0x18, -+ 0x80, 0x08, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, -+ 0x80, 0xB3, 0x30, 0x18, 0x03, 0x02, 0x03, 0xF5, -+ 0x90, 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x02, 0x03, -+ 0xF5, 0x90, 0x88, 0xC0, 0xE0, 0x90, 0x12, 0xE0, -+ 0xF0, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, -+ 0xE0, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, -+ 0xC3, 0x9F, 0x40, 0x03, 0x02, 0x18, 0x51, 0xE0, -+ 0xFF, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x13, -+ 0xF5, 0x83, 0xE0, 0x90, 0x12, 0xE2, 0xF0, 0x74, -+ 0xFF, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0x90, 0x12, 0xE1, 0xF0, 0xC2, 0x0F, -+ 0xC2, 0x11, 0xEE, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0xB4, 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, -+ 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x12, 0xE1, 0xE0, -+ 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, -+ 0x5B, 0xC5, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x74, 0xFF, 0xFB, -+ 0xFA, 0xF9, 0xF8, 0xD3, 0x12, 0x5B, 0x51, 0x50, -+ 0x03, 0x02, 0x0E, 0x1A, 0x90, 0x12, 0xDA, 0xE0, -+ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, -+ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, -+ 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, -+ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0xE4, 0x7B, 0xE0, 0x7A, 0x2E, 0xF9, -+ 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x50, 0x57, 0x90, -+ 0x12, 0xE1, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, -+ 0xA3, 0xED, 0xF0, 0x02, 0x09, 0xEC, 0x90, 0x12, -+ 0xDA, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, -+ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, -+ 0x83, 0xC0, 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, -+ 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, -+ 0xC5, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xE4, 0x7B, 0xB8, 0x7A, -+ 0x0B, 0xF9, 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x40, -+ 0x03, 0x02, 0x08, 0x35, 0x90, 0x12, 0xE1, 0xE0, -+ 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xA3, 0xE0, -+ 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, -+ 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0x90, -+ 0x12, 0xE2, 0xE0, 0xFC, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, -+ 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, -+ 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, -+ 0x13, 0xD8, 0xF9, 0xFF, 0xEC, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, -+ 0x12, 0xE1, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, -+ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, -+ 0x33, 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFC, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, -+ 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, -+ 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, -+ 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xEC, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0x02, 0x09, 0xEC, 0x90, 0x12, 0xDA, -+ 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, -+ 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, -+ 0xC0, 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, -+ 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0xE4, 0x7B, 0xDC, 0x7A, 0x05, -+ 0xF9, 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x40, 0x03, -+ 0x02, 0x09, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0xFD, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0x90, 0x12, 0xE1, 0xE0, 0xFC, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, -+ 0x2F, 0xFF, 0xEA, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, -+ 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xEC, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, -+ 0xEA, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x02, 0x09, 0xEC, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, -+ 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, -+ 0xFE, 0x90, 0x12, 0xE1, 0xE0, 0xFC, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, -+ 0xFF, 0xEA, 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, -+ 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, -+ 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, -+ 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, -+ 0x82, 0xE0, 0x33, 0xFE, 0xEC, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, -+ 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFD, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, -+ 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, -+ 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, -+ 0xFF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, -+ 0xEE, 0x9C, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, -+ 0x28, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, -+ 0x9D, 0xFF, 0xEE, 0x9C, 0xFE, 0x12, 0x78, 0xF1, -+ 0x90, 0x13, 0x2A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x90, 0x13, 0x2A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x90, 0x13, 0x29, 0xE0, 0x2F, 0xFF, 0x90, 0x13, -+ 0x28, 0xE0, 0x3E, 0xFE, 0x90, 0x13, 0x2C, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0xD3, 0x94, 0x0C, 0xEE, 0x94, -+ 0x00, 0x40, 0x4A, 0x90, 0x12, 0xE2, 0xE0, 0xFF, -+ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x0E, 0x74, -+ 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0x24, 0xFC, 0xF0, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFF, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x01, 0x50, -+ 0x0C, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0xF1, 0x0A, -+ 0x74, 0x01, 0xF0, 0x80, 0x66, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFF, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x74, 0x81, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE0, 0xD3, 0x94, 0x16, 0x40, 0x18, 0x90, 0x12, -+ 0xE2, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0x74, 0x16, 0xF0, 0x90, 0xF1, -+ 0x0A, 0x74, 0x02, 0xF0, 0x80, 0x29, 0x90, 0x12, -+ 0x92, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, -+ 0x12, 0x60, 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, -+ 0x04, 0x06, 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, -+ 0x90, 0x12, 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x40, -+ 0x06, 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0xC2, -+ 0x0F, 0xC2, 0x11, 0x90, 0x12, 0xE2, 0xE0, 0xFF, -+ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0xFD, 0x90, 0x13, 0x2C, 0xE0, 0xFA, -+ 0xA3, 0xE0, 0xFB, 0xD3, 0x9D, 0xEA, 0x94, 0x00, -+ 0x40, 0x13, 0xD2, 0x0F, 0xD2, 0x11, 0x74, 0x77, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0x74, 0x01, 0xF0, 0x80, 0x04, 0xC2, 0x0F, 0xC2, -+ 0x11, 0x90, 0x12, 0xE2, 0xE0, 0x24, 0x77, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xB4, -+ 0x01, 0x13, 0xD3, 0xEB, 0x94, 0x01, 0xEA, 0x94, -+ 0x00, 0x40, 0x06, 0xD2, 0x0F, 0xD2, 0x11, 0x80, -+ 0x04, 0xC2, 0x0F, 0xC2, 0x11, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFF, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, 0x03, -+ 0x02, 0x0C, 0x7F, 0x90, 0x12, 0xE1, 0xE0, 0xFE, -+ 0x24, 0x0A, 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, -+ 0x83, 0xE0, 0xFD, 0x74, 0xCA, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, -+ 0x50, 0x4D, 0xC2, 0x0D, 0x90, 0x12, 0xE2, 0xE0, -+ 0x24, 0x3C, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, -+ 0x83, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x24, 0x14, -+ 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, -+ 0xFA, 0xA3, 0xE0, 0xD3, 0x9D, 0x74, 0x80, 0xF8, -+ 0xEA, 0x64, 0x80, 0x98, 0x50, 0x10, 0x74, 0xCA, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE0, 0x04, 0xF0, 0x02, 0x0C, 0x81, 0x90, 0x12, -+ 0xE2, 0xE0, 0x24, 0xCA, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x72, 0x90, -+ 0x12, 0xE2, 0xE0, 0xFF, 0x24, 0xC0, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, -+ 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x94, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0xD2, 0x0D, 0x80, 0x02, 0xD2, -+ 0x0D, 0x30, 0x01, 0x57, 0x90, 0x12, 0xE1, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xE2, 0xE0, 0xFE, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, -+ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, -+ 0x02, 0x0D, 0x60, 0x20, 0x0F, 0x03, 0x02, 0x0D, -+ 0x60, 0x30, 0x11, 0x7C, 0x30, 0x0D, 0x79, 0x90, -+ 0x13, 0x2C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, -+ 0x94, 0x78, 0xEE, 0x94, 0x00, 0x40, 0x06, 0x90, -+ 0x12, 0x92, 0xE0, 0x04, 0xF0, 0xD3, 0xEF, 0x94, -+ 0x72, 0xEE, 0x94, 0x01, 0x40, 0x06, 0x90, 0x12, -+ 0x93, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, -+ 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, -+ 0x12, 0xE2, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, -+ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xE1, 0xE0, -+ 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, -+ 0xF5, 0x83, 0xE0, 0xFE, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFD, 0x24, 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x8A, -+ 0xF5, 0x83, 0xEE, 0xF0, 0x74, 0x28, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, -+ 0x74, 0x3C, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, -+ 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xE5, 0x2D, 0xF5, -+ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0x74, 0x02, -+ 0xF0, 0x90, 0x12, 0xE1, 0xE0, 0x24, 0xA0, 0xF5, -+ 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x90, 0x12, 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x88, -+ 0xC0, 0xE0, 0x14, 0xF0, 0x90, 0x88, 0xC1, 0xE0, -+ 0x14, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, -+ 0x02, 0x06, 0x0E, 0x90, 0x88, 0xC1, 0xE0, 0x24, -+ 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE0, 0xFF, 0x90, 0x88, 0xC0, 0xE0, 0xFE, 0xEF, -+ 0x6E, 0x70, 0x03, 0x02, 0x10, 0x2F, 0x75, 0x9E, -+ 0x55, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x88, -+ 0xC0, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, -+ 0xC3, 0x9F, 0x50, 0x14, 0x74, 0xE9, 0x2E, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xDE, -+ 0xC2, 0x19, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, -+ 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, -+ 0xFE, 0xC3, 0x9F, 0x50, 0x4E, 0x74, 0xE4, 0x2E, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0xFF, 0x90, 0x88, 0xC0, 0xE0, 0xFE, 0xEF, 0xB5, -+ 0x06, 0x04, 0xD2, 0x19, 0x80, 0x35, 0x74, 0xE9, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE0, 0x70, 0x1C, 0x90, 0x12, 0xDA, 0xE0, 0x24, -+ 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE0, 0x24, 0xE9, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, 0x04, 0xD2, -+ 0x19, 0x80, 0x08, 0x90, 0x12, 0xDA, 0xE0, 0x04, -+ 0xF0, 0x80, 0xA4, 0x90, 0x12, 0xF6, 0x12, 0x5B, -+ 0x94, 0x00, 0x00, 0x00, 0x00, 0x30, 0x19, 0x03, -+ 0x02, 0x0F, 0xCC, 0xE4, 0x90, 0x12, 0xDA, 0xF0, -+ 0x90, 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x77, 0xE0, 0xFF, -+ 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0xFD, 0x74, 0xFA, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xED, 0xF0, 0x90, -+ 0x12, 0xF6, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, -+ 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x74, 0xE4, 0x2E, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, -+ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, -+ 0x82, 0x90, 0x12, 0xDA, 0xE0, 0xD0, 0x82, 0xD0, -+ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0xEB, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, -+ 0xE9, 0x3D, 0xFD, 0xE8, 0x3C, 0xFC, 0x90, 0x12, -+ 0xF6, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDA, 0xE0, -+ 0x04, 0xF0, 0x02, 0x0E, 0xE0, 0x90, 0x12, 0xF2, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0xF8, 0xA3, 0xE0, -+ 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xC3, -+ 0x12, 0x5B, 0x51, 0x50, 0x47, 0x90, 0x12, 0xF6, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xF2, 0x12, 0x5B, -+ 0x88, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x88, -+ 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, -+ 0xC3, 0x9F, 0x50, 0x20, 0x74, 0xFA, 0x2E, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFF, -+ 0x74, 0xFF, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x12, 0xDA, 0xE0, -+ 0x04, 0xF0, 0x80, 0xD2, 0xC2, 0x18, 0xE4, 0x90, -+ 0x12, 0xDA, 0xF0, 0x90, 0x88, 0xC1, 0xE0, 0x14, -+ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, -+ 0x50, 0x3E, 0x74, 0xE4, 0x2E, 0xF5, 0x82, 0xE4, -+ 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x88, -+ 0xC0, 0xE0, 0xFE, 0xEF, 0xB5, 0x06, 0x21, 0x90, -+ 0x12, 0xDA, 0xE0, 0xFF, 0x24, 0xE4, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, -+ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0x04, 0xF0, 0xD2, 0x18, 0x80, 0x08, -+ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xB3, -+ 0x30, 0x18, 0x03, 0x02, 0x0E, 0x23, 0x90, 0x12, -+ 0xE4, 0xE0, 0x04, 0xF0, 0x02, 0x0E, 0x23, 0x90, -+ 0x88, 0xC1, 0xE0, 0x90, 0x12, 0xE0, 0xF0, 0xE4, -+ 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xE0, 0xE0, -+ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xC3, 0x9F, 0x40, -+ 0x03, 0x02, 0x18, 0x51, 0xE0, 0xFF, 0x24, 0xFF, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0xFE, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x13, -+ 0xF5, 0x83, 0xE0, 0x90, 0x12, 0xE2, 0xF0, 0x90, -+ 0x12, 0xE1, 0xEF, 0xF0, 0xC2, 0x0F, 0xC2, 0x11, -+ 0xEE, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, -+ 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, -+ 0xC0, 0x82, 0x90, 0x12, 0xDA, 0xE0, 0xD0, 0x82, -+ 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0x74, 0xFF, 0xFB, 0xFA, 0xF9, -+ 0xF8, 0xD3, 0x12, 0x5B, 0x51, 0x50, 0x03, 0x02, -+ 0x18, 0x48, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, -+ 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, 0xE4, 0x34, -+ 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, -+ 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, -+ 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, 0xFC, 0xA3, -+ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xE4, 0x7B, 0xE0, 0x7A, 0x2E, 0xF9, 0xF8, 0xC3, -+ 0x12, 0x5B, 0x51, 0x50, 0x57, 0x90, 0x12, 0xE1, -+ 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, -+ 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, -+ 0xF0, 0x02, 0x14, 0x1A, 0x90, 0x12, 0xDA, 0xE0, -+ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, -+ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, -+ 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, -+ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0xE4, 0x7B, 0xB8, 0x7A, 0x0B, 0xF9, -+ 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x40, 0x03, 0x02, -+ 0x12, 0x63, 0x90, 0x12, 0xE1, 0xE0, 0xFD, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xA3, 0xE0, 0x25, 0xE0, -+ 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, 0x83, -+ 0x15, 0x82, 0xE0, 0x33, 0xFE, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFC, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFA, -+ 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, -+ 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, -+ 0xF9, 0xFF, 0xEC, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE1, -+ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xA3, -+ 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, -+ 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, -+ 0x90, 0x12, 0xE2, 0xE0, 0xFC, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, -+ 0xEA, 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, -+ 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, -+ 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xEC, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x02, 0x14, 0x1A, 0x90, 0x12, 0xDA, 0xE0, 0x75, -+ 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, 0xE4, -+ 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, -+ 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, 0x83, -+ 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0xE4, 0x7B, 0xDC, 0x7A, 0x05, 0xF9, 0xF8, -+ 0xC3, 0x12, 0x5B, 0x51, 0x40, 0x03, 0x02, 0x13, -+ 0x34, 0x90, 0x12, 0xE2, 0xE0, 0xFD, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x90, 0x12, 0xE1, 0xE0, 0xFC, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, -+ 0xEA, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFD, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0xEC, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, -+ 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0x02, 0x14, 0x1A, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xA3, 0xE0, -+ 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, -+ 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0x90, -+ 0x12, 0xE1, 0xE0, 0xFC, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, -+ 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, -+ 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, -+ 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, -+ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, -+ 0x33, 0xFE, 0xEC, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, -+ 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFD, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, -+ 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, -+ 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xED, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, 0x9C, -+ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, 0x28, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, -+ 0xEE, 0x9C, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, -+ 0x2A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x13, -+ 0x2A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x13, -+ 0x29, 0xE0, 0x2F, 0xFF, 0x90, 0x13, 0x28, 0xE0, -+ 0x3E, 0xFE, 0x90, 0x13, 0x2C, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0xD3, 0x94, 0x0C, 0xEE, 0x94, 0x00, 0x40, -+ 0x4A, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x24, 0x81, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0xD3, 0x94, 0x04, 0x40, 0x0E, 0x74, 0x81, 0x2F, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0x24, 0xFC, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFF, -+ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0xC3, 0x94, 0x01, 0x50, 0x0C, 0x74, -+ 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x90, 0xF1, 0x0A, 0x74, 0x01, -+ 0xF0, 0x80, 0x66, 0x90, 0x12, 0xE2, 0xE0, 0xFF, -+ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0x04, 0xF0, 0x74, 0x81, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xD3, -+ 0x94, 0x16, 0x40, 0x18, 0x90, 0x12, 0xE2, 0xE0, -+ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0x74, 0x16, 0xF0, 0x90, 0xF1, 0x0A, 0x74, -+ 0x02, 0xF0, 0x80, 0x29, 0x90, 0x12, 0x92, 0xE0, -+ 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, -+ 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, -+ 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0x90, 0x12, -+ 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x06, 0x90, -+ 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0xC2, 0x0F, 0xC2, -+ 0x11, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x24, 0x81, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0xFD, 0x90, 0x13, 0x2C, 0xE0, 0xFA, 0xA3, 0xE0, -+ 0xFB, 0xD3, 0x9D, 0xEA, 0x94, 0x00, 0x40, 0x13, -+ 0xD2, 0x0F, 0xD2, 0x11, 0x74, 0x77, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0x74, 0x01, -+ 0xF0, 0x80, 0x04, 0xC2, 0x0F, 0xC2, 0x11, 0x90, -+ 0x12, 0xE2, 0xE0, 0x24, 0x77, 0xF5, 0x82, 0xE4, -+ 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xB4, 0x01, 0x13, -+ 0xD3, 0xEB, 0x94, 0x01, 0xEA, 0x94, 0x00, 0x40, -+ 0x06, 0xD2, 0x0F, 0xD2, 0x11, 0x80, 0x04, 0xC2, -+ 0x0F, 0xC2, 0x11, 0x90, 0x12, 0xE2, 0xE0, 0xFF, -+ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x16, -+ 0xAD, 0x90, 0x12, 0xE1, 0xE0, 0xFE, 0x24, 0x0A, -+ 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, -+ 0xFD, 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0x50, 0x4D, -+ 0xC2, 0x0D, 0x90, 0x12, 0xE2, 0xE0, 0x24, 0x3C, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, -+ 0xFD, 0xEE, 0x25, 0xE0, 0x24, 0x14, 0xF5, 0x82, -+ 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, -+ 0xE0, 0xD3, 0x9D, 0x74, 0x80, 0xF8, 0xEA, 0x64, -+ 0x80, 0x98, 0x50, 0x10, 0x74, 0xCA, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0x04, -+ 0xF0, 0x02, 0x16, 0xAF, 0x90, 0x12, 0xE2, 0xE0, -+ 0x24, 0xCA, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x80, 0x72, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFF, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xCA, 0x2F, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, -+ 0xF0, 0xD2, 0x0D, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x94, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x80, 0x02, 0xD2, 0x0D, 0x30, -+ 0x01, 0x57, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0x90, 0x12, 0xE2, 0xE0, 0xFE, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, -+ 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x02, 0x17, -+ 0x8E, 0x20, 0x0F, 0x03, 0x02, 0x17, 0x8E, 0x30, -+ 0x11, 0x7C, 0x30, 0x0D, 0x79, 0x90, 0x13, 0x2C, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x94, 0x78, -+ 0xEE, 0x94, 0x00, 0x40, 0x06, 0x90, 0x12, 0x92, -+ 0xE0, 0x04, 0xF0, 0xD3, 0xEF, 0x94, 0x72, 0xEE, -+ 0x94, 0x01, 0x40, 0x06, 0x90, 0x12, 0x93, 0xE0, -+ 0x04, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, -+ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xE2, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, -+ 0xE1, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, -+ 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, -+ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, -+ 0xED, 0xF0, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, -+ 0xE0, 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFD, 0x24, -+ 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, -+ 0xEE, 0xF0, 0x74, 0x28, 0x2F, 0xF5, 0x82, 0xE4, -+ 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x3C, -+ 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, -+ 0xEF, 0xF0, 0x74, 0xE5, 0x2D, 0xF5, 0x82, 0xE4, -+ 0x34, 0x88, 0xF5, 0x83, 0x74, 0x02, 0xF0, 0x90, -+ 0x12, 0xE1, 0xE0, 0x24, 0xA0, 0xF5, 0x82, 0xE4, -+ 0x34, 0x37, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, -+ 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x88, 0xC0, 0xE0, -+ 0x14, 0xF0, 0x90, 0x88, 0xC1, 0xE0, 0x14, 0xF0, -+ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x10, -+ 0x3C, 0x90, 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, -+ 0x40, 0x03, 0x02, 0x18, 0xE0, 0x90, 0x88, 0xC0, -+ 0xE0, 0x94, 0x00, 0x40, 0x7B, 0xE4, 0x90, 0x12, -+ 0xDB, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0xC3, -+ 0x95, 0x0D, 0x50, 0x6C, 0x74, 0xE5, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, -+ 0x04, 0x70, 0x55, 0x90, 0x12, 0xDF, 0xE0, 0xC3, -+ 0x95, 0x0D, 0x50, 0x4C, 0x90, 0x12, 0xDB, 0xE0, -+ 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0x74, 0x03, 0xF0, 0x74, 0x77, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x90, 0x88, 0xC0, 0xE0, 0x14, 0xF0, 0x90, 0x12, -+ 0xDF, 0xE0, 0x04, 0xF0, 0x74, 0xD1, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC0, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x90, 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x80, 0x8A, -+ 0x90, 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, 0x40, -+ 0x03, 0x02, 0x26, 0x16, 0x90, 0x88, 0xC1, 0xE0, -+ 0x94, 0x00, 0x50, 0x03, 0x02, 0x26, 0x16, 0xE4, -+ 0x90, 0x12, 0xDC, 0xF0, 0x90, 0x88, 0xB0, 0xE0, -+ 0xFF, 0x90, 0x12, 0xDC, 0xE0, 0xFE, 0xC3, 0x9F, -+ 0x40, 0x03, 0x02, 0x26, 0x16, 0x74, 0xA0, 0x2E, -+ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xE0, -+ 0x70, 0x03, 0x02, 0x1B, 0x17, 0xE4, 0x90, 0x12, -+ 0xDB, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0xC3, -+ 0x95, 0x0D, 0x40, 0x03, 0x02, 0x1B, 0x17, 0x74, -+ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0xE0, 0x60, 0x03, 0x02, 0x1B, 0x0E, 0x90, -+ 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, 0x40, 0x03, -+ 0x02, 0x1B, 0x0E, 0x90, 0x12, 0xDC, 0xE0, 0xFF, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, -+ 0xE0, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFE, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, -+ 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, -+ 0x12, 0xDC, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, -+ 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, -+ 0x12, 0xDC, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, -+ 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, -+ 0x12, 0xDC, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFE, 0x90, -+ 0x12, 0xDB, 0xE0, 0xFD, 0x24, 0x14, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x74, -+ 0x28, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, -+ 0x83, 0xE0, 0xFF, 0x74, 0x3C, 0x2D, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x74, -+ 0xC0, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0x74, 0x01, 0xF0, 0x90, 0x12, 0xDC, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFE, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x94, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, -+ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, -+ 0x74, 0xE5, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x88, -+ 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0x12, 0xDC, -+ 0xE0, 0x24, 0xA0, 0xF5, 0x82, 0xE4, 0x34, 0x37, -+ 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xD1, 0x2E, 0xF5, -+ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x90, 0x88, 0xC1, 0xE0, 0x14, 0xF0, 0x90, 0x12, -+ 0xDF, 0xE0, 0x04, 0xF0, 0x80, 0x09, 0x90, 0x12, -+ 0xDB, 0xE0, 0x04, 0xF0, 0x02, 0x19, 0x22, 0x90, -+ 0x12, 0xDC, 0xE0, 0x04, 0xF0, 0x02, 0x18, 0xFC, -+ 0xE4, 0x90, 0x88, 0xC0, 0xF0, 0xF5, 0xDC, 0xF5, -+ 0xDD, 0xF5, 0xDE, 0x90, 0x12, 0xDB, 0xF0, 0x90, -+ 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x50, -+ 0x5A, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, 0x20, -+ 0x90, 0x12, 0xDB, 0xE0, 0x24, 0xE5, 0xF5, 0x82, -+ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x02, -+ 0x60, 0x0E, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, -+ 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB4, 0x04, 0x14, -+ 0x90, 0x88, 0xC0, 0xE0, 0x04, 0xF0, 0x90, 0x12, -+ 0xDB, 0xE0, 0xFF, 0x7B, 0x01, 0xE4, 0xFD, 0x12, -+ 0x4C, 0x38, 0x80, 0x0F, 0x90, 0x12, 0xDB, 0xE0, -+ 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0x04, -+ 0xF0, 0x80, 0x9C, 0xE4, 0xF5, 0xD9, 0xF5, 0xDA, -+ 0xF5, 0xDB, 0x90, 0x12, 0xDC, 0xF0, 0x90, 0x88, -+ 0xC1, 0xE0, 0xFE, 0x90, 0x12, 0xDC, 0xE0, 0xFF, -+ 0xC3, 0x9E, 0x50, 0x0E, 0xE4, 0xFB, 0xFD, 0x12, -+ 0x4C, 0x38, 0x90, 0x12, 0xDC, 0xE0, 0x04, 0xF0, -+ 0x80, 0xE4, 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, -+ 0x88, 0xC1, 0xE0, 0xC3, 0x9F, 0x50, 0x07, 0xE0, -+ 0x90, 0x12, 0xE3, 0xF0, 0x80, 0x08, 0x90, 0x88, -+ 0xC0, 0xE0, 0x90, 0x12, 0xE3, 0xF0, 0xE4, 0x90, -+ 0x12, 0xDD, 0xF0, 0x90, 0x12, 0xE3, 0xE0, 0xFF, -+ 0x90, 0x12, 0xDD, 0xE0, 0xC3, 0x9F, 0x40, 0x03, -+ 0x02, 0x23, 0x57, 0xC2, 0x0F, 0xC2, 0x11, 0xD2, -+ 0xB4, 0x20, 0xB4, 0x06, 0x30, 0x0E, 0x03, 0x20, -+ 0xDD, 0x05, 0x75, 0x9E, 0x55, 0x80, 0xF2, 0xC2, -+ 0xDD, 0xC2, 0x0E, 0xAF, 0xE2, 0xEF, 0xFE, 0xAD, -+ 0xE3, 0x7C, 0x00, 0xE4, 0x2D, 0xFF, 0xEC, 0x3E, -+ 0xAD, 0x07, 0xFC, 0xC3, 0xED, 0x94, 0x20, 0xEC, -+ 0x94, 0x4E, 0x40, 0x03, 0x02, 0x23, 0x57, 0xED, -+ 0x94, 0xC8, 0xEC, 0x94, 0x00, 0x40, 0x57, 0xAF, -+ 0xDF, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xAB, 0xE1, 0xEB, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xAB, 0xE1, -+ 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x02, 0x1E, 0xFC, 0xD3, 0xED, -+ 0x94, 0x64, 0xEC, 0x94, 0x00, 0x50, 0x03, 0x02, -+ 0x1D, 0x73, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, -+ 0x82, 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, -+ 0xE0, 0x33, 0xFE, 0xAB, 0xDF, 0xEB, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, -+ 0xFF, 0xEA, 0x3E, 0xFE, 0xAB, 0xE1, 0xEB, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, -+ 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, -+ 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, -+ 0xAB, 0xE1, 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0xEF, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, -+ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xA3, 0xE0, 0x25, -+ 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, -+ 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0xAB, 0xDF, -+ 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFA, -+ 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xAB, -+ 0xE1, 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, -+ 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, -+ 0xD8, 0xF9, 0xFF, 0xAB, 0xE1, 0xEB, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x02, 0x1E, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0xD3, -+ 0xED, 0x94, 0x32, 0xEC, 0x94, 0x00, 0x50, 0x03, -+ 0x02, 0x1E, 0x16, 0xAF, 0xE1, 0xEF, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, -+ 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xAD, 0xE1, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0xAF, 0xE1, 0xEF, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, -+ 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xAD, 0xE1, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x02, 0x1E, 0xFC, 0xAF, 0xE1, -+ 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xA3, 0xE0, -+ 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, -+ 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0xAD, -+ 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, -+ 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, -+ 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, -+ 0x13, 0xD8, 0xF9, 0xFF, 0xAD, 0xE1, 0xED, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0xAF, 0xE1, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, -+ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, -+ 0x33, 0xFE, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, -+ 0xEC, 0x3E, 0xFE, 0xAD, 0xDF, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, -+ 0xFF, 0xEC, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, -+ 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xAD, -+ 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xE1, 0xEF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, -+ 0xEC, 0x9E, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, -+ 0x28, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xE1, -+ 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, -+ 0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0x12, 0x78, 0xF1, -+ 0x90, 0x13, 0x2A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x90, 0x13, 0x2A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x90, 0x13, 0x29, 0xE0, 0x2F, 0xFF, 0x90, 0x13, -+ 0x28, 0xE0, 0x3E, 0xFE, 0x90, 0x13, 0x2C, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0xD3, 0x94, 0x0C, 0xEE, 0x94, -+ 0x00, 0x40, 0x4E, 0xD2, 0x0F, 0xD2, 0x11, 0xAF, -+ 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, -+ 0x10, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0x24, 0xFC, -+ 0xF0, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x94, -+ 0x01, 0x50, 0x0E, 0xAF, 0xE1, 0x74, 0x81, 0x2F, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, -+ 0xF0, 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0x80, -+ 0x65, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, -+ 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, -+ 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x16, -+ 0x40, 0x17, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0x74, 0x16, -+ 0xF0, 0x90, 0xF1, 0x0A, 0x74, 0x02, 0xF0, 0x80, -+ 0x29, 0x90, 0x12, 0x92, 0xE0, 0xD3, 0x94, 0x00, -+ 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, 0x94, 0x00, -+ 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, 0xF1, 0x0A, -+ 0x74, 0x01, 0xF0, 0x90, 0x12, 0x93, 0xE0, 0xD3, -+ 0x94, 0x00, 0x40, 0x06, 0x90, 0xF1, 0x0A, 0x74, -+ 0x01, 0xF0, 0xC2, 0x0F, 0xC2, 0x11, 0xAF, 0xE1, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x13, 0x2C, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x94, -+ 0x00, 0x40, 0x15, 0xD2, 0x0F, 0xD2, 0x11, 0xAF, -+ 0xE1, 0x74, 0x77, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, 0x04, -+ 0xC2, 0x0F, 0xC2, 0x11, 0xAF, 0xE1, 0x74, 0x77, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, -+ 0xE0, 0xB4, 0x01, 0x13, 0xD3, 0xED, 0x94, 0x01, -+ 0xEC, 0x94, 0x00, 0x40, 0x06, 0xD2, 0x0F, 0xD2, -+ 0x11, 0x80, 0x04, 0xC2, 0x0F, 0xC2, 0x11, 0xAF, -+ 0xE1, 0x74, 0xC0, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, 0x03, -+ 0x02, 0x21, 0x95, 0xAF, 0xDF, 0x74, 0x0A, 0x2F, -+ 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, -+ 0xFF, 0xAE, 0xE1, 0x74, 0xCA, 0x2E, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x9F, -+ 0x50, 0x4F, 0xC2, 0x0D, 0xAF, 0xE1, 0x74, 0x3C, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, -+ 0xE0, 0xFF, 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x24, -+ 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x9F, 0x74, 0x80, -+ 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x50, 0x12, 0xAF, -+ 0xE1, 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x02, 0x21, -+ 0x97, 0xAF, 0xE1, 0x74, 0xCA, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x80, -+ 0x76, 0xAF, 0xE1, 0x74, 0xC0, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, -+ 0xE1, 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0xE1, 0xEF, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x94, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, -+ 0xE1, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x96, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0xD2, 0x0D, 0x80, 0x02, 0xD2, 0x0D, 0x30, -+ 0x01, 0x57, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, -+ 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0xEF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x02, 0x22, -+ 0x81, 0x20, 0x0F, 0x03, 0x02, 0x22, 0x81, 0x20, -+ 0x11, 0x03, 0x02, 0x22, 0x81, 0x20, 0x0D, 0x03, -+ 0x02, 0x22, 0x81, 0xD3, 0x90, 0x13, 0x2D, 0xE0, -+ 0x94, 0x78, 0x90, 0x13, 0x2C, 0xE0, 0x94, 0x00, -+ 0x40, 0x06, 0x90, 0x12, 0x92, 0xE0, 0x04, 0xF0, -+ 0xD3, 0x90, 0x13, 0x2D, 0xE0, 0x94, 0x72, 0x90, -+ 0x13, 0x2C, 0xE0, 0x94, 0x01, 0x40, 0x06, 0x90, -+ 0x12, 0x93, 0xE0, 0x04, 0xF0, 0xAF, 0xE1, 0xEF, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, -+ 0xE1, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x52, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0x74, -+ 0x00, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, -+ 0x83, 0xE0, 0xFF, 0xAE, 0xE1, 0x74, 0x14, 0x2E, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, -+ 0xF0, 0xAF, 0xDF, 0x74, 0x28, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xAE, -+ 0xE1, 0x74, 0x3C, 0x2E, 0xF5, 0x82, 0xE4, 0x34, -+ 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0xAF, 0xE1, 0x74, -+ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0x74, 0x02, 0xF0, 0x90, 0x12, 0xDF, 0xE0, -+ 0x04, 0xF0, 0x90, 0x88, 0xC0, 0xE0, 0x14, 0xF0, -+ 0x90, 0x88, 0xC1, 0xE0, 0x14, 0xF0, 0xAF, 0xE1, -+ 0x74, 0xD1, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, -+ 0xF5, 0x83, 0xE4, 0xF0, 0x7B, 0x01, 0x7D, 0x01, -+ 0xAF, 0xE1, 0x12, 0x4C, 0x38, 0xE4, 0xFB, 0x7D, -+ 0x01, 0xAF, 0xDF, 0x12, 0x4C, 0x38, 0x90, 0x12, -+ 0xDD, 0xE0, 0x04, 0xF0, 0x02, 0x1B, 0xDB, 0x90, -+ 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, 0x40, 0x03, -+ 0x02, 0x23, 0xE4, 0x90, 0x88, 0xC0, 0xE0, 0x94, -+ 0x00, 0x40, 0x79, 0xE4, 0x90, 0x12, 0xDB, 0xF0, -+ 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, -+ 0x50, 0x6A, 0x7B, 0x01, 0x7D, 0x02, 0x12, 0x4C, -+ 0x38, 0x90, 0x12, 0xDE, 0xEF, 0xF0, 0x60, 0x54, -+ 0xA3, 0xE0, 0xC3, 0x95, 0x0D, 0x50, 0x4D, 0x90, -+ 0x12, 0xDB, 0xE0, 0xFF, 0x24, 0xCA, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, -+ 0xC0, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x74, 0xE5, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0x74, 0x03, 0xF0, -+ 0x74, 0x77, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, -+ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x88, 0xC0, 0xE0, -+ 0x14, 0xF0, 0x90, 0x12, 0xDF, 0xE0, 0x04, 0xF0, -+ 0x74, 0xD1, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, -+ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, 0xDB, 0xE0, -+ 0x04, 0xF0, 0x80, 0x8C, 0x90, 0x12, 0xDF, 0xE0, -+ 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, 0x26, 0x16, -+ 0x90, 0x88, 0xC1, 0xE0, 0x94, 0x00, 0x50, 0x03, -+ 0x02, 0x26, 0x16, 0xE4, 0x90, 0x12, 0xDC, 0xF0, -+ 0x90, 0x88, 0xB0, 0xE0, 0xFE, 0x90, 0x12, 0xDC, -+ 0xE0, 0xFF, 0xC3, 0x9E, 0x40, 0x03, 0x02, 0x26, -+ 0x16, 0xE4, 0xFB, 0x7D, 0x02, 0x12, 0x4C, 0x38, -+ 0x90, 0x12, 0xDE, 0xEF, 0xF0, 0x70, 0x03, 0x02, -+ 0x26, 0x0D, 0xE4, 0x90, 0x12, 0xDB, 0xF0, 0x90, -+ 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, -+ 0x03, 0x02, 0x26, 0x0D, 0x74, 0xE5, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x60, -+ 0x03, 0x02, 0x26, 0x04, 0x90, 0x12, 0xDF, 0xE0, -+ 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, 0x26, 0x04, -+ 0x90, 0x12, 0xDC, 0xE0, 0xFF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, -+ 0x12, 0xDB, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, -+ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, -+ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, -+ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xDC, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, -+ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xDC, 0xE0, -+ 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, -+ 0xF5, 0x83, 0xE0, 0xFE, 0x90, 0x12, 0xDB, 0xE0, -+ 0xFD, 0x24, 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x8A, -+ 0xF5, 0x83, 0xEE, 0xF0, 0x74, 0x28, 0x2F, 0xF5, -+ 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, -+ 0x74, 0x3C, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, -+ 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x12, 0xDC, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFE, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, -+ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, -+ 0x74, 0xE5, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x88, -+ 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x74, 0xC0, 0x2E, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0x74, -+ 0x01, 0xF0, 0x90, 0x12, 0xDC, 0xE0, 0xFF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x94, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xEC, -+ 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, -+ 0xED, 0xF0, 0x74, 0xD1, 0x2E, 0xF5, 0x82, 0xE4, -+ 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x88, -+ 0xC1, 0xE0, 0x14, 0xF0, 0x90, 0x12, 0xDF, 0xE0, -+ 0x04, 0xF0, 0x80, 0x09, 0x90, 0x12, 0xDB, 0xE0, -+ 0x04, 0xF0, 0x02, 0x24, 0x27, 0x90, 0x12, 0xDC, -+ 0xE0, 0x04, 0xF0, 0x02, 0x24, 0x00, 0x22, 0xE4, -+ 0xF5, 0x99, 0x75, 0x96, 0x03, 0x75, 0x9E, 0x55, -+ 0xF5, 0xA1, 0xF5, 0xA1, 0xF5, 0xA1, 0xC2, 0x09, -+ 0xC2, 0x0A, 0xC2, 0x0E, 0xC2, 0x15, 0xC2, 0x05, -+ 0xC2, 0x06, 0x90, 0x12, 0x81, 0xF0, 0xA3, 0xF0, -+ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, -+ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, -+ 0x90, 0x12, 0x77, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, -+ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, -+ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x12, -+ 0xC0, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, -+ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, -+ 0xA3, 0xF0, 0xA3, 0xF0, 0xD2, 0xB1, 0xC2, 0xB6, -+ 0xC2, 0xB7, 0x75, 0xA0, 0x02, 0xF5, 0xAE, 0x90, -+ 0xF0, 0xC4, 0xF0, 0x90, 0x8F, 0xF0, 0xF0, 0xFF, -+ 0xFE, 0xAD, 0x07, 0x74, 0xE5, 0x2D, 0xF5, 0x82, -+ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0x74, -+ 0xA0, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x0F, 0xBF, 0x00, 0x01, 0x0E, -+ 0xEF, 0x64, 0x14, 0x4E, 0x70, 0xDB, 0xE4, 0x90, -+ 0x88, 0xC0, 0xF0, 0x90, 0x88, 0xC1, 0xF0, 0xF5, -+ 0xDC, 0xF5, 0xDD, 0xF5, 0xDE, 0xF5, 0xD9, 0xF5, -+ 0xDA, 0xF5, 0xDB, 0x90, 0x88, 0xC2, 0xF0, 0x90, -+ 0x88, 0xC6, 0xF0, 0x90, 0x88, 0xCD, 0xF0, 0xC2, -+ 0x0C, 0xC2, 0x0B, 0xC2, 0x14, 0x75, 0x8A, 0x8F, -+ 0xF5, 0x8B, 0x90, 0x8F, 0xFF, 0xF0, 0xC2, 0x03, -+ 0xC2, 0x16, 0x90, 0x28, 0x11, 0x93, 0xF5, 0x08, -+ 0x90, 0x28, 0x10, 0xE4, 0x93, 0xFD, 0xF5, 0x0D, -+ 0x90, 0x8B, 0x7C, 0xED, 0xF0, 0x90, 0x28, 0x12, -+ 0xE4, 0x93, 0x90, 0x8B, 0x7D, 0xF0, 0x90, 0x28, -+ 0x13, 0xE4, 0x93, 0x90, 0x8B, 0x7E, 0xF0, 0x90, -+ 0x28, 0x0B, 0xE4, 0x93, 0xF5, 0x0B, 0x90, 0x28, -+ 0x0C, 0xE4, 0x93, 0xF5, 0x0C, 0x90, 0x8B, 0x78, -+ 0x74, 0x05, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x8B, -+ 0x7A, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x20, 0xF0, -+ 0xE4, 0x90, 0x3F, 0xFE, 0xF0, 0xC2, 0x10, 0x90, -+ 0x12, 0xBC, 0xF0, 0x90, 0x12, 0x58, 0xF0, 0x90, -+ 0x12, 0x59, 0xF0, 0x90, 0x12, 0x63, 0xF0, 0xA3, -+ 0x74, 0x03, 0xF0, 0xE4, 0x90, 0x8F, 0xFE, 0xF0, -+ 0xFE, 0xFF, 0x75, 0x9E, 0x55, 0xAD, 0x07, 0x74, -+ 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x74, 0x78, 0x2D, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x0F, -+ 0xBF, 0x00, 0x01, 0x0E, 0xEF, 0x64, 0x3C, 0x4E, -+ 0x70, 0xD8, 0xE4, 0xFE, 0xFF, 0xAD, 0x07, 0x74, -+ 0xCA, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x74, 0x65, 0x2D, 0xF5, 0x82, -+ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x0F, -+ 0xBF, 0x00, 0x01, 0x0E, 0xEF, 0x64, 0x0A, 0x4E, -+ 0x70, 0xDB, 0xE4, 0x90, 0x12, 0x71, 0xF0, 0xA3, -+ 0xF0, 0x90, 0x12, 0xBD, 0xF0, 0xA3, 0xF0, 0x90, -+ 0x12, 0xBF, 0xF0, 0x90, 0x3F, 0xFD, 0x04, 0xF0, -+ 0x22, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0xA3, 0xF0, -+ 0x90, 0x8F, 0xFE, 0x74, 0xAA, 0xF0, 0x90, 0x8F, -+ 0xFD, 0xE0, 0x64, 0xBB, 0x60, 0x1A, 0x90, 0x12, -+ 0xDB, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x75, 0x9E, 0x55, 0x7F, -+ 0xFA, 0x7E, 0x00, 0x12, 0x67, 0xEE, 0x80, 0xDE, -+ 0xE4, 0x90, 0x8F, 0xFD, 0xF0, 0x90, 0x8F, 0xFE, -+ 0xF0, 0xD2, 0xD8, 0xA2, 0xD9, 0x33, 0x90, 0x8E, -+ 0x01, 0xF0, 0x90, 0xF0, 0xC4, 0x74, 0x01, 0xF0, -+ 0x22, 0xD2, 0xD8, 0x22, 0xD2, 0x0E, 0x32, 0x32, -+ 0x1C, 0x1C, 0x20, 0x1E, 0x28, 0x03, 0xE8, 0x1E, -+ 0xC8, 0x14, 0x01, 0x40, 0x40, 0x20, 0x20, 0x02, -+ 0x0A, 0x0A, 0x01, 0x05, 0xE4, 0x90, 0x12, 0xE8, -+ 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, -+ 0xF0, 0xA3, 0xF0, 0x90, 0xF1, 0x03, 0xE0, 0xD3, -+ 0x94, 0x50, 0x40, 0x0F, 0xE0, 0x90, 0xF2, 0xA5, -+ 0xF0, 0x90, 0xF1, 0x03, 0xE0, 0x90, 0xF2, 0xA4, -+ 0xF0, 0x80, 0x0A, 0x90, 0xF2, 0xA5, 0x74, 0xFA, -+ 0xF0, 0x90, 0xF2, 0xA4, 0xF0, 0x90, 0xF1, 0x03, -+ 0xE0, 0x90, 0xF2, 0xB1, 0xF0, 0xD2, 0xB6, 0xD2, -+ 0xB7, 0xD2, 0xB2, 0x20, 0xB2, 0x06, 0x30, 0x0E, -+ 0x03, 0x20, 0xDC, 0x05, 0x75, 0x9E, 0x55, 0x80, -+ 0xF2, 0xC2, 0xDC, 0xC2, 0x0E, 0x90, 0xF2, 0xB0, -+ 0xE0, 0x64, 0x01, 0x70, 0x35, 0x90, 0x12, 0xFA, -+ 0x74, 0x16, 0xF0, 0x90, 0x12, 0x92, 0xE0, 0xD3, -+ 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, -+ 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, -+ 0x12, 0xFA, 0x74, 0x12, 0xF0, 0x90, 0x12, 0x93, -+ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x29, -+ 0xC6, 0x90, 0x12, 0xFA, 0x74, 0x10, 0xF0, 0x02, -+ 0x29, 0xC6, 0x90, 0xF2, 0xB0, 0xE0, 0x64, 0x02, -+ 0x70, 0x35, 0x90, 0x12, 0xFA, 0x74, 0x16, 0xF0, -+ 0x90, 0x12, 0x92, 0xE0, 0xD3, 0x94, 0x00, 0x50, -+ 0x08, 0x90, 0x12, 0x60, 0xE0, 0x94, 0x00, 0x40, -+ 0x09, 0x30, 0x04, 0x06, 0x90, 0x12, 0xFA, 0x74, -+ 0x12, 0xF0, 0x90, 0x12, 0x93, 0xE0, 0xD3, 0x94, -+ 0x00, 0x50, 0x03, 0x02, 0x29, 0xC6, 0x90, 0x12, -+ 0xFA, 0x74, 0x10, 0xF0, 0x02, 0x29, 0xC6, 0x90, -+ 0xF2, 0xB0, 0xE0, 0x64, 0x03, 0x70, 0x35, 0x90, -+ 0x12, 0xFA, 0x74, 0x16, 0xF0, 0x90, 0x12, 0x92, -+ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, -+ 0x60, 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, -+ 0x06, 0x90, 0x12, 0xFA, 0x74, 0x12, 0xF0, 0x90, -+ 0x12, 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, -+ 0x02, 0x29, 0xC6, 0x90, 0x12, 0xFA, 0x74, 0x10, -+ 0xF0, 0x02, 0x29, 0xC6, 0x90, 0xF2, 0xB0, 0xE0, -+ 0x64, 0x04, 0x70, 0x31, 0x90, 0x12, 0xFA, 0x74, -+ 0x18, 0xF0, 0x90, 0x12, 0x92, 0xE0, 0xD3, 0x94, -+ 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, 0x94, -+ 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, 0x12, -+ 0xFA, 0x74, 0x16, 0xF0, 0x90, 0x12, 0x93, 0xE0, -+ 0xD3, 0x94, 0x00, 0x40, 0x79, 0x90, 0x12, 0xFA, -+ 0x74, 0x12, 0xF0, 0x80, 0x71, 0x90, 0xF2, 0xB0, -+ 0xE0, 0x64, 0x05, 0x70, 0x31, 0x90, 0x12, 0xFA, -+ 0x74, 0x19, 0xF0, 0x90, 0x12, 0x92, 0xE0, 0xD3, -+ 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, -+ 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, -+ 0x12, 0xFA, 0x74, 0x17, 0xF0, 0x90, 0x12, 0x93, -+ 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x40, 0x90, 0x12, -+ 0xFA, 0x74, 0x12, 0xF0, 0x80, 0x38, 0x90, 0xF2, -+ 0xB0, 0xE0, 0xD3, 0x94, 0x05, 0x40, 0x2F, 0x90, -+ 0x12, 0xFA, 0x74, 0x19, 0xF0, 0x90, 0x12, 0x92, -+ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, -+ 0x60, 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, -+ 0x06, 0x90, 0x12, 0xFA, 0x74, 0x17, 0xF0, 0x90, -+ 0x12, 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x06, -+ 0x90, 0x12, 0xFA, 0x74, 0x12, 0xF0, 0x90, 0xF2, -+ 0xB0, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, 0x02, -+ 0x35, 0x7F, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0xA3, -+ 0xF0, 0x90, 0xF2, 0xB0, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x9F, -+ 0xEC, 0x94, 0x00, 0x40, 0x03, 0x02, 0x35, 0x7F, -+ 0x30, 0xD9, 0x03, 0x02, 0x2A, 0x95, 0xED, 0x25, -+ 0xE0, 0xFD, 0xEC, 0x33, 0xFC, 0x74, 0x81, 0x2D, -+ 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, -+ 0x25, 0xE0, 0x24, 0x29, 0xF5, 0x82, 0xE4, 0x34, -+ 0x80, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x81, 0x2D, -+ 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, -+ 0x25, 0xE0, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, -+ 0x80, 0xF5, 0x83, 0xE0, 0x7C, 0x00, 0x24, 0x00, -+ 0xFF, 0xEC, 0x3E, 0xFE, 0x7D, 0x14, 0x12, 0x59, -+ 0x93, 0x90, 0x12, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFD, -+ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFC, 0x74, 0x80, -+ 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, -+ 0xE0, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, -+ 0x34, 0x80, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x80, -+ 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, -+ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0x80, 0xF5, 0x83, 0xE0, 0x7C, 0x00, 0x24, -+ 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0x7D, 0x1E, 0x12, -+ 0x59, 0x93, 0x90, 0x12, 0xF6, 0xEE, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0x02, 0x2B, 0x37, 0x90, 0x12, 0xDB, -+ 0xE0, 0x25, 0xE0, 0xFD, 0x90, 0x12, 0xDA, 0xE0, -+ 0x33, 0xFC, 0x74, 0x81, 0x2D, 0xF5, 0x82, 0x74, -+ 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x24, -+ 0xE9, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, -+ 0xE0, 0xFE, 0x74, 0x81, 0x2D, 0xF5, 0x82, 0x74, -+ 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x24, -+ 0xE8, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, -+ 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, -+ 0xFE, 0x7D, 0x14, 0x12, 0x59, 0x93, 0x90, 0x12, -+ 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, -+ 0xDB, 0xE0, 0x25, 0xE0, 0xFD, 0x90, 0x12, 0xDA, -+ 0xE0, 0x33, 0xFC, 0x74, 0x80, 0x2D, 0xF5, 0x82, -+ 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, -+ 0x24, 0xC1, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, -+ 0x83, 0xE0, 0xFE, 0x74, 0x80, 0x2D, 0xF5, 0x82, -+ 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, -+ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, -+ 0x83, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, -+ 0x3E, 0xFE, 0x7D, 0x1E, 0x12, 0x59, 0x93, 0x90, -+ 0x12, 0xF6, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, -+ 0x12, 0xF4, 0xE0, 0xC4, 0xF8, 0x54, 0xF0, 0xC8, -+ 0x68, 0xFE, 0xA3, 0xE0, 0xC4, 0x54, 0x0F, 0x48, -+ 0xFF, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x59, 0x81, -+ 0x90, 0x12, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0xA3, 0xE0, 0xC4, 0xF8, 0x54, 0xF0, 0xC8, 0x68, -+ 0xFE, 0xA3, 0xE0, 0xC4, 0x54, 0x0F, 0x48, 0xFF, -+ 0x12, 0x59, 0x81, 0x90, 0x12, 0xF6, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x12, 0xE2, 0xF0, -+ 0xA3, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, -+ 0xFD, 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFC, 0x74, -+ 0x81, 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, -+ 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0xFF, 0x74, -+ 0x80, 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, -+ 0x83, 0xE0, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, -+ 0xF0, 0xFE, 0xEF, 0x25, 0xE0, 0xFF, 0xEE, 0x33, -+ 0xFE, 0xA2, 0xD9, 0xE4, 0x33, 0x2F, 0xFF, 0xEC, -+ 0x3E, 0x90, 0x12, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, -+ 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x81, 0x2F, -+ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, -+ 0x60, 0x03, 0x02, 0x2C, 0x7C, 0x90, 0x12, 0xF0, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x00, 0xF5, -+ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, -+ 0x74, 0x50, 0x2F, 0xF5, 0x82, 0x74, 0x60, 0x3E, -+ 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x9C, -+ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, -+ 0x24, 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0xC3, 0xEF, -+ 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0xEE, 0x64, 0x80, -+ 0x98, 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, -+ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, -+ 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0x24, 0x28, 0xF5, 0x82, 0x74, 0x60, 0x3E, -+ 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0x00, 0x2F, 0xF5, -+ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, -+ 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, -+ 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0x24, 0x0A, 0xFD, -+ 0xE4, 0x33, 0xFC, 0xC3, 0xEF, 0x9D, 0xEC, 0x64, -+ 0x80, 0xF8, 0xEE, 0x64, 0x80, 0x98, 0x40, 0x03, -+ 0x02, 0x2E, 0xD9, 0x90, 0x12, 0xE3, 0xE0, 0x04, -+ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, -+ 0xF0, 0x02, 0x2E, 0xD9, 0x90, 0x12, 0xDB, 0xE0, -+ 0x25, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0x33, -+ 0xFE, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, -+ 0x3E, 0xF5, 0x83, 0xE0, 0x64, 0x1D, 0x60, 0x03, -+ 0x02, 0x2D, 0x3B, 0x90, 0x12, 0xF0, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0x74, -+ 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xB0, -+ 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, -+ 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, -+ 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0x24, -+ 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0xC3, 0xEF, 0x9D, -+ 0xEC, 0x64, 0x80, 0xF8, 0xEE, 0x64, 0x80, 0x98, -+ 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, -+ 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, -+ 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x24, 0xD8, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, -+ 0x83, 0xE0, 0xFD, 0x74, 0x00, 0x2F, 0xF5, 0x82, -+ 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, -+ 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, -+ 0x90, 0x12, 0xFA, 0xE0, 0x24, 0x0A, 0xFD, 0xE4, -+ 0x33, 0xFC, 0xC3, 0xEF, 0x9D, 0xEC, 0x64, 0x80, -+ 0xF8, 0xEE, 0x64, 0x80, 0x98, 0x40, 0x03, 0x02, -+ 0x2E, 0xD9, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, -+ 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, -+ 0x02, 0x2E, 0xD9, 0x90, 0x12, 0xF0, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0x24, 0xFF, 0xF5, 0x82, 0x74, -+ 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xD7, -+ 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, -+ 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, -+ 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, -+ 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, -+ 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, -+ 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, -+ 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x24, 0x27, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, -+ 0x83, 0xE0, 0xFD, 0x74, 0xFF, 0x2F, 0xF5, 0x82, -+ 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, -+ 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, -+ 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, -+ 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x50, 0x0E, 0x90, -+ 0x12, 0xE3, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, -+ 0x12, 0xE2, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x00, 0xF5, -+ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, -+ 0x74, 0xD8, 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, -+ 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, -+ 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, -+ 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, -+ 0x6E, 0x98, 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, -+ 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, -+ 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0x24, 0x28, 0xF5, 0x82, 0x74, 0x60, -+ 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0x00, 0x2F, -+ 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, -+ 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, -+ 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xC3, -+ 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x50, -+ 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, 0x70, -+ 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, 0x90, -+ 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, -+ 0x01, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, -+ 0xE0, 0xFD, 0x74, 0xD9, 0x2F, 0xF5, 0x82, 0x74, -+ 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, -+ 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, -+ 0x12, 0xFA, 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, 0x74, -+ 0x80, 0xF8, 0x6E, 0x98, 0x50, 0x0E, 0x90, 0x12, -+ 0xE3, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, -+ 0xE2, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x29, 0xF5, 0x82, -+ 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, -+ 0x01, 0x2F, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, -+ 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, -+ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, -+ 0xFD, 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, -+ 0x98, 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, -+ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, -+ 0xF0, 0xE4, 0x90, 0x12, 0xE4, 0xF0, 0xA3, 0xF0, -+ 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x24, 0xD8, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, -+ 0x83, 0xE0, 0xFD, 0x74, 0xD7, 0x2F, 0xF5, 0x82, -+ 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, -+ 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, -+ 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xD3, 0xEF, 0x9D, -+ 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x40, 0x0E, 0x90, -+ 0x12, 0xE5, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, -+ 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0xD9, 0xF5, -+ 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, -+ 0x74, 0xD8, 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, -+ 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, -+ 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, -+ 0xE0, 0xFD, 0xD3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, -+ 0x6E, 0x98, 0x40, 0x0E, 0x90, 0x12, 0xE5, 0xE0, -+ 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE4, 0xE0, -+ 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0x74, 0x60, -+ 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xFF, 0x2F, -+ 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, -+ 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, -+ 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xD3, -+ 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x40, -+ 0x0E, 0x90, 0x12, 0xE5, 0xE0, 0x04, 0xF0, 0x70, -+ 0x06, 0x90, 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x90, -+ 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, -+ 0x01, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, -+ 0xE0, 0xFD, 0x74, 0x00, 0x2F, 0xF5, 0x82, 0x74, -+ 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, -+ 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, -+ 0x12, 0xFA, 0xE0, 0xFD, 0xD3, 0xEF, 0x9D, 0x74, -+ 0x80, 0xF8, 0x6E, 0x98, 0x40, 0x0E, 0x90, 0x12, -+ 0xE5, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, -+ 0xE4, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x28, 0xF5, 0x82, -+ 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, -+ 0x27, 0x2F, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, -+ 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, -+ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, -+ 0xFD, 0xD3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, -+ 0x98, 0x40, 0x0E, 0x90, 0x12, 0xE5, 0xE0, 0x04, -+ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE4, 0xE0, 0x04, -+ 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0x24, 0x29, 0xF5, 0x82, 0x74, 0x60, 0x3E, -+ 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0x28, 0x2F, 0xF5, -+ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, -+ 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, -+ 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xD3, 0xEF, -+ 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x40, 0x0E, -+ 0x90, 0x12, 0xE5, 0xE0, 0x04, 0xF0, 0x70, 0x06, -+ 0x90, 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x90, 0x12, -+ 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, 0xDA, -+ 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, 0x82, -+ 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, -+ 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, -+ 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0x00, -+ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, 0x83, -+ 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x35, 0x83, -+ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0xF1, 0x03, 0xE0, -+ 0xFF, 0x90, 0x12, 0xF5, 0xE0, 0x2F, 0xFF, 0x90, -+ 0x12, 0xF4, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x12, -+ 0xF0, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x24, 0x00, -+ 0xF5, 0x82, 0x74, 0x60, 0x3C, 0xF5, 0x83, 0xE0, -+ 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x62, 0x90, 0xF1, -+ 0x03, 0xE0, 0xFF, 0x90, 0x12, 0xF7, 0xE0, 0x2F, -+ 0xFF, 0x90, 0x12, 0xF6, 0xE0, 0x34, 0x00, 0xFE, -+ 0x74, 0x00, 0x2D, 0xF5, 0x82, 0x74, 0x60, 0x3C, -+ 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, -+ 0x3F, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, -+ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, -+ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, -+ 0xE0, 0xFD, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, -+ 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, -+ 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, -+ 0x10, 0xF5, 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, -+ 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, -+ 0x90, 0x12, 0xDA, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0x25, 0xE0, 0xFB, 0xEC, 0x33, 0xFA, 0x74, 0x81, -+ 0x2B, 0xF5, 0x82, 0x74, 0x81, 0x3A, 0xF5, 0x83, -+ 0xE0, 0x70, 0x4D, 0xD3, 0x90, 0x12, 0xE3, 0xE0, -+ 0x94, 0x01, 0x90, 0x12, 0xE2, 0xE0, 0x94, 0x00, -+ 0x50, 0x03, 0x02, 0x32, 0x5E, 0xED, 0x25, 0xE0, -+ 0xFF, 0xEC, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0xE4, 0xF0, 0x02, 0x32, 0x5E, -+ 0x74, 0x81, 0x2B, 0xF5, 0x82, 0x74, 0x81, 0x3A, -+ 0xF5, 0x83, 0xE0, 0x64, 0x1D, 0x70, 0x52, 0xD3, -+ 0x90, 0x12, 0xE3, 0xE0, 0x94, 0x01, 0x90, 0x12, -+ 0xE2, 0xE0, 0x94, 0x00, 0x50, 0x03, 0x02, 0x32, -+ 0x5E, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, -+ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, -+ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, -+ 0xE0, 0xFD, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, -+ 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, -+ 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, -+ 0x10, 0xF5, 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, -+ 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE4, 0xF0, 0x80, -+ 0x4D, 0xD3, 0x90, 0x12, 0xE3, 0xE0, 0x94, 0x05, -+ 0x90, 0x12, 0xE2, 0xE0, 0x94, 0x00, 0x40, 0x3E, -+ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, -+ 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, -+ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, -+ 0xFD, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, -+ 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, -+ 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, -+ 0xF5, 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, -+ 0x35, 0x83, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, -+ 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, 0xDA, -+ 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, 0x82, -+ 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xF5, 0xCB, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0xF5, 0xCC, 0xD2, 0xB5, 0x30, -+ 0xB5, 0x05, 0x75, 0x9E, 0x55, 0x80, 0xF8, 0x7D, -+ 0x19, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, -+ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x81, -+ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, -+ 0xE0, 0x70, 0x03, 0x02, 0x35, 0x6E, 0x74, 0x81, -+ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, -+ 0xE0, 0x64, 0x1D, 0x70, 0x03, 0x02, 0x35, 0x6E, -+ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, -+ 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, -+ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, -+ 0x70, 0x03, 0x02, 0x35, 0x6E, 0x74, 0x80, 0x2F, -+ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, -+ 0x64, 0x13, 0x70, 0x03, 0x02, 0x35, 0x6E, 0x90, -+ 0x12, 0xDA, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x25, -+ 0xE0, 0xFF, 0xEA, 0x33, 0xFE, 0x74, 0x80, 0x2F, -+ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, -+ 0xFC, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, -+ 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, -+ 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, -+ 0xF5, 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, -+ 0x35, 0x83, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, -+ 0x03, 0x02, 0x35, 0x6E, 0xC3, 0xE5, 0xCA, 0x95, -+ 0xB7, 0xC3, 0x9D, 0x50, 0x39, 0xEB, 0x25, 0xE0, -+ 0xFF, 0xEA, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0xEB, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, -+ 0xCA, 0x95, 0xB9, 0xC3, 0x9D, 0x50, 0x3F, 0x90, -+ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0xEC, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, -+ 0xCA, 0x95, 0xBA, 0xC3, 0x9D, 0x50, 0x3F, 0x90, -+ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0xED, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, -+ 0xCA, 0x95, 0xBD, 0xC3, 0x9D, 0x50, 0x3F, 0x90, -+ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0xFF, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, -+ 0xCA, 0x95, 0xBE, 0xC3, 0x9D, 0x50, 0x3F, 0x90, -+ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0x01, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, -+ 0xCA, 0x95, 0xC2, 0xC3, 0x9D, 0x50, 0x3F, 0x90, -+ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0x13, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, -+ 0xCA, 0x95, 0xC3, 0xC3, 0x9D, 0x50, 0x3F, 0x90, -+ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0x14, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, -+ 0xCA, 0x95, 0xC4, 0xC3, 0x9D, 0x50, 0x3F, 0x90, -+ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, -+ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, -+ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, -+ 0x15, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, -+ 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x35, -+ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0x12, -+ 0xDB, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x29, 0xD9, 0x22, -+ 0xE4, 0x90, 0x8F, 0xF0, 0xF0, 0xD2, 0x18, 0x30, -+ 0x14, 0x03, 0x02, 0x3B, 0x5F, 0x90, 0x12, 0x5F, -+ 0xF0, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, -+ 0x3A, 0x13, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, -+ 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x70, 0x03, 0x02, -+ 0x3A, 0x0A, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xC0, -+ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, -+ 0x60, 0x03, 0x02, 0x3A, 0x0A, 0x74, 0x14, 0x2F, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, -+ 0xC3, 0x94, 0x01, 0x74, 0x80, 0x94, 0x88, 0x40, -+ 0x03, 0x02, 0x3A, 0x0A, 0x90, 0x12, 0xDA, 0xE0, -+ 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0xE0, 0x64, 0x03, 0x60, 0x04, 0xC2, 0x18, -+ 0x80, 0x07, 0x7F, 0x70, 0x7E, 0x17, 0x12, 0x67, -+ 0xEE, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xE5, 0xF5, -+ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB4, -+ 0x02, 0x08, 0x90, 0x12, 0x5F, 0xE0, 0x04, 0xF0, -+ 0x80, 0x06, 0x90, 0x12, 0x5F, 0xE0, 0x14, 0xF0, -+ 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x12, -+ 0xDB, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x90, 0x12, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE1, 0x74, 0x1E, -+ 0xF0, 0xA3, 0x74, 0x14, 0xF0, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0xEE, 0x33, 0x95, 0xE0, 0xFD, 0xFC, 0xE4, 0xFB, -+ 0x7A, 0x05, 0xF9, 0xF8, 0x12, 0x5A, 0x34, 0x78, -+ 0x04, 0x12, 0x5B, 0x75, 0x90, 0x12, 0xDD, 0x12, -+ 0x5B, 0x88, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x90, -+ 0x28, 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, -+ 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, -+ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x5A, -+ 0xBF, 0xAC, 0x00, 0xAD, 0x01, 0xAE, 0x02, 0xAF, -+ 0x03, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x12, 0xE1, -+ 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, 0x93, 0x8F, -+ 0xF0, 0xA4, 0xFF, 0xE5, 0xF0, 0xA2, 0xE7, 0x13, -+ 0xFE, 0xEF, 0x13, 0xFF, 0xFB, 0xAA, 0x06, 0xEA, -+ 0x33, 0x95, 0xE0, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, -+ 0x06, 0xD3, 0x12, 0x5B, 0x51, 0x50, 0x3C, 0x90, -+ 0x12, 0xE1, 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, -+ 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, -+ 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xEF, 0x24, -+ 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, -+ 0xE4, 0x3C, 0xFC, 0x90, 0x12, 0xDD, 0x12, 0x5B, -+ 0x88, 0x80, 0x33, 0x90, 0x12, 0xDD, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0xE0, 0xFF, -+ 0x90, 0x28, 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, -+ 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, -+ 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0x12, 0x5A, 0xBF, -+ 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, -+ 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x04, 0x12, 0x5B, -+ 0x62, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0xEE, 0x33, 0x95, 0xE0, 0xFD, -+ 0xFC, 0xE4, 0x7B, 0x20, 0x7A, 0x03, 0xF9, 0xF8, -+ 0x12, 0x5A, 0x34, 0x78, 0x04, 0x12, 0x5B, 0x75, -+ 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, -+ 0xE2, 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, 0x93, -+ 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, -+ 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xAC, 0x00, 0xAD, -+ 0x01, 0xAE, 0x02, 0xAF, 0x03, 0xC0, 0x06, 0xC0, -+ 0x07, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x90, 0x28, -+ 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xE5, -+ 0xF0, 0xA2, 0xE7, 0x13, 0xFE, 0xEF, 0x13, 0xFF, -+ 0xFB, 0xAA, 0x06, 0xEA, 0x33, 0x95, 0xE0, 0xF9, -+ 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0xD3, 0x12, 0x5B, -+ 0x51, 0x50, 0x3C, 0x90, 0x12, 0xE2, 0xE0, 0xFF, -+ 0x90, 0x28, 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, -+ 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, -+ 0xF8, 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, -+ 0x5A, 0xBF, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, -+ 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, -+ 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x80, 0x35, 0x90, -+ 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC0, 0x06, 0xC0, -+ 0x07, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x90, 0x28, -+ 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, -+ 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0xD0, -+ 0x07, 0xD0, 0x06, 0x12, 0x5A, 0xBF, 0x90, 0x12, -+ 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDD, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0x78, 0x04, 0x12, 0x5B, 0x62, 0x90, -+ 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x04, -+ 0xFF, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0x74, -+ 0xE5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, -+ 0x83, 0xE0, 0x4F, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x03, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xED, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0x78, 0x04, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, -+ 0x13, 0xD8, 0xF8, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xED, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0x78, 0x04, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, -+ 0x13, 0xD8, 0xF8, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x01, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xED, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xA3, 0xE0, 0xC4, -+ 0xF8, 0x54, 0x0F, 0xC8, 0x68, 0xFF, 0x05, 0x82, -+ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, -+ 0xC4, 0x54, 0xF0, 0x48, 0xEF, 0x54, 0xF0, 0xFF, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xA3, -+ 0xE0, 0x54, 0x0F, 0x4F, 0xFF, 0x90, 0x8F, 0xF0, -+ 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x02, 0xF5, -+ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, -+ 0x90, 0x3F, 0xFE, 0xE0, 0xB4, 0x01, 0x2D, 0xE5, -+ 0x09, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, -+ 0x06, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, -+ 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xAF, 0x0A, 0x90, -+ 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, -+ 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, -+ 0xEF, 0xF0, 0x80, 0x28, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x04, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0x08, 0xF0, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0x74, 0x08, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x04, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, -+ 0x02, 0x35, 0x95, 0x90, 0x8F, 0xF0, 0xE0, 0xFF, -+ 0x90, 0x12, 0x5F, 0xE0, 0xB5, 0x07, 0x04, 0xD2, -+ 0x04, 0x80, 0x02, 0xC2, 0x04, 0x20, 0x16, 0x03, -+ 0x02, 0x3A, 0xC4, 0x78, 0x10, 0xE6, 0x60, 0x02, -+ 0xC2, 0x18, 0x78, 0x11, 0xE6, 0x24, 0x14, 0xFF, -+ 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0x78, 0x10, -+ 0xE6, 0xFE, 0x4F, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0x90, -+ 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, -+ 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, -+ 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, -+ 0x06, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, -+ 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, 0xF0, -+ 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x03, 0xF5, -+ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, -+ 0xF0, 0x06, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, -+ 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, -+ 0xF0, 0xE0, 0x04, 0xF0, 0xEE, 0x70, 0x05, 0x78, -+ 0x11, 0xF6, 0xC2, 0x16, 0x30, 0x0B, 0x03, 0x02, -+ 0x3B, 0x4A, 0x90, 0x8F, 0xF0, 0xE0, 0x90, 0x12, -+ 0xDA, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0xC3, -+ 0x95, 0x0D, 0x50, 0x6E, 0xEF, 0x75, 0xF0, 0x06, -+ 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8F, -+ 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, -+ 0x06, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, -+ 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, -+ 0xF0, 0x06, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, -+ 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x03, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, -+ 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x04, 0xF5, -+ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, -+ 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x05, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, -+ 0xFF, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, -+ 0x80, 0x88, 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, -+ 0x00, 0x50, 0x03, 0x02, 0x41, 0x2C, 0x20, 0x18, -+ 0x03, 0x02, 0x41, 0x2C, 0xD2, 0x0C, 0x22, 0xE4, -+ 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xDA, 0xE0, -+ 0xFF, 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, 0x3F, -+ 0xE7, 0xE4, 0x90, 0x12, 0x5F, 0xF0, 0x74, 0xE5, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, -+ 0xE0, 0x70, 0x03, 0x02, 0x3F, 0xDE, 0x90, 0x12, -+ 0xDA, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, -+ 0x12, 0xF5, 0x83, 0xE0, 0x60, 0x03, 0x02, 0x3F, -+ 0xDE, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, -+ 0x8A, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x01, 0x74, -+ 0x80, 0x94, 0x88, 0x40, 0x03, 0x02, 0x3F, 0xDE, -+ 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xE5, 0xF5, 0x82, -+ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x03, -+ 0x60, 0x04, 0xC2, 0x18, 0x80, 0x07, 0x7F, 0x70, -+ 0x7E, 0x17, 0x12, 0x67, 0xEE, 0x90, 0x12, 0xDA, -+ 0xE0, 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, -+ 0xF5, 0x83, 0xE0, 0xB4, 0x02, 0x08, 0x90, 0x12, -+ 0x5F, 0xE0, 0x04, 0xF0, 0x80, 0x06, 0x90, 0x12, -+ 0x5F, 0xE0, 0x14, 0xF0, 0x90, 0x12, 0xDA, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFD, -+ 0xA3, 0xE0, 0x90, 0x12, 0xDB, 0xCD, 0xF0, 0xA3, -+ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xDB, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, -+ 0x12, 0xE1, 0x74, 0x1E, 0xF0, 0xA3, 0x74, 0x14, -+ 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xEE, 0x33, 0x95, 0xE0, -+ 0xFD, 0xFC, 0xE4, 0xFB, 0x7A, 0x05, 0xF9, 0xF8, -+ 0x12, 0x5A, 0x34, 0x78, 0x04, 0x12, 0x5B, 0x75, -+ 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, -+ 0xE1, 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, 0x93, -+ 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, -+ 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xAC, 0x00, 0xAD, -+ 0x01, 0xAE, 0x02, 0xAF, 0x03, 0xC0, 0x06, 0xC0, -+ 0x07, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x90, 0x28, -+ 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xE5, -+ 0xF0, 0xA2, 0xE7, 0x13, 0xFE, 0xEF, 0x13, 0xFF, -+ 0xFB, 0xAA, 0x06, 0xEA, 0x33, 0x95, 0xE0, 0xF9, -+ 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0xD3, 0x12, 0x5B, -+ 0x51, 0x50, 0x3C, 0x90, 0x12, 0xE1, 0xE0, 0xFF, -+ 0x90, 0x28, 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, -+ 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, -+ 0xF8, 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, -+ 0x5A, 0xBF, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, -+ 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, -+ 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x80, 0x33, 0x90, -+ 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC0, 0x06, 0xC0, -+ 0x07, 0xA3, 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, -+ 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, -+ 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, -+ 0x06, 0x12, 0x5A, 0xBF, 0x90, 0x12, 0xDD, 0x12, -+ 0x5B, 0x88, 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, -+ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x78, 0x04, 0x12, 0x5B, 0x62, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xEE, -+ 0x33, 0x95, 0xE0, 0xFD, 0xFC, 0xE4, 0x7B, 0x20, -+ 0x7A, 0x03, 0xF9, 0xF8, 0x12, 0x5A, 0x34, 0x78, -+ 0x04, 0x12, 0x5B, 0x75, 0x90, 0x12, 0xDD, 0x12, -+ 0x5B, 0x88, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x90, -+ 0x28, 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, -+ 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, -+ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x5A, -+ 0xBF, 0xAC, 0x00, 0xAD, 0x01, 0xAE, 0x02, 0xAF, -+ 0x03, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, 0x93, 0x8F, -+ 0xF0, 0xA4, 0xFF, 0xE5, 0xF0, 0xA2, 0xE7, 0x13, -+ 0xFE, 0xEF, 0x13, 0xFF, 0xFB, 0xAA, 0x06, 0xEA, -+ 0x33, 0x95, 0xE0, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, -+ 0x06, 0xD3, 0x12, 0x5B, 0x51, 0x50, 0x3C, 0x90, -+ 0x12, 0xE2, 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, -+ 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, -+ 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xEF, 0x24, -+ 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, -+ 0xE4, 0x3C, 0xFC, 0x90, 0x12, 0xDD, 0x12, 0x5B, -+ 0x88, 0x80, 0x35, 0x90, 0x12, 0xDD, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x12, 0xE2, -+ 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, 0x93, 0x8F, -+ 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, -+ 0xE4, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0x12, -+ 0x5A, 0xBF, 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, -+ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x04, -+ 0x12, 0x5B, 0x62, 0x90, 0x12, 0xDA, 0xE0, 0xFD, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0xED, 0x04, 0xFF, 0x33, 0x33, 0x33, -+ 0x54, 0xF8, 0xFF, 0x74, 0xE5, 0x2D, 0xF5, 0x82, -+ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x4F, 0xFF, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x78, 0x04, 0xCE, -+ 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x78, 0x04, 0xCE, -+ 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x79, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xA3, 0xE0, 0xC4, 0xF8, 0x54, 0x0F, 0xC8, -+ 0x68, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, -+ 0x83, 0x15, 0x82, 0xE0, 0xC4, 0x54, 0xF0, 0x48, -+ 0xEF, 0x54, 0xF0, 0xFF, 0xED, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE0, 0xA3, 0xE0, 0x54, 0x0F, 0x4F, -+ 0xFF, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, -+ 0xA4, 0x24, 0x7A, 0xF5, 0x82, 0xE4, 0x34, 0x8F, -+ 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x3F, 0xFE, 0xE0, -+ 0xB4, 0x01, 0x2D, 0xE5, 0x09, 0xFF, 0x90, 0x8F, -+ 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7C, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, -+ 0xF0, 0xAF, 0x0A, 0x90, 0x8F, 0xF0, 0xE0, 0x75, -+ 0xF0, 0x06, 0xA4, 0x24, 0x7D, 0xF5, 0x82, 0xE4, -+ 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0x80, 0x28, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0x74, 0x08, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7D, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0x08, 0xF0, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x04, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x3B, 0x64, 0x90, -+ 0x8F, 0xF0, 0xE0, 0xFF, 0x90, 0x12, 0x5F, 0xE0, -+ 0xB5, 0x07, 0x04, 0xD2, 0x04, 0x80, 0x02, 0xC2, -+ 0x04, 0x20, 0x16, 0x03, 0x02, 0x40, 0x98, 0x78, -+ 0x10, 0xE6, 0x60, 0x02, 0xC2, 0x18, 0x78, 0x11, -+ 0xE6, 0x24, 0x14, 0xFF, 0x33, 0x33, 0x33, 0x54, -+ 0xF8, 0xFF, 0x78, 0x10, 0xE6, 0xFE, 0x4F, 0xFF, -+ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0xEF, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, -+ 0xF0, 0x06, 0xA4, 0x24, 0x79, 0xF5, 0x82, 0xE4, -+ 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, -+ 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7A, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, -+ 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, -+ 0xA4, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, -+ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, -+ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7C, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, -+ 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, -+ 0x7D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, -+ 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x04, 0xF0, -+ 0xEE, 0x70, 0x05, 0x78, 0x11, 0xF6, 0xC2, 0x16, -+ 0x30, 0x0B, 0x03, 0x02, 0x41, 0x1E, 0x90, 0x8F, -+ 0xF0, 0xE0, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x50, 0x6E, -+ 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x78, 0xF5, -+ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, -+ 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x79, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, -+ 0xFF, 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, -+ 0x7A, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, -+ 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, -+ 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, 0x06, -+ 0xA4, 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x8F, -+ 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, -+ 0x06, 0xA4, 0x24, 0x7D, 0xF5, 0x82, 0xE4, 0x34, -+ 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0x88, 0x90, 0x8F, -+ 0xF0, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x05, 0x30, -+ 0x18, 0x02, 0xD2, 0x0C, 0x22, 0x90, 0xF1, 0x93, -+ 0x74, 0x01, 0xF0, 0xE4, 0x90, 0xF1, 0x46, 0xF0, -+ 0x90, 0xF1, 0x1B, 0x04, 0xF0, 0x90, 0xF0, 0x02, -+ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x01, 0xF0, -+ 0x90, 0xF0, 0x04, 0x74, 0x08, 0xF0, 0xE4, 0x90, -+ 0xF0, 0x03, 0xF0, 0x90, 0xF0, 0x06, 0x74, 0x08, -+ 0xF0, 0xE4, 0x90, 0xF0, 0x05, 0xF0, 0x90, 0xF0, -+ 0x08, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x07, -+ 0xF0, 0x90, 0xF0, 0x0A, 0x74, 0x08, 0xF0, 0xE4, -+ 0x90, 0xF0, 0x09, 0xF0, 0x90, 0xF0, 0x0C, 0x74, -+ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x0B, 0xF0, 0x90, -+ 0xF0, 0x0E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, -+ 0x0D, 0xF0, 0x90, 0xF0, 0x10, 0x74, 0x20, 0xF0, -+ 0xE4, 0x90, 0xF0, 0x0F, 0xF0, 0x90, 0xF0, 0x12, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x11, 0x74, 0x01, -+ 0xF0, 0x90, 0xF0, 0x14, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x13, 0x74, 0x02, 0xF0, 0x90, 0xF0, 0x16, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x15, 0x74, 0x03, -+ 0xF0, 0x90, 0xF0, 0x18, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x17, 0x74, 0x04, 0xF0, 0x90, 0xF0, 0x1A, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x19, 0x74, 0x05, -+ 0xF0, 0x90, 0xF0, 0x1C, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x1B, 0x74, 0x06, 0xF0, 0x90, 0xF0, 0x1E, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x1D, 0x74, 0x07, -+ 0xF0, 0x90, 0xF0, 0x20, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x1F, 0x74, 0x08, 0xF0, 0x90, 0xF0, 0x22, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x21, 0x74, 0x09, -+ 0xF0, 0x90, 0xF0, 0x24, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x23, 0x74, 0x0A, 0xF0, 0x90, 0xF0, 0x26, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x25, 0x74, 0x0B, -+ 0xF0, 0x90, 0xF0, 0x28, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x27, 0x74, 0x0C, 0xF0, 0x90, 0xF0, 0x2A, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x29, 0x74, 0x0D, -+ 0xF0, 0x90, 0xF0, 0x2C, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x2B, 0x74, 0x0E, 0xF0, 0x90, 0xF0, 0x2E, -+ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x2D, 0x74, 0x0F, -+ 0xF0, 0x90, 0xF0, 0x30, 0x74, 0x20, 0xF0, 0x90, -+ 0xF0, 0x2F, 0x74, 0x10, 0xF0, 0x90, 0xF0, 0x32, -+ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x31, 0xF0, -+ 0x90, 0xF0, 0x34, 0x74, 0x08, 0xF0, 0xE4, 0x90, -+ 0xF0, 0x33, 0xF0, 0x90, 0xF0, 0x36, 0x74, 0x08, -+ 0xF0, 0xE4, 0x90, 0xF0, 0x35, 0xF0, 0x90, 0xF0, -+ 0x38, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x37, -+ 0xF0, 0x90, 0xF0, 0x3A, 0x74, 0x08, 0xF0, 0xE4, -+ 0x90, 0xF0, 0x39, 0xF0, 0x90, 0xF0, 0x3C, 0x74, -+ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x3B, 0xF0, 0x90, -+ 0xF0, 0x3E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, -+ 0x3D, 0xF0, 0x90, 0xF0, 0x40, 0x74, 0x08, 0xF0, -+ 0xE4, 0x90, 0xF0, 0x3F, 0xF0, 0x90, 0xF0, 0x42, -+ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x41, 0xF0, -+ 0x90, 0xF0, 0x44, 0x74, 0x08, 0xF0, 0xE4, 0x90, -+ 0xF0, 0x43, 0xF0, 0x90, 0xF0, 0x46, 0x74, 0x08, -+ 0xF0, 0xE4, 0x90, 0xF0, 0x45, 0xF0, 0x90, 0xF0, -+ 0x48, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x47, -+ 0xF0, 0x90, 0xF0, 0x4A, 0x74, 0x08, 0xF0, 0xE4, -+ 0x90, 0xF0, 0x49, 0xF0, 0x90, 0xF0, 0x4C, 0x74, -+ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x4B, 0xF0, 0x90, -+ 0xF0, 0x4E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, -+ 0x4D, 0xF0, 0x90, 0xF0, 0x50, 0x74, 0x20, 0xF0, -+ 0x90, 0xF0, 0x4F, 0x74, 0x11, 0xF0, 0x90, 0xF0, -+ 0x52, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x51, 0x74, -+ 0x12, 0xF0, 0x90, 0xF0, 0x54, 0x74, 0x20, 0xF0, -+ 0x90, 0xF0, 0x53, 0x74, 0x13, 0xF0, 0x90, 0xF0, -+ 0x56, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x55, 0x74, -+ 0x14, 0xF0, 0x90, 0xF0, 0x58, 0x74, 0x20, 0xF0, -+ 0x90, 0xF0, 0x57, 0x74, 0x15, 0xF0, 0x90, 0xF0, -+ 0x5A, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x59, 0x74, -+ 0x16, 0xF0, 0x90, 0xF0, 0x5C, 0x74, 0x20, 0xF0, -+ 0x90, 0xF0, 0x5B, 0x74, 0x17, 0xF0, 0x90, 0xF0, -+ 0x5E, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x5D, 0x74, -+ 0x18, 0xF0, 0x90, 0xF0, 0x60, 0x74, 0x20, 0xF0, -+ 0x90, 0xF0, 0x5F, 0x74, 0x19, 0xF0, 0x90, 0xF0, -+ 0x62, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x61, 0x74, -+ 0x1A, 0xF0, 0x90, 0xF0, 0x64, 0x74, 0x20, 0xF0, -+ 0x90, 0xF0, 0x63, 0x74, 0x1B, 0xF0, 0x90, 0xF0, -+ 0x66, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x65, 0x74, -+ 0x1C, 0xF0, 0x90, 0xF0, 0x68, 0x74, 0x20, 0xF0, -+ 0x90, 0xF0, 0x67, 0x74, 0x1D, 0xF0, 0x90, 0xF0, -+ 0x6A, 0x74, 0x16, 0xF0, 0x90, 0xF0, 0x69, 0x74, -+ 0x01, 0xF0, 0x90, 0xF0, 0x6C, 0x74, 0x16, 0xF0, -+ 0xE4, 0x90, 0xF0, 0x6B, 0xF0, 0x90, 0xF0, 0x6E, -+ 0x74, 0x15, 0xF0, 0x90, 0xF0, 0x6D, 0x74, 0x02, -+ 0xF0, 0x90, 0xF0, 0x70, 0x74, 0x15, 0xF0, 0x90, -+ 0xF0, 0x6F, 0x74, 0x01, 0xF0, 0x90, 0xF0, 0x72, -+ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x71, 0xF0, -+ 0x90, 0xF0, 0x74, 0x74, 0x08, 0xF0, 0xE4, 0x90, -+ 0xF0, 0x73, 0xF0, 0x90, 0xF0, 0x76, 0x74, 0x08, -+ 0xF0, 0xE4, 0x90, 0xF0, 0x75, 0xF0, 0x90, 0xF0, -+ 0x78, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x77, -+ 0xF0, 0x90, 0xF0, 0x7A, 0x74, 0x08, 0xF0, 0xE4, -+ 0x90, 0xF0, 0x79, 0xF0, 0x90, 0xF0, 0x7C, 0x74, -+ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x7B, 0xF0, 0x90, -+ 0xF0, 0x7E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, -+ 0x7D, 0xF0, 0x90, 0xF0, 0x80, 0x74, 0x08, 0xF0, -+ 0xE4, 0x90, 0xF0, 0x7F, 0xF0, 0x90, 0xF0, 0x82, -+ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x81, 0xF0, -+ 0x90, 0xF0, 0x84, 0x74, 0x08, 0xF0, 0xE4, 0x90, -+ 0xF0, 0x83, 0xF0, 0x90, 0xF0, 0x86, 0x74, 0x08, -+ 0xF0, 0xE4, 0x90, 0xF0, 0x85, 0xF0, 0x90, 0xF0, -+ 0x88, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x87, -+ 0xF0, 0x90, 0xF0, 0x8A, 0x74, 0x08, 0xF0, 0xE4, -+ 0x90, 0xF0, 0x89, 0xF0, 0x90, 0xF0, 0x8C, 0x74, -+ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x8B, 0xF0, 0x90, -+ 0xF0, 0x8E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, -+ 0x8D, 0xF0, 0x90, 0xF0, 0x90, 0x74, 0x08, 0xF0, -+ 0xE4, 0x90, 0xF0, 0x8F, 0xF0, 0x90, 0xF0, 0x92, -+ 0x74, 0x15, 0xF0, 0xE4, 0x90, 0xF0, 0x91, 0xF0, -+ 0x90, 0xF0, 0x94, 0x74, 0x14, 0xF0, 0x90, 0xF0, -+ 0x93, 0x74, 0x02, 0xF0, 0x90, 0xF0, 0x96, 0x74, -+ 0x14, 0xF0, 0x90, 0xF0, 0x95, 0x74, 0x01, 0xF0, -+ 0x90, 0xF0, 0x98, 0x74, 0x14, 0xF0, 0xE4, 0x90, -+ 0xF0, 0x97, 0xF0, 0x90, 0xF0, 0x9A, 0x74, 0x13, -+ 0xF0, 0x90, 0xF0, 0x99, 0x74, 0x02, 0xF0, 0x90, -+ 0xF0, 0x9C, 0x74, 0x13, 0xF0, 0x90, 0xF0, 0x9B, -+ 0x74, 0x01, 0xF0, 0x90, 0xF0, 0x9E, 0x74, 0x13, -+ 0xF0, 0xE4, 0x90, 0xF0, 0x9D, 0xF0, 0x90, 0xF0, -+ 0xA0, 0x74, 0x12, 0xF0, 0x90, 0xF0, 0x9F, 0x74, -+ 0x02, 0xF0, 0x90, 0xF0, 0xA2, 0x74, 0x12, 0xF0, -+ 0x90, 0xF0, 0xA1, 0x74, 0x01, 0xF0, 0x90, 0xF0, -+ 0xA4, 0x74, 0x12, 0xF0, 0xE4, 0x90, 0xF0, 0xA3, -+ 0xF0, 0x90, 0xF0, 0xA6, 0x74, 0x11, 0xF0, 0x90, -+ 0xF0, 0xA5, 0x74, 0x02, 0xF0, 0x90, 0xF0, 0xA8, -+ 0x74, 0x11, 0xF0, 0x90, 0xF0, 0xA7, 0x74, 0x01, -+ 0xF0, 0x90, 0xF0, 0xAA, 0x74, 0x11, 0xF0, 0xE4, -+ 0x90, 0xF0, 0xA9, 0xF0, 0x90, 0xF0, 0xAC, 0x74, -+ 0x10, 0xF0, 0x90, 0xF0, 0xAB, 0x74, 0x02, 0xF0, -+ 0x90, 0xF0, 0xAE, 0x74, 0x10, 0xF0, 0x90, 0xF0, -+ 0xAD, 0x74, 0x01, 0xF0, 0x90, 0xF0, 0xB0, 0x74, -+ 0x10, 0xF0, 0xE4, 0x90, 0xF0, 0xAF, 0xF0, 0x90, -+ 0xF0, 0xB2, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, -+ 0xB1, 0xF0, 0x90, 0xF0, 0xB4, 0x74, 0x08, 0xF0, -+ 0xE4, 0x90, 0xF0, 0xB3, 0xF0, 0x90, 0xF0, 0xB6, -+ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0xB5, 0xF0, -+ 0x90, 0xF0, 0xB8, 0x74, 0x08, 0xF0, 0xE4, 0x90, -+ 0xF0, 0xB7, 0xF0, 0x90, 0xF0, 0xBA, 0x74, 0x08, -+ 0xF0, 0xE4, 0x90, 0xF0, 0xB9, 0xF0, 0x90, 0xF0, -+ 0xBC, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0xBB, -+ 0xF0, 0x90, 0xF0, 0xBE, 0x74, 0x08, 0xF0, 0xE4, -+ 0x90, 0xF0, 0xBD, 0xF0, 0x90, 0xF0, 0xC0, 0x74, -+ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0xBF, 0xF0, 0x90, -+ 0xF1, 0x06, 0x74, 0x14, 0xF0, 0x90, 0xF1, 0x07, -+ 0x74, 0x1E, 0xF0, 0x90, 0xF1, 0x0E, 0x74, 0x03, -+ 0xF0, 0x90, 0xF1, 0x0F, 0xF0, 0x90, 0xF1, 0x10, -+ 0xF0, 0x90, 0xF1, 0x11, 0xF0, 0x90, 0xF1, 0x12, -+ 0xF0, 0x90, 0xF1, 0x13, 0xF0, 0x90, 0xF1, 0x14, -+ 0x14, 0xF0, 0xE4, 0x90, 0xF1, 0x15, 0xF0, 0x90, -+ 0xF1, 0x1F, 0x74, 0x08, 0xF0, 0x90, 0xF1, 0x22, -+ 0x74, 0x03, 0xF0, 0x90, 0xF1, 0x1D, 0x74, 0x08, -+ 0xF0, 0x90, 0xF1, 0x21, 0x74, 0x0A, 0xF0, 0xE4, -+ 0x90, 0xF1, 0x1C, 0xF0, 0x90, 0xF1, 0x43, 0x74, -+ 0x3A, 0xF0, 0x90, 0xF2, 0xA4, 0x74, 0x32, 0xF0, -+ 0x90, 0xF2, 0xA5, 0xF0, 0x90, 0x28, 0x01, 0xE4, -+ 0x93, 0x90, 0xF1, 0x01, 0xF0, 0x90, 0x28, 0x00, -+ 0xE4, 0x93, 0x90, 0xF1, 0x02, 0xF0, 0x90, 0x28, -+ 0x02, 0xE4, 0x93, 0x90, 0xF1, 0x03, 0xF0, 0x90, -+ 0x28, 0x03, 0xE4, 0x93, 0x90, 0xF1, 0x04, 0xF0, -+ 0x90, 0x28, 0x04, 0xE4, 0x93, 0x90, 0xF1, 0x05, -+ 0xF0, 0x90, 0x28, 0x05, 0xE4, 0x93, 0x90, 0xF1, -+ 0x08, 0xF0, 0x90, 0x28, 0x06, 0xE4, 0x93, 0x90, -+ 0xF1, 0x09, 0xF0, 0x90, 0x28, 0x0F, 0xE4, 0x93, -+ 0x90, 0xF1, 0x0A, 0xF0, 0x90, 0x28, 0x07, 0xE4, -+ 0x93, 0x90, 0xF1, 0x0B, 0xF0, 0x90, 0xF0, 0xC5, -+ 0x74, 0x07, 0xF0, 0x90, 0xF1, 0x18, 0x74, 0xF4, -+ 0xF0, 0xE0, 0x54, 0x0F, 0xB4, 0x09, 0x00, 0x50, -+ 0x6A, 0x90, 0x46, 0x50, 0xF8, 0x28, 0x28, 0x73, -+ 0x02, 0x46, 0x6B, 0x02, 0x46, 0x73, 0x02, 0x46, -+ 0x7B, 0x02, 0x46, 0x83, 0x02, 0x46, 0x8B, 0x02, -+ 0x46, 0x93, 0x02, 0x46, 0x9B, 0x02, 0x46, 0xA3, -+ 0x02, 0x46, 0xAB, 0x90, 0xF1, 0x0C, 0x74, 0x02, -+ 0xF0, 0x80, 0x46, 0x90, 0xF1, 0x0C, 0x74, 0x04, -+ 0xF0, 0x80, 0x3E, 0x90, 0xF1, 0x0C, 0x74, 0x08, -+ 0xF0, 0x80, 0x36, 0x90, 0xF1, 0x0C, 0x74, 0x10, -+ 0xF0, 0x80, 0x2E, 0x90, 0xF1, 0x0C, 0x74, 0x20, -+ 0xF0, 0x80, 0x26, 0x90, 0xF1, 0x0C, 0x74, 0x40, -+ 0xF0, 0x80, 0x1E, 0x90, 0xF1, 0x0C, 0x74, 0x80, -+ 0xF0, 0x80, 0x16, 0x90, 0xF1, 0x0C, 0x74, 0x80, -+ 0xF0, 0x80, 0x0E, 0x90, 0xF1, 0x0C, 0x74, 0x80, -+ 0xF0, 0x80, 0x06, 0x90, 0xF1, 0x0C, 0x74, 0x02, -+ 0xF0, 0x90, 0x28, 0x08, 0xE4, 0x93, 0x90, 0xF1, -+ 0x0D, 0xF0, 0x90, 0x28, 0x09, 0xE4, 0x93, 0x90, -+ 0xF1, 0x16, 0xF0, 0xD2, 0xAD, 0xE4, 0x90, 0xF1, -+ 0x17, 0xF0, 0x90, 0xF0, 0xC4, 0x04, 0xF0, 0x20, -+ 0x0A, 0x07, 0x75, 0x9E, 0x55, 0xB2, 0x83, 0x80, -+ 0xF6, 0x22, 0x90, 0x12, 0xDB, 0xE4, 0xF0, 0xA3, -+ 0x74, 0x40, 0xF0, 0xE4, 0x90, 0x12, 0xDF, 0xF0, -+ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x12, -+ 0xDD, 0xF0, 0xA3, 0x74, 0x40, 0xF0, 0xE4, 0x90, -+ 0x12, 0xE3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, -+ 0xF0, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, -+ 0x4C, 0x37, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, -+ 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x70, 0x03, 0x02, -+ 0x4C, 0x2E, 0x90, 0x12, 0xDA, 0xE0, 0xF9, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFA, 0xA3, 0xE0, -+ 0xFB, 0xC3, 0xED, 0x9B, 0xEA, 0x64, 0x80, 0xF8, -+ 0xEC, 0x64, 0x80, 0x98, 0x40, 0x03, 0x02, 0x48, -+ 0x22, 0x90, 0x28, 0x0D, 0xE4, 0x93, 0xFB, 0xFD, -+ 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, 0x94, 0x00, -+ 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xDF, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, 0x12, 0xDC, -+ 0xE0, 0x9F, 0xFF, 0x90, 0x12, 0xDB, 0xE0, 0x9E, -+ 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, -+ 0x59, 0x81, 0xEB, 0xFD, 0xC3, 0x90, 0x12, 0xDC, -+ 0xE0, 0x9D, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0x94, -+ 0x00, 0xFC, 0x12, 0x59, 0xE8, 0x90, 0x12, 0xE0, -+ 0xE0, 0x2F, 0xFF, 0x90, 0x12, 0xDF, 0xE0, 0x3E, -+ 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xC3, 0xEE, 0x64, 0x80, 0x94, 0x80, -+ 0x40, 0x03, 0x02, 0x49, 0xAC, 0xED, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x02, -+ 0x49, 0xAC, 0x90, 0xF1, 0x06, 0xE0, 0xFF, 0xAE, -+ 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, 0x90, 0x12, -+ 0xDB, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0xEF, -+ 0x9D, 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, 0x90, 0x12, -+ 0xDA, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFC, 0xA3, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, -+ 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x50, 0x03, 0x02, -+ 0x49, 0x82, 0x90, 0xF1, 0x06, 0xE0, 0xFF, 0xAE, -+ 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, 0x90, 0x12, -+ 0xDB, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0xEF, 0x9D, -+ 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, 0x90, 0x12, 0xDA, -+ 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, -+ 0xFA, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, 0xEA, 0x9E, -+ 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE1, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xED, 0x9F, 0xFF, -+ 0xEC, 0x9E, 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x59, -+ 0x81, 0x90, 0x28, 0x0D, 0xE4, 0x93, 0xFD, 0x90, -+ 0x12, 0xDB, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xC3, -+ 0x9D, 0xFD, 0xEA, 0x94, 0x00, 0xFC, 0x12, 0x59, -+ 0xE8, 0x90, 0x12, 0xE2, 0xE0, 0x2F, 0xFF, 0x90, -+ 0x12, 0xE1, 0xE0, 0x3E, 0xFE, 0x90, 0x12, 0xDA, -+ 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xF1, 0x06, 0xE0, -+ 0xFF, 0xAE, 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xC3, -+ 0x9B, 0xFF, 0xE5, 0xF0, 0x9A, 0xFE, 0xE9, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, -+ 0x5A, 0x1E, 0x90, 0xF1, 0x06, 0xE0, 0xFF, 0xAE, -+ 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, 0xE9, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xD3, 0x9F, 0xE5, 0xF0, 0x64, 0x80, 0xF8, 0xEC, -+ 0x64, 0x80, 0x98, 0x40, 0x4F, 0x90, 0xF1, 0x06, -+ 0xE0, 0xFF, 0xAE, 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, -+ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, -+ 0xF5, 0x83, 0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x80, 0x2A, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, -+ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, -+ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xDA, 0xE0, -+ 0xF9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xDD, 0xE0, 0xFA, -+ 0xA3, 0xE0, 0xFB, 0xC3, 0xED, 0x9B, 0xEA, 0x64, -+ 0x80, 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x40, 0x03, -+ 0x02, 0x4A, 0xA4, 0x90, 0x28, 0x0E, 0xE4, 0x93, -+ 0xFB, 0xFD, 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, -+ 0x94, 0x00, 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, -+ 0xE3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, -+ 0x12, 0xDE, 0xE0, 0x9F, 0xFF, 0x90, 0x12, 0xDD, -+ 0xE0, 0x9E, 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, -+ 0xFD, 0x12, 0x59, 0x81, 0xEB, 0xFD, 0xC3, 0x90, -+ 0x12, 0xDE, 0xE0, 0x9D, 0xFD, 0x90, 0x12, 0xDD, -+ 0xE0, 0x94, 0x00, 0xFC, 0x12, 0x59, 0xE8, 0x90, -+ 0x12, 0xE4, 0xE0, 0x2F, 0xFF, 0x90, 0x12, 0xE3, -+ 0xE0, 0x3E, 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0xFD, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, -+ 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, -+ 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0xEE, 0x64, 0x80, -+ 0x94, 0x80, 0x40, 0x03, 0x02, 0x4C, 0x2E, 0xED, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, -+ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, -+ 0xF0, 0x02, 0x4C, 0x2E, 0x90, 0xF1, 0x07, 0xE0, -+ 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, -+ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0xC3, 0xEF, 0x9D, 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, -+ 0x90, 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x9F, 0xEE, -+ 0x64, 0x80, 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x50, -+ 0x03, 0x02, 0x4C, 0x04, 0x90, 0xF1, 0x07, 0xE0, -+ 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, -+ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, -+ 0xEF, 0x9D, 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, 0x90, -+ 0x12, 0xDA, 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, -+ 0xEA, 0x9E, 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, -+ 0xE5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xED, -+ 0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0xE9, 0x25, 0xE0, -+ 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, -+ 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0x12, 0x59, 0x81, 0x90, 0x28, 0x0E, 0xE4, 0x93, -+ 0xFD, 0x90, 0x12, 0xDD, 0xE0, 0xFA, 0xA3, 0xE0, -+ 0xFB, 0xC3, 0x9D, 0xFD, 0xEA, 0x94, 0x00, 0xFC, -+ 0x12, 0x59, 0xE8, 0x90, 0x12, 0xE6, 0xE0, 0x2F, -+ 0xFF, 0x90, 0x12, 0xE5, 0xE0, 0x3E, 0xFE, 0x90, -+ 0x12, 0xDA, 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xF1, -+ 0x07, 0xE0, 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, -+ 0xA4, 0xC3, 0x9B, 0xFF, 0xE5, 0xF0, 0x9A, 0xFE, -+ 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0x8F, -+ 0xF0, 0x12, 0x5A, 0x1E, 0x90, 0xF1, 0x07, 0xE0, -+ 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, -+ 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xD3, 0x9F, 0xE5, 0xF0, 0x64, 0x80, -+ 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x40, 0x4F, 0x90, -+ 0xF1, 0x07, 0xE0, 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, -+ 0xF0, 0xA4, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0x25, -+ 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, -+ 0x34, 0x89, 0xF5, 0x83, 0xE5, 0xF0, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0x80, 0x2A, 0x90, 0x12, 0xDA, 0xE0, -+ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, -+ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, -+ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, -+ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x47, 0x0D, 0x22, -+ 0x90, 0x13, 0x2E, 0xEF, 0xF0, 0xA9, 0x03, 0xA3, -+ 0xED, 0xF0, 0x60, 0x03, 0x02, 0x4D, 0xE7, 0xE9, -+ 0x60, 0x03, 0x02, 0x4D, 0x20, 0x90, 0x13, 0x2E, -+ 0xE0, 0xB4, 0x14, 0x00, 0x40, 0x03, 0x02, 0x4D, -+ 0x14, 0x90, 0x4C, 0x60, 0xF8, 0x28, 0x28, 0x73, -+ 0x02, 0x4C, 0x9C, 0x02, 0x4C, 0xA2, 0x02, 0x4C, -+ 0xA8, 0x02, 0x4C, 0xAE, 0x02, 0x4C, 0xB4, 0x02, -+ 0x4C, 0xBA, 0x02, 0x4C, 0xC0, 0x02, 0x4C, 0xC6, -+ 0x02, 0x4C, 0xCC, 0x02, 0x4C, 0xD2, 0x02, 0x4C, -+ 0xD8, 0x02, 0x4C, 0xDE, 0x02, 0x4C, 0xE4, 0x02, -+ 0x4C, 0xEA, 0x02, 0x4C, 0xF0, 0x02, 0x4C, 0xF6, -+ 0x02, 0x4C, 0xFC, 0x02, 0x4D, 0x02, 0x02, 0x4D, -+ 0x08, 0x02, 0x4D, 0x0E, 0x43, 0xDB, 0x01, 0x02, -+ 0x4D, 0xE4, 0x43, 0xDB, 0x02, 0x02, 0x4D, 0xE4, -+ 0x43, 0xDB, 0x04, 0x02, 0x4D, 0xE4, 0x43, 0xDB, -+ 0x08, 0x02, 0x4D, 0xE4, 0x43, 0xDB, 0x10, 0x02, -+ 0x4D, 0xE4, 0x43, 0xDB, 0x20, 0x02, 0x4D, 0xE4, -+ 0x43, 0xDB, 0x40, 0x02, 0x4D, 0xE4, 0x43, 0xDB, -+ 0x80, 0x02, 0x4D, 0xE4, 0x43, 0xDA, 0x01, 0x02, -+ 0x4D, 0xE4, 0x43, 0xDA, 0x02, 0x02, 0x4D, 0xE4, -+ 0x43, 0xDA, 0x04, 0x02, 0x4D, 0xE4, 0x43, 0xDA, -+ 0x08, 0x02, 0x4D, 0xE4, 0x43, 0xDA, 0x10, 0x02, -+ 0x4D, 0xE4, 0x43, 0xDA, 0x20, 0x02, 0x4D, 0xE4, -+ 0x43, 0xDA, 0x40, 0x02, 0x4D, 0xE4, 0x43, 0xDA, -+ 0x80, 0x02, 0x4D, 0xE4, 0x43, 0xD9, 0x01, 0x02, -+ 0x4D, 0xE4, 0x43, 0xD9, 0x02, 0x02, 0x4D, 0xE4, -+ 0x43, 0xD9, 0x04, 0x02, 0x4D, 0xE4, 0x43, 0xD9, -+ 0x08, 0x02, 0x4D, 0xE4, 0x85, 0xD9, 0xD9, 0x85, -+ 0xDA, 0xDA, 0x85, 0xDB, 0xDB, 0x02, 0x4D, 0xE4, -+ 0xE9, 0x64, 0x01, 0x60, 0x03, 0x02, 0x4D, 0xE4, -+ 0x90, 0x13, 0x2E, 0xE0, 0xB4, 0x14, 0x00, 0x40, -+ 0x03, 0x02, 0x4D, 0xDB, 0x90, 0x4D, 0x3B, 0xF8, -+ 0x28, 0x28, 0x73, 0x02, 0x4D, 0x77, 0x02, 0x4D, -+ 0x7C, 0x02, 0x4D, 0x81, 0x02, 0x4D, 0x86, 0x02, -+ 0x4D, 0x8B, 0x02, 0x4D, 0x90, 0x02, 0x4D, 0x95, -+ 0x02, 0x4D, 0x9A, 0x02, 0x4D, 0x9F, 0x02, 0x4D, -+ 0xA4, 0x02, 0x4D, 0xA9, 0x02, 0x4D, 0xAE, 0x02, -+ 0x4D, 0xB3, 0x02, 0x4D, 0xB8, 0x02, 0x4D, 0xBD, -+ 0x02, 0x4D, 0xC2, 0x02, 0x4D, 0xC7, 0x02, 0x4D, -+ 0xCC, 0x02, 0x4D, 0xD1, 0x02, 0x4D, 0xD6, 0x43, -+ 0xDE, 0x01, 0x80, 0x68, 0x43, 0xDE, 0x02, 0x80, -+ 0x63, 0x43, 0xDE, 0x04, 0x80, 0x5E, 0x43, 0xDE, -+ 0x08, 0x80, 0x59, 0x43, 0xDE, 0x10, 0x80, 0x54, -+ 0x43, 0xDE, 0x20, 0x80, 0x4F, 0x43, 0xDE, 0x40, -+ 0x80, 0x4A, 0x43, 0xDE, 0x80, 0x80, 0x45, 0x43, -+ 0xDD, 0x01, 0x80, 0x40, 0x43, 0xDD, 0x02, 0x80, -+ 0x3B, 0x43, 0xDD, 0x04, 0x80, 0x36, 0x43, 0xDD, -+ 0x08, 0x80, 0x31, 0x43, 0xDD, 0x10, 0x80, 0x2C, -+ 0x43, 0xDD, 0x20, 0x80, 0x27, 0x43, 0xDD, 0x40, -+ 0x80, 0x22, 0x43, 0xDD, 0x80, 0x80, 0x1D, 0x43, -+ 0xDC, 0x01, 0x80, 0x18, 0x43, 0xDC, 0x02, 0x80, -+ 0x13, 0x43, 0xDC, 0x04, 0x80, 0x0E, 0x43, 0xDC, -+ 0x08, 0x80, 0x09, 0x85, 0xDC, 0xDC, 0x85, 0xDD, -+ 0xDD, 0x85, 0xDE, 0xDE, 0x7F, 0x00, 0x22, 0x90, -+ 0x13, 0x2F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, -+ 0x4F, 0x92, 0xE9, 0x60, 0x03, 0x02, 0x4E, 0xCB, -+ 0x90, 0x13, 0x2E, 0xE0, 0xB4, 0x14, 0x00, 0x40, -+ 0x03, 0x02, 0x4E, 0xBF, 0x90, 0x4E, 0x0B, 0xF8, -+ 0x28, 0x28, 0x73, 0x02, 0x4E, 0x47, 0x02, 0x4E, -+ 0x4D, 0x02, 0x4E, 0x53, 0x02, 0x4E, 0x59, 0x02, -+ 0x4E, 0x5F, 0x02, 0x4E, 0x65, 0x02, 0x4E, 0x6B, -+ 0x02, 0x4E, 0x71, 0x02, 0x4E, 0x77, 0x02, 0x4E, -+ 0x7D, 0x02, 0x4E, 0x83, 0x02, 0x4E, 0x89, 0x02, -+ 0x4E, 0x8F, 0x02, 0x4E, 0x95, 0x02, 0x4E, 0x9B, -+ 0x02, 0x4E, 0xA1, 0x02, 0x4E, 0xA7, 0x02, 0x4E, -+ 0xAD, 0x02, 0x4E, 0xB3, 0x02, 0x4E, 0xB9, 0x53, -+ 0xDB, 0xFE, 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xFD, -+ 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xFB, 0x02, 0x4F, -+ 0x8F, 0x53, 0xDB, 0xF7, 0x02, 0x4F, 0x8F, 0x53, -+ 0xDB, 0xEF, 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xDF, -+ 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xBF, 0x02, 0x4F, -+ 0x8F, 0x53, 0xDB, 0x7F, 0x02, 0x4F, 0x8F, 0x53, -+ 0xDA, 0xFE, 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xFD, -+ 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xFB, 0x02, 0x4F, -+ 0x8F, 0x53, 0xDA, 0xF7, 0x02, 0x4F, 0x8F, 0x53, -+ 0xDA, 0xEF, 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xDF, -+ 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xBF, 0x02, 0x4F, -+ 0x8F, 0x53, 0xDA, 0x7F, 0x02, 0x4F, 0x8F, 0x53, -+ 0xD9, 0xFE, 0x02, 0x4F, 0x8F, 0x53, 0xD9, 0xFD, -+ 0x02, 0x4F, 0x8F, 0x53, 0xD9, 0xFB, 0x02, 0x4F, -+ 0x8F, 0x53, 0xD9, 0xF7, 0x02, 0x4F, 0x8F, 0x85, -+ 0xD9, 0xD9, 0x85, 0xDA, 0xDA, 0x85, 0xDB, 0xDB, -+ 0x02, 0x4F, 0x8F, 0xE9, 0x64, 0x01, 0x60, 0x03, -+ 0x02, 0x4F, 0x8F, 0x90, 0x13, 0x2E, 0xE0, 0xB4, -+ 0x14, 0x00, 0x40, 0x03, 0x02, 0x4F, 0x86, 0x90, -+ 0x4E, 0xE6, 0xF8, 0x28, 0x28, 0x73, 0x02, 0x4F, -+ 0x22, 0x02, 0x4F, 0x27, 0x02, 0x4F, 0x2C, 0x02, -+ 0x4F, 0x31, 0x02, 0x4F, 0x36, 0x02, 0x4F, 0x3B, -+ 0x02, 0x4F, 0x40, 0x02, 0x4F, 0x45, 0x02, 0x4F, -+ 0x4A, 0x02, 0x4F, 0x4F, 0x02, 0x4F, 0x54, 0x02, -+ 0x4F, 0x59, 0x02, 0x4F, 0x5E, 0x02, 0x4F, 0x63, -+ 0x02, 0x4F, 0x68, 0x02, 0x4F, 0x6D, 0x02, 0x4F, -+ 0x72, 0x02, 0x4F, 0x77, 0x02, 0x4F, 0x7C, 0x02, -+ 0x4F, 0x81, 0x53, 0xDE, 0xFE, 0x80, 0x68, 0x53, -+ 0xDE, 0xFD, 0x80, 0x63, 0x53, 0xDE, 0xFB, 0x80, -+ 0x5E, 0x53, 0xDE, 0xF7, 0x80, 0x59, 0x53, 0xDE, -+ 0xEF, 0x80, 0x54, 0x53, 0xDE, 0xDF, 0x80, 0x4F, -+ 0x53, 0xDE, 0xBF, 0x80, 0x4A, 0x53, 0xDE, 0x7F, -+ 0x80, 0x45, 0x53, 0xDD, 0xFE, 0x80, 0x40, 0x53, -+ 0xDD, 0xFD, 0x80, 0x3B, 0x53, 0xDD, 0xFB, 0x80, -+ 0x36, 0x53, 0xDD, 0xF7, 0x80, 0x31, 0x53, 0xDD, -+ 0xEF, 0x80, 0x2C, 0x53, 0xDD, 0xDF, 0x80, 0x27, -+ 0x53, 0xDD, 0xBF, 0x80, 0x22, 0x53, 0xDD, 0x7F, -+ 0x80, 0x1D, 0x53, 0xDC, 0xFE, 0x80, 0x18, 0x53, -+ 0xDC, 0xFD, 0x80, 0x13, 0x53, 0xDC, 0xFB, 0x80, -+ 0x0E, 0x53, 0xDC, 0xF7, 0x80, 0x09, 0x85, 0xDC, -+ 0xDC, 0x85, 0xDD, 0xDD, 0x85, 0xDE, 0xDE, 0x7F, -+ 0x00, 0x22, 0x90, 0x13, 0x2F, 0xE0, 0x64, 0x02, -+ 0x60, 0x03, 0x02, 0x51, 0x6E, 0xE9, 0x60, 0x03, -+ 0x02, 0x50, 0x85, 0x90, 0x13, 0x2E, 0xE0, 0xB4, -+ 0x14, 0x00, 0x40, 0x03, 0x02, 0x50, 0x80, 0x90, -+ 0x4F, 0xB6, 0xF8, 0x28, 0x28, 0x73, 0x02, 0x4F, -+ 0xF2, 0x02, 0x4F, 0xFA, 0x02, 0x50, 0x02, 0x02, -+ 0x50, 0x09, 0x02, 0x50, 0x10, 0x02, 0x50, 0x17, -+ 0x02, 0x50, 0x1E, 0x02, 0x50, 0x25, 0x02, 0x50, -+ 0x2C, 0x02, 0x50, 0x33, 0x02, 0x50, 0x3A, 0x02, -+ 0x50, 0x41, 0x02, 0x50, 0x48, 0x02, 0x50, 0x4F, -+ 0x02, 0x50, 0x56, 0x02, 0x50, 0x5D, 0x02, 0x50, -+ 0x64, 0x02, 0x50, 0x6B, 0x02, 0x50, 0x72, 0x02, -+ 0x50, 0x79, 0xE5, 0xDB, 0x54, 0x01, 0xFE, 0x02, -+ 0x50, 0x82, 0xE5, 0xDB, 0x54, 0x02, 0xFE, 0x02, -+ 0x50, 0x82, 0xE5, 0xDB, 0x54, 0x04, 0xFE, 0x80, -+ 0x79, 0xE5, 0xDB, 0x54, 0x08, 0xFE, 0x80, 0x72, -+ 0xE5, 0xDB, 0x54, 0x10, 0xFE, 0x80, 0x6B, 0xE5, -+ 0xDB, 0x54, 0x20, 0xFE, 0x80, 0x64, 0xE5, 0xDB, -+ 0x54, 0x40, 0xFE, 0x80, 0x5D, 0xE5, 0xDB, 0x54, -+ 0x80, 0xFE, 0x80, 0x56, 0xE5, 0xDA, 0x54, 0x01, -+ 0xFE, 0x80, 0x4F, 0xE5, 0xDA, 0x54, 0x02, 0xFE, -+ 0x80, 0x48, 0xE5, 0xDA, 0x54, 0x04, 0xFE, 0x80, -+ 0x41, 0xE5, 0xDA, 0x54, 0x08, 0xFE, 0x80, 0x3A, -+ 0xE5, 0xDA, 0x54, 0x10, 0xFE, 0x80, 0x33, 0xE5, -+ 0xDA, 0x54, 0x20, 0xFE, 0x80, 0x2C, 0xE5, 0xDA, -+ 0x54, 0x40, 0xFE, 0x80, 0x25, 0xE5, 0xDA, 0x54, -+ 0x80, 0xFE, 0x80, 0x1E, 0xE5, 0xD9, 0x54, 0x01, -+ 0xFE, 0x80, 0x17, 0xE5, 0xD9, 0x54, 0x02, 0xFE, -+ 0x80, 0x10, 0xE5, 0xD9, 0x54, 0x04, 0xFE, 0x80, -+ 0x09, 0xE5, 0xD9, 0x54, 0x08, 0xFE, 0x80, 0x02, -+ 0xE4, 0xFE, 0xAF, 0x06, 0x22, 0xE9, 0x64, 0x01, -+ 0x60, 0x03, 0x02, 0x51, 0x6E, 0x90, 0x13, 0x2E, -+ 0xE0, 0xB4, 0x14, 0x00, 0x40, 0x03, 0x02, 0x51, -+ 0x6A, 0x90, 0x50, 0xA0, 0xF8, 0x28, 0x28, 0x73, -+ 0x02, 0x50, 0xDC, 0x02, 0x50, 0xE4, 0x02, 0x50, -+ 0xEC, 0x02, 0x50, 0xF3, 0x02, 0x50, 0xFA, 0x02, -+ 0x51, 0x01, 0x02, 0x51, 0x08, 0x02, 0x51, 0x0F, -+ 0x02, 0x51, 0x16, 0x02, 0x51, 0x1D, 0x02, 0x51, -+ 0x24, 0x02, 0x51, 0x2B, 0x02, 0x51, 0x32, 0x02, -+ 0x51, 0x39, 0x02, 0x51, 0x40, 0x02, 0x51, 0x47, -+ 0x02, 0x51, 0x4E, 0x02, 0x51, 0x55, 0x02, 0x51, -+ 0x5C, 0x02, 0x51, 0x63, 0xE5, 0xDE, 0x54, 0x01, -+ 0xFE, 0x02, 0x51, 0x6C, 0xE5, 0xDE, 0x54, 0x02, -+ 0xFE, 0x02, 0x51, 0x6C, 0xE5, 0xDE, 0x54, 0x04, -+ 0xFE, 0x80, 0x79, 0xE5, 0xDE, 0x54, 0x08, 0xFE, -+ 0x80, 0x72, 0xE5, 0xDE, 0x54, 0x10, 0xFE, 0x80, -+ 0x6B, 0xE5, 0xDE, 0x54, 0x20, 0xFE, 0x80, 0x64, -+ 0xE5, 0xDE, 0x54, 0x40, 0xFE, 0x80, 0x5D, 0xE5, -+ 0xDE, 0x54, 0x80, 0xFE, 0x80, 0x56, 0xE5, 0xDD, -+ 0x54, 0x01, 0xFE, 0x80, 0x4F, 0xE5, 0xDD, 0x54, -+ 0x02, 0xFE, 0x80, 0x48, 0xE5, 0xDD, 0x54, 0x04, -+ 0xFE, 0x80, 0x41, 0xE5, 0xDD, 0x54, 0x08, 0xFE, -+ 0x80, 0x3A, 0xE5, 0xDD, 0x54, 0x10, 0xFE, 0x80, -+ 0x33, 0xE5, 0xDD, 0x54, 0x20, 0xFE, 0x80, 0x2C, -+ 0xE5, 0xDD, 0x54, 0x40, 0xFE, 0x80, 0x25, 0xE5, -+ 0xDD, 0x54, 0x80, 0xFE, 0x80, 0x1E, 0xE5, 0xDC, -+ 0x54, 0x01, 0xFE, 0x80, 0x17, 0xE5, 0xDC, 0x54, -+ 0x02, 0xFE, 0x80, 0x10, 0xE5, 0xDC, 0x54, 0x04, -+ 0xFE, 0x80, 0x09, 0xE5, 0xDC, 0x54, 0x08, 0xFE, -+ 0x80, 0x02, 0xE4, 0xFE, 0xAF, 0x06, 0x22, 0x90, -+ 0x19, 0x40, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x40, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x41, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x41, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x42, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x42, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x43, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x43, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x44, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x44, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x45, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x45, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x46, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x46, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x47, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x48, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x49, -+ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x4A, 0x74, 0x01, -+ 0xF0, 0x90, 0x19, 0x4B, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x4C, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x4D, -+ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x4E, 0x74, 0x01, -+ 0xF0, 0x90, 0x19, 0x4F, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x50, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x51, -+ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x52, 0x74, 0x01, -+ 0xF0, 0x90, 0x19, 0x53, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x54, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x55, -+ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x56, 0x74, 0x01, -+ 0xF0, 0x90, 0x19, 0x57, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x58, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x59, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x59, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x5A, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x5A, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x5B, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x5B, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x5C, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x5C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x5D, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x5D, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x5E, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x5E, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x5F, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x5F, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x60, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x60, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x61, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x61, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x62, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x62, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x63, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x63, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x64, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x64, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x65, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x65, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x66, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x66, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x67, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x68, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x69, -+ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x6A, 0x74, 0x01, -+ 0xF0, 0x90, 0x19, 0x6B, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x6C, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x6D, -+ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x6E, 0x74, 0x01, -+ 0xF0, 0x90, 0x19, 0x6F, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x70, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x71, -+ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x72, 0x74, 0x01, -+ 0xF0, 0x90, 0x19, 0x73, 0x74, 0x01, 0xF0, 0x90, -+ 0x19, 0x74, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x75, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x76, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x77, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x78, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x79, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x79, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x7A, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x7A, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x7B, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x7B, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x7C, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x7C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x7D, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x7D, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x7E, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x7E, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x7F, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x7F, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x80, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x80, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x81, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x81, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x82, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x82, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x83, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x83, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x84, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x84, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x85, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x85, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x86, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x86, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x87, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x87, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x88, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x89, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x8A, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x8B, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x8C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x8D, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x8E, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x8F, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x90, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x91, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x92, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x93, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x94, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x95, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x96, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x97, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x98, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x98, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x99, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x99, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x9A, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x9A, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x9B, 0x74, 0x02, 0xF0, 0x80, -+ 0x06, 0x90, 0x19, 0x9B, 0x74, 0x03, 0xF0, 0x90, -+ 0x19, 0x9C, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, -+ 0x19, 0x9C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x9D, -+ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x9D, -+ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x9E, 0x74, 0x02, -+ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x9E, 0x74, 0x03, -+ 0xF0, 0x90, 0x19, 0x9F, 0x74, 0x02, 0xF0, 0x22, -+ 0x90, 0x19, 0x9F, 0x74, 0x03, 0xF0, 0x22, 0xE4, -+ 0x90, 0x88, 0xB0, 0xF0, 0x90, 0x12, 0xDA, 0xF0, -+ 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0xC3, 0x94, 0x50, -+ 0x50, 0x14, 0x74, 0x60, 0x2F, 0xF5, 0x82, 0xE4, -+ 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xD2, 0xB3, -+ 0x30, 0xB3, 0x05, 0x75, 0x9E, 0x55, 0x80, 0xF8, -+ 0xC2, 0xDB, 0xC2, 0x0E, 0xE4, 0x90, 0x12, 0xDA, -+ 0xF0, 0x90, 0xF2, 0xA8, 0xE0, 0xFF, 0x90, 0x12, -+ 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, 0x02, -+ 0x58, 0x78, 0x74, 0x00, 0x2E, 0xF5, 0x82, 0xE4, -+ 0x34, 0x50, 0xF5, 0x83, 0xE0, 0xB5, 0x06, 0x06, -+ 0x90, 0x88, 0xB0, 0xE0, 0x04, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, -+ 0x02, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x18, 0xF5, -+ 0x83, 0xE0, 0x90, 0x88, 0xC3, 0xF0, 0x75, 0xF0, -+ 0x04, 0xEF, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE5, -+ 0xF0, 0x34, 0x18, 0xF5, 0x83, 0xE0, 0x90, 0x88, -+ 0xC4, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x75, -+ 0xF0, 0x04, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, -+ 0xF0, 0x34, 0x18, 0xF5, 0x83, 0xE0, 0x90, 0x88, -+ 0xC5, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xA4, 0x24, -+ 0x02, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x30, 0xF5, -+ 0x83, 0xE0, 0x90, 0x88, 0xC7, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, -+ 0x01, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x30, 0xF5, -+ 0x83, 0xE0, 0x90, 0x88, 0xC8, 0xF0, 0x75, 0xF0, -+ 0x04, 0xEF, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, -+ 0xF0, 0x34, 0x30, 0xF5, 0x83, 0xE0, 0x90, 0x88, -+ 0xC9, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x75, -+ 0xF0, 0x04, 0xA4, 0x24, 0x52, 0xF5, 0x82, 0xE5, -+ 0xF0, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0x90, 0x88, -+ 0xCE, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xA4, 0x24, -+ 0x51, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x82, 0xF5, -+ 0x83, 0xE0, 0x90, 0x88, 0xCF, 0xF0, 0x90, 0x12, -+ 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, -+ 0x50, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x82, 0xF5, -+ 0x83, 0xE0, 0x90, 0x88, 0xD0, 0xF0, 0x74, 0x00, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, -+ 0xE0, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x88, -+ 0xF5, 0x83, 0xE0, 0x60, 0x03, 0x02, 0x57, 0x45, -+ 0x90, 0x12, 0xDA, 0xE0, 0xFB, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0x24, -+ 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, -+ 0x74, 0x01, 0xF0, 0x90, 0x88, 0xC2, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0x74, 0x00, 0x2B, 0xF5, 0x82, 0xE4, 0x34, -+ 0x50, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, -+ 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, -+ 0xF5, 0x83, 0x12, 0x5B, 0x88, 0x90, 0x88, 0xC6, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, -+ 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFB, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, -+ 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x40, -+ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x85, 0xF5, 0x83, -+ 0x12, 0x5B, 0x88, 0x90, 0x88, 0xCD, 0xE0, 0xFC, -+ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0x74, 0x00, 0x2B, 0xF5, 0x82, 0xE4, 0x34, -+ 0x50, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, -+ 0x24, 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, -+ 0xF5, 0x83, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x53, 0xF5, 0x82, -+ 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0xFE, 0xED, -+ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, -+ 0x50, 0xF5, 0x83, 0xE0, 0x7C, 0x00, 0x24, 0x00, -+ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0xDA, 0xE0, -+ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, -+ 0x83, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, -+ 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0x02, 0x58, 0x6F, 0x90, 0x12, 0xDA, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x24, -+ 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, 0xF5, -+ 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFC, 0xA3, -+ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x90, 0x88, 0xC2, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, -+ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xEF, 0x2B, -+ 0xFF, 0xEE, 0x3A, 0xFE, 0xED, 0x39, 0xFD, 0xEC, -+ 0x38, 0xFC, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0x5B, -+ 0x88, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0x00, 0xF5, -+ 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0x75, -+ 0xF0, 0x04, 0xA4, 0x24, 0x40, 0xF5, 0x82, 0xE5, -+ 0xF0, 0x34, 0x85, 0xF5, 0x83, 0xC0, 0x83, 0xC0, -+ 0x82, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, -+ 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x88, 0xC6, 0xE0, -+ 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, -+ 0xE0, 0xFB, 0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, -+ 0xED, 0x39, 0xFD, 0xEC, 0x38, 0xFC, 0xD0, 0x82, -+ 0xD0, 0x83, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDA, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, -+ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x24, -+ 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, 0xF5, -+ 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFC, 0xA3, -+ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, -+ 0x90, 0x88, 0xCD, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, -+ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xEF, 0x2B, -+ 0xFF, 0xEE, 0x3A, 0xFE, 0xED, 0x39, 0xFD, 0xEC, -+ 0x38, 0xFC, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0x5B, -+ 0x88, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, -+ 0x24, 0x53, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xED, 0x25, 0xE0, 0x24, 0x52, -+ 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, -+ 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, -+ 0x90, 0x12, 0xDA, 0xE0, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0x25, 0xE0, -+ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, -+ 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x5A, 0x1E, 0x90, -+ 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x55, 0x59, -+ 0x22, 0xE7, 0x09, 0xF6, 0x08, 0xDF, 0xFA, 0x80, -+ 0x46, 0xE7, 0x09, 0xF2, 0x08, 0xDF, 0xFA, 0x80, -+ 0x3E, 0x88, 0x82, 0x8C, 0x83, 0xE7, 0x09, 0xF0, -+ 0xA3, 0xDF, 0xFA, 0x80, 0x32, 0xE3, 0x09, 0xF6, -+ 0x08, 0xDF, 0xFA, 0x80, 0x78, 0xE3, 0x09, 0xF2, -+ 0x08, 0xDF, 0xFA, 0x80, 0x70, 0x88, 0x82, 0x8C, -+ 0x83, 0xE3, 0x09, 0xF0, 0xA3, 0xDF, 0xFA, 0x80, -+ 0x64, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xA3, 0xF6, -+ 0x08, 0xDF, 0xFA, 0x80, 0x58, 0x89, 0x82, 0x8A, -+ 0x83, 0xE0, 0xA3, 0xF2, 0x08, 0xDF, 0xFA, 0x80, -+ 0x4C, 0x80, 0xD2, 0x80, 0xFA, 0x80, 0xC6, 0x80, -+ 0xD4, 0x80, 0x69, 0x80, 0xF2, 0x80, 0x33, 0x80, -+ 0x10, 0x80, 0xA6, 0x80, 0xEA, 0x80, 0x9A, 0x80, -+ 0xA8, 0x80, 0xDA, 0x80, 0xE2, 0x80, 0xCA, 0x80, -+ 0x33, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, 0xE4, -+ 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, -+ 0x83, 0xCC, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, -+ 0xCC, 0xC5, 0x83, 0xCC, 0xDF, 0xE9, 0xDE, 0xE7, -+ 0x80, 0x0D, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, -+ 0xA3, 0xF6, 0x08, 0xDF, 0xF9, 0xEC, 0xFA, 0xA9, -+ 0xF0, 0xED, 0xFB, 0x22, 0x89, 0x82, 0x8A, 0x83, -+ 0xEC, 0xFA, 0xE0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, -+ 0xCC, 0xC5, 0x83, 0xCC, 0xF0, 0xA3, 0xC8, 0xC5, -+ 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xDF, 0xEA, -+ 0xDE, 0xE8, 0x80, 0xDB, 0x89, 0x82, 0x8A, 0x83, -+ 0xE4, 0x93, 0xA3, 0xF2, 0x08, 0xDF, 0xF9, 0x80, -+ 0xCC, 0x88, 0xF0, 0xEF, 0x60, 0x01, 0x0E, 0x4E, -+ 0x60, 0xC3, 0x88, 0xF0, 0xED, 0x24, 0x02, 0xB4, -+ 0x04, 0x00, 0x50, 0xB9, 0xF5, 0x82, 0xEB, 0x24, -+ 0x02, 0xB4, 0x04, 0x00, 0x50, 0xAF, 0x23, 0x23, -+ 0x45, 0x82, 0x23, 0x90, 0x58, 0xC9, 0x73, 0xBB, -+ 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, -+ 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, -+ 0x22, 0xEF, 0x8D, 0xF0, 0xA4, 0xA8, 0xF0, 0xCF, -+ 0x8C, 0xF0, 0xA4, 0x28, 0xCE, 0x8D, 0xF0, 0xA4, -+ 0x2E, 0xFE, 0x22, 0xBC, 0x00, 0x0B, 0xBE, 0x00, -+ 0x29, 0xEF, 0x8D, 0xF0, 0x84, 0xFF, 0xAD, 0xF0, -+ 0x22, 0xE4, 0xCC, 0xF8, 0x75, 0xF0, 0x08, 0xEF, -+ 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xEC, 0x33, 0xFC, -+ 0xEE, 0x9D, 0xEC, 0x98, 0x40, 0x05, 0xFC, 0xEE, -+ 0x9D, 0xFE, 0x0F, 0xD5, 0xF0, 0xE9, 0xE4, 0xCE, -+ 0xFD, 0x22, 0xED, 0xF8, 0xF5, 0xF0, 0xEE, 0x84, -+ 0x20, 0xD2, 0x1C, 0xFE, 0xAD, 0xF0, 0x75, 0xF0, -+ 0x08, 0xEF, 0x2F, 0xFF, 0xED, 0x33, 0xFD, 0x40, -+ 0x07, 0x98, 0x50, 0x06, 0xD5, 0xF0, 0xF2, 0x22, -+ 0xC3, 0x98, 0xFD, 0x0F, 0xD5, 0xF0, 0xEA, 0x22, -+ 0xC2, 0xD5, 0xEC, 0x30, 0xE7, 0x09, 0xB2, 0xD5, -+ 0xE4, 0xC3, 0x9D, 0xFD, 0xE4, 0x9C, 0xFC, 0xEE, -+ 0x30, 0xE7, 0x15, 0xB2, 0xD5, 0xE4, 0xC3, 0x9F, -+ 0xFF, 0xE4, 0x9E, 0xFE, 0x12, 0x59, 0x93, 0xC3, -+ 0xE4, 0x9D, 0xFD, 0xE4, 0x9C, 0xFC, 0x80, 0x03, -+ 0x12, 0x59, 0x93, 0x30, 0xD5, 0x07, 0xC3, 0xE4, -+ 0x9F, 0xFF, 0xE4, 0x9E, 0xFE, 0x22, 0xC5, 0xF0, -+ 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, -+ 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, -+ 0xE0, 0x38, 0xF0, 0x22, 0xE8, 0x8F, 0xF0, 0xA4, -+ 0xCC, 0x8B, 0xF0, 0xA4, 0x2C, 0xFC, 0xE9, 0x8E, -+ 0xF0, 0xA4, 0x2C, 0xFC, 0x8A, 0xF0, 0xED, 0xA4, -+ 0x2C, 0xFC, 0xEA, 0x8E, 0xF0, 0xA4, 0xCD, 0xA8, -+ 0xF0, 0x8B, 0xF0, 0xA4, 0x2D, 0xCC, 0x38, 0x25, -+ 0xF0, 0xFD, 0xE9, 0x8F, 0xF0, 0xA4, 0x2C, 0xCD, -+ 0x35, 0xF0, 0xFC, 0xEB, 0x8E, 0xF0, 0xA4, 0xFE, -+ 0xA9, 0xF0, 0xEB, 0x8F, 0xF0, 0xA4, 0xCF, 0xC5, -+ 0xF0, 0x2E, 0xCD, 0x39, 0xFE, 0xE4, 0x3C, 0xFC, -+ 0xEA, 0xA4, 0x2D, 0xCE, 0x35, 0xF0, 0xFD, 0xE4, -+ 0x3C, 0xFC, 0x22, 0x75, 0xF0, 0x08, 0x75, 0x82, -+ 0x00, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xCD, -+ 0x33, 0xCD, 0xCC, 0x33, 0xCC, 0xC5, 0x82, 0x33, -+ 0xC5, 0x82, 0x9B, 0xED, 0x9A, 0xEC, 0x99, 0xE5, -+ 0x82, 0x98, 0x40, 0x0C, 0xF5, 0x82, 0xEE, 0x9B, -+ 0xFE, 0xED, 0x9A, 0xFD, 0xEC, 0x99, 0xFC, 0x0F, -+ 0xD5, 0xF0, 0xD6, 0xE4, 0xCE, 0xFB, 0xE4, 0xCD, -+ 0xFA, 0xE4, 0xCC, 0xF9, 0xA8, 0x82, 0x22, 0xB8, -+ 0x00, 0xC1, 0xB9, 0x00, 0x59, 0xBA, 0x00, 0x2D, -+ 0xEC, 0x8B, 0xF0, 0x84, 0xCF, 0xCE, 0xCD, 0xFC, -+ 0xE5, 0xF0, 0xCB, 0xF9, 0x78, 0x18, 0xEF, 0x2F, -+ 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xEC, -+ 0x33, 0xFC, 0xEB, 0x33, 0xFB, 0x10, 0xD7, 0x03, -+ 0x99, 0x40, 0x04, 0xEB, 0x99, 0xFB, 0x0F, 0xD8, -+ 0xE5, 0xE4, 0xF9, 0xFA, 0x22, 0x78, 0x18, 0xEF, -+ 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, -+ 0xEC, 0x33, 0xFC, 0xC9, 0x33, 0xC9, 0x10, 0xD7, -+ 0x05, 0x9B, 0xE9, 0x9A, 0x40, 0x07, 0xEC, 0x9B, -+ 0xFC, 0xE9, 0x9A, 0xF9, 0x0F, 0xD8, 0xE0, 0xE4, -+ 0xC9, 0xFA, 0xE4, 0xCC, 0xFB, 0x22, 0x75, 0xF0, -+ 0x10, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, -+ 0x33, 0xFD, 0xCC, 0x33, 0xCC, 0xC8, 0x33, 0xC8, -+ 0x10, 0xD7, 0x07, 0x9B, 0xEC, 0x9A, 0xE8, 0x99, -+ 0x40, 0x0A, 0xED, 0x9B, 0xFD, 0xEC, 0x9A, 0xFC, -+ 0xE8, 0x99, 0xF8, 0x0F, 0xD5, 0xF0, 0xDA, 0xE4, -+ 0xCD, 0xFB, 0xE4, 0xCC, 0xFA, 0xE4, 0xC8, 0xF9, -+ 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, -+ 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8, 0x9C, 0x45, -+ 0xF0, 0x22, 0xE8, 0x60, 0x0F, 0xEC, 0xC3, 0x13, -+ 0xFC, 0xED, 0x13, 0xFD, 0xEE, 0x13, 0xFE, 0xEF, -+ 0x13, 0xFF, 0xD8, 0xF1, 0x22, 0xE8, 0x60, 0x0F, -+ 0xEF, 0xC3, 0x33, 0xFF, 0xEE, 0x33, 0xFE, 0xED, -+ 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xD8, 0xF1, 0x22, -+ 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEE, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x22, 0xA8, 0x82, 0x85, 0x83, -+ 0xF0, 0xD0, 0x83, 0xD0, 0x82, 0x12, 0x5B, 0xAB, -+ 0x12, 0x5B, 0xAB, 0x12, 0x5B, 0xAB, 0x12, 0x5B, -+ 0xAB, 0xE4, 0x73, 0xE4, 0x93, 0xA3, 0xC5, 0x83, -+ 0xC5, 0xF0, 0xC5, 0x83, 0xC8, 0xC5, 0x82, 0xC8, -+ 0xF0, 0xA3, 0xC5, 0x83, 0xC5, 0xF0, 0xC5, 0x83, -+ 0xC8, 0xC5, 0x82, 0xC8, 0x22, 0xA4, 0x25, 0x82, -+ 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, -+ 0x22, 0x75, 0x81, 0x64, 0xD2, 0xAF, 0xD2, 0xAE, -+ 0x12, 0x00, 0x40, 0x12, 0x7F, 0xF0, 0x7F, 0x64, -+ 0x7E, 0x00, 0x12, 0x67, 0xEE, 0x12, 0x78, 0x00, -+ 0x12, 0x51, 0x6F, 0xC2, 0x12, 0xE4, 0x90, 0x12, -+ 0x5B, 0xF0, 0xC2, 0x01, 0x75, 0x9E, 0x55, 0x20, -+ 0x0A, 0x03, 0x02, 0x5D, 0xFE, 0xC2, 0x0A, 0x85, -+ 0x0E, 0x09, 0x85, 0x0F, 0x0A, 0xE4, 0xF5, 0x0E, -+ 0xF5, 0x0F, 0x20, 0x12, 0x03, 0x12, 0x78, 0xE5, -+ 0x30, 0x03, 0x06, 0x12, 0x27, 0xB1, 0x02, 0x5D, -+ 0xFE, 0x20, 0x12, 0x03, 0x02, 0x5C, 0xB2, 0xE4, -+ 0x90, 0xF1, 0x0A, 0xF0, 0x90, 0xF1, 0x1B, 0xF0, -+ 0x90, 0xF1, 0x1F, 0x74, 0x0F, 0xF0, 0x90, 0xF1, -+ 0x22, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0xF1, 0x1C, -+ 0xF0, 0x90, 0xF1, 0x06, 0x04, 0xF0, 0xA3, 0xF0, -+ 0x90, 0xF1, 0x0E, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, -+ 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, -+ 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xE4, -+ 0xFD, 0xFC, 0xED, 0x25, 0xE0, 0xFE, 0xEC, 0x33, -+ 0x90, 0x12, 0xD8, 0xF0, 0xA3, 0xCE, 0xF0, 0x90, -+ 0x12, 0xD8, 0xE0, 0xFE, 0xA3, 0xE0, 0x7B, 0x01, -+ 0x7A, 0xF0, 0x79, 0x01, 0x24, 0x01, 0xF9, 0x74, -+ 0xF0, 0x3E, 0xFA, 0xE4, 0x12, 0x59, 0x6F, 0x04, -+ 0x29, 0xF9, 0xE4, 0x3A, 0xFA, 0x74, 0x08, 0x12, -+ 0x59, 0x6F, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0xED, -+ 0x64, 0x60, 0x4C, 0x70, 0xC5, 0x12, 0x5E, 0xE7, -+ 0x90, 0x12, 0x5B, 0xE0, 0x04, 0xF0, 0xE0, 0x64, -+ 0x60, 0x60, 0x03, 0x02, 0x5D, 0xFE, 0xF0, 0x90, -+ 0x8F, 0xFD, 0x74, 0xBB, 0xF0, 0xC2, 0x12, 0x02, -+ 0x5D, 0xFE, 0x90, 0x12, 0xBF, 0xE0, 0xFF, 0x12, -+ 0x63, 0xD9, 0x12, 0x27, 0xF9, 0xA2, 0xD9, 0xE4, -+ 0x33, 0x90, 0x8E, 0x01, 0xF0, 0x90, 0xF0, 0xC4, -+ 0x74, 0x01, 0xF0, 0x30, 0x15, 0x09, 0x12, 0x28, -+ 0x14, 0x12, 0x55, 0x1F, 0x12, 0x61, 0x81, 0x12, -+ 0x00, 0x4F, 0x12, 0x46, 0xE2, 0x12, 0x35, 0x80, -+ 0x90, 0x3F, 0xFD, 0xE0, 0xB4, 0x02, 0x19, 0xE5, -+ 0x91, 0x30, 0xE4, 0x05, 0x75, 0x9E, 0x55, 0x80, -+ 0xF6, 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, 0x00, -+ 0x40, 0x04, 0xC2, 0x84, 0x80, 0x02, 0xD2, 0x84, -+ 0xE5, 0x91, 0x30, 0xE4, 0x03, 0x02, 0x5D, 0xEA, -+ 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, 0x00, 0x40, -+ 0x7C, 0xE4, 0x90, 0x12, 0x63, 0xF0, 0xA3, 0xF0, -+ 0xB2, 0x14, 0x75, 0x8A, 0x8B, 0xF5, 0x8B, 0x30, -+ 0x14, 0x2C, 0x90, 0x12, 0xD5, 0xF0, 0x90, 0x12, -+ 0xD5, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, -+ 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x00, -+ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8B, 0xF5, 0x83, -+ 0xEE, 0xF0, 0x90, 0x12, 0xD5, 0xE0, 0x04, 0xF0, -+ 0xE0, 0xB4, 0x3C, 0xDA, 0x80, 0x2B, 0xE4, 0x90, -+ 0x12, 0xD5, 0xF0, 0x90, 0x12, 0xD5, 0xE0, 0xFF, -+ 0x24, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, -+ 0x83, 0xE0, 0xFE, 0x74, 0x00, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x8B, 0xF5, 0x83, 0xEE, 0xF0, 0x90, -+ 0x12, 0xD5, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x3C, -+ 0xDA, 0x90, 0x3F, 0xFD, 0xE0, 0x64, 0x01, 0x70, -+ 0x7B, 0xC2, 0x84, 0x7F, 0x32, 0xFE, 0x12, 0x67, -+ 0xEE, 0xD2, 0x84, 0x80, 0x6F, 0x30, 0x0C, 0x6C, -+ 0x30, 0x07, 0x16, 0x90, 0x3F, 0xFD, 0xE0, 0xB4, -+ 0x01, 0x0B, 0xC2, 0x84, 0x7F, 0x32, 0x7E, 0x00, -+ 0x12, 0x67, 0xEE, 0xD2, 0x84, 0xC2, 0x07, 0x80, -+ 0x53, 0x90, 0x12, 0x8B, 0xE4, 0xF0, 0xA3, 0x74, -+ 0x64, 0xF0, 0x7F, 0x19, 0x7E, 0x00, 0x12, 0x67, -+ 0xEE, 0x90, 0x12, 0x8C, 0xE0, 0x24, 0xFF, 0xF0, -+ 0x90, 0x12, 0x8B, 0xE0, 0x34, 0xFF, 0xF0, 0x75, -+ 0x9E, 0x55, 0x30, 0x0C, 0x0D, 0xD3, 0xA3, 0xE0, -+ 0x94, 0x00, 0x90, 0x12, 0x8B, 0xE0, 0x94, 0x00, -+ 0x50, 0xD8, 0x30, 0x0C, 0x1F, 0xC2, 0x84, 0x7F, -+ 0x19, 0x7E, 0x00, 0x12, 0x67, 0xEE, 0xD2, 0x84, -+ 0x80, 0x12, 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, -+ 0x00, 0x40, 0x09, 0x30, 0x0C, 0x04, 0xD2, 0x0B, -+ 0x80, 0x02, 0xC2, 0x0B, 0xC2, 0x15, 0x20, 0x05, -+ 0x03, 0x02, 0x5E, 0xDB, 0xC2, 0x05, 0xC2, 0x03, -+ 0x90, 0x8F, 0xFF, 0xE0, 0x64, 0xAF, 0x70, 0x2A, -+ 0xF0, 0x12, 0x67, 0x75, 0xE4, 0xF5, 0xA1, 0x7F, -+ 0x32, 0xFE, 0x12, 0x67, 0xEE, 0xE4, 0xF5, 0xA1, -+ 0x7F, 0x32, 0xFE, 0x12, 0x67, 0xEE, 0xE4, 0xF5, -+ 0xA1, 0x7F, 0x32, 0xFE, 0x12, 0x67, 0xEE, 0x75, -+ 0x87, 0x02, 0x75, 0x97, 0x55, 0x00, 0x00, 0x02, -+ 0x5E, 0xE0, 0x90, 0x8F, 0xFF, 0xE0, 0x64, 0xAE, -+ 0x70, 0x03, 0x02, 0x5E, 0xE0, 0x90, 0x8F, 0xFF, -+ 0xE0, 0xB4, 0xBF, 0x05, 0xD2, 0x03, 0x02, 0x5E, -+ 0xE0, 0x90, 0x8F, 0xFF, 0xE0, 0xB4, 0xCC, 0x24, -+ 0xC2, 0x84, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x67, -+ 0xEE, 0xD2, 0x84, 0x7F, 0xF8, 0x7E, 0x8E, 0x12, -+ 0x67, 0xEE, 0xC2, 0x84, 0x7F, 0x64, 0x7E, 0x00, -+ 0x12, 0x67, 0xEE, 0xD2, 0x84, 0xE4, 0x90, 0x8F, -+ 0xFF, 0xF0, 0x80, 0x64, 0x90, 0x8F, 0xFF, 0xE0, -+ 0xB4, 0xC3, 0x04, 0xD2, 0x01, 0x80, 0x59, 0x90, -+ 0x8F, 0xFF, 0xE0, 0x64, 0xC5, 0x70, 0x38, 0xF0, -+ 0x90, 0x8F, 0xFD, 0x74, 0xAA, 0xF0, 0xD2, 0x12, -+ 0xE4, 0x90, 0x12, 0x5B, 0xF0, 0x90, 0xF1, 0x0A, -+ 0xF0, 0x90, 0xF1, 0x1F, 0x74, 0x14, 0xF0, 0x90, -+ 0xF1, 0x22, 0xF0, 0xE4, 0x90, 0xF1, 0x1C, 0xF0, -+ 0x75, 0x9E, 0x55, 0x90, 0xF0, 0xC5, 0xE0, 0x44, -+ 0x01, 0xF0, 0x12, 0x27, 0xF9, 0x90, 0xF0, 0xC4, -+ 0x74, 0x01, 0xF0, 0xC2, 0x0A, 0x80, 0x19, 0x90, -+ 0x8F, 0xFF, 0xE0, 0x64, 0xD1, 0x60, 0x11, 0x90, -+ 0x8F, 0xFF, 0xE0, 0xB4, 0xE1, 0x0A, 0x12, 0x66, -+ 0x0C, 0x80, 0x05, 0x30, 0x06, 0x02, 0xC2, 0x06, -+ 0x12, 0x79, 0x05, 0x02, 0x5B, 0xF4, 0x22, 0x90, -+ 0x12, 0x5B, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, -+ 0x1F, 0x90, 0x12, 0xDA, 0xF0, 0xEF, 0x54, 0x07, -+ 0xA3, 0xF0, 0x90, 0x12, 0x5B, 0xE0, 0x24, 0x40, -+ 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, -+ 0xB4, 0x01, 0x1A, 0x74, 0x41, 0x2F, 0xF5, 0x82, -+ 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, 0xB4, 0x02, -+ 0x0C, 0x90, 0x12, 0x5B, 0xE0, 0xD3, 0x94, 0x00, -+ 0x40, 0x03, 0x02, 0x5F, 0xAB, 0x90, 0x12, 0x5B, -+ 0xE0, 0xFF, 0x24, 0x40, 0xF5, 0x82, 0xE4, 0x34, -+ 0x19, 0xF5, 0x83, 0xE0, 0xB4, 0x01, 0x17, 0x74, -+ 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, -+ 0x83, 0xE0, 0xB4, 0x03, 0x09, 0x90, 0x12, 0x5B, -+ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x5D, 0x90, 0x12, -+ 0x5B, 0xE0, 0xFF, 0x24, 0x40, 0xF5, 0x82, 0xE4, -+ 0x34, 0x19, 0xF5, 0x83, 0xE0, 0xB4, 0x03, 0x17, -+ 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x19, -+ 0xF5, 0x83, 0xE0, 0xB4, 0x02, 0x09, 0x90, 0x12, -+ 0x5B, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x34, 0x90, -+ 0x12, 0x5B, 0xE0, 0xFF, 0x24, 0x40, 0xF5, 0x82, -+ 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, 0x64, 0x03, -+ 0x60, 0x03, 0x02, 0x60, 0x58, 0x74, 0x41, 0x2F, -+ 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, -+ 0x64, 0x01, 0x60, 0x03, 0x02, 0x60, 0x58, 0x90, -+ 0x12, 0x5B, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, -+ 0x02, 0x60, 0x58, 0x90, 0x12, 0x5B, 0xE0, 0x75, -+ 0xF0, 0x02, 0xA4, 0xFF, 0xAE, 0xF0, 0x90, 0x12, -+ 0x75, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, -+ 0x79, 0x01, 0x24, 0x01, 0xF9, 0x74, 0xF0, 0x3E, -+ 0xFA, 0x90, 0x12, 0x5C, 0x74, 0x01, 0xF0, 0xA3, -+ 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x90, 0x12, 0x5C, -+ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, -+ 0xE4, 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5D, 0x75, -+ 0xF0, 0x01, 0x12, 0x5A, 0x1E, 0x90, 0x12, 0x5C, -+ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, -+ 0x74, 0x20, 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5B, -+ 0xE0, 0x24, 0xFF, 0xFF, 0xE4, 0x34, 0xFF, 0xFE, -+ 0xEF, 0x25, 0xE0, 0xFF, 0xEE, 0x33, 0xFE, 0x90, -+ 0x12, 0x75, 0xF0, 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, -+ 0x79, 0x01, 0x24, 0x01, 0xF9, 0x74, 0xF0, 0x3E, -+ 0xFA, 0x90, 0x12, 0x5C, 0x74, 0x01, 0xF0, 0xA3, -+ 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x90, 0x12, 0x5C, -+ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, -+ 0xE4, 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5D, 0x75, -+ 0xF0, 0x01, 0x12, 0x5A, 0x1E, 0x90, 0x12, 0x5C, -+ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, -+ 0x74, 0x10, 0x12, 0x59, 0x6F, 0x02, 0x61, 0x4A, -+ 0x90, 0x12, 0x5B, 0xE0, 0xFF, 0x24, 0x40, 0xF5, -+ 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, 0xB4, -+ 0x01, 0x0F, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, -+ 0x34, 0x19, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, -+ 0x28, 0x90, 0x12, 0x5B, 0xE0, 0xFF, 0x24, 0x40, -+ 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, -+ 0x64, 0x03, 0x60, 0x03, 0x02, 0x61, 0x4A, 0x74, -+ 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, -+ 0x83, 0xE0, 0x64, 0x03, 0x60, 0x03, 0x02, 0x61, -+ 0x4A, 0x90, 0x12, 0x5B, 0xE0, 0x75, 0xF0, 0x02, -+ 0xA4, 0xFF, 0xAE, 0xF0, 0x90, 0x12, 0x75, 0xEE, -+ 0xF0, 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, 0x79, 0x01, -+ 0x24, 0x01, 0xF9, 0x74, 0xF0, 0x3E, 0xFA, 0x90, -+ 0x12, 0x5C, 0x74, 0x01, 0xF0, 0xA3, 0xEA, 0xF0, -+ 0xA3, 0xE9, 0xF0, 0x90, 0x12, 0x5C, 0xE0, 0xFB, -+ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0xE4, 0x12, -+ 0x59, 0x6F, 0x90, 0x12, 0x5D, 0x75, 0xF0, 0x01, -+ 0x12, 0x5A, 0x1E, 0x90, 0x12, 0x5C, 0xE0, 0xFB, -+ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x74, 0x10, -+ 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5B, 0xE0, 0x24, -+ 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xEF, 0x25, 0xE0, -+ 0xFF, 0xEE, 0x33, 0xFE, 0x90, 0x12, 0x75, 0xF0, -+ 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, 0x79, 0x01, 0x24, -+ 0x01, 0xF9, 0x74, 0xF0, 0x3E, 0xFA, 0x90, 0x12, -+ 0x5C, 0x74, 0x01, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, -+ 0xE9, 0xF0, 0x90, 0x12, 0x5C, 0xE0, 0xFB, 0xA3, -+ 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0xE4, 0x12, 0x59, -+ 0x6F, 0x90, 0x12, 0x5D, 0x75, 0xF0, 0x01, 0x12, -+ 0x5A, 0x1E, 0x90, 0x12, 0x5C, 0xE0, 0xFB, 0xA3, -+ 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x74, 0x20, 0x12, -+ 0x59, 0x6F, 0x12, 0x27, 0xF9, 0x90, 0xF0, 0xC4, -+ 0x74, 0x01, 0xF0, 0x20, 0x0A, 0x05, 0x75, 0x9E, -+ 0x55, 0x80, 0xF8, 0x90, 0x00, 0x01, 0xE0, 0xFE, -+ 0x90, 0x00, 0x00, 0xE0, 0x7C, 0x00, 0x24, 0x00, -+ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0x5B, 0xE0, -+ 0x25, 0xE0, 0x24, 0xA0, 0xF5, 0x82, 0xE4, 0x34, -+ 0x19, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0x22, 0xE4, 0x90, 0x12, 0xDB, 0xF0, 0x90, 0x12, -+ 0xDA, 0xF0, 0x90, 0xF2, 0xA8, 0xE0, 0xFF, 0x90, -+ 0x12, 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, -+ 0x02, 0x63, 0xD0, 0x74, 0x60, 0x2E, 0xF5, 0x82, -+ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x01, -+ 0x60, 0x03, 0x02, 0x63, 0xB5, 0xEE, 0x25, 0xE0, -+ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, -+ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0xFF, -+ 0xEE, 0x94, 0x00, 0x40, 0x12, 0x90, 0x12, 0xDB, -+ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, -+ 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x80, 0x22, 0x90, -+ 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, -+ 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xA3, -+ 0xE0, 0xFF, 0x90, 0x12, 0xDB, 0xE0, 0x24, 0x00, -+ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, -+ 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, 0x04, -+ 0xA4, 0x24, 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, -+ 0x86, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x02, -+ 0x12, 0x5B, 0x62, 0xE4, 0x7B, 0xFF, 0xFA, 0xF9, -+ 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x50, 0x12, 0x90, -+ 0x12, 0xDB, 0xE0, 0x24, 0x28, 0xF5, 0x82, 0xE4, -+ 0x34, 0x8A, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x80, -+ 0x31, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, 0x04, -+ 0xA4, 0x24, 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, -+ 0x86, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, -+ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x02, -+ 0x12, 0x5B, 0x62, 0x90, 0x12, 0xDB, 0xE0, 0x24, -+ 0x28, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, -+ 0xEF, 0xF0, 0x85, 0x0B, 0xAF, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x01, -+ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, 0xF5, 0x83, -+ 0xE0, 0xF5, 0xA9, 0x75, 0xF0, 0x04, 0xEF, 0xA4, -+ 0x24, 0x02, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, -+ 0xF5, 0x83, 0xE0, 0xF5, 0xAA, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x03, -+ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, 0xF5, 0x83, -+ 0xE0, 0xF5, 0xAB, 0x75, 0xF0, 0x04, 0xEF, 0xA4, -+ 0x24, 0x81, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, -+ 0xF5, 0x83, 0xE0, 0xF5, 0xA2, 0x90, 0x12, 0xDA, -+ 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x82, -+ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, 0xF5, 0x83, -+ 0xE0, 0xF5, 0xA3, 0x75, 0xF0, 0x04, 0xEF, 0xA4, -+ 0x24, 0x83, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, -+ 0xF5, 0x83, 0xE0, 0xF5, 0xA4, 0xD2, 0xB0, 0x85, -+ 0x0C, 0xAF, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x75, -+ 0xF0, 0x04, 0xA4, 0x24, 0x41, 0xF5, 0x82, 0xE5, -+ 0xF0, 0x34, 0x85, 0xF5, 0x83, 0xE0, 0xF5, 0xA9, -+ 0x75, 0xF0, 0x04, 0xEF, 0xA4, 0x24, 0x42, 0xF5, -+ 0x82, 0xE5, 0xF0, 0x34, 0x85, 0xF5, 0x83, 0xE0, -+ 0xF5, 0xAA, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, -+ 0x04, 0xA4, 0x24, 0x43, 0xF5, 0x82, 0xE5, 0xF0, -+ 0x34, 0x85, 0xF5, 0x83, 0xE0, 0xF5, 0xAB, 0x20, -+ 0xB0, 0x06, 0x30, 0x0E, 0x03, 0x20, 0xDA, 0x05, -+ 0x75, 0x9E, 0x55, 0x80, 0xF2, 0xC2, 0xDA, 0xC2, -+ 0x0E, 0xAF, 0xA6, 0xEF, 0xFE, 0xAD, 0xA7, 0x7C, -+ 0x00, 0xE4, 0x2D, 0xFF, 0xEC, 0x3E, 0xFE, 0x90, -+ 0x28, 0x0B, 0xE4, 0x93, 0xFD, 0xC3, 0x13, 0x2F, -+ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0xDB, 0xE0, -+ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, -+ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, -+ 0xEF, 0xF0, 0xD2, 0xB0, 0x20, 0xB0, 0x06, 0x30, -+ 0x0E, 0x03, 0x20, 0xDA, 0x05, 0x75, 0x9E, 0x55, -+ 0x80, 0xF2, 0xC2, 0xDA, 0xC2, 0x0E, 0xAF, 0xA6, -+ 0xEF, 0xFE, 0xAD, 0xA7, 0x7C, 0x00, 0xE4, 0x2D, -+ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x28, 0x0C, 0xE4, -+ 0x93, 0xFD, 0xC3, 0x13, 0x2F, 0xFF, 0xEC, 0x3E, -+ 0xFE, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0x25, -+ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, -+ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, -+ 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xDB, -+ 0xE0, 0xFF, 0x65, 0x08, 0x60, 0x12, 0x90, 0x88, -+ 0xB0, 0xE0, 0xFE, 0xEF, 0x6E, 0x60, 0x09, 0x90, -+ 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x61, 0x8A, -+ 0x90, 0x12, 0xDB, 0xE0, 0x90, 0x88, 0xB0, 0xF0, -+ 0x22, 0xAB, 0x07, 0xC2, 0x18, 0xEB, 0x25, 0xE0, -+ 0xFE, 0xE4, 0x33, 0x90, 0x12, 0xDC, 0xF0, 0xA3, -+ 0xCE, 0xF0, 0xE4, 0xFA, 0xEA, 0xFF, 0x7E, 0x00, -+ 0x7C, 0x00, 0x7D, 0x28, 0x12, 0x59, 0x81, 0xAC, -+ 0x06, 0xAD, 0x07, 0xEB, 0x25, 0xE0, 0xFF, 0xE4, -+ 0x33, 0xFE, 0xED, 0x2F, 0xFF, 0xEC, 0x3E, 0x90, -+ 0x12, 0xDC, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, -+ 0xDC, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x24, 0x01, -+ 0xF5, 0x82, 0x74, 0x20, 0x3C, 0xF5, 0x83, 0xE0, -+ 0xFE, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0x74, 0x20, -+ 0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0xEE, 0xED, 0xFF, -+ 0x90, 0x12, 0xDA, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, -+ 0xA3, 0xE0, 0xA3, 0xE0, 0xFD, 0x24, 0x01, 0xF5, -+ 0x82, 0x74, 0x00, 0x3C, 0xF5, 0x83, 0xE0, 0xFE, -+ 0x74, 0x00, 0x2D, 0xF5, 0x82, 0x74, 0x00, 0x3C, -+ 0xF5, 0x83, 0xE0, 0xFD, 0xEE, 0xED, 0xFF, 0x90, -+ 0x12, 0xDB, 0xE0, 0x24, 0xFA, 0xFD, 0x90, 0x12, -+ 0xDA, 0xE0, 0x34, 0x00, 0xFC, 0xD3, 0xEF, 0x9D, -+ 0xEE, 0x9C, 0x40, 0x0E, 0x90, 0x12, 0x72, 0xE0, -+ 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, 0x71, 0xE0, -+ 0x04, 0xF0, 0xEF, 0x24, 0xFA, 0xFF, 0xE4, 0x3E, -+ 0xFE, 0xD3, 0x90, 0x12, 0xDB, 0xE0, 0x9F, 0x90, -+ 0x12, 0xDA, 0xE0, 0x9E, 0x40, 0x0E, 0x90, 0x12, -+ 0xBE, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, -+ 0xBD, 0xE0, 0x04, 0xF0, 0x0A, 0xEA, 0x64, 0x1E, -+ 0x60, 0x03, 0x02, 0x63, 0xEC, 0x90, 0x12, 0xBF, -+ 0xE0, 0x04, 0xF0, 0xE0, 0x64, 0x14, 0x70, 0x37, -+ 0xF0, 0x90, 0x12, 0xBD, 0xE0, 0xFE, 0xA3, 0xE0, -+ 0xFF, 0xD3, 0x90, 0x12, 0x72, 0xE0, 0x9F, 0x90, -+ 0x12, 0x71, 0xE0, 0x9E, 0x40, 0x02, 0xD2, 0x18, -+ 0x30, 0x18, 0x1C, 0xC2, 0x18, 0xE4, 0x90, 0x12, -+ 0x71, 0xF0, 0xA3, 0xF0, 0x90, 0x12, 0xBD, 0xF0, -+ 0xA3, 0xF0, 0x90, 0xF1, 0x04, 0x74, 0x1E, 0xF0, -+ 0x90, 0xF0, 0xC5, 0xE0, 0x44, 0x01, 0xF0, 0x22, -+ 0x30, 0x98, 0x04, 0xD2, 0x05, 0xC2, 0x98, 0x30, -+ 0x99, 0x24, 0xD2, 0x06, 0xC2, 0x99, 0x30, 0x0B, -+ 0x19, 0xB2, 0x14, 0x30, 0x14, 0x08, 0x75, 0x8A, -+ 0x8F, 0x75, 0x8B, 0x00, 0x80, 0x06, 0x75, 0x8A, -+ 0x8F, 0x75, 0x8B, 0x78, 0xC2, 0x0B, 0xD2, 0x07, -+ 0x80, 0x04, 0xC2, 0x0C, 0xC2, 0x07, 0x32, 0x32, -+ 0x05, 0x00, 0x03, 0x20, 0x03, 0x03, 0xE5, 0xC0, -+ 0x54, 0x02, 0x70, 0x03, 0x02, 0x5B, 0xD1, 0xE5, -+ 0xC0, 0x54, 0x02, 0x60, 0x13, 0x90, 0x00, 0x00, -+ 0x7F, 0x00, 0x7E, 0x90, 0xE4, 0x74, 0xFF, 0xF0, -+ 0xA3, 0x75, 0x9E, 0x55, 0xDF, 0xF9, 0xDE, 0xF7, -+ 0x02, 0x5B, 0xD1, 0xC2, 0xD3, 0xC2, 0xD4, 0x75, -+ 0x9E, 0x55, 0x12, 0x65, 0xEF, 0x12, 0x65, 0xEF, -+ 0x78, 0x01, 0x74, 0x55, 0xF6, 0x64, 0xFF, 0x08, -+ 0xB8, 0x60, 0xF9, 0x78, 0x80, 0x74, 0x55, 0xF6, -+ 0x64, 0xFF, 0x08, 0xB8, 0x00, 0xF9, 0x75, 0x9E, -+ 0x55, 0x12, 0x65, 0xEF, 0x12, 0x65, 0xEF, 0x78, -+ 0x01, 0x74, 0x55, 0xC0, 0xE0, 0x66, 0x70, 0x22, -+ 0xD0, 0xE0, 0x63, 0xE0, 0xFF, 0x08, 0xB8, 0x60, -+ 0xF2, 0x78, 0x80, 0x74, 0x55, 0xC0, 0xE0, 0x66, -+ 0x70, 0x10, 0xD0, 0xE0, 0x63, 0xE0, 0xFF, 0x08, -+ 0xB8, 0x00, 0xF2, 0x90, 0x00, 0x00, 0x74, 0x01, -+ 0xF0, 0x22, 0x90, 0x00, 0x00, 0x74, 0x00, 0xF0, -+ 0xA3, 0x90, 0x00, 0x01, 0xE8, 0xF0, 0xD0, 0xE0, -+ 0x22, 0x78, 0x60, 0x74, 0x55, 0xF6, 0x64, 0xFF, -+ 0x08, 0xB8, 0x81, 0xF9, 0x75, 0x9E, 0x55, 0x12, -+ 0x65, 0xEF, 0x12, 0x65, 0xEF, 0x78, 0x60, 0x74, -+ 0x55, 0xC0, 0xE0, 0x66, 0x70, 0x11, 0xD0, 0xE0, -+ 0x63, 0xE0, 0xFF, 0x08, 0xB8, 0x81, 0xF2, 0x90, -+ 0x00, 0x00, 0xE0, 0x44, 0x02, 0xF0, 0x22, 0x90, -+ 0x00, 0x00, 0xE0, 0x44, 0x00, 0xF0, 0x90, 0x00, -+ 0x02, 0xE8, 0xF0, 0xD0, 0xE0, 0x22, 0xC0, 0xE0, -+ 0xC0, 0xD0, 0xD0, 0xD0, 0xD0, 0xE0, 0x32, 0x78, -+ 0x00, 0xD8, 0xFE, 0x22, 0x78, 0x96, 0x79, 0xFA, -+ 0xD9, 0xFE, 0xD8, 0xFA, 0x22, 0x78, 0x02, 0x79, -+ 0xFA, 0x7A, 0xFA, 0xDA, 0xFE, 0xD9, 0xFA, 0xD8, -+ 0xF6, 0x22, 0x00, 0x00, 0xE4, 0x90, 0x12, 0xDE, -+ 0xF0, 0xA3, 0xF0, 0x90, 0x12, 0xDA, 0xF0, 0xA3, -+ 0xF0, 0xB2, 0x86, 0xB2, 0x86, 0xFD, 0xFC, 0xB2, -+ 0x85, 0x75, 0x9E, 0x55, 0xED, 0xAE, 0x04, 0x78, -+ 0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, -+ 0xFF, 0x90, 0x12, 0xDA, 0xEE, 0xF0, 0xA3, 0xEF, -+ 0xF0, 0xE4, 0x90, 0x12, 0xE0, 0xF0, 0xA3, 0xF0, -+ 0x90, 0x12, 0xDA, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, -+ 0xEA, 0xA3, 0xF0, 0xEB, 0xA3, 0xF0, 0xE4, 0xF9, -+ 0xFB, 0xFA, 0x90, 0x12, 0xDA, 0xE0, 0xFE, 0xA3, -+ 0xE0, 0xFF, 0x12, 0x78, 0xFD, 0xEF, 0x29, 0xF9, -+ 0x90, 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x70, 0x06, -+ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x0B, 0xBB, -+ 0x00, 0x01, 0x0A, 0xEB, 0x64, 0x08, 0x4A, 0x70, -+ 0xD9, 0x90, 0x12, 0xDC, 0xE0, 0x29, 0xFF, 0xA3, -+ 0xE0, 0x2F, 0x24, 0x08, 0xF9, 0xF4, 0x04, 0xF9, -+ 0xFF, 0x90, 0x12, 0xDF, 0xE0, 0x2F, 0xF0, 0x90, -+ 0x12, 0xDE, 0xE0, 0x34, 0x00, 0xF0, 0x90, 0x12, -+ 0xE1, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, -+ 0xE0, 0xE0, 0x04, 0xF0, 0xC3, 0x90, 0x12, 0xE1, -+ 0xE0, 0x94, 0x10, 0x90, 0x12, 0xE0, 0xE0, 0x64, -+ 0x80, 0x94, 0x80, 0x40, 0x8B, 0x0D, 0xBD, 0x00, -+ 0x01, 0x0C, 0xED, 0x70, 0x03, 0xEC, 0x64, 0x01, -+ 0x60, 0x03, 0x02, 0x66, 0x1F, 0x90, 0x12, 0xDE, -+ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0x90, 0x8E, -+ 0x0E, 0xF0, 0xED, 0x90, 0x8E, 0x0F, 0xF0, 0x90, -+ 0x8E, 0x0D, 0x74, 0xAA, 0xF0, 0xB2, 0x86, 0xB2, -+ 0x86, 0x75, 0x9E, 0x55, 0x80, 0xFB, 0x22, 0x75, -+ 0x9E, 0x55, 0x90, 0xF1, 0x40, 0x74, 0x03, 0xF0, -+ 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x7F, -+ 0x01, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x75, 0x9E, -+ 0x55, 0x90, 0xF1, 0x41, 0x74, 0x01, 0xF0, 0x7F, -+ 0x05, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x7F, 0x05, -+ 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x75, 0x9E, 0x55, -+ 0x90, 0xF1, 0x41, 0x74, 0x13, 0xF0, 0x7F, 0x05, -+ 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x7F, 0x05, 0x7E, -+ 0x00, 0x12, 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x90, -+ 0xF1, 0x41, 0x74, 0x1F, 0xF0, 0x7F, 0x05, 0x7E, -+ 0x00, 0x12, 0x78, 0x5A, 0x7F, 0x05, 0x7E, 0x00, -+ 0x12, 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x90, 0xF1, -+ 0x41, 0x74, 0x3F, 0xF0, 0x7F, 0x05, 0x7E, 0x00, -+ 0x12, 0x78, 0x5A, 0x7F, 0x05, 0x7E, 0x00, 0x12, -+ 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x90, 0xF1, 0x40, -+ 0x74, 0x83, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, -+ 0x78, 0x5A, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x78, -+ 0x5A, 0x75, 0x9E, 0x55, 0x22, 0xE4, 0x90, 0xF0, -+ 0xC4, 0xF0, 0x75, 0x9E, 0x55, 0xFD, 0xFC, 0x90, -+ 0xF1, 0x47, 0xE0, 0xFE, 0x90, 0xF1, 0x48, 0xE0, -+ 0x7A, 0x00, 0x24, 0x00, 0xFB, 0xEA, 0x3E, 0xFA, -+ 0x90, 0xF1, 0x49, 0xE0, 0x7F, 0x00, 0xFE, 0xEF, -+ 0x2B, 0xFF, 0xEA, 0x3E, 0xFE, 0x90, 0xF1, 0x4A, -+ 0xE0, 0x7A, 0x00, 0x2F, 0xFD, 0xEA, 0x3E, 0xFC, -+ 0x90, 0xF1, 0x40, 0x74, 0xE3, 0xF0, 0xE4, 0x90, -+ 0xF1, 0x41, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0x12, -+ 0x78, 0xB6, 0x75, 0x9E, 0x55, 0x90, 0xF1, 0x41, -+ 0x74, 0x40, 0xF0, 0x7F, 0x05, 0x7E, 0x00, 0x12, -+ 0x78, 0x5A, 0x7F, 0x05, 0x7E, 0x00, 0x12, 0x78, -+ 0x5A, 0x75, 0x9E, 0x55, 0xE4, 0x90, 0xF1, 0x41, -+ 0xF0, 0x90, 0xF1, 0x40, 0xF0, 0x7F, 0x02, 0xFE, -+ 0x12, 0x78, 0x5A, 0x7F, 0x02, 0x7E, 0x00, 0x12, -+ 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x22, 0xEF, 0x1F, -+ 0x70, 0x01, 0x1E, 0x75, 0x9E, 0x55, 0xD3, 0xEF, -+ 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0xEF, 0x22, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0xE5, 0xC0, 0x30, 0xE3, 0x1B, 0x12, 0x67, 0x75, -+ 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x12, -+ 0x66, 0xE7, 0x12, 0x26, 0x17, 0x12, 0x00, 0x36, -+ 0x12, 0x78, 0xD8, 0x12, 0x41, 0x2D, 0x80, 0x36, -+ 0xE5, 0xC0, 0x30, 0xE2, 0x0D, 0x12, 0x66, 0xE7, -+ 0x90, 0xF0, 0xC4, 0x74, 0x01, 0xF0, 0xD2, 0xAF, -+ 0x80, 0x24, 0xE5, 0xC0, 0x30, 0xE0, 0x0B, 0x12, -+ 0x66, 0xE7, 0x90, 0xF0, 0xC4, 0x74, 0x01, 0xF0, -+ 0x80, 0x14, 0xE5, 0xC0, 0x30, 0xE1, 0x0F, 0x12, -+ 0x66, 0xE7, 0x12, 0x26, 0x17, 0x12, 0x00, 0x36, -+ 0x12, 0x78, 0xD8, 0x12, 0x41, 0x2D, 0xE4, 0xF5, -+ 0xC0, 0x22, 0xE4, 0xFD, 0xFC, 0xC3, 0xED, 0x9F, -+ 0xEC, 0x9E, 0x50, 0x18, 0xE4, 0xFB, 0xFA, 0x75, -+ 0x9E, 0x55, 0x0B, 0xBB, 0x00, 0x01, 0x0A, 0xBA, -+ 0x03, 0xF5, 0xBB, 0x20, 0xF2, 0x0D, 0xBD, 0x00, -+ 0x01, 0x0C, 0x80, 0xE1, 0x22, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, -+ 0x04, 0x04, 0x04, 0x04, 0x00, 0x03, 0x00, 0x03, -+ 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, -+ 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, -+ 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xD2, 0x0A, -+ 0x90, 0xF0, 0xC4, 0xE4, 0xF0, 0xC2, 0xD8, 0xD0, -+ 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xE4, 0xFD, -+ 0xFC, 0xC3, 0xED, 0x9F, 0xEC, 0x9E, 0x50, 0x08, -+ 0x00, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0x80, 0xF1, -+ 0x22, 0xC0, 0xE0, 0xD2, 0x09, 0x05, 0x0F, 0xE5, -+ 0x0F, 0x70, 0x02, 0x05, 0x0E, 0xD0, 0xE0, 0x32, -+ 0x75, 0x91, 0x01, 0x90, 0x28, 0x0A, 0xE4, 0x93, -+ 0xF5, 0x89, 0xD2, 0xAC, 0x22, 0x90, 0xF0, 0xC5, -+ 0x74, 0x06, 0xF0, 0x30, 0xF8, 0x02, 0xD2, 0x15, -+ 0x22, 0xEE, 0x30, 0xE7, 0x07, 0xC3, 0xE4, 0x9F, -+ 0xFF, 0xE4, 0x9E, 0xFE, 0x22, 0x8F, 0x82, 0x8E, -+ 0x83, 0xE4, 0x93, 0xFF, 0x22, 0x00, 0x22, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x90, 0x3F, 0xFF, 0x74, 0x03, 0xF0, 0x22, 0x00, ++ 0x02, 0x65, 0x1E, 0x02, 0x00, 0x3F, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x02, 0x78, 0xC9, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x02, 0x27, 0xFF, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x02, 0x65, 0x17, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x02, 0x64, 0xE8, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x02, 0x78, 0xA0, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x02, 0x27, 0xFC, 0x75, 0x86, ++ 0x09, 0x75, 0x84, 0x9C, 0xD2, 0xA9, 0x22, 0x32, ++ 0x90, 0x3F, 0xF0, 0x74, 0x56, 0xF0, 0xA3, 0x74, ++ 0x54, 0xF0, 0xA3, 0x74, 0x4C, 0xF0, 0x22, 0x78, ++ 0xE4, 0x7C, 0x12, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, ++ 0x78, 0x79, 0x7D, 0x7E, 0x00, 0x7F, 0x05, 0x12, ++ 0x59, 0x49, 0x90, 0x12, 0xF2, 0x12, 0x5B, 0x94, ++ 0xFF, 0xFF, 0xFF, 0xFF, 0x90, 0x12, 0xF6, 0x12, ++ 0x5B, 0x94, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0A, ++ 0x7C, 0x13, 0x7D, 0x01, 0x7B, 0xFF, 0x7A, 0x78, ++ 0x79, 0x82, 0x7E, 0x00, 0x7F, 0x0A, 0x12, 0x59, ++ 0x49, 0x78, 0x14, 0x7C, 0x13, 0x7D, 0x01, 0x7B, ++ 0xFF, 0x7A, 0x78, 0x79, 0x8C, 0x7E, 0x00, 0x7F, ++ 0x14, 0x12, 0x59, 0x49, 0xC2, 0x1A, 0xE4, 0x90, ++ 0xED, 0x9F, 0x0F, 0x6F, 0xED, 0x6D, 0x0F, 0x6F, ++ 0xED, 0x6C, 0x0F, 0x6F, 0xEC, 0xF6, 0x8B, 0xFC, ++ 0xF0, 0x30, 0x15, 0x0A, 0x90, 0x88, 0xB0, 0xE0, ++ 0x90, 0x88, 0xC1, 0xF0, 0x80, 0x05, 0xE4, 0x90, ++ 0x88, 0xC1, 0xF0, 0xE4, 0x90, 0x12, 0xDF, 0xF0, ++ 0xC2, 0x0F, 0xC2, 0x11, 0x90, 0x13, 0x09, 0xE0, ++ 0xFF, 0x90, 0x88, 0xC1, 0xE0, 0xD3, 0x9F, 0x40, ++ 0x03, 0x02, 0x03, 0xB1, 0x90, 0x88, 0xC0, 0xE0, ++ 0x9F, 0x40, 0x03, 0x02, 0x03, 0xB1, 0xE4, 0xF0, ++ 0x75, 0x9E, 0x55, 0x90, 0x12, 0xDB, 0xF0, 0x90, ++ 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, ++ 0x03, 0x02, 0x03, 0x71, 0x75, 0x9E, 0x55, 0x74, ++ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0xE0, 0x64, 0x01, 0x60, 0x15, 0x90, 0x12, ++ 0xDB, 0xE0, 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, ++ 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x02, 0x60, 0x03, ++ 0x02, 0x03, 0x59, 0x90, 0x12, 0xDB, 0xE0, 0xFF, ++ 0x90, 0x88, 0xC0, 0xE0, 0x24, 0x04, 0xF5, 0x82, ++ 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xEF, 0xF0, 0x74, ++ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x12, 0xDC, ++ 0xF0, 0x90, 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDC, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, 0x02, ++ 0x03, 0x51, 0x75, 0x9E, 0x55, 0x90, 0x12, 0xDB, ++ 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xC3, 0x9D, ++ 0xEA, 0x9C, 0x40, 0x36, 0xEF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, ++ 0x12, 0xDC, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, 0xEC, ++ 0x9E, 0x90, 0x12, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x80, 0x37, 0x90, 0x12, 0xDC, 0xE0, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, ++ 0xEC, 0x9E, 0x90, 0x12, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0x90, 0x12, 0xDC, 0xE0, 0xFE, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xC3, 0x9D, ++ 0xEA, 0x9C, 0x40, 0x33, 0xEF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, ++ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, 0x9C, 0x90, 0x12, ++ 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x37, 0x90, ++ 0x12, 0xDC, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xDB, ++ 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, 0xEC, 0x9E, 0x90, ++ 0x12, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, ++ 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xFB, 0xAA, ++ 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xF0, 0xE0, ++ 0xA3, 0xE0, 0xE4, 0xFC, 0xFD, 0x12, 0x5A, 0x34, ++ 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, ++ 0x90, 0x12, 0xEE, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, ++ 0xEE, 0xE0, 0xA3, 0xE0, 0xE4, 0xFC, 0xFD, 0x12, ++ 0x5A, 0x34, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, ++ 0xD0, 0x00, 0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, ++ 0xED, 0x39, 0xFD, 0xEC, 0x38, 0xFC, 0x90, 0x88, ++ 0xC0, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, ++ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, ++ 0x83, 0xC0, 0x82, 0x90, 0x12, 0xDC, 0xE0, 0xD0, ++ 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, ++ 0xC5, 0x12, 0x5B, 0x88, 0x90, 0x88, 0xC0, 0xE0, ++ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, ++ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, ++ 0x82, 0x90, 0x12, 0xDC, 0xE0, 0xD0, 0x82, 0xD0, ++ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0xE4, 0x7B, 0x32, 0xFA, 0xF9, 0xF8, ++ 0xD3, 0x12, 0x5B, 0x51, 0x40, 0x02, 0xD2, 0x1A, ++ 0x90, 0x12, 0xDC, 0xE0, 0x04, 0xF0, 0x02, 0x01, ++ 0x49, 0x90, 0x88, 0xC0, 0xE0, 0x04, 0xF0, 0x80, ++ 0x0F, 0x90, 0x12, 0xDB, 0xE0, 0x24, 0xE5, 0xF5, ++ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x90, 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x02, 0x00, ++ 0xEF, 0xE4, 0x90, 0x12, 0xDC, 0xF0, 0x90, 0x13, ++ 0x09, 0xE0, 0xFF, 0x90, 0x12, 0xDC, 0xE0, 0xFE, ++ 0xC3, 0x9F, 0x50, 0x2D, 0x90, 0x88, 0xC1, 0xE0, ++ 0xFF, 0xEE, 0xC3, 0x9F, 0x50, 0x0F, 0x74, 0xA0, ++ 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, ++ 0x74, 0x01, 0xF0, 0x80, 0x0C, 0x74, 0xA0, 0x2E, ++ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xE4, ++ 0xF0, 0x90, 0x12, 0xDC, 0xE0, 0x04, 0xF0, 0x80, ++ 0xC5, 0x75, 0x9E, 0x55, 0x90, 0x13, 0x09, 0xE0, ++ 0xFF, 0x90, 0x88, 0xC1, 0xE0, 0xD3, 0x9F, 0x40, ++ 0x03, 0x02, 0x1B, 0x20, 0x90, 0x88, 0xC0, 0xE0, ++ 0x9F, 0x40, 0x03, 0x02, 0x1B, 0x20, 0x30, 0x1A, ++ 0x03, 0x02, 0x1B, 0x20, 0xE0, 0x94, 0x00, 0x50, ++ 0x03, 0x02, 0x18, 0x51, 0x90, 0x88, 0xC1, 0xE0, ++ 0xD3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x18, 0x51, ++ 0xE0, 0xFF, 0x90, 0x88, 0xC0, 0xE0, 0xD3, 0x9F, ++ 0x40, 0x03, 0x02, 0x0E, 0x23, 0x90, 0x88, 0xC0, ++ 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x88, 0xC1, 0xE0, ++ 0xFE, 0xEF, 0x6E, 0x70, 0x03, 0x02, 0x06, 0x01, ++ 0x75, 0x9E, 0x55, 0xE4, 0x90, 0x12, 0xDA, 0xF0, ++ 0x90, 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x14, 0x74, 0xE9, ++ 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE4, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, ++ 0x80, 0xDE, 0xC2, 0x19, 0xE4, 0x90, 0x12, 0xDA, ++ 0xF0, 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x4E, 0x74, ++ 0xE4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0xFF, 0x90, 0x88, 0xC1, 0xE0, 0xFE, ++ 0xEF, 0xB5, 0x06, 0x04, 0xD2, 0x19, 0x80, 0x35, ++ 0x74, 0xE9, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0xE0, 0x70, 0x1C, 0x90, 0x12, 0xDA, ++ 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0xE0, 0x24, 0xE9, 0xF5, 0x82, 0xE4, ++ 0x34, 0x12, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, ++ 0x04, 0xD2, 0x19, 0x80, 0x08, 0x90, 0x12, 0xDA, ++ 0xE0, 0x04, 0xF0, 0x80, 0xA4, 0x90, 0x12, 0xF6, ++ 0x12, 0x5B, 0x94, 0x00, 0x00, 0x00, 0x00, 0x30, ++ 0x19, 0x03, 0x02, 0x05, 0x9E, 0xE4, 0x90, 0x12, ++ 0xDA, 0xF0, 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, ++ 0x12, 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x77, ++ 0xE0, 0xFF, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xFA, 0x2F, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xED, ++ 0xF0, 0x90, 0x12, 0xF6, 0xE0, 0xF8, 0xA3, 0xE0, ++ 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xEE, ++ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, ++ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, ++ 0x82, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xE4, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xD0, ++ 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, ++ 0xC5, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xEB, 0x2F, 0xFF, 0xEA, ++ 0x3E, 0xFE, 0xE9, 0x3D, 0xFD, 0xE8, 0x3C, 0xFC, ++ 0x90, 0x12, 0xF6, 0x12, 0x5B, 0x88, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x04, 0xB2, 0x90, ++ 0x12, 0xF2, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0xF8, ++ 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, ++ 0xFB, 0xC3, 0x12, 0x5B, 0x51, 0x50, 0x47, 0x90, ++ 0x12, 0xF6, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xF2, ++ 0x12, 0x5B, 0x88, 0xE4, 0x90, 0x12, 0xDA, 0xF0, ++ 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x20, 0x74, 0xFA, ++ 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE0, 0xFF, 0x74, 0xFF, 0x2E, 0xF5, 0x82, 0xE4, ++ 0x34, 0x12, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xD2, 0xC2, 0x18, ++ 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x88, 0xC0, ++ 0xE0, 0x14, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, ++ 0xC3, 0x9F, 0x50, 0x3E, 0x74, 0xE4, 0x2E, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFF, ++ 0x90, 0x88, 0xC1, 0xE0, 0xFE, 0xEF, 0xB5, 0x06, ++ 0x21, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x24, 0xE4, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, ++ 0xF0, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0xD2, 0x18, ++ 0x80, 0x08, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, ++ 0x80, 0xB3, 0x30, 0x18, 0x03, 0x02, 0x03, 0xF5, ++ 0x90, 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x02, 0x03, ++ 0xF5, 0x90, 0x88, 0xC0, 0xE0, 0x90, 0x12, 0xE0, ++ 0xF0, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, ++ 0xE0, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, ++ 0xC3, 0x9F, 0x40, 0x03, 0x02, 0x18, 0x51, 0xE0, ++ 0xFF, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x13, ++ 0xF5, 0x83, 0xE0, 0x90, 0x12, 0xE2, 0xF0, 0x74, ++ 0xFF, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0x90, 0x12, 0xE1, 0xF0, 0xC2, 0x0F, ++ 0xC2, 0x11, 0xEE, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0xB4, 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, ++ 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x12, 0xE1, 0xE0, ++ 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, ++ 0x5B, 0xC5, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x74, 0xFF, 0xFB, ++ 0xFA, 0xF9, 0xF8, 0xD3, 0x12, 0x5B, 0x51, 0x50, ++ 0x03, 0x02, 0x0E, 0x1A, 0x90, 0x12, 0xDA, 0xE0, ++ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, ++ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, ++ 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, ++ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0xE4, 0x7B, 0xE0, 0x7A, 0x2E, 0xF9, ++ 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x50, 0x57, 0x90, ++ 0x12, 0xE1, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, ++ 0xA3, 0xED, 0xF0, 0x02, 0x09, 0xEC, 0x90, 0x12, ++ 0xDA, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, ++ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, ++ 0x83, 0xC0, 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, ++ 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, ++ 0xC5, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xE4, 0x7B, 0xB8, 0x7A, ++ 0x0B, 0xF9, 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x40, ++ 0x03, 0x02, 0x08, 0x35, 0x90, 0x12, 0xE1, 0xE0, ++ 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xA3, 0xE0, ++ 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, ++ 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0x90, ++ 0x12, 0xE2, 0xE0, 0xFC, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, ++ 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, ++ 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, ++ 0x13, 0xD8, 0xF9, 0xFF, 0xEC, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, ++ 0x12, 0xE1, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, ++ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, ++ 0x33, 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFC, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, ++ 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, ++ 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, ++ 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xEC, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0x02, 0x09, 0xEC, 0x90, 0x12, 0xDA, ++ 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, ++ 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, ++ 0xC0, 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, ++ 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0xE4, 0x7B, 0xDC, 0x7A, 0x05, ++ 0xF9, 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x40, 0x03, ++ 0x02, 0x09, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0xFD, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0x90, 0x12, 0xE1, 0xE0, 0xFC, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, ++ 0x2F, 0xFF, 0xEA, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, ++ 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xEC, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, ++ 0xEA, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x02, 0x09, 0xEC, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, ++ 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, ++ 0xFE, 0x90, 0x12, 0xE1, 0xE0, 0xFC, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, ++ 0xFF, 0xEA, 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, ++ 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, ++ 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, ++ 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, ++ 0x82, 0xE0, 0x33, 0xFE, 0xEC, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, ++ 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFD, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, ++ 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, ++ 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, ++ 0xFF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, ++ 0xEE, 0x9C, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, ++ 0x28, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, ++ 0x9D, 0xFF, 0xEE, 0x9C, 0xFE, 0x12, 0x78, 0xF1, ++ 0x90, 0x13, 0x2A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x90, 0x13, 0x2A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x90, 0x13, 0x29, 0xE0, 0x2F, 0xFF, 0x90, 0x13, ++ 0x28, 0xE0, 0x3E, 0xFE, 0x90, 0x13, 0x2C, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0xD3, 0x94, 0x0C, 0xEE, 0x94, ++ 0x00, 0x40, 0x4A, 0x90, 0x12, 0xE2, 0xE0, 0xFF, ++ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x0E, 0x74, ++ 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0x24, 0xFC, 0xF0, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFF, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x01, 0x50, ++ 0x0C, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0xF1, 0x0A, ++ 0x74, 0x01, 0xF0, 0x80, 0x66, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFF, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x74, 0x81, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE0, 0xD3, 0x94, 0x16, 0x40, 0x18, 0x90, 0x12, ++ 0xE2, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0x74, 0x16, 0xF0, 0x90, 0xF1, ++ 0x0A, 0x74, 0x02, 0xF0, 0x80, 0x29, 0x90, 0x12, ++ 0x92, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, ++ 0x12, 0x60, 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, ++ 0x04, 0x06, 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, ++ 0x90, 0x12, 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x40, ++ 0x06, 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0xC2, ++ 0x0F, 0xC2, 0x11, 0x90, 0x12, 0xE2, 0xE0, 0xFF, ++ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0xFD, 0x90, 0x13, 0x2C, 0xE0, 0xFA, ++ 0xA3, 0xE0, 0xFB, 0xD3, 0x9D, 0xEA, 0x94, 0x00, ++ 0x40, 0x13, 0xD2, 0x0F, 0xD2, 0x11, 0x74, 0x77, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0x74, 0x01, 0xF0, 0x80, 0x04, 0xC2, 0x0F, 0xC2, ++ 0x11, 0x90, 0x12, 0xE2, 0xE0, 0x24, 0x77, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xB4, ++ 0x01, 0x13, 0xD3, 0xEB, 0x94, 0x01, 0xEA, 0x94, ++ 0x00, 0x40, 0x06, 0xD2, 0x0F, 0xD2, 0x11, 0x80, ++ 0x04, 0xC2, 0x0F, 0xC2, 0x11, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFF, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, 0x03, ++ 0x02, 0x0C, 0x7F, 0x90, 0x12, 0xE1, 0xE0, 0xFE, ++ 0x24, 0x0A, 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, ++ 0x83, 0xE0, 0xFD, 0x74, 0xCA, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, ++ 0x50, 0x4D, 0xC2, 0x0D, 0x90, 0x12, 0xE2, 0xE0, ++ 0x24, 0x3C, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, ++ 0x83, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x24, 0x14, ++ 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, ++ 0xFA, 0xA3, 0xE0, 0xD3, 0x9D, 0x74, 0x80, 0xF8, ++ 0xEA, 0x64, 0x80, 0x98, 0x50, 0x10, 0x74, 0xCA, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE0, 0x04, 0xF0, 0x02, 0x0C, 0x81, 0x90, 0x12, ++ 0xE2, 0xE0, 0x24, 0xCA, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x72, 0x90, ++ 0x12, 0xE2, 0xE0, 0xFF, 0x24, 0xC0, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, ++ 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x94, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0xD2, 0x0D, 0x80, 0x02, 0xD2, ++ 0x0D, 0x30, 0x01, 0x57, 0x90, 0x12, 0xE1, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xE2, 0xE0, 0xFE, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, ++ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, ++ 0x02, 0x0D, 0x60, 0x20, 0x0F, 0x03, 0x02, 0x0D, ++ 0x60, 0x30, 0x11, 0x7C, 0x30, 0x0D, 0x79, 0x90, ++ 0x13, 0x2C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, ++ 0x94, 0x78, 0xEE, 0x94, 0x00, 0x40, 0x06, 0x90, ++ 0x12, 0x92, 0xE0, 0x04, 0xF0, 0xD3, 0xEF, 0x94, ++ 0x72, 0xEE, 0x94, 0x01, 0x40, 0x06, 0x90, 0x12, ++ 0x93, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, ++ 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, ++ 0x12, 0xE2, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, ++ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xE1, 0xE0, ++ 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, ++ 0xF5, 0x83, 0xE0, 0xFE, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFD, 0x24, 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x8A, ++ 0xF5, 0x83, 0xEE, 0xF0, 0x74, 0x28, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, ++ 0x74, 0x3C, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, ++ 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xE5, 0x2D, 0xF5, ++ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0x74, 0x02, ++ 0xF0, 0x90, 0x12, 0xE1, 0xE0, 0x24, 0xA0, 0xF5, ++ 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x90, 0x12, 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x88, ++ 0xC0, 0xE0, 0x14, 0xF0, 0x90, 0x88, 0xC1, 0xE0, ++ 0x14, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, ++ 0x02, 0x06, 0x0E, 0x90, 0x88, 0xC1, 0xE0, 0x24, ++ 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE0, 0xFF, 0x90, 0x88, 0xC0, 0xE0, 0xFE, 0xEF, ++ 0x6E, 0x70, 0x03, 0x02, 0x10, 0x2F, 0x75, 0x9E, ++ 0x55, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x88, ++ 0xC0, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, ++ 0xC3, 0x9F, 0x50, 0x14, 0x74, 0xE9, 0x2E, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xDE, ++ 0xC2, 0x19, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, ++ 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, ++ 0xFE, 0xC3, 0x9F, 0x50, 0x4E, 0x74, 0xE4, 0x2E, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0xFF, 0x90, 0x88, 0xC0, 0xE0, 0xFE, 0xEF, 0xB5, ++ 0x06, 0x04, 0xD2, 0x19, 0x80, 0x35, 0x74, 0xE9, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE0, 0x70, 0x1C, 0x90, 0x12, 0xDA, 0xE0, 0x24, ++ 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE0, 0x24, 0xE9, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, 0x04, 0xD2, ++ 0x19, 0x80, 0x08, 0x90, 0x12, 0xDA, 0xE0, 0x04, ++ 0xF0, 0x80, 0xA4, 0x90, 0x12, 0xF6, 0x12, 0x5B, ++ 0x94, 0x00, 0x00, 0x00, 0x00, 0x30, 0x19, 0x03, ++ 0x02, 0x0F, 0xCC, 0xE4, 0x90, 0x12, 0xDA, 0xF0, ++ 0x90, 0x88, 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFE, 0xC3, 0x9F, 0x50, 0x77, 0xE0, 0xFF, ++ 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0xFD, 0x74, 0xFA, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xED, 0xF0, 0x90, ++ 0x12, 0xF6, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, ++ 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x74, 0xE4, 0x2E, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, ++ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, ++ 0x82, 0x90, 0x12, 0xDA, 0xE0, 0xD0, 0x82, 0xD0, ++ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0xEB, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, ++ 0xE9, 0x3D, 0xFD, 0xE8, 0x3C, 0xFC, 0x90, 0x12, ++ 0xF6, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDA, 0xE0, ++ 0x04, 0xF0, 0x02, 0x0E, 0xE0, 0x90, 0x12, 0xF2, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0xF8, 0xA3, 0xE0, ++ 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xC3, ++ 0x12, 0x5B, 0x51, 0x50, 0x47, 0x90, 0x12, 0xF6, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xF2, 0x12, 0x5B, ++ 0x88, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x88, ++ 0xC1, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, ++ 0xC3, 0x9F, 0x50, 0x20, 0x74, 0xFA, 0x2E, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFF, ++ 0x74, 0xFF, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x12, 0xDA, 0xE0, ++ 0x04, 0xF0, 0x80, 0xD2, 0xC2, 0x18, 0xE4, 0x90, ++ 0x12, 0xDA, 0xF0, 0x90, 0x88, 0xC1, 0xE0, 0x14, ++ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, ++ 0x50, 0x3E, 0x74, 0xE4, 0x2E, 0xF5, 0x82, 0xE4, ++ 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x88, ++ 0xC0, 0xE0, 0xFE, 0xEF, 0xB5, 0x06, 0x21, 0x90, ++ 0x12, 0xDA, 0xE0, 0xFF, 0x24, 0xE4, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, ++ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0x04, 0xF0, 0xD2, 0x18, 0x80, 0x08, ++ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xB3, ++ 0x30, 0x18, 0x03, 0x02, 0x0E, 0x23, 0x90, 0x12, ++ 0xE4, 0xE0, 0x04, 0xF0, 0x02, 0x0E, 0x23, 0x90, ++ 0x88, 0xC1, 0xE0, 0x90, 0x12, 0xE0, 0xF0, 0xE4, ++ 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xE0, 0xE0, ++ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xC3, 0x9F, 0x40, ++ 0x03, 0x02, 0x18, 0x51, 0xE0, 0xFF, 0x24, 0xFF, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0xFE, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x13, ++ 0xF5, 0x83, 0xE0, 0x90, 0x12, 0xE2, 0xF0, 0x90, ++ 0x12, 0xE1, 0xEF, 0xF0, 0xC2, 0x0F, 0xC2, 0x11, ++ 0xEE, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, ++ 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, ++ 0xC0, 0x82, 0x90, 0x12, 0xDA, 0xE0, 0xD0, 0x82, ++ 0xD0, 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0x74, 0xFF, 0xFB, 0xFA, 0xF9, ++ 0xF8, 0xD3, 0x12, 0x5B, 0x51, 0x50, 0x03, 0x02, ++ 0x18, 0x48, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, ++ 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, 0xE4, 0x34, ++ 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, ++ 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, ++ 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, 0xFC, 0xA3, ++ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xE4, 0x7B, 0xE0, 0x7A, 0x2E, 0xF9, 0xF8, 0xC3, ++ 0x12, 0x5B, 0x51, 0x50, 0x57, 0x90, 0x12, 0xE1, ++ 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, ++ 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, ++ 0xF0, 0x02, 0x14, 0x1A, 0x90, 0x12, 0xDA, 0xE0, ++ 0x75, 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, ++ 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, ++ 0x82, 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, ++ 0x83, 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0xE4, 0x7B, 0xB8, 0x7A, 0x0B, 0xF9, ++ 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x40, 0x03, 0x02, ++ 0x12, 0x63, 0x90, 0x12, 0xE1, 0xE0, 0xFD, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xA3, 0xE0, 0x25, 0xE0, ++ 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, 0x83, ++ 0x15, 0x82, 0xE0, 0x33, 0xFE, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFC, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFA, ++ 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, ++ 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, ++ 0xF9, 0xFF, 0xEC, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE1, ++ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xA3, ++ 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, ++ 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, ++ 0x90, 0x12, 0xE2, 0xE0, 0xFC, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, ++ 0xEA, 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, ++ 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, ++ 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xEC, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x02, 0x14, 0x1A, 0x90, 0x12, 0xDA, 0xE0, 0x75, ++ 0xF0, 0x14, 0xA4, 0x24, 0xB4, 0xF5, 0x82, 0xE4, ++ 0x34, 0x37, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, ++ 0x90, 0x12, 0xE1, 0xE0, 0xD0, 0x82, 0xD0, 0x83, ++ 0x75, 0xF0, 0x04, 0x12, 0x5B, 0xC5, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0xE4, 0x7B, 0xDC, 0x7A, 0x05, 0xF9, 0xF8, ++ 0xC3, 0x12, 0x5B, 0x51, 0x40, 0x03, 0x02, 0x13, ++ 0x34, 0x90, 0x12, 0xE2, 0xE0, 0xFD, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x90, 0x12, 0xE1, 0xE0, 0xFC, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, ++ 0xEA, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFD, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0xEC, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, ++ 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0x02, 0x14, 0x1A, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xA3, 0xE0, ++ 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, ++ 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0x90, ++ 0x12, 0xE1, 0xE0, 0xFC, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, ++ 0x3E, 0xFE, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, ++ 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, ++ 0x13, 0xD8, 0xF9, 0xFF, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, ++ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, ++ 0x33, 0xFE, 0xEC, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, ++ 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFD, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, ++ 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, ++ 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xED, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, 0x9C, ++ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, 0x28, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, ++ 0xEE, 0x9C, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, ++ 0x2A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x13, ++ 0x2A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x13, ++ 0x29, 0xE0, 0x2F, 0xFF, 0x90, 0x13, 0x28, 0xE0, ++ 0x3E, 0xFE, 0x90, 0x13, 0x2C, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0xD3, 0x94, 0x0C, 0xEE, 0x94, 0x00, 0x40, ++ 0x4A, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x24, 0x81, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0xD3, 0x94, 0x04, 0x40, 0x0E, 0x74, 0x81, 0x2F, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0x24, 0xFC, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFF, ++ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0xC3, 0x94, 0x01, 0x50, 0x0C, 0x74, ++ 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x90, 0xF1, 0x0A, 0x74, 0x01, ++ 0xF0, 0x80, 0x66, 0x90, 0x12, 0xE2, 0xE0, 0xFF, ++ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0x04, 0xF0, 0x74, 0x81, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xD3, ++ 0x94, 0x16, 0x40, 0x18, 0x90, 0x12, 0xE2, 0xE0, ++ 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0x74, 0x16, 0xF0, 0x90, 0xF1, 0x0A, 0x74, ++ 0x02, 0xF0, 0x80, 0x29, 0x90, 0x12, 0x92, 0xE0, ++ 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, ++ 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, ++ 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0x90, 0x12, ++ 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x06, 0x90, ++ 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0xC2, 0x0F, 0xC2, ++ 0x11, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x24, 0x81, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0xFD, 0x90, 0x13, 0x2C, 0xE0, 0xFA, 0xA3, 0xE0, ++ 0xFB, 0xD3, 0x9D, 0xEA, 0x94, 0x00, 0x40, 0x13, ++ 0xD2, 0x0F, 0xD2, 0x11, 0x74, 0x77, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0x74, 0x01, ++ 0xF0, 0x80, 0x04, 0xC2, 0x0F, 0xC2, 0x11, 0x90, ++ 0x12, 0xE2, 0xE0, 0x24, 0x77, 0xF5, 0x82, 0xE4, ++ 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xB4, 0x01, 0x13, ++ 0xD3, 0xEB, 0x94, 0x01, 0xEA, 0x94, 0x00, 0x40, ++ 0x06, 0xD2, 0x0F, 0xD2, 0x11, 0x80, 0x04, 0xC2, ++ 0x0F, 0xC2, 0x11, 0x90, 0x12, 0xE2, 0xE0, 0xFF, ++ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x16, ++ 0xAD, 0x90, 0x12, 0xE1, 0xE0, 0xFE, 0x24, 0x0A, ++ 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, ++ 0xFD, 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0x50, 0x4D, ++ 0xC2, 0x0D, 0x90, 0x12, 0xE2, 0xE0, 0x24, 0x3C, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, ++ 0xFD, 0xEE, 0x25, 0xE0, 0x24, 0x14, 0xF5, 0x82, ++ 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, ++ 0xE0, 0xD3, 0x9D, 0x74, 0x80, 0xF8, 0xEA, 0x64, ++ 0x80, 0x98, 0x50, 0x10, 0x74, 0xCA, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0x04, ++ 0xF0, 0x02, 0x16, 0xAF, 0x90, 0x12, 0xE2, 0xE0, ++ 0x24, 0xCA, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x80, 0x72, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFF, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xCA, 0x2F, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, ++ 0xF0, 0xD2, 0x0D, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x94, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x80, 0x02, 0xD2, 0x0D, 0x30, ++ 0x01, 0x57, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0x90, 0x12, 0xE2, 0xE0, 0xFE, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, ++ 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x02, 0x17, ++ 0x8E, 0x20, 0x0F, 0x03, 0x02, 0x17, 0x8E, 0x30, ++ 0x11, 0x7C, 0x30, 0x0D, 0x79, 0x90, 0x13, 0x2C, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x94, 0x78, ++ 0xEE, 0x94, 0x00, 0x40, 0x06, 0x90, 0x12, 0x92, ++ 0xE0, 0x04, 0xF0, 0xD3, 0xEF, 0x94, 0x72, 0xEE, ++ 0x94, 0x01, 0x40, 0x06, 0x90, 0x12, 0x93, 0xE0, ++ 0x04, 0xF0, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, ++ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xE2, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, ++ 0xE1, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, ++ 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, ++ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, ++ 0xED, 0xF0, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, ++ 0xE0, 0xFE, 0x90, 0x12, 0xE2, 0xE0, 0xFD, 0x24, ++ 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, ++ 0xEE, 0xF0, 0x74, 0x28, 0x2F, 0xF5, 0x82, 0xE4, ++ 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x3C, ++ 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, ++ 0xEF, 0xF0, 0x74, 0xE5, 0x2D, 0xF5, 0x82, 0xE4, ++ 0x34, 0x88, 0xF5, 0x83, 0x74, 0x02, 0xF0, 0x90, ++ 0x12, 0xE1, 0xE0, 0x24, 0xA0, 0xF5, 0x82, 0xE4, ++ 0x34, 0x37, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, ++ 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x88, 0xC0, 0xE0, ++ 0x14, 0xF0, 0x90, 0x88, 0xC1, 0xE0, 0x14, 0xF0, ++ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x10, ++ 0x3C, 0x90, 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, ++ 0x40, 0x03, 0x02, 0x18, 0xE0, 0x90, 0x88, 0xC0, ++ 0xE0, 0x94, 0x00, 0x40, 0x7B, 0xE4, 0x90, 0x12, ++ 0xDB, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0xC3, ++ 0x95, 0x0D, 0x50, 0x6C, 0x74, 0xE5, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, ++ 0x04, 0x70, 0x55, 0x90, 0x12, 0xDF, 0xE0, 0xC3, ++ 0x95, 0x0D, 0x50, 0x4C, 0x90, 0x12, 0xDB, 0xE0, ++ 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0x74, 0x03, 0xF0, 0x74, 0x77, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x90, 0x88, 0xC0, 0xE0, 0x14, 0xF0, 0x90, 0x12, ++ 0xDF, 0xE0, 0x04, 0xF0, 0x74, 0xD1, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC0, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x90, 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x80, 0x8A, ++ 0x90, 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, 0x40, ++ 0x03, 0x02, 0x26, 0x16, 0x90, 0x88, 0xC1, 0xE0, ++ 0x94, 0x00, 0x50, 0x03, 0x02, 0x26, 0x16, 0xE4, ++ 0x90, 0x12, 0xDC, 0xF0, 0x90, 0x88, 0xB0, 0xE0, ++ 0xFF, 0x90, 0x12, 0xDC, 0xE0, 0xFE, 0xC3, 0x9F, ++ 0x40, 0x03, 0x02, 0x26, 0x16, 0x74, 0xA0, 0x2E, ++ 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, 0x83, 0xE0, ++ 0x70, 0x03, 0x02, 0x1B, 0x17, 0xE4, 0x90, 0x12, ++ 0xDB, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0xC3, ++ 0x95, 0x0D, 0x40, 0x03, 0x02, 0x1B, 0x17, 0x74, ++ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0xE0, 0x60, 0x03, 0x02, 0x1B, 0x0E, 0x90, ++ 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, 0x40, 0x03, ++ 0x02, 0x1B, 0x0E, 0x90, 0x12, 0xDC, 0xE0, 0xFF, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, ++ 0xE0, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFE, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, ++ 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, ++ 0x12, 0xDC, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, ++ 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, ++ 0x12, 0xDC, 0xE0, 0xFF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, ++ 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, ++ 0x12, 0xDC, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFE, 0x90, ++ 0x12, 0xDB, 0xE0, 0xFD, 0x24, 0x14, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x74, ++ 0x28, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, ++ 0x83, 0xE0, 0xFF, 0x74, 0x3C, 0x2D, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x74, ++ 0xC0, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0x74, 0x01, 0xF0, 0x90, 0x12, 0xDC, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFE, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x94, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, ++ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, ++ 0x74, 0xE5, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x88, ++ 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0x12, 0xDC, ++ 0xE0, 0x24, 0xA0, 0xF5, 0x82, 0xE4, 0x34, 0x37, ++ 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xD1, 0x2E, 0xF5, ++ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x90, 0x88, 0xC1, 0xE0, 0x14, 0xF0, 0x90, 0x12, ++ 0xDF, 0xE0, 0x04, 0xF0, 0x80, 0x09, 0x90, 0x12, ++ 0xDB, 0xE0, 0x04, 0xF0, 0x02, 0x19, 0x22, 0x90, ++ 0x12, 0xDC, 0xE0, 0x04, 0xF0, 0x02, 0x18, 0xFC, ++ 0xE4, 0x90, 0x88, 0xC0, 0xF0, 0xF5, 0xDC, 0xF5, ++ 0xDD, 0xF5, 0xDE, 0x90, 0x12, 0xDB, 0xF0, 0x90, ++ 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x50, ++ 0x5A, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, 0x20, ++ 0x90, 0x12, 0xDB, 0xE0, 0x24, 0xE5, 0xF5, 0x82, ++ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x02, ++ 0x60, 0x0E, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, ++ 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB4, 0x04, 0x14, ++ 0x90, 0x88, 0xC0, 0xE0, 0x04, 0xF0, 0x90, 0x12, ++ 0xDB, 0xE0, 0xFF, 0x7B, 0x01, 0xE4, 0xFD, 0x12, ++ 0x4C, 0x38, 0x80, 0x0F, 0x90, 0x12, 0xDB, 0xE0, ++ 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0x04, ++ 0xF0, 0x80, 0x9C, 0xE4, 0xF5, 0xD9, 0xF5, 0xDA, ++ 0xF5, 0xDB, 0x90, 0x12, 0xDC, 0xF0, 0x90, 0x88, ++ 0xC1, 0xE0, 0xFE, 0x90, 0x12, 0xDC, 0xE0, 0xFF, ++ 0xC3, 0x9E, 0x50, 0x0E, 0xE4, 0xFB, 0xFD, 0x12, ++ 0x4C, 0x38, 0x90, 0x12, 0xDC, 0xE0, 0x04, 0xF0, ++ 0x80, 0xE4, 0x90, 0x88, 0xC0, 0xE0, 0xFF, 0x90, ++ 0x88, 0xC1, 0xE0, 0xC3, 0x9F, 0x50, 0x07, 0xE0, ++ 0x90, 0x12, 0xE3, 0xF0, 0x80, 0x08, 0x90, 0x88, ++ 0xC0, 0xE0, 0x90, 0x12, 0xE3, 0xF0, 0xE4, 0x90, ++ 0x12, 0xDD, 0xF0, 0x90, 0x12, 0xE3, 0xE0, 0xFF, ++ 0x90, 0x12, 0xDD, 0xE0, 0xC3, 0x9F, 0x40, 0x03, ++ 0x02, 0x23, 0x57, 0xC2, 0x0F, 0xC2, 0x11, 0xD2, ++ 0xB4, 0x20, 0xB4, 0x06, 0x30, 0x0E, 0x03, 0x20, ++ 0xDD, 0x05, 0x75, 0x9E, 0x55, 0x80, 0xF2, 0xC2, ++ 0xDD, 0xC2, 0x0E, 0xAF, 0xE2, 0xEF, 0xFE, 0xAD, ++ 0xE3, 0x7C, 0x00, 0xE4, 0x2D, 0xFF, 0xEC, 0x3E, ++ 0xAD, 0x07, 0xFC, 0xC3, 0xED, 0x94, 0x20, 0xEC, ++ 0x94, 0x4E, 0x40, 0x03, 0x02, 0x23, 0x57, 0xED, ++ 0x94, 0xC8, 0xEC, 0x94, 0x00, 0x40, 0x57, 0xAF, ++ 0xDF, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xAB, 0xE1, 0xEB, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xAB, 0xE1, ++ 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x02, 0x1E, 0xFC, 0xD3, 0xED, ++ 0x94, 0x64, 0xEC, 0x94, 0x00, 0x50, 0x03, 0x02, ++ 0x1D, 0x73, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, ++ 0x82, 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, ++ 0xE0, 0x33, 0xFE, 0xAB, 0xDF, 0xEB, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0x2F, ++ 0xFF, 0xEA, 0x3E, 0xFE, 0xAB, 0xE1, 0xEB, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, ++ 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xEF, 0x78, 0x02, ++ 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, ++ 0xAB, 0xE1, 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0xEF, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, ++ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xA3, 0xE0, 0x25, ++ 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, ++ 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0xAB, 0xDF, ++ 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFA, ++ 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, 0xAB, ++ 0xE1, 0xEB, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFA, 0xA3, 0xE0, 0x2F, 0xFF, 0xEA, 0x3E, 0xFE, ++ 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, ++ 0xD8, 0xF9, 0xFF, 0xAB, 0xE1, 0xEB, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x02, 0x1E, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0xD3, ++ 0xED, 0x94, 0x32, 0xEC, 0x94, 0x00, 0x50, 0x03, ++ 0x02, 0x1E, 0x16, 0xAF, 0xE1, 0xEF, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, ++ 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xAD, 0xE1, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0xAF, 0xE1, 0xEF, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, ++ 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xAD, 0xE1, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x02, 0x1E, 0xFC, 0xAF, 0xE1, ++ 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xA3, 0xE0, ++ 0x25, 0xE0, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, ++ 0x15, 0x83, 0x15, 0x82, 0xE0, 0x33, 0xFE, 0xAD, ++ 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, ++ 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, ++ 0xFE, 0xEF, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, ++ 0x13, 0xD8, 0xF9, 0xFF, 0xAD, 0xE1, 0xED, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0xAF, 0xE1, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xA3, 0xE0, 0x25, 0xE0, 0xFF, 0x05, 0x82, ++ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, ++ 0x33, 0xFE, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, 0xFF, ++ 0xEC, 0x3E, 0xFE, 0xAD, 0xDF, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0x2F, ++ 0xFF, 0xEC, 0x3E, 0xFE, 0xEF, 0x78, 0x02, 0xCE, ++ 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0xAD, ++ 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xE1, 0xEF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, ++ 0xEC, 0x9E, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x13, ++ 0x28, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xE1, ++ 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, ++ 0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0x12, 0x78, 0xF1, ++ 0x90, 0x13, 0x2A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x90, 0x13, 0x2A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x90, 0x13, 0x29, 0xE0, 0x2F, 0xFF, 0x90, 0x13, ++ 0x28, 0xE0, 0x3E, 0xFE, 0x90, 0x13, 0x2C, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0xD3, 0x94, 0x0C, 0xEE, 0x94, ++ 0x00, 0x40, 0x4E, 0xD2, 0x0F, 0xD2, 0x11, 0xAF, ++ 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, ++ 0x10, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0x24, 0xFC, ++ 0xF0, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x94, ++ 0x01, 0x50, 0x0E, 0xAF, 0xE1, 0x74, 0x81, 0x2F, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, ++ 0xF0, 0x90, 0xF1, 0x0A, 0x74, 0x01, 0xF0, 0x80, ++ 0x65, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, ++ 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, ++ 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x16, ++ 0x40, 0x17, 0xAF, 0xE1, 0x74, 0x81, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0x74, 0x16, ++ 0xF0, 0x90, 0xF1, 0x0A, 0x74, 0x02, 0xF0, 0x80, ++ 0x29, 0x90, 0x12, 0x92, 0xE0, 0xD3, 0x94, 0x00, ++ 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, 0x94, 0x00, ++ 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, 0xF1, 0x0A, ++ 0x74, 0x01, 0xF0, 0x90, 0x12, 0x93, 0xE0, 0xD3, ++ 0x94, 0x00, 0x40, 0x06, 0x90, 0xF1, 0x0A, 0x74, ++ 0x01, 0xF0, 0xC2, 0x0F, 0xC2, 0x11, 0xAF, 0xE1, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x13, 0x2C, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x94, ++ 0x00, 0x40, 0x15, 0xD2, 0x0F, 0xD2, 0x11, 0xAF, ++ 0xE1, 0x74, 0x77, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, 0x04, ++ 0xC2, 0x0F, 0xC2, 0x11, 0xAF, 0xE1, 0x74, 0x77, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, ++ 0xE0, 0xB4, 0x01, 0x13, 0xD3, 0xED, 0x94, 0x01, ++ 0xEC, 0x94, 0x00, 0x40, 0x06, 0xD2, 0x0F, 0xD2, ++ 0x11, 0x80, 0x04, 0xC2, 0x0F, 0xC2, 0x11, 0xAF, ++ 0xE1, 0x74, 0xC0, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, 0x03, ++ 0x02, 0x21, 0x95, 0xAF, 0xDF, 0x74, 0x0A, 0x2F, ++ 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, 0xE0, ++ 0xFF, 0xAE, 0xE1, 0x74, 0xCA, 0x2E, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xC3, 0x9F, ++ 0x50, 0x4F, 0xC2, 0x0D, 0xAF, 0xE1, 0x74, 0x3C, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, ++ 0xE0, 0xFF, 0xAD, 0xDF, 0xED, 0x25, 0xE0, 0x24, ++ 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x13, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x9F, 0x74, 0x80, ++ 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x50, 0x12, 0xAF, ++ 0xE1, 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x02, 0x21, ++ 0x97, 0xAF, 0xE1, 0x74, 0xCA, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x80, ++ 0x76, 0xAF, 0xE1, 0x74, 0xC0, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, ++ 0xE1, 0x74, 0xCA, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0xE1, 0xEF, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x94, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, ++ 0xE1, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x96, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0xD2, 0x0D, 0x80, 0x02, 0xD2, 0x0D, 0x30, ++ 0x01, 0x57, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, ++ 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0xEF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x02, 0x22, ++ 0x81, 0x20, 0x0F, 0x03, 0x02, 0x22, 0x81, 0x20, ++ 0x11, 0x03, 0x02, 0x22, 0x81, 0x20, 0x0D, 0x03, ++ 0x02, 0x22, 0x81, 0xD3, 0x90, 0x13, 0x2D, 0xE0, ++ 0x94, 0x78, 0x90, 0x13, 0x2C, 0xE0, 0x94, 0x00, ++ 0x40, 0x06, 0x90, 0x12, 0x92, 0xE0, 0x04, 0xF0, ++ 0xD3, 0x90, 0x13, 0x2D, 0xE0, 0x94, 0x72, 0x90, ++ 0x13, 0x2C, 0xE0, 0x94, 0x01, 0x40, 0x06, 0x90, ++ 0x12, 0x93, 0xE0, 0x04, 0xF0, 0xAF, 0xE1, 0xEF, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, ++ 0xE1, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, 0xED, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xAD, 0xE1, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0xEF, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0xF2, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xAD, 0xE1, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x52, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0xDF, 0x74, ++ 0x00, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, ++ 0x83, 0xE0, 0xFF, 0xAE, 0xE1, 0x74, 0x14, 0x2E, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, ++ 0xF0, 0xAF, 0xDF, 0x74, 0x28, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xAE, ++ 0xE1, 0x74, 0x3C, 0x2E, 0xF5, 0x82, 0xE4, 0x34, ++ 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0xAF, 0xE1, 0x74, ++ 0xE5, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0x74, 0x02, 0xF0, 0x90, 0x12, 0xDF, 0xE0, ++ 0x04, 0xF0, 0x90, 0x88, 0xC0, 0xE0, 0x14, 0xF0, ++ 0x90, 0x88, 0xC1, 0xE0, 0x14, 0xF0, 0xAF, 0xE1, ++ 0x74, 0xD1, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, ++ 0xF5, 0x83, 0xE4, 0xF0, 0x7B, 0x01, 0x7D, 0x01, ++ 0xAF, 0xE1, 0x12, 0x4C, 0x38, 0xE4, 0xFB, 0x7D, ++ 0x01, 0xAF, 0xDF, 0x12, 0x4C, 0x38, 0x90, 0x12, ++ 0xDD, 0xE0, 0x04, 0xF0, 0x02, 0x1B, 0xDB, 0x90, ++ 0x12, 0xDF, 0xE0, 0xC3, 0x95, 0x0D, 0x40, 0x03, ++ 0x02, 0x23, 0xE4, 0x90, 0x88, 0xC0, 0xE0, 0x94, ++ 0x00, 0x40, 0x79, 0xE4, 0x90, 0x12, 0xDB, 0xF0, ++ 0x90, 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, ++ 0x50, 0x6A, 0x7B, 0x01, 0x7D, 0x02, 0x12, 0x4C, ++ 0x38, 0x90, 0x12, 0xDE, 0xEF, 0xF0, 0x60, 0x54, ++ 0xA3, 0xE0, 0xC3, 0x95, 0x0D, 0x50, 0x4D, 0x90, ++ 0x12, 0xDB, 0xE0, 0xFF, 0x24, 0xCA, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x74, ++ 0xC0, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x74, 0xE5, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0x74, 0x03, 0xF0, ++ 0x74, 0x77, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x12, ++ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x88, 0xC0, 0xE0, ++ 0x14, 0xF0, 0x90, 0x12, 0xDF, 0xE0, 0x04, 0xF0, ++ 0x74, 0xD1, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, ++ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, 0xDB, 0xE0, ++ 0x04, 0xF0, 0x80, 0x8C, 0x90, 0x12, 0xDF, 0xE0, ++ 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, 0x26, 0x16, ++ 0x90, 0x88, 0xC1, 0xE0, 0x94, 0x00, 0x50, 0x03, ++ 0x02, 0x26, 0x16, 0xE4, 0x90, 0x12, 0xDC, 0xF0, ++ 0x90, 0x88, 0xB0, 0xE0, 0xFE, 0x90, 0x12, 0xDC, ++ 0xE0, 0xFF, 0xC3, 0x9E, 0x40, 0x03, 0x02, 0x26, ++ 0x16, 0xE4, 0xFB, 0x7D, 0x02, 0x12, 0x4C, 0x38, ++ 0x90, 0x12, 0xDE, 0xEF, 0xF0, 0x70, 0x03, 0x02, ++ 0x26, 0x0D, 0xE4, 0x90, 0x12, 0xDB, 0xF0, 0x90, ++ 0x12, 0xDB, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, ++ 0x03, 0x02, 0x26, 0x0D, 0x74, 0xE5, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x60, ++ 0x03, 0x02, 0x26, 0x04, 0x90, 0x12, 0xDF, 0xE0, ++ 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, 0x26, 0x04, ++ 0x90, 0x12, 0xDC, 0xE0, 0xFF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, ++ 0x12, 0xDB, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x50, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, ++ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, ++ 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEC, ++ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xDC, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x02, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, ++ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xDC, 0xE0, ++ 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, ++ 0xF5, 0x83, 0xE0, 0xFE, 0x90, 0x12, 0xDB, 0xE0, ++ 0xFD, 0x24, 0x14, 0xF5, 0x82, 0xE4, 0x34, 0x8A, ++ 0xF5, 0x83, 0xEE, 0xF0, 0x74, 0x28, 0x2F, 0xF5, ++ 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, ++ 0x74, 0x3C, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, ++ 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x12, 0xDC, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFE, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, ++ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, 0xF5, 0x83, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, ++ 0x74, 0xE5, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x88, ++ 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x74, 0xC0, 0x2E, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0x74, ++ 0x01, 0xF0, 0x90, 0x12, 0xDC, 0xE0, 0xFF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0xF2, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xEE, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x94, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xEC, ++ 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEE, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x96, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, ++ 0xED, 0xF0, 0x74, 0xD1, 0x2E, 0xF5, 0x82, 0xE4, ++ 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x88, ++ 0xC1, 0xE0, 0x14, 0xF0, 0x90, 0x12, 0xDF, 0xE0, ++ 0x04, 0xF0, 0x80, 0x09, 0x90, 0x12, 0xDB, 0xE0, ++ 0x04, 0xF0, 0x02, 0x24, 0x27, 0x90, 0x12, 0xDC, ++ 0xE0, 0x04, 0xF0, 0x02, 0x24, 0x00, 0x22, 0xE4, ++ 0xF5, 0x99, 0x75, 0x96, 0x03, 0x75, 0x9E, 0x55, ++ 0xF5, 0xA1, 0xF5, 0xA1, 0xF5, 0xA1, 0xC2, 0x09, ++ 0xC2, 0x0A, 0xC2, 0x0E, 0xC2, 0x15, 0xC2, 0x05, ++ 0xC2, 0x06, 0x90, 0x12, 0x81, 0xF0, 0xA3, 0xF0, ++ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, ++ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, ++ 0x90, 0x12, 0x77, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, ++ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, ++ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x12, ++ 0xC0, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, ++ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, ++ 0xA3, 0xF0, 0xA3, 0xF0, 0xD2, 0xB1, 0xC2, 0xB6, ++ 0xC2, 0xB7, 0x75, 0xA0, 0x02, 0xF5, 0xAE, 0x90, ++ 0xF0, 0xC4, 0xF0, 0x90, 0x8F, 0xF0, 0xF0, 0xFF, ++ 0xFE, 0xAD, 0x07, 0x74, 0xE5, 0x2D, 0xF5, 0x82, ++ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0x74, ++ 0xA0, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x37, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x0F, 0xBF, 0x00, 0x01, 0x0E, ++ 0xEF, 0x64, 0x14, 0x4E, 0x70, 0xDB, 0xE4, 0x90, ++ 0x88, 0xC0, 0xF0, 0x90, 0x88, 0xC1, 0xF0, 0xF5, ++ 0xDC, 0xF5, 0xDD, 0xF5, 0xDE, 0xF5, 0xD9, 0xF5, ++ 0xDA, 0xF5, 0xDB, 0x90, 0x88, 0xC2, 0xF0, 0x90, ++ 0x88, 0xC6, 0xF0, 0x90, 0x88, 0xCD, 0xF0, 0xC2, ++ 0x0C, 0xC2, 0x0B, 0xC2, 0x14, 0x75, 0x8A, 0x8F, ++ 0xF5, 0x8B, 0x90, 0x8F, 0xFF, 0xF0, 0xC2, 0x03, ++ 0xC2, 0x16, 0x90, 0x28, 0x11, 0x93, 0xF5, 0x08, ++ 0x90, 0x28, 0x10, 0xE4, 0x93, 0xFD, 0xF5, 0x0D, ++ 0x90, 0x8B, 0x7C, 0xED, 0xF0, 0x90, 0x28, 0x12, ++ 0xE4, 0x93, 0x90, 0x8B, 0x7D, 0xF0, 0x90, 0x28, ++ 0x13, 0xE4, 0x93, 0x90, 0x8B, 0x7E, 0xF0, 0x90, ++ 0x28, 0x0B, 0xE4, 0x93, 0xF5, 0x0B, 0x90, 0x28, ++ 0x0C, 0xE4, 0x93, 0xF5, 0x0C, 0x90, 0x8B, 0x78, ++ 0x74, 0x05, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x8B, ++ 0x7A, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x20, 0xF0, ++ 0xE4, 0x90, 0x3F, 0xFE, 0xF0, 0xC2, 0x10, 0x90, ++ 0x12, 0xBC, 0xF0, 0x90, 0x12, 0x58, 0xF0, 0x90, ++ 0x12, 0x59, 0xF0, 0x90, 0x12, 0x63, 0xF0, 0xA3, ++ 0x74, 0x03, 0xF0, 0xE4, 0x90, 0x8F, 0xFE, 0xF0, ++ 0xFE, 0xFF, 0x75, 0x9E, 0x55, 0xAD, 0x07, 0x74, ++ 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x74, 0x78, 0x2D, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x0F, ++ 0xBF, 0x00, 0x01, 0x0E, 0xEF, 0x64, 0x3C, 0x4E, ++ 0x70, 0xD8, 0xE4, 0xFE, 0xFF, 0xAD, 0x07, 0x74, ++ 0xCA, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x74, 0x65, 0x2D, 0xF5, 0x82, ++ 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE4, 0xF0, 0x0F, ++ 0xBF, 0x00, 0x01, 0x0E, 0xEF, 0x64, 0x0A, 0x4E, ++ 0x70, 0xDB, 0xE4, 0x90, 0x12, 0x71, 0xF0, 0xA3, ++ 0xF0, 0x90, 0x12, 0xBD, 0xF0, 0xA3, 0xF0, 0x90, ++ 0x12, 0xBF, 0xF0, 0x90, 0x3F, 0xFD, 0x04, 0xF0, ++ 0x22, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0xA3, 0xF0, ++ 0x90, 0x8F, 0xFE, 0x74, 0xAA, 0xF0, 0x90, 0x8F, ++ 0xFD, 0xE0, 0x64, 0xBB, 0x60, 0x1A, 0x90, 0x12, ++ 0xDB, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x75, 0x9E, 0x55, 0x7F, ++ 0xFA, 0x7E, 0x00, 0x12, 0x67, 0xEE, 0x80, 0xDE, ++ 0xE4, 0x90, 0x8F, 0xFD, 0xF0, 0x90, 0x8F, 0xFE, ++ 0xF0, 0xD2, 0xD8, 0xA2, 0xD9, 0x33, 0x90, 0x8E, ++ 0x01, 0xF0, 0x90, 0xF0, 0xC4, 0x74, 0x01, 0xF0, ++ 0x22, 0xD2, 0xD8, 0x22, 0xD2, 0x0E, 0x32, 0x32, ++ 0x1C, 0x1C, 0x20, 0x1E, 0x28, 0x03, 0xE8, 0x1E, ++ 0xC8, 0x14, 0x01, 0x40, 0x40, 0x20, 0x20, 0x02, ++ 0x0A, 0x0A, 0x01, 0x05, 0xE4, 0x90, 0x12, 0xE8, ++ 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, ++ 0xF0, 0xA3, 0xF0, 0x90, 0xF1, 0x03, 0xE0, 0xD3, ++ 0x94, 0x50, 0x40, 0x0F, 0xE0, 0x90, 0xF2, 0xA5, ++ 0xF0, 0x90, 0xF1, 0x03, 0xE0, 0x90, 0xF2, 0xA4, ++ 0xF0, 0x80, 0x0A, 0x90, 0xF2, 0xA5, 0x74, 0xFA, ++ 0xF0, 0x90, 0xF2, 0xA4, 0xF0, 0x90, 0xF1, 0x03, ++ 0xE0, 0x90, 0xF2, 0xB1, 0xF0, 0xD2, 0xB6, 0xD2, ++ 0xB7, 0xD2, 0xB2, 0x20, 0xB2, 0x06, 0x30, 0x0E, ++ 0x03, 0x20, 0xDC, 0x05, 0x75, 0x9E, 0x55, 0x80, ++ 0xF2, 0xC2, 0xDC, 0xC2, 0x0E, 0x90, 0xF2, 0xB0, ++ 0xE0, 0x64, 0x01, 0x70, 0x35, 0x90, 0x12, 0xFA, ++ 0x74, 0x16, 0xF0, 0x90, 0x12, 0x92, 0xE0, 0xD3, ++ 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, ++ 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, ++ 0x12, 0xFA, 0x74, 0x12, 0xF0, 0x90, 0x12, 0x93, ++ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x29, ++ 0xC6, 0x90, 0x12, 0xFA, 0x74, 0x10, 0xF0, 0x02, ++ 0x29, 0xC6, 0x90, 0xF2, 0xB0, 0xE0, 0x64, 0x02, ++ 0x70, 0x35, 0x90, 0x12, 0xFA, 0x74, 0x16, 0xF0, ++ 0x90, 0x12, 0x92, 0xE0, 0xD3, 0x94, 0x00, 0x50, ++ 0x08, 0x90, 0x12, 0x60, 0xE0, 0x94, 0x00, 0x40, ++ 0x09, 0x30, 0x04, 0x06, 0x90, 0x12, 0xFA, 0x74, ++ 0x12, 0xF0, 0x90, 0x12, 0x93, 0xE0, 0xD3, 0x94, ++ 0x00, 0x50, 0x03, 0x02, 0x29, 0xC6, 0x90, 0x12, ++ 0xFA, 0x74, 0x10, 0xF0, 0x02, 0x29, 0xC6, 0x90, ++ 0xF2, 0xB0, 0xE0, 0x64, 0x03, 0x70, 0x35, 0x90, ++ 0x12, 0xFA, 0x74, 0x16, 0xF0, 0x90, 0x12, 0x92, ++ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, ++ 0x60, 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, ++ 0x06, 0x90, 0x12, 0xFA, 0x74, 0x12, 0xF0, 0x90, ++ 0x12, 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, ++ 0x02, 0x29, 0xC6, 0x90, 0x12, 0xFA, 0x74, 0x10, ++ 0xF0, 0x02, 0x29, 0xC6, 0x90, 0xF2, 0xB0, 0xE0, ++ 0x64, 0x04, 0x70, 0x31, 0x90, 0x12, 0xFA, 0x74, ++ 0x18, 0xF0, 0x90, 0x12, 0x92, 0xE0, 0xD3, 0x94, ++ 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, 0x94, ++ 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, 0x12, ++ 0xFA, 0x74, 0x16, 0xF0, 0x90, 0x12, 0x93, 0xE0, ++ 0xD3, 0x94, 0x00, 0x40, 0x79, 0x90, 0x12, 0xFA, ++ 0x74, 0x12, 0xF0, 0x80, 0x71, 0x90, 0xF2, 0xB0, ++ 0xE0, 0x64, 0x05, 0x70, 0x31, 0x90, 0x12, 0xFA, ++ 0x74, 0x19, 0xF0, 0x90, 0x12, 0x92, 0xE0, 0xD3, ++ 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, 0x60, 0xE0, ++ 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, 0x06, 0x90, ++ 0x12, 0xFA, 0x74, 0x17, 0xF0, 0x90, 0x12, 0x93, ++ 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x40, 0x90, 0x12, ++ 0xFA, 0x74, 0x12, 0xF0, 0x80, 0x38, 0x90, 0xF2, ++ 0xB0, 0xE0, 0xD3, 0x94, 0x05, 0x40, 0x2F, 0x90, ++ 0x12, 0xFA, 0x74, 0x19, 0xF0, 0x90, 0x12, 0x92, ++ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x08, 0x90, 0x12, ++ 0x60, 0xE0, 0x94, 0x00, 0x40, 0x09, 0x30, 0x04, ++ 0x06, 0x90, 0x12, 0xFA, 0x74, 0x17, 0xF0, 0x90, ++ 0x12, 0x93, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x06, ++ 0x90, 0x12, 0xFA, 0x74, 0x12, 0xF0, 0x90, 0xF2, ++ 0xB0, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, 0x02, ++ 0x35, 0x7F, 0xE4, 0x90, 0x12, 0xDA, 0xF0, 0xA3, ++ 0xF0, 0x90, 0xF2, 0xB0, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x9F, ++ 0xEC, 0x94, 0x00, 0x40, 0x03, 0x02, 0x35, 0x7F, ++ 0x30, 0xD9, 0x03, 0x02, 0x2A, 0x95, 0xED, 0x25, ++ 0xE0, 0xFD, 0xEC, 0x33, 0xFC, 0x74, 0x81, 0x2D, ++ 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, ++ 0x25, 0xE0, 0x24, 0x29, 0xF5, 0x82, 0xE4, 0x34, ++ 0x80, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x81, 0x2D, ++ 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, ++ 0x25, 0xE0, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, ++ 0x80, 0xF5, 0x83, 0xE0, 0x7C, 0x00, 0x24, 0x00, ++ 0xFF, 0xEC, 0x3E, 0xFE, 0x7D, 0x14, 0x12, 0x59, ++ 0x93, 0x90, 0x12, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFD, ++ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFC, 0x74, 0x80, ++ 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, ++ 0xE0, 0x25, 0xE0, 0x24, 0x01, 0xF5, 0x82, 0xE4, ++ 0x34, 0x80, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x80, ++ 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, 0x83, ++ 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0x80, 0xF5, 0x83, 0xE0, 0x7C, 0x00, 0x24, ++ 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0x7D, 0x1E, 0x12, ++ 0x59, 0x93, 0x90, 0x12, 0xF6, 0xEE, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0x02, 0x2B, 0x37, 0x90, 0x12, 0xDB, ++ 0xE0, 0x25, 0xE0, 0xFD, 0x90, 0x12, 0xDA, 0xE0, ++ 0x33, 0xFC, 0x74, 0x81, 0x2D, 0xF5, 0x82, 0x74, ++ 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x24, ++ 0xE9, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, ++ 0xE0, 0xFE, 0x74, 0x81, 0x2D, 0xF5, 0x82, 0x74, ++ 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x24, ++ 0xE8, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, ++ 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, ++ 0xFE, 0x7D, 0x14, 0x12, 0x59, 0x93, 0x90, 0x12, ++ 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, ++ 0xDB, 0xE0, 0x25, 0xE0, 0xFD, 0x90, 0x12, 0xDA, ++ 0xE0, 0x33, 0xFC, 0x74, 0x80, 0x2D, 0xF5, 0x82, ++ 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, ++ 0x24, 0xC1, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, ++ 0x83, 0xE0, 0xFE, 0x74, 0x80, 0x2D, 0xF5, 0x82, ++ 0x74, 0x81, 0x3C, 0xF5, 0x83, 0xE0, 0x25, 0xE0, ++ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, ++ 0x83, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, ++ 0x3E, 0xFE, 0x7D, 0x1E, 0x12, 0x59, 0x93, 0x90, ++ 0x12, 0xF6, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, ++ 0x12, 0xF4, 0xE0, 0xC4, 0xF8, 0x54, 0xF0, 0xC8, ++ 0x68, 0xFE, 0xA3, 0xE0, 0xC4, 0x54, 0x0F, 0x48, ++ 0xFF, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x59, 0x81, ++ 0x90, 0x12, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0xA3, 0xE0, 0xC4, 0xF8, 0x54, 0xF0, 0xC8, 0x68, ++ 0xFE, 0xA3, 0xE0, 0xC4, 0x54, 0x0F, 0x48, 0xFF, ++ 0x12, 0x59, 0x81, 0x90, 0x12, 0xF6, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x12, 0xE2, 0xF0, ++ 0xA3, 0xF0, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, ++ 0xFD, 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFC, 0x74, ++ 0x81, 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, ++ 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0xFF, 0x74, ++ 0x80, 0x2D, 0xF5, 0x82, 0x74, 0x81, 0x3C, 0xF5, ++ 0x83, 0xE0, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, ++ 0xF0, 0xFE, 0xEF, 0x25, 0xE0, 0xFF, 0xEE, 0x33, ++ 0xFE, 0xA2, 0xD9, 0xE4, 0x33, 0x2F, 0xFF, 0xEC, ++ 0x3E, 0x90, 0x12, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, ++ 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x81, 0x2F, ++ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, ++ 0x60, 0x03, 0x02, 0x2C, 0x7C, 0x90, 0x12, 0xF0, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x00, 0xF5, ++ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, ++ 0x74, 0x50, 0x2F, 0xF5, 0x82, 0x74, 0x60, 0x3E, ++ 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x9C, ++ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, ++ 0x24, 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0xC3, 0xEF, ++ 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0xEE, 0x64, 0x80, ++ 0x98, 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, ++ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, ++ 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0x24, 0x28, 0xF5, 0x82, 0x74, 0x60, 0x3E, ++ 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0x00, 0x2F, 0xF5, ++ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, ++ 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, ++ 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0x24, 0x0A, 0xFD, ++ 0xE4, 0x33, 0xFC, 0xC3, 0xEF, 0x9D, 0xEC, 0x64, ++ 0x80, 0xF8, 0xEE, 0x64, 0x80, 0x98, 0x40, 0x03, ++ 0x02, 0x2E, 0xD9, 0x90, 0x12, 0xE3, 0xE0, 0x04, ++ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, ++ 0xF0, 0x02, 0x2E, 0xD9, 0x90, 0x12, 0xDB, 0xE0, ++ 0x25, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0x33, ++ 0xFE, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, ++ 0x3E, 0xF5, 0x83, 0xE0, 0x64, 0x1D, 0x60, 0x03, ++ 0x02, 0x2D, 0x3B, 0x90, 0x12, 0xF0, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0x74, ++ 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xB0, ++ 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, ++ 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, ++ 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0x24, ++ 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0xC3, 0xEF, 0x9D, ++ 0xEC, 0x64, 0x80, 0xF8, 0xEE, 0x64, 0x80, 0x98, ++ 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, ++ 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, ++ 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x24, 0xD8, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, ++ 0x83, 0xE0, 0xFD, 0x74, 0x00, 0x2F, 0xF5, 0x82, ++ 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, ++ 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, ++ 0x90, 0x12, 0xFA, 0xE0, 0x24, 0x0A, 0xFD, 0xE4, ++ 0x33, 0xFC, 0xC3, 0xEF, 0x9D, 0xEC, 0x64, 0x80, ++ 0xF8, 0xEE, 0x64, 0x80, 0x98, 0x40, 0x03, 0x02, ++ 0x2E, 0xD9, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, ++ 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, ++ 0x02, 0x2E, 0xD9, 0x90, 0x12, 0xF0, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0x24, 0xFF, 0xF5, 0x82, 0x74, ++ 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xD7, ++ 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, ++ 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, ++ 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, ++ 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, ++ 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, ++ 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, ++ 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x24, 0x27, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, ++ 0x83, 0xE0, 0xFD, 0x74, 0xFF, 0x2F, 0xF5, 0x82, ++ 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, ++ 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, ++ 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, ++ 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x50, 0x0E, 0x90, ++ 0x12, 0xE3, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, ++ 0x12, 0xE2, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x00, 0xF5, ++ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, ++ 0x74, 0xD8, 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, ++ 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, ++ 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, ++ 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, ++ 0x6E, 0x98, 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, ++ 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, ++ 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0x24, 0x28, 0xF5, 0x82, 0x74, 0x60, ++ 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0x00, 0x2F, ++ 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, ++ 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, ++ 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xC3, ++ 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x50, ++ 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, 0xF0, 0x70, ++ 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, 0xF0, 0x90, ++ 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, ++ 0x01, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, ++ 0xE0, 0xFD, 0x74, 0xD9, 0x2F, 0xF5, 0x82, 0x74, ++ 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, ++ 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, ++ 0x12, 0xFA, 0xE0, 0xFD, 0xC3, 0xEF, 0x9D, 0x74, ++ 0x80, 0xF8, 0x6E, 0x98, 0x50, 0x0E, 0x90, 0x12, ++ 0xE3, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, ++ 0xE2, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x29, 0xF5, 0x82, ++ 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, ++ 0x01, 0x2F, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, ++ 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, ++ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, ++ 0xFD, 0xC3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, ++ 0x98, 0x50, 0x0E, 0x90, 0x12, 0xE3, 0xE0, 0x04, ++ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE2, 0xE0, 0x04, ++ 0xF0, 0xE4, 0x90, 0x12, 0xE4, 0xF0, 0xA3, 0xF0, ++ 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x24, 0xD8, 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, ++ 0x83, 0xE0, 0xFD, 0x74, 0xD7, 0x2F, 0xF5, 0x82, ++ 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, ++ 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, ++ 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xD3, 0xEF, 0x9D, ++ 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x40, 0x0E, 0x90, ++ 0x12, 0xE5, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, ++ 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0xD9, 0xF5, ++ 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, ++ 0x74, 0xD8, 0x2F, 0xF5, 0x82, 0x74, 0x5F, 0x3E, ++ 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, ++ 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, ++ 0xE0, 0xFD, 0xD3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, ++ 0x6E, 0x98, 0x40, 0x0E, 0x90, 0x12, 0xE5, 0xE0, ++ 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE4, 0xE0, ++ 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0x74, 0x60, ++ 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0xFF, 0x2F, ++ 0xF5, 0x82, 0x74, 0x5F, 0x3E, 0xF5, 0x83, 0xE0, ++ 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, ++ 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xD3, ++ 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x40, ++ 0x0E, 0x90, 0x12, 0xE5, 0xE0, 0x04, 0xF0, 0x70, ++ 0x06, 0x90, 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x90, ++ 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x24, ++ 0x01, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, ++ 0xE0, 0xFD, 0x74, 0x00, 0x2F, 0xF5, 0x82, 0x74, ++ 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, 0x9D, 0xFF, ++ 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, 0xF1, 0x90, ++ 0x12, 0xFA, 0xE0, 0xFD, 0xD3, 0xEF, 0x9D, 0x74, ++ 0x80, 0xF8, 0x6E, 0x98, 0x40, 0x0E, 0x90, 0x12, ++ 0xE5, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, ++ 0xE4, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xF0, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0x24, 0x28, 0xF5, 0x82, ++ 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, ++ 0x27, 0x2F, 0xF5, 0x82, 0x74, 0x60, 0x3E, 0xF5, ++ 0x83, 0xE0, 0xC3, 0x9D, 0xFF, 0xE4, 0x94, 0x00, ++ 0xFE, 0x12, 0x78, 0xF1, 0x90, 0x12, 0xFA, 0xE0, ++ 0xFD, 0xD3, 0xEF, 0x9D, 0x74, 0x80, 0xF8, 0x6E, ++ 0x98, 0x40, 0x0E, 0x90, 0x12, 0xE5, 0xE0, 0x04, ++ 0xF0, 0x70, 0x06, 0x90, 0x12, 0xE4, 0xE0, 0x04, ++ 0xF0, 0x90, 0x12, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0x24, 0x29, 0xF5, 0x82, 0x74, 0x60, 0x3E, ++ 0xF5, 0x83, 0xE0, 0xFD, 0x74, 0x28, 0x2F, 0xF5, ++ 0x82, 0x74, 0x60, 0x3E, 0xF5, 0x83, 0xE0, 0xC3, ++ 0x9D, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x12, 0x78, ++ 0xF1, 0x90, 0x12, 0xFA, 0xE0, 0xFD, 0xD3, 0xEF, ++ 0x9D, 0x74, 0x80, 0xF8, 0x6E, 0x98, 0x40, 0x0E, ++ 0x90, 0x12, 0xE5, 0xE0, 0x04, 0xF0, 0x70, 0x06, ++ 0x90, 0x12, 0xE4, 0xE0, 0x04, 0xF0, 0x90, 0x12, ++ 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, 0xDA, ++ 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, 0x82, ++ 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, 0x74, ++ 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, ++ 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, 0x00, ++ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, 0x83, ++ 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x35, 0x83, ++ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0xF1, 0x03, 0xE0, ++ 0xFF, 0x90, 0x12, 0xF5, 0xE0, 0x2F, 0xFF, 0x90, ++ 0x12, 0xF4, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x12, ++ 0xF0, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x24, 0x00, ++ 0xF5, 0x82, 0x74, 0x60, 0x3C, 0xF5, 0x83, 0xE0, ++ 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x62, 0x90, 0xF1, ++ 0x03, 0xE0, 0xFF, 0x90, 0x12, 0xF7, 0xE0, 0x2F, ++ 0xFF, 0x90, 0x12, 0xF6, 0xE0, 0x34, 0x00, 0xFE, ++ 0x74, 0x00, 0x2D, 0xF5, 0x82, 0x74, 0x60, 0x3C, ++ 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, ++ 0x3F, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, ++ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, ++ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, ++ 0xE0, 0xFD, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, ++ 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, ++ 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, ++ 0x10, 0xF5, 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, ++ 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, ++ 0x90, 0x12, 0xDA, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0x25, 0xE0, 0xFB, 0xEC, 0x33, 0xFA, 0x74, 0x81, ++ 0x2B, 0xF5, 0x82, 0x74, 0x81, 0x3A, 0xF5, 0x83, ++ 0xE0, 0x70, 0x4D, 0xD3, 0x90, 0x12, 0xE3, 0xE0, ++ 0x94, 0x01, 0x90, 0x12, 0xE2, 0xE0, 0x94, 0x00, ++ 0x50, 0x03, 0x02, 0x32, 0x5E, 0xED, 0x25, 0xE0, ++ 0xFF, 0xEC, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0xE4, 0xF0, 0x02, 0x32, 0x5E, ++ 0x74, 0x81, 0x2B, 0xF5, 0x82, 0x74, 0x81, 0x3A, ++ 0xF5, 0x83, 0xE0, 0x64, 0x1D, 0x70, 0x52, 0xD3, ++ 0x90, 0x12, 0xE3, 0xE0, 0x94, 0x01, 0x90, 0x12, ++ 0xE2, 0xE0, 0x94, 0x00, 0x50, 0x03, 0x02, 0x32, ++ 0x5E, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, ++ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, ++ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, ++ 0xE0, 0xFD, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, ++ 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, ++ 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, ++ 0x10, 0xF5, 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, ++ 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE4, 0xF0, 0x80, ++ 0x4D, 0xD3, 0x90, 0x12, 0xE3, 0xE0, 0x94, 0x05, ++ 0x90, 0x12, 0xE2, 0xE0, 0x94, 0x00, 0x40, 0x3E, ++ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, ++ 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, ++ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, ++ 0xFD, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, ++ 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, ++ 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, ++ 0xF5, 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, ++ 0x35, 0x83, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, ++ 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, 0xDA, ++ 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, 0x82, ++ 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xF5, 0xCB, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0xF5, 0xCC, 0xD2, 0xB5, 0x30, ++ 0xB5, 0x05, 0x75, 0x9E, 0x55, 0x80, 0xF8, 0x7D, ++ 0x19, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, ++ 0x90, 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x81, ++ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, ++ 0xE0, 0x70, 0x03, 0x02, 0x35, 0x6E, 0x74, 0x81, ++ 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, ++ 0xE0, 0x64, 0x1D, 0x70, 0x03, 0x02, 0x35, 0x6E, ++ 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, ++ 0x12, 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, ++ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, ++ 0x70, 0x03, 0x02, 0x35, 0x6E, 0x74, 0x80, 0x2F, ++ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, ++ 0x64, 0x13, 0x70, 0x03, 0x02, 0x35, 0x6E, 0x90, ++ 0x12, 0xDA, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x25, ++ 0xE0, 0xFF, 0xEA, 0x33, 0xFE, 0x74, 0x80, 0x2F, ++ 0xF5, 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, ++ 0xFC, 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, ++ 0x3E, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, ++ 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, ++ 0xF5, 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, ++ 0x35, 0x83, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, ++ 0x03, 0x02, 0x35, 0x6E, 0xC3, 0xE5, 0xCA, 0x95, ++ 0xB7, 0xC3, 0x9D, 0x50, 0x39, 0xEB, 0x25, 0xE0, ++ 0xFF, 0xEA, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0xEB, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, ++ 0xCA, 0x95, 0xB9, 0xC3, 0x9D, 0x50, 0x3F, 0x90, ++ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0xEC, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, ++ 0xCA, 0x95, 0xBA, 0xC3, 0x9D, 0x50, 0x3F, 0x90, ++ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0xED, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, ++ 0xCA, 0x95, 0xBD, 0xC3, 0x9D, 0x50, 0x3F, 0x90, ++ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0xFF, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x0F, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, ++ 0xCA, 0x95, 0xBE, 0xC3, 0x9D, 0x50, 0x3F, 0x90, ++ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0x01, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, ++ 0xCA, 0x95, 0xC2, 0xC3, 0x9D, 0x50, 0x3F, 0x90, ++ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0x13, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, ++ 0xCA, 0x95, 0xC3, 0xC3, 0x9D, 0x50, 0x3F, 0x90, ++ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFC, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0x14, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2C, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xC3, 0xE5, ++ 0xCA, 0x95, 0xC4, 0xC3, 0x9D, 0x50, 0x3F, 0x90, ++ 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0x33, 0xFE, 0x74, 0x80, 0x2F, 0xF5, ++ 0x82, 0x74, 0x81, 0x3E, 0xF5, 0x83, 0xE0, 0xFD, ++ 0x74, 0x81, 0x2F, 0xF5, 0x82, 0x74, 0x81, 0x3E, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x14, 0xA4, 0x24, ++ 0x15, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x10, 0xF5, ++ 0x83, 0xE5, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x35, ++ 0x83, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0x12, ++ 0xDB, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x29, 0xD9, 0x22, ++ 0xE4, 0x90, 0x8F, 0xF0, 0xF0, 0xD2, 0x18, 0x30, ++ 0x14, 0x03, 0x02, 0x3B, 0x5F, 0x90, 0x12, 0x5F, ++ 0xF0, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, ++ 0x3A, 0x13, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, ++ 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x70, 0x03, 0x02, ++ 0x3A, 0x0A, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xC0, ++ 0xF5, 0x82, 0xE4, 0x34, 0x12, 0xF5, 0x83, 0xE0, ++ 0x60, 0x03, 0x02, 0x3A, 0x0A, 0x74, 0x14, 0x2F, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, ++ 0xC3, 0x94, 0x01, 0x74, 0x80, 0x94, 0x88, 0x40, ++ 0x03, 0x02, 0x3A, 0x0A, 0x90, 0x12, 0xDA, 0xE0, ++ 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0xE0, 0x64, 0x03, 0x60, 0x04, 0xC2, 0x18, ++ 0x80, 0x07, 0x7F, 0x70, 0x7E, 0x17, 0x12, 0x67, ++ 0xEE, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xE5, 0xF5, ++ 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB4, ++ 0x02, 0x08, 0x90, 0x12, 0x5F, 0xE0, 0x04, 0xF0, ++ 0x80, 0x06, 0x90, 0x12, 0x5F, 0xE0, 0x14, 0xF0, ++ 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x12, ++ 0xDB, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x90, 0x12, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE1, 0x74, 0x1E, ++ 0xF0, 0xA3, 0x74, 0x14, 0xF0, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0xEE, 0x33, 0x95, 0xE0, 0xFD, 0xFC, 0xE4, 0xFB, ++ 0x7A, 0x05, 0xF9, 0xF8, 0x12, 0x5A, 0x34, 0x78, ++ 0x04, 0x12, 0x5B, 0x75, 0x90, 0x12, 0xDD, 0x12, ++ 0x5B, 0x88, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x90, ++ 0x28, 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, ++ 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, ++ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x5A, ++ 0xBF, 0xAC, 0x00, 0xAD, 0x01, 0xAE, 0x02, 0xAF, ++ 0x03, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x12, 0xE1, ++ 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, 0x93, 0x8F, ++ 0xF0, 0xA4, 0xFF, 0xE5, 0xF0, 0xA2, 0xE7, 0x13, ++ 0xFE, 0xEF, 0x13, 0xFF, 0xFB, 0xAA, 0x06, 0xEA, ++ 0x33, 0x95, 0xE0, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, ++ 0x06, 0xD3, 0x12, 0x5B, 0x51, 0x50, 0x3C, 0x90, ++ 0x12, 0xE1, 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, ++ 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, ++ 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xEF, 0x24, ++ 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, ++ 0xE4, 0x3C, 0xFC, 0x90, 0x12, 0xDD, 0x12, 0x5B, ++ 0x88, 0x80, 0x33, 0x90, 0x12, 0xDD, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0xE0, 0xFF, ++ 0x90, 0x28, 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, ++ 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, ++ 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0x12, 0x5A, 0xBF, ++ 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, ++ 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x04, 0x12, 0x5B, ++ 0x62, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0xEE, 0x33, 0x95, 0xE0, 0xFD, ++ 0xFC, 0xE4, 0x7B, 0x20, 0x7A, 0x03, 0xF9, 0xF8, ++ 0x12, 0x5A, 0x34, 0x78, 0x04, 0x12, 0x5B, 0x75, ++ 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, ++ 0xE2, 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, 0x93, ++ 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, ++ 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xAC, 0x00, 0xAD, ++ 0x01, 0xAE, 0x02, 0xAF, 0x03, 0xC0, 0x06, 0xC0, ++ 0x07, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x90, 0x28, ++ 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xE5, ++ 0xF0, 0xA2, 0xE7, 0x13, 0xFE, 0xEF, 0x13, 0xFF, ++ 0xFB, 0xAA, 0x06, 0xEA, 0x33, 0x95, 0xE0, 0xF9, ++ 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0xD3, 0x12, 0x5B, ++ 0x51, 0x50, 0x3C, 0x90, 0x12, 0xE2, 0xE0, 0xFF, ++ 0x90, 0x28, 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, ++ 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, ++ 0xF8, 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, ++ 0x5A, 0xBF, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, ++ 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, ++ 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x80, 0x35, 0x90, ++ 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC0, 0x06, 0xC0, ++ 0x07, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x90, 0x28, ++ 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, ++ 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0xD0, ++ 0x07, 0xD0, 0x06, 0x12, 0x5A, 0xBF, 0x90, 0x12, ++ 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDD, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0x78, 0x04, 0x12, 0x5B, 0x62, 0x90, ++ 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x04, ++ 0xFF, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0x74, ++ 0xE5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, ++ 0x83, 0xE0, 0x4F, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x03, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xED, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0x78, 0x04, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, ++ 0x13, 0xD8, 0xF8, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xED, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0x78, 0x04, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, ++ 0x13, 0xD8, 0xF8, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x01, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xED, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xA3, 0xE0, 0xC4, ++ 0xF8, 0x54, 0x0F, 0xC8, 0x68, 0xFF, 0x05, 0x82, ++ 0xD5, 0x82, 0x02, 0x15, 0x83, 0x15, 0x82, 0xE0, ++ 0xC4, 0x54, 0xF0, 0x48, 0xEF, 0x54, 0xF0, 0xFF, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xA3, ++ 0xE0, 0x54, 0x0F, 0x4F, 0xFF, 0x90, 0x8F, 0xF0, ++ 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x02, 0xF5, ++ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, ++ 0x90, 0x3F, 0xFE, 0xE0, 0xB4, 0x01, 0x2D, 0xE5, ++ 0x09, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, ++ 0x06, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, ++ 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0xAF, 0x0A, 0x90, ++ 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, ++ 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, ++ 0xEF, 0xF0, 0x80, 0x28, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x04, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0x08, 0xF0, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0x74, 0x08, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x04, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, ++ 0x02, 0x35, 0x95, 0x90, 0x8F, 0xF0, 0xE0, 0xFF, ++ 0x90, 0x12, 0x5F, 0xE0, 0xB5, 0x07, 0x04, 0xD2, ++ 0x04, 0x80, 0x02, 0xC2, 0x04, 0x20, 0x16, 0x03, ++ 0x02, 0x3A, 0xC4, 0x78, 0x10, 0xE6, 0x60, 0x02, ++ 0xC2, 0x18, 0x78, 0x11, 0xE6, 0x24, 0x14, 0xFF, ++ 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0x78, 0x10, ++ 0xE6, 0xFE, 0x4F, 0xFF, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0x90, ++ 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, ++ 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, ++ 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, ++ 0x06, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, ++ 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, 0xF0, ++ 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x03, 0xF5, ++ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, ++ 0xF0, 0x06, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, ++ 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, ++ 0xF0, 0xE0, 0x04, 0xF0, 0xEE, 0x70, 0x05, 0x78, ++ 0x11, 0xF6, 0xC2, 0x16, 0x30, 0x0B, 0x03, 0x02, ++ 0x3B, 0x4A, 0x90, 0x8F, 0xF0, 0xE0, 0x90, 0x12, ++ 0xDA, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0xC3, ++ 0x95, 0x0D, 0x50, 0x6E, 0xEF, 0x75, 0xF0, 0x06, ++ 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8F, ++ 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, ++ 0x06, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, ++ 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, ++ 0xF0, 0x06, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, ++ 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x03, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, ++ 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x04, 0xF5, ++ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, ++ 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x05, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, ++ 0xFF, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, ++ 0x80, 0x88, 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, ++ 0x00, 0x50, 0x03, 0x02, 0x41, 0x2C, 0x20, 0x18, ++ 0x03, 0x02, 0x41, 0x2C, 0xD2, 0x0C, 0x22, 0xE4, ++ 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xDA, 0xE0, ++ 0xFF, 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, 0x3F, ++ 0xE7, 0xE4, 0x90, 0x12, 0x5F, 0xF0, 0x74, 0xE5, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, ++ 0xE0, 0x70, 0x03, 0x02, 0x3F, 0xDE, 0x90, 0x12, ++ 0xDA, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, ++ 0x12, 0xF5, 0x83, 0xE0, 0x60, 0x03, 0x02, 0x3F, ++ 0xDE, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, ++ 0x8A, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x01, 0x74, ++ 0x80, 0x94, 0x88, 0x40, 0x03, 0x02, 0x3F, 0xDE, ++ 0x90, 0x12, 0xDA, 0xE0, 0x24, 0xE5, 0xF5, 0x82, ++ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x03, ++ 0x60, 0x04, 0xC2, 0x18, 0x80, 0x07, 0x7F, 0x70, ++ 0x7E, 0x17, 0x12, 0x67, 0xEE, 0x90, 0x12, 0xDA, ++ 0xE0, 0x24, 0xE5, 0xF5, 0x82, 0xE4, 0x34, 0x88, ++ 0xF5, 0x83, 0xE0, 0xB4, 0x02, 0x08, 0x90, 0x12, ++ 0x5F, 0xE0, 0x04, 0xF0, 0x80, 0x06, 0x90, 0x12, ++ 0x5F, 0xE0, 0x14, 0xF0, 0x90, 0x12, 0xDA, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFD, ++ 0xA3, 0xE0, 0x90, 0x12, 0xDB, 0xCD, 0xF0, 0xA3, ++ 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xDB, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, ++ 0x12, 0xE1, 0x74, 0x1E, 0xF0, 0xA3, 0x74, 0x14, ++ 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xEE, 0x33, 0x95, 0xE0, ++ 0xFD, 0xFC, 0xE4, 0xFB, 0x7A, 0x05, 0xF9, 0xF8, ++ 0x12, 0x5A, 0x34, 0x78, 0x04, 0x12, 0x5B, 0x75, ++ 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x90, 0x12, ++ 0xE1, 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, 0x93, ++ 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, ++ 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xAC, 0x00, 0xAD, ++ 0x01, 0xAE, 0x02, 0xAF, 0x03, 0xC0, 0x06, 0xC0, ++ 0x07, 0x90, 0x12, 0xE1, 0xE0, 0xFF, 0x90, 0x28, ++ 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xE5, ++ 0xF0, 0xA2, 0xE7, 0x13, 0xFE, 0xEF, 0x13, 0xFF, ++ 0xFB, 0xAA, 0x06, 0xEA, 0x33, 0x95, 0xE0, 0xF9, ++ 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0xD3, 0x12, 0x5B, ++ 0x51, 0x50, 0x3C, 0x90, 0x12, 0xE1, 0xE0, 0xFF, ++ 0x90, 0x28, 0x0B, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, ++ 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, ++ 0xF8, 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, ++ 0x5A, 0xBF, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, ++ 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, ++ 0x12, 0xDD, 0x12, 0x5B, 0x88, 0x80, 0x33, 0x90, ++ 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC0, 0x06, 0xC0, ++ 0x07, 0xA3, 0xE0, 0xFF, 0x90, 0x28, 0x0B, 0xE4, ++ 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, ++ 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, ++ 0x06, 0x12, 0x5A, 0xBF, 0x90, 0x12, 0xDD, 0x12, ++ 0x5B, 0x88, 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, ++ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x78, 0x04, 0x12, 0x5B, 0x62, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFD, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xEE, ++ 0x33, 0x95, 0xE0, 0xFD, 0xFC, 0xE4, 0x7B, 0x20, ++ 0x7A, 0x03, 0xF9, 0xF8, 0x12, 0x5A, 0x34, 0x78, ++ 0x04, 0x12, 0x5B, 0x75, 0x90, 0x12, 0xDD, 0x12, ++ 0x5B, 0x88, 0x90, 0x12, 0xE2, 0xE0, 0xFF, 0x90, ++ 0x28, 0x0C, 0xE4, 0x93, 0x8F, 0xF0, 0xA4, 0xFF, ++ 0xAE, 0xF0, 0xFB, 0xAA, 0x06, 0xE4, 0xF9, 0xF8, ++ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x5A, ++ 0xBF, 0xAC, 0x00, 0xAD, 0x01, 0xAE, 0x02, 0xAF, ++ 0x03, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, 0x93, 0x8F, ++ 0xF0, 0xA4, 0xFF, 0xE5, 0xF0, 0xA2, 0xE7, 0x13, ++ 0xFE, 0xEF, 0x13, 0xFF, 0xFB, 0xAA, 0x06, 0xEA, ++ 0x33, 0x95, 0xE0, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, ++ 0x06, 0xD3, 0x12, 0x5B, 0x51, 0x50, 0x3C, 0x90, ++ 0x12, 0xE2, 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, ++ 0x93, 0x8F, 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, ++ 0xAA, 0x06, 0xE4, 0xF9, 0xF8, 0x90, 0x12, 0xDD, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0x12, 0x5A, 0xBF, 0xEF, 0x24, ++ 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, ++ 0xE4, 0x3C, 0xFC, 0x90, 0x12, 0xDD, 0x12, 0x5B, ++ 0x88, 0x80, 0x35, 0x90, 0x12, 0xDD, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x12, 0xE2, ++ 0xE0, 0xFF, 0x90, 0x28, 0x0C, 0xE4, 0x93, 0x8F, ++ 0xF0, 0xA4, 0xFF, 0xAE, 0xF0, 0xFB, 0xAA, 0x06, ++ 0xE4, 0xF9, 0xF8, 0xD0, 0x07, 0xD0, 0x06, 0x12, ++ 0x5A, 0xBF, 0x90, 0x12, 0xDD, 0x12, 0x5B, 0x88, ++ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x04, ++ 0x12, 0x5B, 0x62, 0x90, 0x12, 0xDA, 0xE0, 0xFD, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0xED, 0x04, 0xFF, 0x33, 0x33, 0x33, ++ 0x54, 0xF8, 0xFF, 0x74, 0xE5, 0x2D, 0xF5, 0x82, ++ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x4F, 0xFF, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x78, 0x04, 0xCE, ++ 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x78, 0x04, 0xCE, ++ 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x79, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xA3, 0xE0, 0xC4, 0xF8, 0x54, 0x0F, 0xC8, ++ 0x68, 0xFF, 0x05, 0x82, 0xD5, 0x82, 0x02, 0x15, ++ 0x83, 0x15, 0x82, 0xE0, 0xC4, 0x54, 0xF0, 0x48, ++ 0xEF, 0x54, 0xF0, 0xFF, 0xED, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE0, 0xA3, 0xE0, 0x54, 0x0F, 0x4F, ++ 0xFF, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, ++ 0xA4, 0x24, 0x7A, 0xF5, 0x82, 0xE4, 0x34, 0x8F, ++ 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x3F, 0xFE, 0xE0, ++ 0xB4, 0x01, 0x2D, 0xE5, 0x09, 0xFF, 0x90, 0x8F, ++ 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7C, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEF, ++ 0xF0, 0xAF, 0x0A, 0x90, 0x8F, 0xF0, 0xE0, 0x75, ++ 0xF0, 0x06, 0xA4, 0x24, 0x7D, 0xF5, 0x82, 0xE4, ++ 0x34, 0x8F, 0xF5, 0x83, 0xEF, 0xF0, 0x80, 0x28, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0x74, 0x08, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7D, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0x08, 0xF0, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x04, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x3B, 0x64, 0x90, ++ 0x8F, 0xF0, 0xE0, 0xFF, 0x90, 0x12, 0x5F, 0xE0, ++ 0xB5, 0x07, 0x04, 0xD2, 0x04, 0x80, 0x02, 0xC2, ++ 0x04, 0x20, 0x16, 0x03, 0x02, 0x40, 0x98, 0x78, ++ 0x10, 0xE6, 0x60, 0x02, 0xC2, 0x18, 0x78, 0x11, ++ 0xE6, 0x24, 0x14, 0xFF, 0x33, 0x33, 0x33, 0x54, ++ 0xF8, 0xFF, 0x78, 0x10, 0xE6, 0xFE, 0x4F, 0xFF, ++ 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0xEF, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, ++ 0xF0, 0x06, 0xA4, 0x24, 0x79, 0xF5, 0x82, 0xE4, ++ 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, ++ 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7A, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, ++ 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, ++ 0xA4, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, ++ 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, ++ 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x7C, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x90, ++ 0x8F, 0xF0, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, ++ 0x7D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, ++ 0xE4, 0xF0, 0x90, 0x8F, 0xF0, 0xE0, 0x04, 0xF0, ++ 0xEE, 0x70, 0x05, 0x78, 0x11, 0xF6, 0xC2, 0x16, ++ 0x30, 0x0B, 0x03, 0x02, 0x41, 0x1E, 0x90, 0x8F, ++ 0xF0, 0xE0, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x50, 0x6E, ++ 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x78, 0xF5, ++ 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, ++ 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x79, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, ++ 0xFF, 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, 0x24, ++ 0x7A, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, ++ 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, 0x06, 0xA4, ++ 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, 0x06, ++ 0xA4, 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x8F, ++ 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xEF, 0x75, 0xF0, ++ 0x06, 0xA4, 0x24, 0x7D, 0xF5, 0x82, 0xE4, 0x34, ++ 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0x88, 0x90, 0x8F, ++ 0xF0, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x05, 0x30, ++ 0x18, 0x02, 0xD2, 0x0C, 0x22, 0x90, 0xF1, 0x93, ++ 0x74, 0x01, 0xF0, 0xE4, 0x90, 0xF1, 0x46, 0xF0, ++ 0x90, 0xF1, 0x1B, 0x04, 0xF0, 0x90, 0xF0, 0x02, ++ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x01, 0xF0, ++ 0x90, 0xF0, 0x04, 0x74, 0x08, 0xF0, 0xE4, 0x90, ++ 0xF0, 0x03, 0xF0, 0x90, 0xF0, 0x06, 0x74, 0x08, ++ 0xF0, 0xE4, 0x90, 0xF0, 0x05, 0xF0, 0x90, 0xF0, ++ 0x08, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x07, ++ 0xF0, 0x90, 0xF0, 0x0A, 0x74, 0x08, 0xF0, 0xE4, ++ 0x90, 0xF0, 0x09, 0xF0, 0x90, 0xF0, 0x0C, 0x74, ++ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x0B, 0xF0, 0x90, ++ 0xF0, 0x0E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, ++ 0x0D, 0xF0, 0x90, 0xF0, 0x10, 0x74, 0x20, 0xF0, ++ 0xE4, 0x90, 0xF0, 0x0F, 0xF0, 0x90, 0xF0, 0x12, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x11, 0x74, 0x01, ++ 0xF0, 0x90, 0xF0, 0x14, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x13, 0x74, 0x02, 0xF0, 0x90, 0xF0, 0x16, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x15, 0x74, 0x03, ++ 0xF0, 0x90, 0xF0, 0x18, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x17, 0x74, 0x04, 0xF0, 0x90, 0xF0, 0x1A, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x19, 0x74, 0x05, ++ 0xF0, 0x90, 0xF0, 0x1C, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x1B, 0x74, 0x06, 0xF0, 0x90, 0xF0, 0x1E, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x1D, 0x74, 0x07, ++ 0xF0, 0x90, 0xF0, 0x20, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x1F, 0x74, 0x08, 0xF0, 0x90, 0xF0, 0x22, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x21, 0x74, 0x09, ++ 0xF0, 0x90, 0xF0, 0x24, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x23, 0x74, 0x0A, 0xF0, 0x90, 0xF0, 0x26, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x25, 0x74, 0x0B, ++ 0xF0, 0x90, 0xF0, 0x28, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x27, 0x74, 0x0C, 0xF0, 0x90, 0xF0, 0x2A, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x29, 0x74, 0x0D, ++ 0xF0, 0x90, 0xF0, 0x2C, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x2B, 0x74, 0x0E, 0xF0, 0x90, 0xF0, 0x2E, ++ 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x2D, 0x74, 0x0F, ++ 0xF0, 0x90, 0xF0, 0x30, 0x74, 0x20, 0xF0, 0x90, ++ 0xF0, 0x2F, 0x74, 0x10, 0xF0, 0x90, 0xF0, 0x32, ++ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x31, 0xF0, ++ 0x90, 0xF0, 0x34, 0x74, 0x08, 0xF0, 0xE4, 0x90, ++ 0xF0, 0x33, 0xF0, 0x90, 0xF0, 0x36, 0x74, 0x08, ++ 0xF0, 0xE4, 0x90, 0xF0, 0x35, 0xF0, 0x90, 0xF0, ++ 0x38, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x37, ++ 0xF0, 0x90, 0xF0, 0x3A, 0x74, 0x08, 0xF0, 0xE4, ++ 0x90, 0xF0, 0x39, 0xF0, 0x90, 0xF0, 0x3C, 0x74, ++ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x3B, 0xF0, 0x90, ++ 0xF0, 0x3E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, ++ 0x3D, 0xF0, 0x90, 0xF0, 0x40, 0x74, 0x08, 0xF0, ++ 0xE4, 0x90, 0xF0, 0x3F, 0xF0, 0x90, 0xF0, 0x42, ++ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x41, 0xF0, ++ 0x90, 0xF0, 0x44, 0x74, 0x08, 0xF0, 0xE4, 0x90, ++ 0xF0, 0x43, 0xF0, 0x90, 0xF0, 0x46, 0x74, 0x08, ++ 0xF0, 0xE4, 0x90, 0xF0, 0x45, 0xF0, 0x90, 0xF0, ++ 0x48, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x47, ++ 0xF0, 0x90, 0xF0, 0x4A, 0x74, 0x08, 0xF0, 0xE4, ++ 0x90, 0xF0, 0x49, 0xF0, 0x90, 0xF0, 0x4C, 0x74, ++ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x4B, 0xF0, 0x90, ++ 0xF0, 0x4E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, ++ 0x4D, 0xF0, 0x90, 0xF0, 0x50, 0x74, 0x20, 0xF0, ++ 0x90, 0xF0, 0x4F, 0x74, 0x11, 0xF0, 0x90, 0xF0, ++ 0x52, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x51, 0x74, ++ 0x12, 0xF0, 0x90, 0xF0, 0x54, 0x74, 0x20, 0xF0, ++ 0x90, 0xF0, 0x53, 0x74, 0x13, 0xF0, 0x90, 0xF0, ++ 0x56, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x55, 0x74, ++ 0x14, 0xF0, 0x90, 0xF0, 0x58, 0x74, 0x20, 0xF0, ++ 0x90, 0xF0, 0x57, 0x74, 0x15, 0xF0, 0x90, 0xF0, ++ 0x5A, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x59, 0x74, ++ 0x16, 0xF0, 0x90, 0xF0, 0x5C, 0x74, 0x20, 0xF0, ++ 0x90, 0xF0, 0x5B, 0x74, 0x17, 0xF0, 0x90, 0xF0, ++ 0x5E, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x5D, 0x74, ++ 0x18, 0xF0, 0x90, 0xF0, 0x60, 0x74, 0x20, 0xF0, ++ 0x90, 0xF0, 0x5F, 0x74, 0x19, 0xF0, 0x90, 0xF0, ++ 0x62, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x61, 0x74, ++ 0x1A, 0xF0, 0x90, 0xF0, 0x64, 0x74, 0x20, 0xF0, ++ 0x90, 0xF0, 0x63, 0x74, 0x1B, 0xF0, 0x90, 0xF0, ++ 0x66, 0x74, 0x20, 0xF0, 0x90, 0xF0, 0x65, 0x74, ++ 0x1C, 0xF0, 0x90, 0xF0, 0x68, 0x74, 0x20, 0xF0, ++ 0x90, 0xF0, 0x67, 0x74, 0x1D, 0xF0, 0x90, 0xF0, ++ 0x6A, 0x74, 0x16, 0xF0, 0x90, 0xF0, 0x69, 0x74, ++ 0x01, 0xF0, 0x90, 0xF0, 0x6C, 0x74, 0x16, 0xF0, ++ 0xE4, 0x90, 0xF0, 0x6B, 0xF0, 0x90, 0xF0, 0x6E, ++ 0x74, 0x15, 0xF0, 0x90, 0xF0, 0x6D, 0x74, 0x02, ++ 0xF0, 0x90, 0xF0, 0x70, 0x74, 0x15, 0xF0, 0x90, ++ 0xF0, 0x6F, 0x74, 0x01, 0xF0, 0x90, 0xF0, 0x72, ++ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x71, 0xF0, ++ 0x90, 0xF0, 0x74, 0x74, 0x08, 0xF0, 0xE4, 0x90, ++ 0xF0, 0x73, 0xF0, 0x90, 0xF0, 0x76, 0x74, 0x08, ++ 0xF0, 0xE4, 0x90, 0xF0, 0x75, 0xF0, 0x90, 0xF0, ++ 0x78, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x77, ++ 0xF0, 0x90, 0xF0, 0x7A, 0x74, 0x08, 0xF0, 0xE4, ++ 0x90, 0xF0, 0x79, 0xF0, 0x90, 0xF0, 0x7C, 0x74, ++ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x7B, 0xF0, 0x90, ++ 0xF0, 0x7E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, ++ 0x7D, 0xF0, 0x90, 0xF0, 0x80, 0x74, 0x08, 0xF0, ++ 0xE4, 0x90, 0xF0, 0x7F, 0xF0, 0x90, 0xF0, 0x82, ++ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x81, 0xF0, ++ 0x90, 0xF0, 0x84, 0x74, 0x08, 0xF0, 0xE4, 0x90, ++ 0xF0, 0x83, 0xF0, 0x90, 0xF0, 0x86, 0x74, 0x08, ++ 0xF0, 0xE4, 0x90, 0xF0, 0x85, 0xF0, 0x90, 0xF0, ++ 0x88, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x87, ++ 0xF0, 0x90, 0xF0, 0x8A, 0x74, 0x08, 0xF0, 0xE4, ++ 0x90, 0xF0, 0x89, 0xF0, 0x90, 0xF0, 0x8C, 0x74, ++ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0x8B, 0xF0, 0x90, ++ 0xF0, 0x8E, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, ++ 0x8D, 0xF0, 0x90, 0xF0, 0x90, 0x74, 0x08, 0xF0, ++ 0xE4, 0x90, 0xF0, 0x8F, 0xF0, 0x90, 0xF0, 0x92, ++ 0x74, 0x15, 0xF0, 0xE4, 0x90, 0xF0, 0x91, 0xF0, ++ 0x90, 0xF0, 0x94, 0x74, 0x14, 0xF0, 0x90, 0xF0, ++ 0x93, 0x74, 0x02, 0xF0, 0x90, 0xF0, 0x96, 0x74, ++ 0x14, 0xF0, 0x90, 0xF0, 0x95, 0x74, 0x01, 0xF0, ++ 0x90, 0xF0, 0x98, 0x74, 0x14, 0xF0, 0xE4, 0x90, ++ 0xF0, 0x97, 0xF0, 0x90, 0xF0, 0x9A, 0x74, 0x13, ++ 0xF0, 0x90, 0xF0, 0x99, 0x74, 0x02, 0xF0, 0x90, ++ 0xF0, 0x9C, 0x74, 0x13, 0xF0, 0x90, 0xF0, 0x9B, ++ 0x74, 0x01, 0xF0, 0x90, 0xF0, 0x9E, 0x74, 0x13, ++ 0xF0, 0xE4, 0x90, 0xF0, 0x9D, 0xF0, 0x90, 0xF0, ++ 0xA0, 0x74, 0x12, 0xF0, 0x90, 0xF0, 0x9F, 0x74, ++ 0x02, 0xF0, 0x90, 0xF0, 0xA2, 0x74, 0x12, 0xF0, ++ 0x90, 0xF0, 0xA1, 0x74, 0x01, 0xF0, 0x90, 0xF0, ++ 0xA4, 0x74, 0x12, 0xF0, 0xE4, 0x90, 0xF0, 0xA3, ++ 0xF0, 0x90, 0xF0, 0xA6, 0x74, 0x11, 0xF0, 0x90, ++ 0xF0, 0xA5, 0x74, 0x02, 0xF0, 0x90, 0xF0, 0xA8, ++ 0x74, 0x11, 0xF0, 0x90, 0xF0, 0xA7, 0x74, 0x01, ++ 0xF0, 0x90, 0xF0, 0xAA, 0x74, 0x11, 0xF0, 0xE4, ++ 0x90, 0xF0, 0xA9, 0xF0, 0x90, 0xF0, 0xAC, 0x74, ++ 0x10, 0xF0, 0x90, 0xF0, 0xAB, 0x74, 0x02, 0xF0, ++ 0x90, 0xF0, 0xAE, 0x74, 0x10, 0xF0, 0x90, 0xF0, ++ 0xAD, 0x74, 0x01, 0xF0, 0x90, 0xF0, 0xB0, 0x74, ++ 0x10, 0xF0, 0xE4, 0x90, 0xF0, 0xAF, 0xF0, 0x90, ++ 0xF0, 0xB2, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, ++ 0xB1, 0xF0, 0x90, 0xF0, 0xB4, 0x74, 0x08, 0xF0, ++ 0xE4, 0x90, 0xF0, 0xB3, 0xF0, 0x90, 0xF0, 0xB6, ++ 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0xB5, 0xF0, ++ 0x90, 0xF0, 0xB8, 0x74, 0x08, 0xF0, 0xE4, 0x90, ++ 0xF0, 0xB7, 0xF0, 0x90, 0xF0, 0xBA, 0x74, 0x08, ++ 0xF0, 0xE4, 0x90, 0xF0, 0xB9, 0xF0, 0x90, 0xF0, ++ 0xBC, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0xBB, ++ 0xF0, 0x90, 0xF0, 0xBE, 0x74, 0x08, 0xF0, 0xE4, ++ 0x90, 0xF0, 0xBD, 0xF0, 0x90, 0xF0, 0xC0, 0x74, ++ 0x08, 0xF0, 0xE4, 0x90, 0xF0, 0xBF, 0xF0, 0x90, ++ 0xF1, 0x06, 0x74, 0x14, 0xF0, 0x90, 0xF1, 0x07, ++ 0x74, 0x1E, 0xF0, 0x90, 0xF1, 0x0E, 0x74, 0x03, ++ 0xF0, 0x90, 0xF1, 0x0F, 0xF0, 0x90, 0xF1, 0x10, ++ 0xF0, 0x90, 0xF1, 0x11, 0xF0, 0x90, 0xF1, 0x12, ++ 0xF0, 0x90, 0xF1, 0x13, 0xF0, 0x90, 0xF1, 0x14, ++ 0x14, 0xF0, 0xE4, 0x90, 0xF1, 0x15, 0xF0, 0x90, ++ 0xF1, 0x1F, 0x74, 0x08, 0xF0, 0x90, 0xF1, 0x22, ++ 0x74, 0x03, 0xF0, 0x90, 0xF1, 0x1D, 0x74, 0x08, ++ 0xF0, 0x90, 0xF1, 0x21, 0x74, 0x0A, 0xF0, 0xE4, ++ 0x90, 0xF1, 0x1C, 0xF0, 0x90, 0xF1, 0x43, 0x74, ++ 0x3A, 0xF0, 0x90, 0xF2, 0xA4, 0x74, 0x32, 0xF0, ++ 0x90, 0xF2, 0xA5, 0xF0, 0x90, 0x28, 0x01, 0xE4, ++ 0x93, 0x90, 0xF1, 0x01, 0xF0, 0x90, 0x28, 0x00, ++ 0xE4, 0x93, 0x90, 0xF1, 0x02, 0xF0, 0x90, 0x28, ++ 0x02, 0xE4, 0x93, 0x90, 0xF1, 0x03, 0xF0, 0x90, ++ 0x28, 0x03, 0xE4, 0x93, 0x90, 0xF1, 0x04, 0xF0, ++ 0x90, 0x28, 0x04, 0xE4, 0x93, 0x90, 0xF1, 0x05, ++ 0xF0, 0x90, 0x28, 0x05, 0xE4, 0x93, 0x90, 0xF1, ++ 0x08, 0xF0, 0x90, 0x28, 0x06, 0xE4, 0x93, 0x90, ++ 0xF1, 0x09, 0xF0, 0x90, 0x28, 0x0F, 0xE4, 0x93, ++ 0x90, 0xF1, 0x0A, 0xF0, 0x90, 0x28, 0x07, 0xE4, ++ 0x93, 0x90, 0xF1, 0x0B, 0xF0, 0x90, 0xF0, 0xC5, ++ 0x74, 0x07, 0xF0, 0x90, 0xF1, 0x18, 0x74, 0xF4, ++ 0xF0, 0xE0, 0x54, 0x0F, 0xB4, 0x09, 0x00, 0x50, ++ 0x6A, 0x90, 0x46, 0x50, 0xF8, 0x28, 0x28, 0x73, ++ 0x02, 0x46, 0x6B, 0x02, 0x46, 0x73, 0x02, 0x46, ++ 0x7B, 0x02, 0x46, 0x83, 0x02, 0x46, 0x8B, 0x02, ++ 0x46, 0x93, 0x02, 0x46, 0x9B, 0x02, 0x46, 0xA3, ++ 0x02, 0x46, 0xAB, 0x90, 0xF1, 0x0C, 0x74, 0x02, ++ 0xF0, 0x80, 0x46, 0x90, 0xF1, 0x0C, 0x74, 0x04, ++ 0xF0, 0x80, 0x3E, 0x90, 0xF1, 0x0C, 0x74, 0x08, ++ 0xF0, 0x80, 0x36, 0x90, 0xF1, 0x0C, 0x74, 0x10, ++ 0xF0, 0x80, 0x2E, 0x90, 0xF1, 0x0C, 0x74, 0x20, ++ 0xF0, 0x80, 0x26, 0x90, 0xF1, 0x0C, 0x74, 0x40, ++ 0xF0, 0x80, 0x1E, 0x90, 0xF1, 0x0C, 0x74, 0x80, ++ 0xF0, 0x80, 0x16, 0x90, 0xF1, 0x0C, 0x74, 0x80, ++ 0xF0, 0x80, 0x0E, 0x90, 0xF1, 0x0C, 0x74, 0x80, ++ 0xF0, 0x80, 0x06, 0x90, 0xF1, 0x0C, 0x74, 0x02, ++ 0xF0, 0x90, 0x28, 0x08, 0xE4, 0x93, 0x90, 0xF1, ++ 0x0D, 0xF0, 0x90, 0x28, 0x09, 0xE4, 0x93, 0x90, ++ 0xF1, 0x16, 0xF0, 0xD2, 0xAD, 0xE4, 0x90, 0xF1, ++ 0x17, 0xF0, 0x90, 0xF0, 0xC4, 0x04, 0xF0, 0x20, ++ 0x0A, 0x07, 0x75, 0x9E, 0x55, 0xB2, 0x83, 0x80, ++ 0xF6, 0x22, 0x90, 0x12, 0xDB, 0xE4, 0xF0, 0xA3, ++ 0x74, 0x40, 0xF0, 0xE4, 0x90, 0x12, 0xDF, 0xF0, ++ 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x12, ++ 0xDD, 0xF0, 0xA3, 0x74, 0x40, 0xF0, 0xE4, 0x90, ++ 0x12, 0xE3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, ++ 0xF0, 0x90, 0x12, 0xDA, 0xF0, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFF, 0xC3, 0x95, 0x0D, 0x40, 0x03, 0x02, ++ 0x4C, 0x37, 0x74, 0xE5, 0x2F, 0xF5, 0x82, 0xE4, ++ 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x70, 0x03, 0x02, ++ 0x4C, 0x2E, 0x90, 0x12, 0xDA, 0xE0, 0xF9, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0xFA, 0xA3, 0xE0, ++ 0xFB, 0xC3, 0xED, 0x9B, 0xEA, 0x64, 0x80, 0xF8, ++ 0xEC, 0x64, 0x80, 0x98, 0x40, 0x03, 0x02, 0x48, ++ 0x22, 0x90, 0x28, 0x0D, 0xE4, 0x93, 0xFB, 0xFD, ++ 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, 0x94, 0x00, ++ 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xDF, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, 0x12, 0xDC, ++ 0xE0, 0x9F, 0xFF, 0x90, 0x12, 0xDB, 0xE0, 0x9E, ++ 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, ++ 0x59, 0x81, 0xEB, 0xFD, 0xC3, 0x90, 0x12, 0xDC, ++ 0xE0, 0x9D, 0xFD, 0x90, 0x12, 0xDB, 0xE0, 0x94, ++ 0x00, 0xFC, 0x12, 0x59, 0xE8, 0x90, 0x12, 0xE0, ++ 0xE0, 0x2F, 0xFF, 0x90, 0x12, 0xDF, 0xE0, 0x3E, ++ 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xC3, 0xEE, 0x64, 0x80, 0x94, 0x80, ++ 0x40, 0x03, 0x02, 0x49, 0xAC, 0xED, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x02, ++ 0x49, 0xAC, 0x90, 0xF1, 0x06, 0xE0, 0xFF, 0xAE, ++ 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, 0x90, 0x12, ++ 0xDB, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0xEF, ++ 0x9D, 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, 0x90, 0x12, ++ 0xDA, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFC, 0xA3, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, ++ 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x50, 0x03, 0x02, ++ 0x49, 0x82, 0x90, 0xF1, 0x06, 0xE0, 0xFF, 0xAE, ++ 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, 0x90, 0x12, ++ 0xDB, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, 0xEF, 0x9D, ++ 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, 0x90, 0x12, 0xDA, ++ 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x50, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, ++ 0xFA, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, 0xEA, 0x9E, ++ 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, 0xE1, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xED, 0x9F, 0xFF, ++ 0xEC, 0x9E, 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x59, ++ 0x81, 0x90, 0x28, 0x0D, 0xE4, 0x93, 0xFD, 0x90, ++ 0x12, 0xDB, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xC3, ++ 0x9D, 0xFD, 0xEA, 0x94, 0x00, 0xFC, 0x12, 0x59, ++ 0xE8, 0x90, 0x12, 0xE2, 0xE0, 0x2F, 0xFF, 0x90, ++ 0x12, 0xE1, 0xE0, 0x3E, 0xFE, 0x90, 0x12, 0xDA, ++ 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xF1, 0x06, 0xE0, ++ 0xFF, 0xAE, 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xC3, ++ 0x9B, 0xFF, 0xE5, 0xF0, 0x9A, 0xFE, 0xE9, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, ++ 0x5A, 0x1E, 0x90, 0xF1, 0x06, 0xE0, 0xFF, 0xAE, ++ 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, 0xE9, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xD3, 0x9F, 0xE5, 0xF0, 0x64, 0x80, 0xF8, 0xEC, ++ 0x64, 0x80, 0x98, 0x40, 0x4F, 0x90, 0xF1, 0x06, ++ 0xE0, 0xFF, 0xAE, 0x0B, 0xEE, 0x8F, 0xF0, 0xA4, ++ 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0xAC, 0xF5, 0x82, 0xE4, 0x34, 0x89, ++ 0xF5, 0x83, 0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x80, 0x2A, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0x50, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAC, ++ 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEC, ++ 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, 0xDA, 0xE0, ++ 0xF9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0x90, 0x12, 0xDD, 0xE0, 0xFA, ++ 0xA3, 0xE0, 0xFB, 0xC3, 0xED, 0x9B, 0xEA, 0x64, ++ 0x80, 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x40, 0x03, ++ 0x02, 0x4A, 0xA4, 0x90, 0x28, 0x0E, 0xE4, 0x93, ++ 0xFB, 0xFD, 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0x9D, 0xFF, 0xEE, ++ 0x94, 0x00, 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, ++ 0xE3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, ++ 0x12, 0xDE, 0xE0, 0x9F, 0xFF, 0x90, 0x12, 0xDD, ++ 0xE0, 0x9E, 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, ++ 0xFD, 0x12, 0x59, 0x81, 0xEB, 0xFD, 0xC3, 0x90, ++ 0x12, 0xDE, 0xE0, 0x9D, 0xFD, 0x90, 0x12, 0xDD, ++ 0xE0, 0x94, 0x00, 0xFC, 0x12, 0x59, 0xE8, 0x90, ++ 0x12, 0xE4, 0xE0, 0x2F, 0xFF, 0x90, 0x12, 0xE3, ++ 0xE0, 0x3E, 0xFE, 0x90, 0x12, 0xDA, 0xE0, 0xFD, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0xED, 0x25, 0xE0, 0x25, 0xE0, 0x24, ++ 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, ++ 0xE0, 0xFE, 0xA3, 0xE0, 0xC3, 0xEE, 0x64, 0x80, ++ 0x94, 0x80, 0x40, 0x03, 0x02, 0x4C, 0x2E, 0xED, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, ++ 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, ++ 0xF0, 0x02, 0x4C, 0x2E, 0x90, 0xF1, 0x07, 0xE0, ++ 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, ++ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0xC3, 0xEF, 0x9D, 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, ++ 0x90, 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x9F, 0xEE, ++ 0x64, 0x80, 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x50, ++ 0x03, 0x02, 0x4C, 0x04, 0x90, 0xF1, 0x07, 0xE0, ++ 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, ++ 0x90, 0x12, 0xDD, 0xE0, 0xFC, 0xA3, 0xE0, 0xC3, ++ 0xEF, 0x9D, 0xFF, 0xE5, 0xF0, 0x9C, 0xFE, 0x90, ++ 0x12, 0xDA, 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xC3, 0x9F, 0xFF, ++ 0xEA, 0x9E, 0xFE, 0xE9, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, ++ 0xE5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xED, ++ 0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0xE9, 0x25, 0xE0, ++ 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, ++ 0x89, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0x12, 0x59, 0x81, 0x90, 0x28, 0x0E, 0xE4, 0x93, ++ 0xFD, 0x90, 0x12, 0xDD, 0xE0, 0xFA, 0xA3, 0xE0, ++ 0xFB, 0xC3, 0x9D, 0xFD, 0xEA, 0x94, 0x00, 0xFC, ++ 0x12, 0x59, 0xE8, 0x90, 0x12, 0xE6, 0xE0, 0x2F, ++ 0xFF, 0x90, 0x12, 0xE5, 0xE0, 0x3E, 0xFE, 0x90, ++ 0x12, 0xDA, 0xE0, 0xF9, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0xF1, ++ 0x07, 0xE0, 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, ++ 0xA4, 0xC3, 0x9B, 0xFF, 0xE5, 0xF0, 0x9A, 0xFE, ++ 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0x8F, ++ 0xF0, 0x12, 0x5A, 0x1E, 0x90, 0xF1, 0x07, 0xE0, ++ 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, 0xF0, 0xA4, 0xFF, ++ 0xE9, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xD3, 0x9F, 0xE5, 0xF0, 0x64, 0x80, ++ 0xF8, 0xEC, 0x64, 0x80, 0x98, 0x40, 0x4F, 0x90, ++ 0xF1, 0x07, 0xE0, 0xFF, 0xAE, 0x0C, 0xEE, 0x8F, ++ 0xF0, 0xA4, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0x25, ++ 0xE0, 0x25, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, ++ 0x34, 0x89, 0xF5, 0x83, 0xE5, 0xF0, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0x80, 0x2A, 0x90, 0x12, 0xDA, 0xE0, ++ 0xFF, 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x52, 0xF5, ++ 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xEF, 0x25, 0xE0, 0x25, 0xE0, ++ 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, ++ 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x47, 0x0D, 0x22, ++ 0x90, 0x13, 0x2E, 0xEF, 0xF0, 0xA9, 0x03, 0xA3, ++ 0xED, 0xF0, 0x60, 0x03, 0x02, 0x4D, 0xE7, 0xE9, ++ 0x60, 0x03, 0x02, 0x4D, 0x20, 0x90, 0x13, 0x2E, ++ 0xE0, 0xB4, 0x14, 0x00, 0x40, 0x03, 0x02, 0x4D, ++ 0x14, 0x90, 0x4C, 0x60, 0xF8, 0x28, 0x28, 0x73, ++ 0x02, 0x4C, 0x9C, 0x02, 0x4C, 0xA2, 0x02, 0x4C, ++ 0xA8, 0x02, 0x4C, 0xAE, 0x02, 0x4C, 0xB4, 0x02, ++ 0x4C, 0xBA, 0x02, 0x4C, 0xC0, 0x02, 0x4C, 0xC6, ++ 0x02, 0x4C, 0xCC, 0x02, 0x4C, 0xD2, 0x02, 0x4C, ++ 0xD8, 0x02, 0x4C, 0xDE, 0x02, 0x4C, 0xE4, 0x02, ++ 0x4C, 0xEA, 0x02, 0x4C, 0xF0, 0x02, 0x4C, 0xF6, ++ 0x02, 0x4C, 0xFC, 0x02, 0x4D, 0x02, 0x02, 0x4D, ++ 0x08, 0x02, 0x4D, 0x0E, 0x43, 0xDB, 0x01, 0x02, ++ 0x4D, 0xE4, 0x43, 0xDB, 0x02, 0x02, 0x4D, 0xE4, ++ 0x43, 0xDB, 0x04, 0x02, 0x4D, 0xE4, 0x43, 0xDB, ++ 0x08, 0x02, 0x4D, 0xE4, 0x43, 0xDB, 0x10, 0x02, ++ 0x4D, 0xE4, 0x43, 0xDB, 0x20, 0x02, 0x4D, 0xE4, ++ 0x43, 0xDB, 0x40, 0x02, 0x4D, 0xE4, 0x43, 0xDB, ++ 0x80, 0x02, 0x4D, 0xE4, 0x43, 0xDA, 0x01, 0x02, ++ 0x4D, 0xE4, 0x43, 0xDA, 0x02, 0x02, 0x4D, 0xE4, ++ 0x43, 0xDA, 0x04, 0x02, 0x4D, 0xE4, 0x43, 0xDA, ++ 0x08, 0x02, 0x4D, 0xE4, 0x43, 0xDA, 0x10, 0x02, ++ 0x4D, 0xE4, 0x43, 0xDA, 0x20, 0x02, 0x4D, 0xE4, ++ 0x43, 0xDA, 0x40, 0x02, 0x4D, 0xE4, 0x43, 0xDA, ++ 0x80, 0x02, 0x4D, 0xE4, 0x43, 0xD9, 0x01, 0x02, ++ 0x4D, 0xE4, 0x43, 0xD9, 0x02, 0x02, 0x4D, 0xE4, ++ 0x43, 0xD9, 0x04, 0x02, 0x4D, 0xE4, 0x43, 0xD9, ++ 0x08, 0x02, 0x4D, 0xE4, 0x85, 0xD9, 0xD9, 0x85, ++ 0xDA, 0xDA, 0x85, 0xDB, 0xDB, 0x02, 0x4D, 0xE4, ++ 0xE9, 0x64, 0x01, 0x60, 0x03, 0x02, 0x4D, 0xE4, ++ 0x90, 0x13, 0x2E, 0xE0, 0xB4, 0x14, 0x00, 0x40, ++ 0x03, 0x02, 0x4D, 0xDB, 0x90, 0x4D, 0x3B, 0xF8, ++ 0x28, 0x28, 0x73, 0x02, 0x4D, 0x77, 0x02, 0x4D, ++ 0x7C, 0x02, 0x4D, 0x81, 0x02, 0x4D, 0x86, 0x02, ++ 0x4D, 0x8B, 0x02, 0x4D, 0x90, 0x02, 0x4D, 0x95, ++ 0x02, 0x4D, 0x9A, 0x02, 0x4D, 0x9F, 0x02, 0x4D, ++ 0xA4, 0x02, 0x4D, 0xA9, 0x02, 0x4D, 0xAE, 0x02, ++ 0x4D, 0xB3, 0x02, 0x4D, 0xB8, 0x02, 0x4D, 0xBD, ++ 0x02, 0x4D, 0xC2, 0x02, 0x4D, 0xC7, 0x02, 0x4D, ++ 0xCC, 0x02, 0x4D, 0xD1, 0x02, 0x4D, 0xD6, 0x43, ++ 0xDE, 0x01, 0x80, 0x68, 0x43, 0xDE, 0x02, 0x80, ++ 0x63, 0x43, 0xDE, 0x04, 0x80, 0x5E, 0x43, 0xDE, ++ 0x08, 0x80, 0x59, 0x43, 0xDE, 0x10, 0x80, 0x54, ++ 0x43, 0xDE, 0x20, 0x80, 0x4F, 0x43, 0xDE, 0x40, ++ 0x80, 0x4A, 0x43, 0xDE, 0x80, 0x80, 0x45, 0x43, ++ 0xDD, 0x01, 0x80, 0x40, 0x43, 0xDD, 0x02, 0x80, ++ 0x3B, 0x43, 0xDD, 0x04, 0x80, 0x36, 0x43, 0xDD, ++ 0x08, 0x80, 0x31, 0x43, 0xDD, 0x10, 0x80, 0x2C, ++ 0x43, 0xDD, 0x20, 0x80, 0x27, 0x43, 0xDD, 0x40, ++ 0x80, 0x22, 0x43, 0xDD, 0x80, 0x80, 0x1D, 0x43, ++ 0xDC, 0x01, 0x80, 0x18, 0x43, 0xDC, 0x02, 0x80, ++ 0x13, 0x43, 0xDC, 0x04, 0x80, 0x0E, 0x43, 0xDC, ++ 0x08, 0x80, 0x09, 0x85, 0xDC, 0xDC, 0x85, 0xDD, ++ 0xDD, 0x85, 0xDE, 0xDE, 0x7F, 0x00, 0x22, 0x90, ++ 0x13, 0x2F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, ++ 0x4F, 0x92, 0xE9, 0x60, 0x03, 0x02, 0x4E, 0xCB, ++ 0x90, 0x13, 0x2E, 0xE0, 0xB4, 0x14, 0x00, 0x40, ++ 0x03, 0x02, 0x4E, 0xBF, 0x90, 0x4E, 0x0B, 0xF8, ++ 0x28, 0x28, 0x73, 0x02, 0x4E, 0x47, 0x02, 0x4E, ++ 0x4D, 0x02, 0x4E, 0x53, 0x02, 0x4E, 0x59, 0x02, ++ 0x4E, 0x5F, 0x02, 0x4E, 0x65, 0x02, 0x4E, 0x6B, ++ 0x02, 0x4E, 0x71, 0x02, 0x4E, 0x77, 0x02, 0x4E, ++ 0x7D, 0x02, 0x4E, 0x83, 0x02, 0x4E, 0x89, 0x02, ++ 0x4E, 0x8F, 0x02, 0x4E, 0x95, 0x02, 0x4E, 0x9B, ++ 0x02, 0x4E, 0xA1, 0x02, 0x4E, 0xA7, 0x02, 0x4E, ++ 0xAD, 0x02, 0x4E, 0xB3, 0x02, 0x4E, 0xB9, 0x53, ++ 0xDB, 0xFE, 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xFD, ++ 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xFB, 0x02, 0x4F, ++ 0x8F, 0x53, 0xDB, 0xF7, 0x02, 0x4F, 0x8F, 0x53, ++ 0xDB, 0xEF, 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xDF, ++ 0x02, 0x4F, 0x8F, 0x53, 0xDB, 0xBF, 0x02, 0x4F, ++ 0x8F, 0x53, 0xDB, 0x7F, 0x02, 0x4F, 0x8F, 0x53, ++ 0xDA, 0xFE, 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xFD, ++ 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xFB, 0x02, 0x4F, ++ 0x8F, 0x53, 0xDA, 0xF7, 0x02, 0x4F, 0x8F, 0x53, ++ 0xDA, 0xEF, 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xDF, ++ 0x02, 0x4F, 0x8F, 0x53, 0xDA, 0xBF, 0x02, 0x4F, ++ 0x8F, 0x53, 0xDA, 0x7F, 0x02, 0x4F, 0x8F, 0x53, ++ 0xD9, 0xFE, 0x02, 0x4F, 0x8F, 0x53, 0xD9, 0xFD, ++ 0x02, 0x4F, 0x8F, 0x53, 0xD9, 0xFB, 0x02, 0x4F, ++ 0x8F, 0x53, 0xD9, 0xF7, 0x02, 0x4F, 0x8F, 0x85, ++ 0xD9, 0xD9, 0x85, 0xDA, 0xDA, 0x85, 0xDB, 0xDB, ++ 0x02, 0x4F, 0x8F, 0xE9, 0x64, 0x01, 0x60, 0x03, ++ 0x02, 0x4F, 0x8F, 0x90, 0x13, 0x2E, 0xE0, 0xB4, ++ 0x14, 0x00, 0x40, 0x03, 0x02, 0x4F, 0x86, 0x90, ++ 0x4E, 0xE6, 0xF8, 0x28, 0x28, 0x73, 0x02, 0x4F, ++ 0x22, 0x02, 0x4F, 0x27, 0x02, 0x4F, 0x2C, 0x02, ++ 0x4F, 0x31, 0x02, 0x4F, 0x36, 0x02, 0x4F, 0x3B, ++ 0x02, 0x4F, 0x40, 0x02, 0x4F, 0x45, 0x02, 0x4F, ++ 0x4A, 0x02, 0x4F, 0x4F, 0x02, 0x4F, 0x54, 0x02, ++ 0x4F, 0x59, 0x02, 0x4F, 0x5E, 0x02, 0x4F, 0x63, ++ 0x02, 0x4F, 0x68, 0x02, 0x4F, 0x6D, 0x02, 0x4F, ++ 0x72, 0x02, 0x4F, 0x77, 0x02, 0x4F, 0x7C, 0x02, ++ 0x4F, 0x81, 0x53, 0xDE, 0xFE, 0x80, 0x68, 0x53, ++ 0xDE, 0xFD, 0x80, 0x63, 0x53, 0xDE, 0xFB, 0x80, ++ 0x5E, 0x53, 0xDE, 0xF7, 0x80, 0x59, 0x53, 0xDE, ++ 0xEF, 0x80, 0x54, 0x53, 0xDE, 0xDF, 0x80, 0x4F, ++ 0x53, 0xDE, 0xBF, 0x80, 0x4A, 0x53, 0xDE, 0x7F, ++ 0x80, 0x45, 0x53, 0xDD, 0xFE, 0x80, 0x40, 0x53, ++ 0xDD, 0xFD, 0x80, 0x3B, 0x53, 0xDD, 0xFB, 0x80, ++ 0x36, 0x53, 0xDD, 0xF7, 0x80, 0x31, 0x53, 0xDD, ++ 0xEF, 0x80, 0x2C, 0x53, 0xDD, 0xDF, 0x80, 0x27, ++ 0x53, 0xDD, 0xBF, 0x80, 0x22, 0x53, 0xDD, 0x7F, ++ 0x80, 0x1D, 0x53, 0xDC, 0xFE, 0x80, 0x18, 0x53, ++ 0xDC, 0xFD, 0x80, 0x13, 0x53, 0xDC, 0xFB, 0x80, ++ 0x0E, 0x53, 0xDC, 0xF7, 0x80, 0x09, 0x85, 0xDC, ++ 0xDC, 0x85, 0xDD, 0xDD, 0x85, 0xDE, 0xDE, 0x7F, ++ 0x00, 0x22, 0x90, 0x13, 0x2F, 0xE0, 0x64, 0x02, ++ 0x60, 0x03, 0x02, 0x51, 0x6E, 0xE9, 0x60, 0x03, ++ 0x02, 0x50, 0x85, 0x90, 0x13, 0x2E, 0xE0, 0xB4, ++ 0x14, 0x00, 0x40, 0x03, 0x02, 0x50, 0x80, 0x90, ++ 0x4F, 0xB6, 0xF8, 0x28, 0x28, 0x73, 0x02, 0x4F, ++ 0xF2, 0x02, 0x4F, 0xFA, 0x02, 0x50, 0x02, 0x02, ++ 0x50, 0x09, 0x02, 0x50, 0x10, 0x02, 0x50, 0x17, ++ 0x02, 0x50, 0x1E, 0x02, 0x50, 0x25, 0x02, 0x50, ++ 0x2C, 0x02, 0x50, 0x33, 0x02, 0x50, 0x3A, 0x02, ++ 0x50, 0x41, 0x02, 0x50, 0x48, 0x02, 0x50, 0x4F, ++ 0x02, 0x50, 0x56, 0x02, 0x50, 0x5D, 0x02, 0x50, ++ 0x64, 0x02, 0x50, 0x6B, 0x02, 0x50, 0x72, 0x02, ++ 0x50, 0x79, 0xE5, 0xDB, 0x54, 0x01, 0xFE, 0x02, ++ 0x50, 0x82, 0xE5, 0xDB, 0x54, 0x02, 0xFE, 0x02, ++ 0x50, 0x82, 0xE5, 0xDB, 0x54, 0x04, 0xFE, 0x80, ++ 0x79, 0xE5, 0xDB, 0x54, 0x08, 0xFE, 0x80, 0x72, ++ 0xE5, 0xDB, 0x54, 0x10, 0xFE, 0x80, 0x6B, 0xE5, ++ 0xDB, 0x54, 0x20, 0xFE, 0x80, 0x64, 0xE5, 0xDB, ++ 0x54, 0x40, 0xFE, 0x80, 0x5D, 0xE5, 0xDB, 0x54, ++ 0x80, 0xFE, 0x80, 0x56, 0xE5, 0xDA, 0x54, 0x01, ++ 0xFE, 0x80, 0x4F, 0xE5, 0xDA, 0x54, 0x02, 0xFE, ++ 0x80, 0x48, 0xE5, 0xDA, 0x54, 0x04, 0xFE, 0x80, ++ 0x41, 0xE5, 0xDA, 0x54, 0x08, 0xFE, 0x80, 0x3A, ++ 0xE5, 0xDA, 0x54, 0x10, 0xFE, 0x80, 0x33, 0xE5, ++ 0xDA, 0x54, 0x20, 0xFE, 0x80, 0x2C, 0xE5, 0xDA, ++ 0x54, 0x40, 0xFE, 0x80, 0x25, 0xE5, 0xDA, 0x54, ++ 0x80, 0xFE, 0x80, 0x1E, 0xE5, 0xD9, 0x54, 0x01, ++ 0xFE, 0x80, 0x17, 0xE5, 0xD9, 0x54, 0x02, 0xFE, ++ 0x80, 0x10, 0xE5, 0xD9, 0x54, 0x04, 0xFE, 0x80, ++ 0x09, 0xE5, 0xD9, 0x54, 0x08, 0xFE, 0x80, 0x02, ++ 0xE4, 0xFE, 0xAF, 0x06, 0x22, 0xE9, 0x64, 0x01, ++ 0x60, 0x03, 0x02, 0x51, 0x6E, 0x90, 0x13, 0x2E, ++ 0xE0, 0xB4, 0x14, 0x00, 0x40, 0x03, 0x02, 0x51, ++ 0x6A, 0x90, 0x50, 0xA0, 0xF8, 0x28, 0x28, 0x73, ++ 0x02, 0x50, 0xDC, 0x02, 0x50, 0xE4, 0x02, 0x50, ++ 0xEC, 0x02, 0x50, 0xF3, 0x02, 0x50, 0xFA, 0x02, ++ 0x51, 0x01, 0x02, 0x51, 0x08, 0x02, 0x51, 0x0F, ++ 0x02, 0x51, 0x16, 0x02, 0x51, 0x1D, 0x02, 0x51, ++ 0x24, 0x02, 0x51, 0x2B, 0x02, 0x51, 0x32, 0x02, ++ 0x51, 0x39, 0x02, 0x51, 0x40, 0x02, 0x51, 0x47, ++ 0x02, 0x51, 0x4E, 0x02, 0x51, 0x55, 0x02, 0x51, ++ 0x5C, 0x02, 0x51, 0x63, 0xE5, 0xDE, 0x54, 0x01, ++ 0xFE, 0x02, 0x51, 0x6C, 0xE5, 0xDE, 0x54, 0x02, ++ 0xFE, 0x02, 0x51, 0x6C, 0xE5, 0xDE, 0x54, 0x04, ++ 0xFE, 0x80, 0x79, 0xE5, 0xDE, 0x54, 0x08, 0xFE, ++ 0x80, 0x72, 0xE5, 0xDE, 0x54, 0x10, 0xFE, 0x80, ++ 0x6B, 0xE5, 0xDE, 0x54, 0x20, 0xFE, 0x80, 0x64, ++ 0xE5, 0xDE, 0x54, 0x40, 0xFE, 0x80, 0x5D, 0xE5, ++ 0xDE, 0x54, 0x80, 0xFE, 0x80, 0x56, 0xE5, 0xDD, ++ 0x54, 0x01, 0xFE, 0x80, 0x4F, 0xE5, 0xDD, 0x54, ++ 0x02, 0xFE, 0x80, 0x48, 0xE5, 0xDD, 0x54, 0x04, ++ 0xFE, 0x80, 0x41, 0xE5, 0xDD, 0x54, 0x08, 0xFE, ++ 0x80, 0x3A, 0xE5, 0xDD, 0x54, 0x10, 0xFE, 0x80, ++ 0x33, 0xE5, 0xDD, 0x54, 0x20, 0xFE, 0x80, 0x2C, ++ 0xE5, 0xDD, 0x54, 0x40, 0xFE, 0x80, 0x25, 0xE5, ++ 0xDD, 0x54, 0x80, 0xFE, 0x80, 0x1E, 0xE5, 0xDC, ++ 0x54, 0x01, 0xFE, 0x80, 0x17, 0xE5, 0xDC, 0x54, ++ 0x02, 0xFE, 0x80, 0x10, 0xE5, 0xDC, 0x54, 0x04, ++ 0xFE, 0x80, 0x09, 0xE5, 0xDC, 0x54, 0x08, 0xFE, ++ 0x80, 0x02, 0xE4, 0xFE, 0xAF, 0x06, 0x22, 0x90, ++ 0x19, 0x40, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x40, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x41, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x41, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x42, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x42, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x43, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x43, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x44, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x44, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x45, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x45, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x46, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x46, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x47, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x48, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x49, ++ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x4A, 0x74, 0x01, ++ 0xF0, 0x90, 0x19, 0x4B, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x4C, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x4D, ++ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x4E, 0x74, 0x01, ++ 0xF0, 0x90, 0x19, 0x4F, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x50, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x51, ++ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x52, 0x74, 0x01, ++ 0xF0, 0x90, 0x19, 0x53, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x54, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x55, ++ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x56, 0x74, 0x01, ++ 0xF0, 0x90, 0x19, 0x57, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x58, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x59, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x59, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x5A, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x5A, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x5B, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x5B, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x5C, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x5C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x5D, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x5D, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x5E, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x5E, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x5F, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x5F, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x60, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x60, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x61, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x61, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x62, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x62, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x63, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x63, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x64, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x64, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x65, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x65, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x66, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x66, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x67, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x68, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x69, ++ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x6A, 0x74, 0x01, ++ 0xF0, 0x90, 0x19, 0x6B, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x6C, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x6D, ++ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x6E, 0x74, 0x01, ++ 0xF0, 0x90, 0x19, 0x6F, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x70, 0x74, 0x01, 0xF0, 0x90, 0x19, 0x71, ++ 0x74, 0x01, 0xF0, 0x90, 0x19, 0x72, 0x74, 0x01, ++ 0xF0, 0x90, 0x19, 0x73, 0x74, 0x01, 0xF0, 0x90, ++ 0x19, 0x74, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x75, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x76, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x77, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x78, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x79, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x79, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x7A, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x7A, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x7B, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x7B, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x7C, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x7C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x7D, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x7D, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x7E, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x7E, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x7F, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x7F, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x80, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x80, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x81, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x81, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x82, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x82, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x83, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x83, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x84, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x84, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x85, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x85, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x86, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x86, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x87, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x87, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x88, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x89, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x8A, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x8B, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x8C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x8D, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x8E, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x8F, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x90, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x91, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x92, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x93, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x94, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x95, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x96, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x97, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x98, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x98, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x99, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x99, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x9A, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x9A, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x9B, 0x74, 0x02, 0xF0, 0x80, ++ 0x06, 0x90, 0x19, 0x9B, 0x74, 0x03, 0xF0, 0x90, ++ 0x19, 0x9C, 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, ++ 0x19, 0x9C, 0x74, 0x03, 0xF0, 0x90, 0x19, 0x9D, ++ 0x74, 0x02, 0xF0, 0x80, 0x06, 0x90, 0x19, 0x9D, ++ 0x74, 0x03, 0xF0, 0x90, 0x19, 0x9E, 0x74, 0x02, ++ 0xF0, 0x80, 0x06, 0x90, 0x19, 0x9E, 0x74, 0x03, ++ 0xF0, 0x90, 0x19, 0x9F, 0x74, 0x02, 0xF0, 0x22, ++ 0x90, 0x19, 0x9F, 0x74, 0x03, 0xF0, 0x22, 0xE4, ++ 0x90, 0x88, 0xB0, 0xF0, 0x90, 0x12, 0xDA, 0xF0, ++ 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0xC3, 0x94, 0x50, ++ 0x50, 0x14, 0x74, 0x60, 0x2F, 0xF5, 0x82, 0xE4, ++ 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xD2, 0xB3, ++ 0x30, 0xB3, 0x05, 0x75, 0x9E, 0x55, 0x80, 0xF8, ++ 0xC2, 0xDB, 0xC2, 0x0E, 0xE4, 0x90, 0x12, 0xDA, ++ 0xF0, 0x90, 0xF2, 0xA8, 0xE0, 0xFF, 0x90, 0x12, ++ 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, 0x02, ++ 0x58, 0x78, 0x74, 0x00, 0x2E, 0xF5, 0x82, 0xE4, ++ 0x34, 0x50, 0xF5, 0x83, 0xE0, 0xB5, 0x06, 0x06, ++ 0x90, 0x88, 0xB0, 0xE0, 0x04, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, ++ 0x02, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x18, 0xF5, ++ 0x83, 0xE0, 0x90, 0x88, 0xC3, 0xF0, 0x75, 0xF0, ++ 0x04, 0xEF, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE5, ++ 0xF0, 0x34, 0x18, 0xF5, 0x83, 0xE0, 0x90, 0x88, ++ 0xC4, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x75, ++ 0xF0, 0x04, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, ++ 0xF0, 0x34, 0x18, 0xF5, 0x83, 0xE0, 0x90, 0x88, ++ 0xC5, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xA4, 0x24, ++ 0x02, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x30, 0xF5, ++ 0x83, 0xE0, 0x90, 0x88, 0xC7, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, ++ 0x01, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x30, 0xF5, ++ 0x83, 0xE0, 0x90, 0x88, 0xC8, 0xF0, 0x75, 0xF0, ++ 0x04, 0xEF, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE5, ++ 0xF0, 0x34, 0x30, 0xF5, 0x83, 0xE0, 0x90, 0x88, ++ 0xC9, 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x75, ++ 0xF0, 0x04, 0xA4, 0x24, 0x52, 0xF5, 0x82, 0xE5, ++ 0xF0, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0x90, 0x88, ++ 0xCE, 0xF0, 0x75, 0xF0, 0x04, 0xEF, 0xA4, 0x24, ++ 0x51, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x82, 0xF5, ++ 0x83, 0xE0, 0x90, 0x88, 0xCF, 0xF0, 0x90, 0x12, ++ 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, ++ 0x50, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x82, 0xF5, ++ 0x83, 0xE0, 0x90, 0x88, 0xD0, 0xF0, 0x74, 0x00, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, ++ 0xE0, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x88, ++ 0xF5, 0x83, 0xE0, 0x60, 0x03, 0x02, 0x57, 0x45, ++ 0x90, 0x12, 0xDA, 0xE0, 0xFB, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0x24, ++ 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, ++ 0x74, 0x01, 0xF0, 0x90, 0x88, 0xC2, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0x74, 0x00, 0x2B, 0xF5, 0x82, 0xE4, 0x34, ++ 0x50, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, ++ 0x24, 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, ++ 0xF5, 0x83, 0x12, 0x5B, 0x88, 0x90, 0x88, 0xC6, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, ++ 0xA3, 0xE0, 0xFF, 0x90, 0x12, 0xDA, 0xE0, 0xFB, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, ++ 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x40, ++ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x85, 0xF5, 0x83, ++ 0x12, 0x5B, 0x88, 0x90, 0x88, 0xCD, 0xE0, 0xFC, ++ 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0x74, 0x00, 0x2B, 0xF5, 0x82, 0xE4, 0x34, ++ 0x50, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, ++ 0x24, 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, ++ 0xF5, 0x83, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x53, 0xF5, 0x82, ++ 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0xFE, 0xED, ++ 0x25, 0xE0, 0x24, 0x52, 0xF5, 0x82, 0xE4, 0x34, ++ 0x50, 0xF5, 0x83, 0xE0, 0x7C, 0x00, 0x24, 0x00, ++ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0xDA, 0xE0, ++ 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, ++ 0x83, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, ++ 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0x02, 0x58, 0x6F, 0x90, 0x12, 0xDA, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x24, ++ 0x00, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, 0xF5, ++ 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFC, 0xA3, ++ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x90, 0x88, 0xC2, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, ++ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xEF, 0x2B, ++ 0xFF, 0xEE, 0x3A, 0xFE, 0xED, 0x39, 0xFD, 0xEC, ++ 0x38, 0xFC, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0x5B, ++ 0x88, 0x90, 0x12, 0xDA, 0xE0, 0x24, 0x00, 0xF5, ++ 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0x75, ++ 0xF0, 0x04, 0xA4, 0x24, 0x40, 0xF5, 0x82, 0xE5, ++ 0xF0, 0x34, 0x85, 0xF5, 0x83, 0xC0, 0x83, 0xC0, ++ 0x82, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, ++ 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x88, 0xC6, 0xE0, ++ 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, ++ 0xE0, 0xFB, 0xEF, 0x2B, 0xFF, 0xEE, 0x3A, 0xFE, ++ 0xED, 0x39, 0xFD, 0xEC, 0x38, 0xFC, 0xD0, 0x82, ++ 0xD0, 0x83, 0x12, 0x5B, 0x88, 0x90, 0x12, 0xDA, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x50, ++ 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x24, ++ 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, 0xF5, ++ 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFC, 0xA3, ++ 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, ++ 0x90, 0x88, 0xCD, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, ++ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xEF, 0x2B, ++ 0xFF, 0xEE, 0x3A, 0xFE, 0xED, 0x39, 0xFD, 0xEC, ++ 0x38, 0xFC, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0x5B, ++ 0x88, 0x90, 0x12, 0xDA, 0xE0, 0xFD, 0x25, 0xE0, ++ 0x24, 0x53, 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xED, 0x25, 0xE0, 0x24, 0x52, ++ 0xF5, 0x82, 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, ++ 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, ++ 0x90, 0x12, 0xDA, 0xE0, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0x50, 0xF5, 0x83, 0xE0, 0x25, 0xE0, ++ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, ++ 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x5A, 0x1E, 0x90, ++ 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x55, 0x59, ++ 0x22, 0xE7, 0x09, 0xF6, 0x08, 0xDF, 0xFA, 0x80, ++ 0x46, 0xE7, 0x09, 0xF2, 0x08, 0xDF, 0xFA, 0x80, ++ 0x3E, 0x88, 0x82, 0x8C, 0x83, 0xE7, 0x09, 0xF0, ++ 0xA3, 0xDF, 0xFA, 0x80, 0x32, 0xE3, 0x09, 0xF6, ++ 0x08, 0xDF, 0xFA, 0x80, 0x78, 0xE3, 0x09, 0xF2, ++ 0x08, 0xDF, 0xFA, 0x80, 0x70, 0x88, 0x82, 0x8C, ++ 0x83, 0xE3, 0x09, 0xF0, 0xA3, 0xDF, 0xFA, 0x80, ++ 0x64, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xA3, 0xF6, ++ 0x08, 0xDF, 0xFA, 0x80, 0x58, 0x89, 0x82, 0x8A, ++ 0x83, 0xE0, 0xA3, 0xF2, 0x08, 0xDF, 0xFA, 0x80, ++ 0x4C, 0x80, 0xD2, 0x80, 0xFA, 0x80, 0xC6, 0x80, ++ 0xD4, 0x80, 0x69, 0x80, 0xF2, 0x80, 0x33, 0x80, ++ 0x10, 0x80, 0xA6, 0x80, 0xEA, 0x80, 0x9A, 0x80, ++ 0xA8, 0x80, 0xDA, 0x80, 0xE2, 0x80, 0xCA, 0x80, ++ 0x33, 0x89, 0x82, 0x8A, 0x83, 0xEC, 0xFA, 0xE4, ++ 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCC, 0xC5, ++ 0x83, 0xCC, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, ++ 0xCC, 0xC5, 0x83, 0xCC, 0xDF, 0xE9, 0xDE, 0xE7, ++ 0x80, 0x0D, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, ++ 0xA3, 0xF6, 0x08, 0xDF, 0xF9, 0xEC, 0xFA, 0xA9, ++ 0xF0, 0xED, 0xFB, 0x22, 0x89, 0x82, 0x8A, 0x83, ++ 0xEC, 0xFA, 0xE0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, ++ 0xCC, 0xC5, 0x83, 0xCC, 0xF0, 0xA3, 0xC8, 0xC5, ++ 0x82, 0xC8, 0xCC, 0xC5, 0x83, 0xCC, 0xDF, 0xEA, ++ 0xDE, 0xE8, 0x80, 0xDB, 0x89, 0x82, 0x8A, 0x83, ++ 0xE4, 0x93, 0xA3, 0xF2, 0x08, 0xDF, 0xF9, 0x80, ++ 0xCC, 0x88, 0xF0, 0xEF, 0x60, 0x01, 0x0E, 0x4E, ++ 0x60, 0xC3, 0x88, 0xF0, 0xED, 0x24, 0x02, 0xB4, ++ 0x04, 0x00, 0x50, 0xB9, 0xF5, 0x82, 0xEB, 0x24, ++ 0x02, 0xB4, 0x04, 0x00, 0x50, 0xAF, 0x23, 0x23, ++ 0x45, 0x82, 0x23, 0x90, 0x58, 0xC9, 0x73, 0xBB, ++ 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, ++ 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, ++ 0x22, 0xEF, 0x8D, 0xF0, 0xA4, 0xA8, 0xF0, 0xCF, ++ 0x8C, 0xF0, 0xA4, 0x28, 0xCE, 0x8D, 0xF0, 0xA4, ++ 0x2E, 0xFE, 0x22, 0xBC, 0x00, 0x0B, 0xBE, 0x00, ++ 0x29, 0xEF, 0x8D, 0xF0, 0x84, 0xFF, 0xAD, 0xF0, ++ 0x22, 0xE4, 0xCC, 0xF8, 0x75, 0xF0, 0x08, 0xEF, ++ 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xEC, 0x33, 0xFC, ++ 0xEE, 0x9D, 0xEC, 0x98, 0x40, 0x05, 0xFC, 0xEE, ++ 0x9D, 0xFE, 0x0F, 0xD5, 0xF0, 0xE9, 0xE4, 0xCE, ++ 0xFD, 0x22, 0xED, 0xF8, 0xF5, 0xF0, 0xEE, 0x84, ++ 0x20, 0xD2, 0x1C, 0xFE, 0xAD, 0xF0, 0x75, 0xF0, ++ 0x08, 0xEF, 0x2F, 0xFF, 0xED, 0x33, 0xFD, 0x40, ++ 0x07, 0x98, 0x50, 0x06, 0xD5, 0xF0, 0xF2, 0x22, ++ 0xC3, 0x98, 0xFD, 0x0F, 0xD5, 0xF0, 0xEA, 0x22, ++ 0xC2, 0xD5, 0xEC, 0x30, 0xE7, 0x09, 0xB2, 0xD5, ++ 0xE4, 0xC3, 0x9D, 0xFD, 0xE4, 0x9C, 0xFC, 0xEE, ++ 0x30, 0xE7, 0x15, 0xB2, 0xD5, 0xE4, 0xC3, 0x9F, ++ 0xFF, 0xE4, 0x9E, 0xFE, 0x12, 0x59, 0x93, 0xC3, ++ 0xE4, 0x9D, 0xFD, 0xE4, 0x9C, 0xFC, 0x80, 0x03, ++ 0x12, 0x59, 0x93, 0x30, 0xD5, 0x07, 0xC3, 0xE4, ++ 0x9F, 0xFF, 0xE4, 0x9E, 0xFE, 0x22, 0xC5, 0xF0, ++ 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, ++ 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, ++ 0xE0, 0x38, 0xF0, 0x22, 0xE8, 0x8F, 0xF0, 0xA4, ++ 0xCC, 0x8B, 0xF0, 0xA4, 0x2C, 0xFC, 0xE9, 0x8E, ++ 0xF0, 0xA4, 0x2C, 0xFC, 0x8A, 0xF0, 0xED, 0xA4, ++ 0x2C, 0xFC, 0xEA, 0x8E, 0xF0, 0xA4, 0xCD, 0xA8, ++ 0xF0, 0x8B, 0xF0, 0xA4, 0x2D, 0xCC, 0x38, 0x25, ++ 0xF0, 0xFD, 0xE9, 0x8F, 0xF0, 0xA4, 0x2C, 0xCD, ++ 0x35, 0xF0, 0xFC, 0xEB, 0x8E, 0xF0, 0xA4, 0xFE, ++ 0xA9, 0xF0, 0xEB, 0x8F, 0xF0, 0xA4, 0xCF, 0xC5, ++ 0xF0, 0x2E, 0xCD, 0x39, 0xFE, 0xE4, 0x3C, 0xFC, ++ 0xEA, 0xA4, 0x2D, 0xCE, 0x35, 0xF0, 0xFD, 0xE4, ++ 0x3C, 0xFC, 0x22, 0x75, 0xF0, 0x08, 0x75, 0x82, ++ 0x00, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xCD, ++ 0x33, 0xCD, 0xCC, 0x33, 0xCC, 0xC5, 0x82, 0x33, ++ 0xC5, 0x82, 0x9B, 0xED, 0x9A, 0xEC, 0x99, 0xE5, ++ 0x82, 0x98, 0x40, 0x0C, 0xF5, 0x82, 0xEE, 0x9B, ++ 0xFE, 0xED, 0x9A, 0xFD, 0xEC, 0x99, 0xFC, 0x0F, ++ 0xD5, 0xF0, 0xD6, 0xE4, 0xCE, 0xFB, 0xE4, 0xCD, ++ 0xFA, 0xE4, 0xCC, 0xF9, 0xA8, 0x82, 0x22, 0xB8, ++ 0x00, 0xC1, 0xB9, 0x00, 0x59, 0xBA, 0x00, 0x2D, ++ 0xEC, 0x8B, 0xF0, 0x84, 0xCF, 0xCE, 0xCD, 0xFC, ++ 0xE5, 0xF0, 0xCB, 0xF9, 0x78, 0x18, 0xEF, 0x2F, ++ 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xEC, ++ 0x33, 0xFC, 0xEB, 0x33, 0xFB, 0x10, 0xD7, 0x03, ++ 0x99, 0x40, 0x04, 0xEB, 0x99, 0xFB, 0x0F, 0xD8, ++ 0xE5, 0xE4, 0xF9, 0xFA, 0x22, 0x78, 0x18, 0xEF, ++ 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, ++ 0xEC, 0x33, 0xFC, 0xC9, 0x33, 0xC9, 0x10, 0xD7, ++ 0x05, 0x9B, 0xE9, 0x9A, 0x40, 0x07, 0xEC, 0x9B, ++ 0xFC, 0xE9, 0x9A, 0xF9, 0x0F, 0xD8, 0xE0, 0xE4, ++ 0xC9, 0xFA, 0xE4, 0xCC, 0xFB, 0x22, 0x75, 0xF0, ++ 0x10, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, ++ 0x33, 0xFD, 0xCC, 0x33, 0xCC, 0xC8, 0x33, 0xC8, ++ 0x10, 0xD7, 0x07, 0x9B, 0xEC, 0x9A, 0xE8, 0x99, ++ 0x40, 0x0A, 0xED, 0x9B, 0xFD, 0xEC, 0x9A, 0xFC, ++ 0xE8, 0x99, 0xF8, 0x0F, 0xD5, 0xF0, 0xDA, 0xE4, ++ 0xCD, 0xFB, 0xE4, 0xCC, 0xFA, 0xE4, 0xC8, 0xF9, ++ 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, ++ 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8, 0x9C, 0x45, ++ 0xF0, 0x22, 0xE8, 0x60, 0x0F, 0xEC, 0xC3, 0x13, ++ 0xFC, 0xED, 0x13, 0xFD, 0xEE, 0x13, 0xFE, 0xEF, ++ 0x13, 0xFF, 0xD8, 0xF1, 0x22, 0xE8, 0x60, 0x0F, ++ 0xEF, 0xC3, 0x33, 0xFF, 0xEE, 0x33, 0xFE, 0xED, ++ 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xD8, 0xF1, 0x22, ++ 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEE, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x22, 0xA8, 0x82, 0x85, 0x83, ++ 0xF0, 0xD0, 0x83, 0xD0, 0x82, 0x12, 0x5B, 0xAB, ++ 0x12, 0x5B, 0xAB, 0x12, 0x5B, 0xAB, 0x12, 0x5B, ++ 0xAB, 0xE4, 0x73, 0xE4, 0x93, 0xA3, 0xC5, 0x83, ++ 0xC5, 0xF0, 0xC5, 0x83, 0xC8, 0xC5, 0x82, 0xC8, ++ 0xF0, 0xA3, 0xC5, 0x83, 0xC5, 0xF0, 0xC5, 0x83, ++ 0xC8, 0xC5, 0x82, 0xC8, 0x22, 0xA4, 0x25, 0x82, ++ 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, ++ 0x22, 0x75, 0x81, 0x64, 0xD2, 0xAF, 0xD2, 0xAE, ++ 0x12, 0x00, 0x40, 0x12, 0x7F, 0xF0, 0x7F, 0x64, ++ 0x7E, 0x00, 0x12, 0x67, 0xEE, 0x12, 0x78, 0x00, ++ 0x12, 0x51, 0x6F, 0xC2, 0x12, 0xE4, 0x90, 0x12, ++ 0x5B, 0xF0, 0xC2, 0x01, 0x75, 0x9E, 0x55, 0x20, ++ 0x0A, 0x03, 0x02, 0x5D, 0xFE, 0xC2, 0x0A, 0x85, ++ 0x0E, 0x09, 0x85, 0x0F, 0x0A, 0xE4, 0xF5, 0x0E, ++ 0xF5, 0x0F, 0x20, 0x12, 0x03, 0x12, 0x78, 0xE5, ++ 0x30, 0x03, 0x06, 0x12, 0x27, 0xB1, 0x02, 0x5D, ++ 0xFE, 0x20, 0x12, 0x03, 0x02, 0x5C, 0xB2, 0xE4, ++ 0x90, 0xF1, 0x0A, 0xF0, 0x90, 0xF1, 0x1B, 0xF0, ++ 0x90, 0xF1, 0x1F, 0x74, 0x0F, 0xF0, 0x90, 0xF1, ++ 0x22, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0xF1, 0x1C, ++ 0xF0, 0x90, 0xF1, 0x06, 0x04, 0xF0, 0xA3, 0xF0, ++ 0x90, 0xF1, 0x0E, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, ++ 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, ++ 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xE4, ++ 0xFD, 0xFC, 0xED, 0x25, 0xE0, 0xFE, 0xEC, 0x33, ++ 0x90, 0x12, 0xD8, 0xF0, 0xA3, 0xCE, 0xF0, 0x90, ++ 0x12, 0xD8, 0xE0, 0xFE, 0xA3, 0xE0, 0x7B, 0x01, ++ 0x7A, 0xF0, 0x79, 0x01, 0x24, 0x01, 0xF9, 0x74, ++ 0xF0, 0x3E, 0xFA, 0xE4, 0x12, 0x59, 0x6F, 0x04, ++ 0x29, 0xF9, 0xE4, 0x3A, 0xFA, 0x74, 0x08, 0x12, ++ 0x59, 0x6F, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0xED, ++ 0x64, 0x60, 0x4C, 0x70, 0xC5, 0x12, 0x5E, 0xE7, ++ 0x90, 0x12, 0x5B, 0xE0, 0x04, 0xF0, 0xE0, 0x64, ++ 0x60, 0x60, 0x03, 0x02, 0x5D, 0xFE, 0xF0, 0x90, ++ 0x8F, 0xFD, 0x74, 0xBB, 0xF0, 0xC2, 0x12, 0x02, ++ 0x5D, 0xFE, 0x90, 0x12, 0xBF, 0xE0, 0xFF, 0x12, ++ 0x63, 0xD9, 0x12, 0x27, 0xF9, 0xA2, 0xD9, 0xE4, ++ 0x33, 0x90, 0x8E, 0x01, 0xF0, 0x90, 0xF0, 0xC4, ++ 0x74, 0x01, 0xF0, 0x30, 0x15, 0x09, 0x12, 0x28, ++ 0x14, 0x12, 0x55, 0x1F, 0x12, 0x61, 0x81, 0x12, ++ 0x00, 0x4F, 0x12, 0x46, 0xE2, 0x12, 0x35, 0x80, ++ 0x90, 0x3F, 0xFD, 0xE0, 0xB4, 0x02, 0x19, 0xE5, ++ 0x91, 0x30, 0xE4, 0x05, 0x75, 0x9E, 0x55, 0x80, ++ 0xF6, 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, 0x00, ++ 0x40, 0x04, 0xC2, 0x84, 0x80, 0x02, 0xD2, 0x84, ++ 0xE5, 0x91, 0x30, 0xE4, 0x03, 0x02, 0x5D, 0xEA, ++ 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, 0x00, 0x40, ++ 0x7C, 0xE4, 0x90, 0x12, 0x63, 0xF0, 0xA3, 0xF0, ++ 0xB2, 0x14, 0x75, 0x8A, 0x8B, 0xF5, 0x8B, 0x30, ++ 0x14, 0x2C, 0x90, 0x12, 0xD5, 0xF0, 0x90, 0x12, ++ 0xD5, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, ++ 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x00, ++ 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8B, 0xF5, 0x83, ++ 0xEE, 0xF0, 0x90, 0x12, 0xD5, 0xE0, 0x04, 0xF0, ++ 0xE0, 0xB4, 0x3C, 0xDA, 0x80, 0x2B, 0xE4, 0x90, ++ 0x12, 0xD5, 0xF0, 0x90, 0x12, 0xD5, 0xE0, 0xFF, ++ 0x24, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, ++ 0x83, 0xE0, 0xFE, 0x74, 0x00, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x8B, 0xF5, 0x83, 0xEE, 0xF0, 0x90, ++ 0x12, 0xD5, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x3C, ++ 0xDA, 0x90, 0x3F, 0xFD, 0xE0, 0x64, 0x01, 0x70, ++ 0x7B, 0xC2, 0x84, 0x7F, 0x32, 0xFE, 0x12, 0x67, ++ 0xEE, 0xD2, 0x84, 0x80, 0x6F, 0x30, 0x0C, 0x6C, ++ 0x30, 0x07, 0x16, 0x90, 0x3F, 0xFD, 0xE0, 0xB4, ++ 0x01, 0x0B, 0xC2, 0x84, 0x7F, 0x32, 0x7E, 0x00, ++ 0x12, 0x67, 0xEE, 0xD2, 0x84, 0xC2, 0x07, 0x80, ++ 0x53, 0x90, 0x12, 0x8B, 0xE4, 0xF0, 0xA3, 0x74, ++ 0x64, 0xF0, 0x7F, 0x19, 0x7E, 0x00, 0x12, 0x67, ++ 0xEE, 0x90, 0x12, 0x8C, 0xE0, 0x24, 0xFF, 0xF0, ++ 0x90, 0x12, 0x8B, 0xE0, 0x34, 0xFF, 0xF0, 0x75, ++ 0x9E, 0x55, 0x30, 0x0C, 0x0D, 0xD3, 0xA3, 0xE0, ++ 0x94, 0x00, 0x90, 0x12, 0x8B, 0xE0, 0x94, 0x00, ++ 0x50, 0xD8, 0x30, 0x0C, 0x1F, 0xC2, 0x84, 0x7F, ++ 0x19, 0x7E, 0x00, 0x12, 0x67, 0xEE, 0xD2, 0x84, ++ 0x80, 0x12, 0x90, 0x8F, 0xF0, 0xE0, 0xD3, 0x94, ++ 0x00, 0x40, 0x09, 0x30, 0x0C, 0x04, 0xD2, 0x0B, ++ 0x80, 0x02, 0xC2, 0x0B, 0xC2, 0x15, 0x20, 0x05, ++ 0x03, 0x02, 0x5E, 0xDB, 0xC2, 0x05, 0xC2, 0x03, ++ 0x90, 0x8F, 0xFF, 0xE0, 0x64, 0xAF, 0x70, 0x2A, ++ 0xF0, 0x12, 0x67, 0x75, 0xE4, 0xF5, 0xA1, 0x7F, ++ 0x32, 0xFE, 0x12, 0x67, 0xEE, 0xE4, 0xF5, 0xA1, ++ 0x7F, 0x32, 0xFE, 0x12, 0x67, 0xEE, 0xE4, 0xF5, ++ 0xA1, 0x7F, 0x32, 0xFE, 0x12, 0x67, 0xEE, 0x75, ++ 0x87, 0x02, 0x75, 0x97, 0x55, 0x00, 0x00, 0x02, ++ 0x5E, 0xE0, 0x90, 0x8F, 0xFF, 0xE0, 0x64, 0xAE, ++ 0x70, 0x03, 0x02, 0x5E, 0xE0, 0x90, 0x8F, 0xFF, ++ 0xE0, 0xB4, 0xBF, 0x05, 0xD2, 0x03, 0x02, 0x5E, ++ 0xE0, 0x90, 0x8F, 0xFF, 0xE0, 0xB4, 0xCC, 0x24, ++ 0xC2, 0x84, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x67, ++ 0xEE, 0xD2, 0x84, 0x7F, 0xF8, 0x7E, 0x8E, 0x12, ++ 0x67, 0xEE, 0xC2, 0x84, 0x7F, 0x64, 0x7E, 0x00, ++ 0x12, 0x67, 0xEE, 0xD2, 0x84, 0xE4, 0x90, 0x8F, ++ 0xFF, 0xF0, 0x80, 0x64, 0x90, 0x8F, 0xFF, 0xE0, ++ 0xB4, 0xC3, 0x04, 0xD2, 0x01, 0x80, 0x59, 0x90, ++ 0x8F, 0xFF, 0xE0, 0x64, 0xC5, 0x70, 0x38, 0xF0, ++ 0x90, 0x8F, 0xFD, 0x74, 0xAA, 0xF0, 0xD2, 0x12, ++ 0xE4, 0x90, 0x12, 0x5B, 0xF0, 0x90, 0xF1, 0x0A, ++ 0xF0, 0x90, 0xF1, 0x1F, 0x74, 0x14, 0xF0, 0x90, ++ 0xF1, 0x22, 0xF0, 0xE4, 0x90, 0xF1, 0x1C, 0xF0, ++ 0x75, 0x9E, 0x55, 0x90, 0xF0, 0xC5, 0xE0, 0x44, ++ 0x01, 0xF0, 0x12, 0x27, 0xF9, 0x90, 0xF0, 0xC4, ++ 0x74, 0x01, 0xF0, 0xC2, 0x0A, 0x80, 0x19, 0x90, ++ 0x8F, 0xFF, 0xE0, 0x64, 0xD1, 0x60, 0x11, 0x90, ++ 0x8F, 0xFF, 0xE0, 0xB4, 0xE1, 0x0A, 0x12, 0x66, ++ 0x0C, 0x80, 0x05, 0x30, 0x06, 0x02, 0xC2, 0x06, ++ 0x12, 0x79, 0x05, 0x02, 0x5B, 0xF4, 0x22, 0x90, ++ 0x12, 0x5B, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, ++ 0x1F, 0x90, 0x12, 0xDA, 0xF0, 0xEF, 0x54, 0x07, ++ 0xA3, 0xF0, 0x90, 0x12, 0x5B, 0xE0, 0x24, 0x40, ++ 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, ++ 0xB4, 0x01, 0x1A, 0x74, 0x41, 0x2F, 0xF5, 0x82, ++ 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, 0xB4, 0x02, ++ 0x0C, 0x90, 0x12, 0x5B, 0xE0, 0xD3, 0x94, 0x00, ++ 0x40, 0x03, 0x02, 0x5F, 0xAB, 0x90, 0x12, 0x5B, ++ 0xE0, 0xFF, 0x24, 0x40, 0xF5, 0x82, 0xE4, 0x34, ++ 0x19, 0xF5, 0x83, 0xE0, 0xB4, 0x01, 0x17, 0x74, ++ 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, ++ 0x83, 0xE0, 0xB4, 0x03, 0x09, 0x90, 0x12, 0x5B, ++ 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x5D, 0x90, 0x12, ++ 0x5B, 0xE0, 0xFF, 0x24, 0x40, 0xF5, 0x82, 0xE4, ++ 0x34, 0x19, 0xF5, 0x83, 0xE0, 0xB4, 0x03, 0x17, ++ 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x19, ++ 0xF5, 0x83, 0xE0, 0xB4, 0x02, 0x09, 0x90, 0x12, ++ 0x5B, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x34, 0x90, ++ 0x12, 0x5B, 0xE0, 0xFF, 0x24, 0x40, 0xF5, 0x82, ++ 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, 0x64, 0x03, ++ 0x60, 0x03, 0x02, 0x60, 0x58, 0x74, 0x41, 0x2F, ++ 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, ++ 0x64, 0x01, 0x60, 0x03, 0x02, 0x60, 0x58, 0x90, ++ 0x12, 0x5B, 0xE0, 0xD3, 0x94, 0x00, 0x50, 0x03, ++ 0x02, 0x60, 0x58, 0x90, 0x12, 0x5B, 0xE0, 0x75, ++ 0xF0, 0x02, 0xA4, 0xFF, 0xAE, 0xF0, 0x90, 0x12, ++ 0x75, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, ++ 0x79, 0x01, 0x24, 0x01, 0xF9, 0x74, 0xF0, 0x3E, ++ 0xFA, 0x90, 0x12, 0x5C, 0x74, 0x01, 0xF0, 0xA3, ++ 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x90, 0x12, 0x5C, ++ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, ++ 0xE4, 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5D, 0x75, ++ 0xF0, 0x01, 0x12, 0x5A, 0x1E, 0x90, 0x12, 0x5C, ++ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, ++ 0x74, 0x20, 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5B, ++ 0xE0, 0x24, 0xFF, 0xFF, 0xE4, 0x34, 0xFF, 0xFE, ++ 0xEF, 0x25, 0xE0, 0xFF, 0xEE, 0x33, 0xFE, 0x90, ++ 0x12, 0x75, 0xF0, 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, ++ 0x79, 0x01, 0x24, 0x01, 0xF9, 0x74, 0xF0, 0x3E, ++ 0xFA, 0x90, 0x12, 0x5C, 0x74, 0x01, 0xF0, 0xA3, ++ 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x90, 0x12, 0x5C, ++ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, ++ 0xE4, 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5D, 0x75, ++ 0xF0, 0x01, 0x12, 0x5A, 0x1E, 0x90, 0x12, 0x5C, ++ 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, ++ 0x74, 0x10, 0x12, 0x59, 0x6F, 0x02, 0x61, 0x4A, ++ 0x90, 0x12, 0x5B, 0xE0, 0xFF, 0x24, 0x40, 0xF5, ++ 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, 0xB4, ++ 0x01, 0x0F, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, ++ 0x34, 0x19, 0xF5, 0x83, 0xE0, 0x64, 0x01, 0x60, ++ 0x28, 0x90, 0x12, 0x5B, 0xE0, 0xFF, 0x24, 0x40, ++ 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, 0x83, 0xE0, ++ 0x64, 0x03, 0x60, 0x03, 0x02, 0x61, 0x4A, 0x74, ++ 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x19, 0xF5, ++ 0x83, 0xE0, 0x64, 0x03, 0x60, 0x03, 0x02, 0x61, ++ 0x4A, 0x90, 0x12, 0x5B, 0xE0, 0x75, 0xF0, 0x02, ++ 0xA4, 0xFF, 0xAE, 0xF0, 0x90, 0x12, 0x75, 0xEE, ++ 0xF0, 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, 0x79, 0x01, ++ 0x24, 0x01, 0xF9, 0x74, 0xF0, 0x3E, 0xFA, 0x90, ++ 0x12, 0x5C, 0x74, 0x01, 0xF0, 0xA3, 0xEA, 0xF0, ++ 0xA3, 0xE9, 0xF0, 0x90, 0x12, 0x5C, 0xE0, 0xFB, ++ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0xE4, 0x12, ++ 0x59, 0x6F, 0x90, 0x12, 0x5D, 0x75, 0xF0, 0x01, ++ 0x12, 0x5A, 0x1E, 0x90, 0x12, 0x5C, 0xE0, 0xFB, ++ 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x74, 0x10, ++ 0x12, 0x59, 0x6F, 0x90, 0x12, 0x5B, 0xE0, 0x24, ++ 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xEF, 0x25, 0xE0, ++ 0xFF, 0xEE, 0x33, 0xFE, 0x90, 0x12, 0x75, 0xF0, ++ 0xA3, 0xEF, 0xF0, 0x7A, 0xF0, 0x79, 0x01, 0x24, ++ 0x01, 0xF9, 0x74, 0xF0, 0x3E, 0xFA, 0x90, 0x12, ++ 0x5C, 0x74, 0x01, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, ++ 0xE9, 0xF0, 0x90, 0x12, 0x5C, 0xE0, 0xFB, 0xA3, ++ 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0xE4, 0x12, 0x59, ++ 0x6F, 0x90, 0x12, 0x5D, 0x75, 0xF0, 0x01, 0x12, ++ 0x5A, 0x1E, 0x90, 0x12, 0x5C, 0xE0, 0xFB, 0xA3, ++ 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x74, 0x20, 0x12, ++ 0x59, 0x6F, 0x12, 0x27, 0xF9, 0x90, 0xF0, 0xC4, ++ 0x74, 0x01, 0xF0, 0x20, 0x0A, 0x05, 0x75, 0x9E, ++ 0x55, 0x80, 0xF8, 0x90, 0x00, 0x01, 0xE0, 0xFE, ++ 0x90, 0x00, 0x00, 0xE0, 0x7C, 0x00, 0x24, 0x00, ++ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0x5B, 0xE0, ++ 0x25, 0xE0, 0x24, 0xA0, 0xF5, 0x82, 0xE4, 0x34, ++ 0x19, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0x22, 0xE4, 0x90, 0x12, 0xDB, 0xF0, 0x90, 0x12, ++ 0xDA, 0xF0, 0x90, 0xF2, 0xA8, 0xE0, 0xFF, 0x90, ++ 0x12, 0xDA, 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, ++ 0x02, 0x63, 0xD0, 0x74, 0x60, 0x2E, 0xF5, 0x82, ++ 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x64, 0x01, ++ 0x60, 0x03, 0x02, 0x63, 0xB5, 0xEE, 0x25, 0xE0, ++ 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, ++ 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0xFF, ++ 0xEE, 0x94, 0x00, 0x40, 0x12, 0x90, 0x12, 0xDB, ++ 0xE0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8A, ++ 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x80, 0x22, 0x90, ++ 0x12, 0xDA, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, ++ 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xA3, ++ 0xE0, 0xFF, 0x90, 0x12, 0xDB, 0xE0, 0x24, 0x00, ++ 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, ++ 0xF0, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, 0x04, ++ 0xA4, 0x24, 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, ++ 0x86, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x02, ++ 0x12, 0x5B, 0x62, 0xE4, 0x7B, 0xFF, 0xFA, 0xF9, ++ 0xF8, 0xC3, 0x12, 0x5B, 0x51, 0x50, 0x12, 0x90, ++ 0x12, 0xDB, 0xE0, 0x24, 0x28, 0xF5, 0x82, 0xE4, ++ 0x34, 0x8A, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x80, ++ 0x31, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, 0x04, ++ 0xA4, 0x24, 0x80, 0xF5, 0x82, 0xE5, 0xF0, 0x34, ++ 0x86, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, ++ 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x78, 0x02, ++ 0x12, 0x5B, 0x62, 0x90, 0x12, 0xDB, 0xE0, 0x24, ++ 0x28, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, ++ 0xEF, 0xF0, 0x85, 0x0B, 0xAF, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x01, ++ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, 0xF5, 0x83, ++ 0xE0, 0xF5, 0xA9, 0x75, 0xF0, 0x04, 0xEF, 0xA4, ++ 0x24, 0x02, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, ++ 0xF5, 0x83, 0xE0, 0xF5, 0xAA, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x03, ++ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x84, 0xF5, 0x83, ++ 0xE0, 0xF5, 0xAB, 0x75, 0xF0, 0x04, 0xEF, 0xA4, ++ 0x24, 0x81, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, ++ 0xF5, 0x83, 0xE0, 0xF5, 0xA2, 0x90, 0x12, 0xDA, ++ 0xE0, 0xFF, 0x75, 0xF0, 0x04, 0xA4, 0x24, 0x82, ++ 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, 0xF5, 0x83, ++ 0xE0, 0xF5, 0xA3, 0x75, 0xF0, 0x04, 0xEF, 0xA4, ++ 0x24, 0x83, 0xF5, 0x82, 0xE5, 0xF0, 0x34, 0x86, ++ 0xF5, 0x83, 0xE0, 0xF5, 0xA4, 0xD2, 0xB0, 0x85, ++ 0x0C, 0xAF, 0x90, 0x12, 0xDA, 0xE0, 0xFF, 0x75, ++ 0xF0, 0x04, 0xA4, 0x24, 0x41, 0xF5, 0x82, 0xE5, ++ 0xF0, 0x34, 0x85, 0xF5, 0x83, 0xE0, 0xF5, 0xA9, ++ 0x75, 0xF0, 0x04, 0xEF, 0xA4, 0x24, 0x42, 0xF5, ++ 0x82, 0xE5, 0xF0, 0x34, 0x85, 0xF5, 0x83, 0xE0, ++ 0xF5, 0xAA, 0x90, 0x12, 0xDA, 0xE0, 0x75, 0xF0, ++ 0x04, 0xA4, 0x24, 0x43, 0xF5, 0x82, 0xE5, 0xF0, ++ 0x34, 0x85, 0xF5, 0x83, 0xE0, 0xF5, 0xAB, 0x20, ++ 0xB0, 0x06, 0x30, 0x0E, 0x03, 0x20, 0xDA, 0x05, ++ 0x75, 0x9E, 0x55, 0x80, 0xF2, 0xC2, 0xDA, 0xC2, ++ 0x0E, 0xAF, 0xA6, 0xEF, 0xFE, 0xAD, 0xA7, 0x7C, ++ 0x00, 0xE4, 0x2D, 0xFF, 0xEC, 0x3E, 0xFE, 0x90, ++ 0x28, 0x0B, 0xE4, 0x93, 0xFD, 0xC3, 0x13, 0x2F, ++ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x12, 0xDB, 0xE0, ++ 0x25, 0xE0, 0x25, 0xE0, 0x24, 0x00, 0xF5, 0x82, ++ 0xE4, 0x34, 0xF2, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, ++ 0xEF, 0xF0, 0xD2, 0xB0, 0x20, 0xB0, 0x06, 0x30, ++ 0x0E, 0x03, 0x20, 0xDA, 0x05, 0x75, 0x9E, 0x55, ++ 0x80, 0xF2, 0xC2, 0xDA, 0xC2, 0x0E, 0xAF, 0xA6, ++ 0xEF, 0xFE, 0xAD, 0xA7, 0x7C, 0x00, 0xE4, 0x2D, ++ 0xFF, 0xEC, 0x3E, 0xFE, 0x90, 0x28, 0x0C, 0xE4, ++ 0x93, 0xFD, 0xC3, 0x13, 0x2F, 0xFF, 0xEC, 0x3E, ++ 0xFE, 0x90, 0x12, 0xDB, 0xE0, 0x25, 0xE0, 0x25, ++ 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xF2, ++ 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, ++ 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x90, 0x12, 0xDB, ++ 0xE0, 0xFF, 0x65, 0x08, 0x60, 0x12, 0x90, 0x88, ++ 0xB0, 0xE0, 0xFE, 0xEF, 0x6E, 0x60, 0x09, 0x90, ++ 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x02, 0x61, 0x8A, ++ 0x90, 0x12, 0xDB, 0xE0, 0x90, 0x88, 0xB0, 0xF0, ++ 0x22, 0xAB, 0x07, 0xC2, 0x18, 0xEB, 0x25, 0xE0, ++ 0xFE, 0xE4, 0x33, 0x90, 0x12, 0xDC, 0xF0, 0xA3, ++ 0xCE, 0xF0, 0xE4, 0xFA, 0xEA, 0xFF, 0x7E, 0x00, ++ 0x7C, 0x00, 0x7D, 0x28, 0x12, 0x59, 0x81, 0xAC, ++ 0x06, 0xAD, 0x07, 0xEB, 0x25, 0xE0, 0xFF, 0xE4, ++ 0x33, 0xFE, 0xED, 0x2F, 0xFF, 0xEC, 0x3E, 0x90, ++ 0x12, 0xDC, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x12, ++ 0xDC, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x24, 0x01, ++ 0xF5, 0x82, 0x74, 0x20, 0x3C, 0xF5, 0x83, 0xE0, ++ 0xFE, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0x74, 0x20, ++ 0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0xEE, 0xED, 0xFF, ++ 0x90, 0x12, 0xDA, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, ++ 0xA3, 0xE0, 0xA3, 0xE0, 0xFD, 0x24, 0x01, 0xF5, ++ 0x82, 0x74, 0x00, 0x3C, 0xF5, 0x83, 0xE0, 0xFE, ++ 0x74, 0x00, 0x2D, 0xF5, 0x82, 0x74, 0x00, 0x3C, ++ 0xF5, 0x83, 0xE0, 0xFD, 0xEE, 0xED, 0xFF, 0x90, ++ 0x12, 0xDB, 0xE0, 0x24, 0xFA, 0xFD, 0x90, 0x12, ++ 0xDA, 0xE0, 0x34, 0x00, 0xFC, 0xD3, 0xEF, 0x9D, ++ 0xEE, 0x9C, 0x40, 0x0E, 0x90, 0x12, 0x72, 0xE0, ++ 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, 0x71, 0xE0, ++ 0x04, 0xF0, 0xEF, 0x24, 0xFA, 0xFF, 0xE4, 0x3E, ++ 0xFE, 0xD3, 0x90, 0x12, 0xDB, 0xE0, 0x9F, 0x90, ++ 0x12, 0xDA, 0xE0, 0x9E, 0x40, 0x0E, 0x90, 0x12, ++ 0xBE, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, ++ 0xBD, 0xE0, 0x04, 0xF0, 0x0A, 0xEA, 0x64, 0x1E, ++ 0x60, 0x03, 0x02, 0x63, 0xEC, 0x90, 0x12, 0xBF, ++ 0xE0, 0x04, 0xF0, 0xE0, 0x64, 0x14, 0x70, 0x37, ++ 0xF0, 0x90, 0x12, 0xBD, 0xE0, 0xFE, 0xA3, 0xE0, ++ 0xFF, 0xD3, 0x90, 0x12, 0x72, 0xE0, 0x9F, 0x90, ++ 0x12, 0x71, 0xE0, 0x9E, 0x40, 0x02, 0xD2, 0x18, ++ 0x30, 0x18, 0x1C, 0xC2, 0x18, 0xE4, 0x90, 0x12, ++ 0x71, 0xF0, 0xA3, 0xF0, 0x90, 0x12, 0xBD, 0xF0, ++ 0xA3, 0xF0, 0x90, 0xF1, 0x04, 0x74, 0x1E, 0xF0, ++ 0x90, 0xF0, 0xC5, 0xE0, 0x44, 0x01, 0xF0, 0x22, ++ 0x30, 0x98, 0x04, 0xD2, 0x05, 0xC2, 0x98, 0x30, ++ 0x99, 0x24, 0xD2, 0x06, 0xC2, 0x99, 0x30, 0x0B, ++ 0x19, 0xB2, 0x14, 0x30, 0x14, 0x08, 0x75, 0x8A, ++ 0x8F, 0x75, 0x8B, 0x00, 0x80, 0x06, 0x75, 0x8A, ++ 0x8F, 0x75, 0x8B, 0x78, 0xC2, 0x0B, 0xD2, 0x07, ++ 0x80, 0x04, 0xC2, 0x0C, 0xC2, 0x07, 0x32, 0x32, ++ 0x05, 0x00, 0x03, 0x20, 0x03, 0x03, 0xE5, 0xC0, ++ 0x54, 0x02, 0x70, 0x03, 0x02, 0x5B, 0xD1, 0xE5, ++ 0xC0, 0x54, 0x02, 0x60, 0x13, 0x90, 0x00, 0x00, ++ 0x7F, 0x00, 0x7E, 0x90, 0xE4, 0x74, 0xFF, 0xF0, ++ 0xA3, 0x75, 0x9E, 0x55, 0xDF, 0xF9, 0xDE, 0xF7, ++ 0x02, 0x5B, 0xD1, 0xC2, 0xD3, 0xC2, 0xD4, 0x75, ++ 0x9E, 0x55, 0x12, 0x65, 0xEF, 0x12, 0x65, 0xEF, ++ 0x78, 0x01, 0x74, 0x55, 0xF6, 0x64, 0xFF, 0x08, ++ 0xB8, 0x60, 0xF9, 0x78, 0x80, 0x74, 0x55, 0xF6, ++ 0x64, 0xFF, 0x08, 0xB8, 0x00, 0xF9, 0x75, 0x9E, ++ 0x55, 0x12, 0x65, 0xEF, 0x12, 0x65, 0xEF, 0x78, ++ 0x01, 0x74, 0x55, 0xC0, 0xE0, 0x66, 0x70, 0x22, ++ 0xD0, 0xE0, 0x63, 0xE0, 0xFF, 0x08, 0xB8, 0x60, ++ 0xF2, 0x78, 0x80, 0x74, 0x55, 0xC0, 0xE0, 0x66, ++ 0x70, 0x10, 0xD0, 0xE0, 0x63, 0xE0, 0xFF, 0x08, ++ 0xB8, 0x00, 0xF2, 0x90, 0x00, 0x00, 0x74, 0x01, ++ 0xF0, 0x22, 0x90, 0x00, 0x00, 0x74, 0x00, 0xF0, ++ 0xA3, 0x90, 0x00, 0x01, 0xE8, 0xF0, 0xD0, 0xE0, ++ 0x22, 0x78, 0x60, 0x74, 0x55, 0xF6, 0x64, 0xFF, ++ 0x08, 0xB8, 0x81, 0xF9, 0x75, 0x9E, 0x55, 0x12, ++ 0x65, 0xEF, 0x12, 0x65, 0xEF, 0x78, 0x60, 0x74, ++ 0x55, 0xC0, 0xE0, 0x66, 0x70, 0x11, 0xD0, 0xE0, ++ 0x63, 0xE0, 0xFF, 0x08, 0xB8, 0x81, 0xF2, 0x90, ++ 0x00, 0x00, 0xE0, 0x44, 0x02, 0xF0, 0x22, 0x90, ++ 0x00, 0x00, 0xE0, 0x44, 0x00, 0xF0, 0x90, 0x00, ++ 0x02, 0xE8, 0xF0, 0xD0, 0xE0, 0x22, 0xC0, 0xE0, ++ 0xC0, 0xD0, 0xD0, 0xD0, 0xD0, 0xE0, 0x32, 0x78, ++ 0x00, 0xD8, 0xFE, 0x22, 0x78, 0x96, 0x79, 0xFA, ++ 0xD9, 0xFE, 0xD8, 0xFA, 0x22, 0x78, 0x02, 0x79, ++ 0xFA, 0x7A, 0xFA, 0xDA, 0xFE, 0xD9, 0xFA, 0xD8, ++ 0xF6, 0x22, 0x00, 0x00, 0xE4, 0x90, 0x12, 0xDE, ++ 0xF0, 0xA3, 0xF0, 0x90, 0x12, 0xDA, 0xF0, 0xA3, ++ 0xF0, 0xB2, 0x86, 0xB2, 0x86, 0xFD, 0xFC, 0xB2, ++ 0x85, 0x75, 0x9E, 0x55, 0xED, 0xAE, 0x04, 0x78, ++ 0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, ++ 0xFF, 0x90, 0x12, 0xDA, 0xEE, 0xF0, 0xA3, 0xEF, ++ 0xF0, 0xE4, 0x90, 0x12, 0xE0, 0xF0, 0xA3, 0xF0, ++ 0x90, 0x12, 0xDA, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, ++ 0xEA, 0xA3, 0xF0, 0xEB, 0xA3, 0xF0, 0xE4, 0xF9, ++ 0xFB, 0xFA, 0x90, 0x12, 0xDA, 0xE0, 0xFE, 0xA3, ++ 0xE0, 0xFF, 0x12, 0x78, 0xFD, 0xEF, 0x29, 0xF9, ++ 0x90, 0x12, 0xDB, 0xE0, 0x04, 0xF0, 0x70, 0x06, ++ 0x90, 0x12, 0xDA, 0xE0, 0x04, 0xF0, 0x0B, 0xBB, ++ 0x00, 0x01, 0x0A, 0xEB, 0x64, 0x08, 0x4A, 0x70, ++ 0xD9, 0x90, 0x12, 0xDC, 0xE0, 0x29, 0xFF, 0xA3, ++ 0xE0, 0x2F, 0x24, 0x08, 0xF9, 0xF4, 0x04, 0xF9, ++ 0xFF, 0x90, 0x12, 0xDF, 0xE0, 0x2F, 0xF0, 0x90, ++ 0x12, 0xDE, 0xE0, 0x34, 0x00, 0xF0, 0x90, 0x12, ++ 0xE1, 0xE0, 0x04, 0xF0, 0x70, 0x06, 0x90, 0x12, ++ 0xE0, 0xE0, 0x04, 0xF0, 0xC3, 0x90, 0x12, 0xE1, ++ 0xE0, 0x94, 0x10, 0x90, 0x12, 0xE0, 0xE0, 0x64, ++ 0x80, 0x94, 0x80, 0x40, 0x8B, 0x0D, 0xBD, 0x00, ++ 0x01, 0x0C, 0xED, 0x70, 0x03, 0xEC, 0x64, 0x01, ++ 0x60, 0x03, 0x02, 0x66, 0x1F, 0x90, 0x12, 0xDE, ++ 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0x90, 0x8E, ++ 0x0E, 0xF0, 0xED, 0x90, 0x8E, 0x0F, 0xF0, 0x90, ++ 0x8E, 0x0D, 0x74, 0xAA, 0xF0, 0xB2, 0x86, 0xB2, ++ 0x86, 0x75, 0x9E, 0x55, 0x80, 0xFB, 0x22, 0x75, ++ 0x9E, 0x55, 0x90, 0xF1, 0x40, 0x74, 0x03, 0xF0, ++ 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x7F, ++ 0x01, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x75, 0x9E, ++ 0x55, 0x90, 0xF1, 0x41, 0x74, 0x01, 0xF0, 0x7F, ++ 0x05, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x7F, 0x05, ++ 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x75, 0x9E, 0x55, ++ 0x90, 0xF1, 0x41, 0x74, 0x13, 0xF0, 0x7F, 0x05, ++ 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x7F, 0x05, 0x7E, ++ 0x00, 0x12, 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x90, ++ 0xF1, 0x41, 0x74, 0x1F, 0xF0, 0x7F, 0x05, 0x7E, ++ 0x00, 0x12, 0x78, 0x5A, 0x7F, 0x05, 0x7E, 0x00, ++ 0x12, 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x90, 0xF1, ++ 0x41, 0x74, 0x3F, 0xF0, 0x7F, 0x05, 0x7E, 0x00, ++ 0x12, 0x78, 0x5A, 0x7F, 0x05, 0x7E, 0x00, 0x12, ++ 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x90, 0xF1, 0x40, ++ 0x74, 0x83, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, ++ 0x78, 0x5A, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x78, ++ 0x5A, 0x75, 0x9E, 0x55, 0x22, 0xE4, 0x90, 0xF0, ++ 0xC4, 0xF0, 0x75, 0x9E, 0x55, 0xFD, 0xFC, 0x90, ++ 0xF1, 0x47, 0xE0, 0xFE, 0x90, 0xF1, 0x48, 0xE0, ++ 0x7A, 0x00, 0x24, 0x00, 0xFB, 0xEA, 0x3E, 0xFA, ++ 0x90, 0xF1, 0x49, 0xE0, 0x7F, 0x00, 0xFE, 0xEF, ++ 0x2B, 0xFF, 0xEA, 0x3E, 0xFE, 0x90, 0xF1, 0x4A, ++ 0xE0, 0x7A, 0x00, 0x2F, 0xFD, 0xEA, 0x3E, 0xFC, ++ 0x90, 0xF1, 0x40, 0x74, 0xE3, 0xF0, 0xE4, 0x90, ++ 0xF1, 0x41, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0x12, ++ 0x78, 0xB6, 0x75, 0x9E, 0x55, 0x90, 0xF1, 0x41, ++ 0x74, 0x40, 0xF0, 0x7F, 0x05, 0x7E, 0x00, 0x12, ++ 0x78, 0x5A, 0x7F, 0x05, 0x7E, 0x00, 0x12, 0x78, ++ 0x5A, 0x75, 0x9E, 0x55, 0xE4, 0x90, 0xF1, 0x41, ++ 0xF0, 0x90, 0xF1, 0x40, 0xF0, 0x7F, 0x02, 0xFE, ++ 0x12, 0x78, 0x5A, 0x7F, 0x02, 0x7E, 0x00, 0x12, ++ 0x78, 0x5A, 0x75, 0x9E, 0x55, 0x22, 0xEF, 0x1F, ++ 0x70, 0x01, 0x1E, 0x75, 0x9E, 0x55, 0xD3, 0xEF, ++ 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0xEF, 0x22, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xE5, 0xC0, 0x30, 0xE3, 0x1B, 0x12, 0x67, 0x75, ++ 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x78, 0x5A, 0x12, ++ 0x66, 0xE7, 0x12, 0x26, 0x17, 0x12, 0x00, 0x36, ++ 0x12, 0x78, 0xD8, 0x12, 0x41, 0x2D, 0x80, 0x36, ++ 0xE5, 0xC0, 0x30, 0xE2, 0x0D, 0x12, 0x66, 0xE7, ++ 0x90, 0xF0, 0xC4, 0x74, 0x01, 0xF0, 0xD2, 0xAF, ++ 0x80, 0x24, 0xE5, 0xC0, 0x30, 0xE0, 0x0B, 0x12, ++ 0x66, 0xE7, 0x90, 0xF0, 0xC4, 0x74, 0x01, 0xF0, ++ 0x80, 0x14, 0xE5, 0xC0, 0x30, 0xE1, 0x0F, 0x12, ++ 0x66, 0xE7, 0x12, 0x26, 0x17, 0x12, 0x00, 0x36, ++ 0x12, 0x78, 0xD8, 0x12, 0x41, 0x2D, 0xE4, 0xF5, ++ 0xC0, 0x22, 0xE4, 0xFD, 0xFC, 0xC3, 0xED, 0x9F, ++ 0xEC, 0x9E, 0x50, 0x18, 0xE4, 0xFB, 0xFA, 0x75, ++ 0x9E, 0x55, 0x0B, 0xBB, 0x00, 0x01, 0x0A, 0xBA, ++ 0x03, 0xF5, 0xBB, 0x20, 0xF2, 0x0D, 0xBD, 0x00, ++ 0x01, 0x0C, 0x80, 0xE1, 0x22, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, ++ 0x04, 0x04, 0x04, 0x04, 0x00, 0x03, 0x00, 0x03, ++ 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, ++ 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, ++ 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xD2, 0x0A, ++ 0x90, 0xF0, 0xC4, 0xE4, 0xF0, 0xC2, 0xD8, 0xD0, ++ 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xE4, 0xFD, ++ 0xFC, 0xC3, 0xED, 0x9F, 0xEC, 0x9E, 0x50, 0x08, ++ 0x00, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0x80, 0xF1, ++ 0x22, 0xC0, 0xE0, 0xD2, 0x09, 0x05, 0x0F, 0xE5, ++ 0x0F, 0x70, 0x02, 0x05, 0x0E, 0xD0, 0xE0, 0x32, ++ 0x75, 0x91, 0x01, 0x90, 0x28, 0x0A, 0xE4, 0x93, ++ 0xF5, 0x89, 0xD2, 0xAC, 0x22, 0x90, 0xF0, 0xC5, ++ 0x74, 0x06, 0xF0, 0x30, 0xF8, 0x02, 0xD2, 0x15, ++ 0x22, 0xEE, 0x30, 0xE7, 0x07, 0xC3, 0xE4, 0x9F, ++ 0xFF, 0xE4, 0x9E, 0xFE, 0x22, 0x8F, 0x82, 0x8E, ++ 0x83, 0xE4, 0x93, 0xFF, 0x22, 0x00, 0x22, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x90, 0x3F, 0xFF, 0x74, 0x03, 0xF0, 0x22, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 \ No newline at end of file diff --git a/drivers/input/touchscreen/vtl_ts/Makefile b/drivers/input/touchscreen/vtl_ts/Makefile new file mode 100755 -index 000000000000..0d15d7471f7f +index 000000000..0d15d7471 --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/Makefile @@ -0,0 +1,9 @@ @@ -825911,7 +825972,7 @@ index 000000000000..0d15d7471f7f + diff --git a/drivers/input/touchscreen/vtl_ts/apk.c b/drivers/input/touchscreen/vtl_ts/apk.c new file mode 100755 -index 000000000000..44db1086d264 +index 000000000..44db1086d --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/apk.c @@ -0,0 +1,232 @@ @@ -826149,7 +826210,7 @@ index 000000000000..44db1086d264 + diff --git a/drivers/input/touchscreen/vtl_ts/apk.h b/drivers/input/touchscreen/vtl_ts/apk.h new file mode 100755 -index 000000000000..a0a14b6b3cc8 +index 000000000..a0a14b6b3 --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/apk.h @@ -0,0 +1,7 @@ @@ -826162,7 +826223,7 @@ index 000000000000..a0a14b6b3cc8 +#endif diff --git a/drivers/input/touchscreen/vtl_ts/chip.c b/drivers/input/touchscreen/vtl_ts/chip.c new file mode 100755 -index 000000000000..50004cef1f0c +index 000000000..50004cef1 --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/chip.c @@ -0,0 +1,860 @@ @@ -827028,7 +827089,7 @@ index 000000000000..50004cef1f0c + diff --git a/drivers/input/touchscreen/vtl_ts/chip.h b/drivers/input/touchscreen/vtl_ts/chip.h new file mode 100755 -index 000000000000..5ebb121276ed +index 000000000..5ebb12127 --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/chip.h @@ -0,0 +1,13 @@ @@ -827047,7 +827108,7 @@ index 000000000000..5ebb121276ed +#endif diff --git a/drivers/input/touchscreen/vtl_ts/f307&f317&f316_CT363S_01_V10_F7E9_140212.dat b/drivers/input/touchscreen/vtl_ts/f307&f317&f316_CT363S_01_V10_F7E9_140212.dat new file mode 100755 -index 000000000000..8d43138759b3 +index 000000000..8d4313875 --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/f307&f317&f316_CT363S_01_V10_F7E9_140212.dat @@ -0,0 +1,2048 @@ @@ -829102,7 +829163,7 @@ index 000000000000..8d43138759b3 \ No newline at end of file diff --git a/drivers/input/touchscreen/vtl_ts/lx--js77_97_CT365_V01_E7DA_130419.dat b/drivers/input/touchscreen/vtl_ts/lx--js77_97_CT365_V01_E7DA_130419.dat new file mode 100755 -index 000000000000..d3fc42f43e6b +index 000000000..d3fc42f43 --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/lx--js77_97_CT365_V01_E7DA_130419.dat @@ -0,0 +1,2048 @@ @@ -831157,7 +831218,7 @@ index 000000000000..d3fc42f43e6b \ No newline at end of file diff --git a/drivers/input/touchscreen/vtl_ts/tp_fw.h b/drivers/input/touchscreen/vtl_ts/tp_fw.h new file mode 100755 -index 000000000000..df431fcabca8 +index 000000000..df431fcab --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/tp_fw.h @@ -0,0 +1,2051 @@ @@ -833214,940 +833275,940 @@ index 000000000000..df431fcabca8 +}; diff --git a/drivers/input/touchscreen/vtl_ts/vtl_ts.c b/drivers/input/touchscreen/vtl_ts/vtl_ts.c new file mode 100755 -index 000000000000..8c8e374ab9d2 +index 000000000..5eebd306e --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/vtl_ts.c @@ -0,0 +1,728 @@ -+/* -+ * VTL CTP driver -+ * -+ * Copyright (C) 2013 VTL Corporation. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * version 2 as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -+ * 02110-1301 USA -+ * -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+ -+#include "vtl_ts.h" -+#include "chip.h" -+#include "apk.h" ++/* ++ * VTL CTP driver ++ * ++ * Copyright (C) 2013 VTL Corporation. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * version 2 as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ ++#include "vtl_ts.h" ++#include "chip.h" ++#include "apk.h" +#include "tp_fw.h" -+ -+ -+#define TS_THREAD_PRIO 90 -+static DECLARE_WAIT_QUEUE_HEAD(waiter); -+//static struct task_struct *ts_thread = NULL; -+static unsigned char thread_syn_flag =0; -+ -+ -+// **************************************************************************** -+// Globel or static variables -+// **************************************************************************** -+static struct ts_driver g_driver; -+static int vtl_first_init_flag = 1; -+struct ts_info g_ts = { -+ .driver = &g_driver, -+ .debug = DEBUG_ENABLE, -+}; -+struct ts_info *pg_ts = &g_ts; -+ -+static struct i2c_device_id vtl_ts_id[] = { -+ { DRIVER_NAME, 0 }, -+ { } -+}; -+MODULE_DEVICE_TABLE(i2c,vtl_ts_id); -+ -+ -+/* -+static struct i2c_board_info i2c_info[] = { -+ { -+ I2C_BOARD_INFO(DRIVER_NAME, 0x01), -+ .platform_data = NULL, -+ }, -+}; -+*/ -+ -+ -+// **************************************************************************** -+// Function declaration -+// **************************************************************************** -+unsigned char *gtpfw; -+static int vtl_ts_config(struct ts_info *ts) -+{ -+ struct device *dev = &ts->driver->client->dev; -+ //struct ts_config_info *ts_config_info; -+ int err; -+ struct device_node *np = dev->of_node; -+ enum of_gpio_flags rst_flags; -+ unsigned long irq_flags; -+ int val; ++ ++ ++#define TS_THREAD_PRIO 90 ++static DECLARE_WAIT_QUEUE_HEAD(waiter); ++//static struct task_struct *ts_thread = NULL; ++static unsigned char thread_syn_flag =0; ++ ++ ++// **************************************************************************** ++// Globel or static variables ++// **************************************************************************** ++static struct ts_driver g_driver; ++static int vtl_first_init_flag = 1; ++struct ts_info g_ts = { ++ .driver = &g_driver, ++ .debug = DEBUG_ENABLE, ++}; ++struct ts_info *pg_ts = &g_ts; ++ ++static struct i2c_device_id vtl_ts_id[] = { ++ { DRIVER_NAME, 0 }, ++ { } ++}; ++MODULE_DEVICE_TABLE(i2c,vtl_ts_id); ++ ++ ++/* ++static struct i2c_board_info i2c_info[] = { ++ { ++ I2C_BOARD_INFO(DRIVER_NAME, 0x01), ++ .platform_data = NULL, ++ }, ++}; ++*/ ++ ++ ++// **************************************************************************** ++// Function declaration ++// **************************************************************************** ++unsigned char *gtpfw; ++static int vtl_ts_config(struct ts_info *ts) ++{ ++ struct device *dev = &ts->driver->client->dev; ++ //struct ts_config_info *ts_config_info; ++ int err; ++ struct device_node *np = dev->of_node; ++ enum of_gpio_flags rst_flags; ++ unsigned long irq_flags; ++ int val; + gtpfw = tp_fw; -+ -+ -+ DEBUG(); -+ /* ts config */ -+ ts->config_info.touch_point_number = TOUCH_POINT_NUM; -+ if(dev->platform_data !=NULL) -+ { -+ return -1; -+ } -+ else -+ { -+ -+ if (of_property_read_u32(np, "screen_max_x", &val)) { -+ dev_err(&ts->driver->client->dev, "no screen_max_x defined\n"); -+ return -EINVAL; -+ } -+ ts->config_info.screen_max_x = val; -+ -+ if (of_property_read_u32(np, "screen_max_y", &val)) { -+ dev_err(&ts->driver->client->dev, "no screen_max_y defined\n"); -+ return -EINVAL; -+ } -+ ts->config_info.screen_max_y = val; -+ -+ if (of_property_read_u32(np, "xy_swap", &val)) { -+ val = 0; -+ } -+ ts->config_info.xy_swap = val; -+ -+ if (of_property_read_u32(np, "x_reverse", &val)) { -+ val = 0; -+ } -+ ts->config_info.x_reverse = val; -+ -+ if (of_property_read_u32(np, "y_reverse", &val)) { -+ val = 0; -+ } -+ ts->config_info.y_reverse = val; -+ -+ if (of_property_read_u32(np, "x_mul", &val)) { -+ val = 1; -+ } -+ ts->config_info.x_mul = val; -+ -+ if (of_property_read_u32(np, "y_mul", &val)) { -+ val = 1; -+ } -+ ts->config_info.y_mul = val; -+ -+ -+ if (of_property_read_u32(np, "bin_ver", &val)) { -+ val = 0; -+ } -+ ts->config_info.bin_ver = val; -+ printk("--->>> vtl_ts : xy_swap %d, x_reverse %d, y_reverse %d, x_mul %d, y_mul %d, bin_ver %d\n", -+ ts->config_info.xy_swap, -+ ts->config_info.x_reverse, ts->config_info.y_reverse, -+ ts->config_info.x_mul, ts->config_info.y_mul, -+ ts->config_info.bin_ver); -+ printk("the screen_x is %d , screen_y is %d \n",ts->config_info.screen_max_x,ts->config_info.screen_max_y); -+ -+ ts->config_info.irq_gpio_number = of_get_named_gpio_flags(np, "irq_gpio_number", 0, (enum of_gpio_flags *)&irq_flags); -+ ts->config_info.rst_gpio_number = of_get_named_gpio_flags(np, "rst_gpio_number", 0, &rst_flags); -+ -+ } -+ -+ ts->config_info.irq_number = gpio_to_irq(ts->config_info.irq_gpio_number);/* IRQ config*/ -+ -+ err = gpio_request(ts->config_info.rst_gpio_number, "vtl_ts_rst"); -+ if ( err ) { -+ return -EIO; -+ } -+ gpio_direction_output(ts->config_info.rst_gpio_number, 1); -+ //gpio_set_value(ts->config_info.rst_gpio_number, 1); -+ -+ return 0; -+} -+ -+ -+struct ts_info * vtl_ts_get_object(void) -+{ -+ DEBUG(); -+ -+ return pg_ts; -+} -+#if 0 -+static void vtl_ts_free_gpio(void) -+{ -+ struct ts_info *ts; -+ ts =pg_ts; -+ DEBUG(); -+ -+ gpio_free(ts->config_info.rst_gpio_number); -+} -+#endif -+ -+void vtl_ts_hw_reset(void) -+{ -+ struct ts_info *ts; -+ ts =pg_ts; -+ DEBUG(); -+ -+ //gpio_set_value(ts->config_info.rst_gpio_number, 1); -+ //msleep(10); -+ gpio_set_value(ts->config_info.rst_gpio_number, 0); -+ msleep(50); -+ gpio_set_value(ts->config_info.rst_gpio_number, 1); -+ //msleep(250); -+ msleep(5); -+ chip_solfware_reset(ts->driver->client);//20140306 -+} -+ -+static void vtl_ts_wakeup(void) -+{ -+ struct ts_info *ts; -+ ts =pg_ts; -+ DEBUG(); -+ -+ gpio_set_value(ts->config_info.rst_gpio_number, 0); -+ //msleep(50); -+ msleep(20); -+ gpio_set_value(ts->config_info.rst_gpio_number, 1); -+ msleep(5); -+ chip_solfware_reset(ts->driver->client);//20140306 -+} -+ -+static irqreturn_t vtl_ts_irq(int irq, void *dev) -+{ -+ struct ts_info *ts; -+ ts =pg_ts; -+ -+ DEBUG(); -+ -+ disable_irq_nosync(ts->config_info.irq_number);// Disable ts interrupt -+ thread_syn_flag=1; -+ wake_up_interruptible(&waiter); -+ -+ return IRQ_HANDLED; -+} -+ -+ -+static int vtl_ts_read_xy_data(struct ts_info *ts) -+{ -+ struct i2c_msg msgs; -+ int ret; -+ -+ DEBUG(); -+ -+ msgs.addr = ts->driver->client->addr; -+ msgs.flags = 0x01; // 0x00: write 0x01:read -+ msgs.len = sizeof(ts->xy_data.buf); -+ msgs.buf = ts->xy_data.buf; ++ ++ ++ DEBUG(); ++ /* ts config */ ++ ts->config_info.touch_point_number = TOUCH_POINT_NUM; ++ if(dev->platform_data !=NULL) ++ { ++ return -1; ++ } ++ else ++ { ++ ++ if (of_property_read_u32(np, "screen_max_x", &val)) { ++ dev_err(&ts->driver->client->dev, "no screen_max_x defined\n"); ++ return -EINVAL; ++ } ++ ts->config_info.screen_max_x = val; ++ ++ if (of_property_read_u32(np, "screen_max_y", &val)) { ++ dev_err(&ts->driver->client->dev, "no screen_max_y defined\n"); ++ return -EINVAL; ++ } ++ ts->config_info.screen_max_y = val; ++ ++ if (of_property_read_u32(np, "xy_swap", &val)) { ++ val = 0; ++ } ++ ts->config_info.xy_swap = val; ++ ++ if (of_property_read_u32(np, "x_reverse", &val)) { ++ val = 0; ++ } ++ ts->config_info.x_reverse = val; ++ ++ if (of_property_read_u32(np, "y_reverse", &val)) { ++ val = 0; ++ } ++ ts->config_info.y_reverse = val; ++ ++ if (of_property_read_u32(np, "x_mul", &val)) { ++ val = 1; ++ } ++ ts->config_info.x_mul = val; ++ ++ if (of_property_read_u32(np, "y_mul", &val)) { ++ val = 1; ++ } ++ ts->config_info.y_mul = val; ++ ++ ++ if (of_property_read_u32(np, "bin_ver", &val)) { ++ val = 0; ++ } ++ ts->config_info.bin_ver = val; ++ printk("--->>> vtl_ts : xy_swap %d, x_reverse %d, y_reverse %d, x_mul %d, y_mul %d, bin_ver %d\n", ++ ts->config_info.xy_swap, ++ ts->config_info.x_reverse, ts->config_info.y_reverse, ++ ts->config_info.x_mul, ts->config_info.y_mul, ++ ts->config_info.bin_ver); ++ printk("the screen_x is %d , screen_y is %d \n",ts->config_info.screen_max_x,ts->config_info.screen_max_y); ++ ++ ts->config_info.irq_gpio_number = of_get_named_gpio_flags(np, "irq_gpio_number", 0, (enum of_gpio_flags *)&irq_flags); ++ ts->config_info.rst_gpio_number = of_get_named_gpio_flags(np, "rst_gpio_number", 0, &rst_flags); ++ ++ } ++ ++ ts->config_info.irq_number = gpio_to_irq(ts->config_info.irq_gpio_number);/* IRQ config*/ ++ ++ err = gpio_request(ts->config_info.rst_gpio_number, "vtl_ts_rst"); ++ if ( err ) { ++ return -EIO; ++ } ++ gpio_direction_output(ts->config_info.rst_gpio_number, 1); ++ //gpio_set_value(ts->config_info.rst_gpio_number, 1); ++ ++ return 0; ++} ++ ++ ++struct ts_info * vtl_ts_get_object(void) ++{ ++ DEBUG(); ++ ++ return pg_ts; ++} ++#if 0 ++static void vtl_ts_free_gpio(void) ++{ ++ struct ts_info *ts; ++ ts =pg_ts; ++ DEBUG(); ++ ++ gpio_free(ts->config_info.rst_gpio_number); ++} ++#endif ++ ++void vtl_ts_hw_reset(void) ++{ ++ struct ts_info *ts; ++ ts =pg_ts; ++ DEBUG(); ++ ++ //gpio_set_value(ts->config_info.rst_gpio_number, 1); ++ //msleep(10); ++ gpio_set_value(ts->config_info.rst_gpio_number, 0); ++ msleep(50); ++ gpio_set_value(ts->config_info.rst_gpio_number, 1); ++ //msleep(250); ++ msleep(5); ++ chip_solfware_reset(ts->driver->client);//20140306 ++} ++ ++static void vtl_ts_wakeup(void) ++{ ++ struct ts_info *ts; ++ ts =pg_ts; ++ DEBUG(); ++ ++ gpio_set_value(ts->config_info.rst_gpio_number, 0); ++ //msleep(50); ++ msleep(20); ++ gpio_set_value(ts->config_info.rst_gpio_number, 1); ++ msleep(5); ++ chip_solfware_reset(ts->driver->client);//20140306 ++} ++ ++static irqreturn_t vtl_ts_irq(int irq, void *dev) ++{ ++ struct ts_info *ts; ++ ts =pg_ts; ++ ++ DEBUG(); ++ ++ disable_irq_nosync(ts->config_info.irq_number);// Disable ts interrupt ++ thread_syn_flag=1; ++ wake_up_interruptible(&waiter); ++ ++ return IRQ_HANDLED; ++} ++ ++ ++static int vtl_ts_read_xy_data(struct ts_info *ts) ++{ ++ struct i2c_msg msgs; ++ int ret; ++ ++ DEBUG(); ++ ++ msgs.addr = ts->driver->client->addr; ++ msgs.flags = 0x01; // 0x00: write 0x01:read ++ msgs.len = sizeof(ts->xy_data.buf); ++ msgs.buf = ts->xy_data.buf; +// msgs.scl_rate = TS_I2C_SPEED; ///only for rockchip platform -+ ret = i2c_transfer( ts->driver->client->adapter, &msgs, 1); -+ if(ret != 1){ -+ printk("___%s:i2c read xy_data err___\n",__func__); -+ return -1; -+ } -+ return 0; -+#if 0 -+ ret = vtl_ts_i2c_read(client,client->addr,ts->xy_data.buf,sizeof(ts->xy_data.buf)); -+ if(ret){ -+ printk("___%s:i2c read err___\n",__func__); -+ return -1; -+ } -+ return 0; -+#endif -+} -+ -+static void vtl_ts_report_xy_coord(struct ts_info *ts) -+{ -+ int id; -+ int sync; -+ int x, y; -+ unsigned int press; -+ unsigned char touch_point_number; -+ static unsigned int release = 0; -+ struct input_dev *input_dev; -+ union ts_xy_data *xy_data; -+ -+ DEBUG(); -+ -+ xy_data = &ts->xy_data; -+ input_dev = ts->driver->input_dev; -+ touch_point_number = ts->config_info.touch_point_number; -+ -+ -+ -+ /* report points */ -+ sync = 0; press = 0; -+ for ( id = 0; id point[id].xhi != 0xFF) && (xy_data->point[id].yhi != 0xFF) && -+ ( (xy_data->point[id].status == 1) || (xy_data->point[id].status == 2))) -+ { -+ -+/* -+ printk("--->>> vtl_ts report: xy_swap %d, x_reverse %d, y_reverse %d, x_mul %d, y_mul %d, bin_ver %d\n", -+ ts->config_info.xy_swap, -+ ts->config_info.x_reverse, ts->config_info.y_reverse, -+ ts->config_info.x_mul, ts->config_info.y_mul, -+ ts->config_info.bin_ver); -+*/ -+ -+ if (ts->config_info.xy_swap == 1) { -+ x = (xy_data->point[id].yhi<<4)|(xy_data->point[id].ylo&0xF); -+ y = (xy_data->point[id].xhi<<4)|(xy_data->point[id].xlo&0xF); -+ } else { -+ x = (xy_data->point[id].xhi<<4)|(xy_data->point[id].xlo&0xF); -+ y = (xy_data->point[id].yhi<<4)|(xy_data->point[id].ylo&0xF); -+ } -+ if (ts->config_info.x_reverse) -+ x = ts->config_info.screen_max_x - x; -+ if (ts->config_info.y_reverse) -+ y = ts->config_info.screen_max_y - y; -+ -+ x = ts->config_info.x_mul*x; -+ y = ts->config_info.x_mul*y; -+ -+ //#if(DEBUG_ENABLE) -+ //if((ts->debug)||(DEBUG_ENABLE)){ -+ if(ts->debug){ -+ printk("id = %d,status = %d,X = %d,Y = %d\n",xy_data->point[id].id,xy_data->point[id].status,x,y); -+ //XY_DEBUG(xy_data->point[id].id,xy_data->point[id].status,x,y); -+ } -+ //#endif -+ input_mt_slot(input_dev, xy_data->point[id].id - 1); -+ input_report_abs(input_dev, ABS_MT_TRACKING_ID, xy_data->point[id].id-1); -+ //input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, true); -+ input_report_abs(input_dev, ABS_MT_POSITION_X, x); -+ input_report_abs(input_dev, ABS_MT_POSITION_Y, y); -+ input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, 1); -+ input_report_abs(input_dev, ABS_MT_WIDTH_MAJOR, 1); -+ -+ press |= 0x01 << (xy_data->point[id].id - 1); -+ sync = 1; -+ -+ } -+ -+ } -+ release &= (release ^ press);//release point flag -+ -+ for ( id = 0; id < touch_point_number; id++ ) //up -+ { -+ if ( release & (0x01<config_info.ctp_used) -+ { -+ vtl_first_init_flag = 0; -+ disable_irq(ts->config_info.irq_number); -+ chip_enter_sleep_mode(); -+ -+ for(i=0;iconfig_info.touch_point_number;i++) -+ { -+ input_mt_slot(ts->driver->input_dev,i); -+ input_report_abs(ts->driver->input_dev, ABS_MT_TRACKING_ID, -1); -+ //input_mt_report_slot_state(ts->driver->input_dev, MT_TOOL_FINGER, false); -+ } -+ input_sync(ts->driver->input_dev); -+ } -+ return 0; -+} -+ -+int vtl_ts_resume(struct i2c_client *client) -+{ -+ struct ts_info *ts; -+ unsigned char i; -+ ts =pg_ts; -+ -+ DEBUG(); -+ if(ts->config_info.ctp_used) -+ { -+ /* Hardware reset */ -+ //vtl_ts_hw_reset(); -+ vtl_ts_wakeup(); -+ for(i=0;iconfig_info.touch_point_number;i++) -+ { -+ input_mt_slot(ts->driver->input_dev,i); -+ input_report_abs(ts->driver->input_dev, ABS_MT_TRACKING_ID, -1); -+ //input_mt_report_slot_state(ts->driver->input_dev, MT_TOOL_FINGER, false); -+ } -+ input_sync(ts->driver->input_dev); -+ if(vtl_first_init_flag==0) -+ enable_irq(ts->config_info.irq_number); -+ } -+ return 0; -+} -+ -+static int vtl_ts_early_suspend(struct tp_device *tp) -+{ -+ struct ts_info *ts; -+ ts =pg_ts; -+ -+ DEBUG(); -+ -+ vtl_ts_suspend(ts->driver->client, PMSG_SUSPEND); -+ -+ return 0; -+} -+ -+static int vtl_ts_early_resume(struct tp_device *tp) -+{ -+ struct ts_info *ts; -+ ts =pg_ts; -+ DEBUG(); -+ -+ vtl_ts_resume(ts->driver->client); -+ -+ return 0; -+} -+ -+int vtl_ts_remove(struct i2c_client *client) -+{ -+ struct ts_info *ts; -+ ts =pg_ts; -+ -+ DEBUG(); -+ -+ free_irq(ts->config_info.irq_number, ts); -+ gpio_free(ts->config_info.rst_gpio_number); -+ //vtl_ts_free_gpio(); -+ -+ //#ifdef CONFIG_HAS_EARLYSUSPEND -+ //unregister_early_suspend(&ts->driver->early_suspend); -+ tp_unregister_fb(&ts->tp); -+ //#endif -+ if(ts->driver->input_dev != NULL) -+ { ++ ret = i2c_transfer( ts->driver->client->adapter, &msgs, 1); ++ if(ret != 1){ ++ printk("___%s:i2c read xy_data err___\n",__func__); ++ return -1; ++ } ++ return 0; ++#if 0 ++ ret = vtl_ts_i2c_read(client,client->addr,ts->xy_data.buf,sizeof(ts->xy_data.buf)); ++ if(ret){ ++ printk("___%s:i2c read err___\n",__func__); ++ return -1; ++ } ++ return 0; ++#endif ++} ++ ++static void vtl_ts_report_xy_coord(struct ts_info *ts) ++{ ++ int id; ++ int sync; ++ int x, y; ++ unsigned int press; ++ unsigned char touch_point_number; ++ static unsigned int release = 0; ++ struct input_dev *input_dev; ++ union ts_xy_data *xy_data; ++ ++ DEBUG(); ++ ++ xy_data = &ts->xy_data; ++ input_dev = ts->driver->input_dev; ++ touch_point_number = ts->config_info.touch_point_number; ++ ++ ++ ++ /* report points */ ++ sync = 0; press = 0; ++ for ( id = 0; id point[id].xhi != 0xFF) && (xy_data->point[id].yhi != 0xFF) && ++ ( (xy_data->point[id].status == 1) || (xy_data->point[id].status == 2))) ++ { ++ ++/* ++ printk("--->>> vtl_ts report: xy_swap %d, x_reverse %d, y_reverse %d, x_mul %d, y_mul %d, bin_ver %d\n", ++ ts->config_info.xy_swap, ++ ts->config_info.x_reverse, ts->config_info.y_reverse, ++ ts->config_info.x_mul, ts->config_info.y_mul, ++ ts->config_info.bin_ver); ++*/ ++ ++ if (ts->config_info.xy_swap == 1) { ++ x = (xy_data->point[id].yhi<<4)|(xy_data->point[id].ylo&0xF); ++ y = (xy_data->point[id].xhi<<4)|(xy_data->point[id].xlo&0xF); ++ } else { ++ x = (xy_data->point[id].xhi<<4)|(xy_data->point[id].xlo&0xF); ++ y = (xy_data->point[id].yhi<<4)|(xy_data->point[id].ylo&0xF); ++ } ++ if (ts->config_info.x_reverse) ++ x = ts->config_info.screen_max_x - x; ++ if (ts->config_info.y_reverse) ++ y = ts->config_info.screen_max_y - y; ++ ++ x = ts->config_info.x_mul*x; ++ y = ts->config_info.x_mul*y; ++ ++ //#if(DEBUG_ENABLE) ++ //if((ts->debug)||(DEBUG_ENABLE)){ ++ if(ts->debug){ ++ printk("id = %d,status = %d,X = %d,Y = %d\n",xy_data->point[id].id,xy_data->point[id].status,x,y); ++ //XY_DEBUG(xy_data->point[id].id,xy_data->point[id].status,x,y); ++ } ++ //#endif ++ input_mt_slot(input_dev, xy_data->point[id].id - 1); ++ input_report_abs(input_dev, ABS_MT_TRACKING_ID, xy_data->point[id].id-1); ++ //input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, true); ++ input_report_abs(input_dev, ABS_MT_POSITION_X, x); ++ input_report_abs(input_dev, ABS_MT_POSITION_Y, y); ++ input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, 1); ++ input_report_abs(input_dev, ABS_MT_WIDTH_MAJOR, 1); ++ ++ press |= 0x01 << (xy_data->point[id].id - 1); ++ sync = 1; ++ ++ } ++ ++ } ++ release &= (release ^ press);//release point flag ++ ++ for ( id = 0; id < touch_point_number; id++ ) //up ++ { ++ if ( release & (0x01<config_info.ctp_used) ++ { ++ vtl_first_init_flag = 0; ++ disable_irq(ts->config_info.irq_number); ++ chip_enter_sleep_mode(); ++ ++ for(i=0;iconfig_info.touch_point_number;i++) ++ { ++ input_mt_slot(ts->driver->input_dev,i); ++ input_report_abs(ts->driver->input_dev, ABS_MT_TRACKING_ID, -1); ++ //input_mt_report_slot_state(ts->driver->input_dev, MT_TOOL_FINGER, false); ++ } ++ input_sync(ts->driver->input_dev); ++ } ++ return 0; ++} ++ ++int vtl_ts_resume(struct i2c_client *client) ++{ ++ struct ts_info *ts; ++ unsigned char i; ++ ts =pg_ts; ++ ++ DEBUG(); ++ if(ts->config_info.ctp_used) ++ { ++ /* Hardware reset */ ++ //vtl_ts_hw_reset(); ++ vtl_ts_wakeup(); ++ for(i=0;iconfig_info.touch_point_number;i++) ++ { ++ input_mt_slot(ts->driver->input_dev,i); ++ input_report_abs(ts->driver->input_dev, ABS_MT_TRACKING_ID, -1); ++ //input_mt_report_slot_state(ts->driver->input_dev, MT_TOOL_FINGER, false); ++ } ++ input_sync(ts->driver->input_dev); ++ if(vtl_first_init_flag==0) ++ enable_irq(ts->config_info.irq_number); ++ } ++ return 0; ++} ++ ++static int vtl_ts_early_suspend(struct tp_device *tp) ++{ ++ struct ts_info *ts; ++ ts =pg_ts; ++ ++ DEBUG(); ++ ++ vtl_ts_suspend(ts->driver->client, PMSG_SUSPEND); ++ ++ return 0; ++} ++ ++static int vtl_ts_early_resume(struct tp_device *tp) ++{ ++ struct ts_info *ts; ++ ts =pg_ts; ++ DEBUG(); ++ ++ vtl_ts_resume(ts->driver->client); ++ ++ return 0; ++} ++ ++int vtl_ts_remove(struct i2c_client *client) ++{ ++ struct ts_info *ts; ++ ts =pg_ts; ++ ++ DEBUG(); ++ ++ free_irq(ts->config_info.irq_number, ts); ++ gpio_free(ts->config_info.rst_gpio_number); ++ //vtl_ts_free_gpio(); ++ ++ //#ifdef CONFIG_HAS_EARLYSUSPEND ++ //unregister_early_suspend(&ts->driver->early_suspend); ++ tp_unregister_fb(&ts->tp); ++ //#endif ++ if(ts->driver->input_dev != NULL) ++ { + input_unregister_device(ts->driver->input_dev); -+ } -+ -+ if ( ts->driver->proc_entry != NULL ){ -+ remove_proc_entry(DRIVER_NAME, NULL); -+ } -+ -+ if(ts->driver->ts_thread != NULL) -+ { -+ printk("___kthread stop start___\n"); -+ thread_syn_flag=1; -+ wake_up_interruptible(&waiter); -+ kthread_stop(ts->driver->ts_thread); -+ ts->driver->ts_thread = NULL; -+ printk("___kthread stop end___\n"); -+ } -+ return 0; -+} -+ -+static int vtl_ts_init_input_dev(struct ts_info *ts) -+{ -+ struct input_dev *input_dev; -+ struct device *dev; -+ int err; -+ -+ DEBUG(); -+ -+ -+ dev = &ts->driver->client->dev; -+ -+ /* allocate input device */ -+ ts->driver->input_dev = input_allocate_device(); -+ if ( ts->driver->input_dev == NULL ) { -+ dev_err(dev, "Unable to allocate input device for device %s.\n", DRIVER_NAME); -+ return -1; -+ } -+ -+ input_dev = ts->driver->input_dev; -+ -+ input_dev->name = DRIVER_NAME; -+ input_dev->id.bustype = BUS_I2C; -+ input_dev->id.vendor = 0xaaaa; -+ input_dev->id.product = 0x5555; -+ input_dev->id.version = 0x0001; -+ -+ /* config input device */ -+ __set_bit(EV_SYN, input_dev->evbit); -+ __set_bit(EV_KEY, input_dev->evbit); -+ __set_bit(EV_ABS, input_dev->evbit); -+ -+ -+ //set_bit(BTN_TOUCH, input_dev->keybit);//20130923 -+ //set_bit(ABS_MT_POSITION_X, input_dev->absbit);//20130923 -+ //set_bit(ABS_MT_POSITION_Y, input_dev->absbit);//20130923 -+ -+ __set_bit(INPUT_PROP_DIRECT, input_dev->propbit); -+ -+ input_mt_init_slots(input_dev, TOUCH_POINT_NUM,0); -+ input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, ts->config_info.screen_max_x, 0, 0); -+ input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, ts->config_info.screen_max_y, 0, 0); -+ input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0,ts->config_info.touch_point_number, 0, 0); -+ input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); -+ input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); -+ -+ -+ /* register input device */ -+ err = input_register_device(input_dev); -+ if ( err ) { -+ input_free_device(ts->driver->input_dev); -+ ts->driver->input_dev = NULL; -+ dev_err(dev, "Unable to register input device for device %s.\n", DRIVER_NAME); -+ return -1; -+ } -+ -+ return 0; -+} -+ -+ -+static int vtl_ts_handler(void *data) -+{ -+ int ret; -+ struct device *dev; -+ struct ts_info *ts; -+ //struct sched_param param = { .sched_priority = TS_THREAD_PRIO}; -+ DEBUG(); -+ //sched_setscheduler(current, SCHED_RR, ¶m); -+ -+ ts = (struct ts_info *)data; -+ dev = &ts->driver->client->dev; -+ -+ -+ /* Request platform resources (gpio/interrupt pins) */ -+ ret = vtl_ts_config(ts); -+ if(ret){ -+ -+ dev_err(dev, "VTL touch screen config Failed.\n"); -+ goto ERR_TS_CONFIG; -+ } -+ -+ vtl_ts_hw_reset(); -+ -+ -+ ret = chip_init(); -+ if(ret){ -+ -+ dev_err(dev, "vtl ts chip init failed.\n"); -+ goto ERR_CHIP_INIT; -+ } -+ -+ /*init input dev*/ -+ ret = vtl_ts_init_input_dev(ts); -+ if(ret){ -+ -+ dev_err(dev, "init input dev failed.\n"); -+ goto ERR_INIT_INPUT; -+ } -+ -+ /* Create Proc Entry File */ -+ #if 0 -+ ts->driver->proc_entry = create_proc_entry(DRIVER_NAME, 0666/*S_IFREG | S_IRUGO | S_IWUSR*/, NULL); -+ if ( ts->driver->proc_entry == NULL ) { -+ dev_err(dev, "Failed creating proc dir entry file.\n"); -+ goto ERR_PROC_ENTRY; -+ } else{ -+ ts->driver->proc_entry->proc_fops = &apk_fops; -+ } -+ #endif -+ /* register early suspend */ -+//#ifdef CONFIG_HAS_EARLYSUSPEND -+ //ts->driver->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; -+ //ts->driver->early_suspend.suspend = vtl_ts_early_suspend; -+ //ts->driver->early_suspend.resume = vtl_ts_early_resume; -+ //register_early_suspend(&ts->driver->early_suspend); -+ -+ -+//#endif -+ -+ /* Init irq */ -+ ret = request_irq(ts->config_info.irq_number, vtl_ts_irq, IRQF_TRIGGER_FALLING, DRIVER_NAME, ts); -+ if ( ret ) { -+ dev_err(dev, "Unable to request irq for device %s.\n", DRIVER_NAME); -+ goto ERR_IRQ_REQ; -+ } -+ //disable_irq(pg_ts->config_info.irq_number); -+ ts->config_info.ctp_used =1; -+ -+ ts->tp.tp_resume = vtl_ts_early_resume; -+ ts->tp.tp_suspend = vtl_ts_early_suspend; -+ tp_register_fb(&ts->tp); -+ -+ while (!kthread_should_stop())//while(1) -+ { -+ //set_current_state(TASK_INTERRUPTIBLE); -+ wait_event_interruptible(waiter, thread_syn_flag); -+ thread_syn_flag = 0; -+ //set_current_state(TASK_RUNNING); -+ //printk("__state = %x_%x_\n",current->state,ts->driver->ts_thread->state); -+ ret = vtl_ts_read_xy_data(ts); -+ -+ if(!ret){ -+ vtl_ts_report_xy_coord(ts); -+ } -+ else -+ { -+ printk("____read xy_data error___\n"); -+ } -+ // Enable ts interrupt -+ enable_irq(pg_ts->config_info.irq_number); -+ } -+ -+ printk("vtl_ts_Kthread exit,%s(%d)\n",__func__,__LINE__); -+ return 0; -+ -+ -+ -+ -+ERR_IRQ_REQ: -+ //#ifdef CONFIG_HAS_EARLYSUSPEND -+ //unregister_early_suspend(&ts->driver->early_suspend); -+ //#endif -+ tp_unregister_fb(&ts->tp); -+ if ( ts->driver->proc_entry ){ -+ remove_proc_entry(DRIVER_NAME, NULL); -+ ts->driver->proc_entry = NULL; -+ } -+ -+/* ERR_PROC_ENTRY: */ -+ if(ts->driver->input_dev){ ++ } ++ ++ if ( ts->driver->proc_entry != NULL ){ ++ remove_proc_entry(DRIVER_NAME, NULL); ++ } ++ ++ if(ts->driver->ts_thread != NULL) ++ { ++ printk("___kthread stop start___\n"); ++ thread_syn_flag=1; ++ wake_up_interruptible(&waiter); ++ kthread_stop(ts->driver->ts_thread); ++ ts->driver->ts_thread = NULL; ++ printk("___kthread stop end___\n"); ++ } ++ return 0; ++} ++ ++static int vtl_ts_init_input_dev(struct ts_info *ts) ++{ ++ struct input_dev *input_dev; ++ struct device *dev; ++ int err; ++ ++ DEBUG(); ++ ++ ++ dev = &ts->driver->client->dev; ++ ++ /* allocate input device */ ++ ts->driver->input_dev = input_allocate_device(); ++ if ( ts->driver->input_dev == NULL ) { ++ dev_err(dev, "Unable to allocate input device for device %s.\n", DRIVER_NAME); ++ return -1; ++ } ++ ++ input_dev = ts->driver->input_dev; ++ ++ input_dev->name = DRIVER_NAME; ++ input_dev->id.bustype = BUS_I2C; ++ input_dev->id.vendor = 0xaaaa; ++ input_dev->id.product = 0x5555; ++ input_dev->id.version = 0x0001; ++ ++ /* config input device */ ++ __set_bit(EV_SYN, input_dev->evbit); ++ __set_bit(EV_KEY, input_dev->evbit); ++ __set_bit(EV_ABS, input_dev->evbit); ++ ++ ++ //set_bit(BTN_TOUCH, input_dev->keybit);//20130923 ++ //set_bit(ABS_MT_POSITION_X, input_dev->absbit);//20130923 ++ //set_bit(ABS_MT_POSITION_Y, input_dev->absbit);//20130923 ++ ++ __set_bit(INPUT_PROP_DIRECT, input_dev->propbit); ++ ++ input_mt_init_slots(input_dev, TOUCH_POINT_NUM,0); ++ input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, ts->config_info.screen_max_x, 0, 0); ++ input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, ts->config_info.screen_max_y, 0, 0); ++ input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0,ts->config_info.touch_point_number, 0, 0); ++ input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); ++ input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); ++ ++ ++ /* register input device */ ++ err = input_register_device(input_dev); ++ if ( err ) { ++ input_free_device(ts->driver->input_dev); ++ ts->driver->input_dev = NULL; ++ dev_err(dev, "Unable to register input device for device %s.\n", DRIVER_NAME); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ ++static int vtl_ts_handler(void *data) ++{ ++ int ret; ++ struct device *dev; ++ struct ts_info *ts; ++ //struct sched_param param = { .sched_priority = TS_THREAD_PRIO}; ++ DEBUG(); ++ //sched_setscheduler(current, SCHED_RR, ¶m); ++ ++ ts = (struct ts_info *)data; ++ dev = &ts->driver->client->dev; ++ ++ ++ /* Request platform resources (gpio/interrupt pins) */ ++ ret = vtl_ts_config(ts); ++ if(ret){ ++ ++ dev_err(dev, "VTL touch screen config Failed.\n"); ++ goto ERR_TS_CONFIG; ++ } ++ ++ vtl_ts_hw_reset(); ++ ++ ++ ret = chip_init(); ++ if(ret){ ++ ++ dev_err(dev, "vtl ts chip init failed.\n"); ++ goto ERR_CHIP_INIT; ++ } ++ ++ /*init input dev*/ ++ ret = vtl_ts_init_input_dev(ts); ++ if(ret){ ++ ++ dev_err(dev, "init input dev failed.\n"); ++ goto ERR_INIT_INPUT; ++ } ++ ++ /* Create Proc Entry File */ ++ #if 0 ++ ts->driver->proc_entry = create_proc_entry(DRIVER_NAME, 0666/*S_IFREG | S_IRUGO | S_IWUSR*/, NULL); ++ if ( ts->driver->proc_entry == NULL ) { ++ dev_err(dev, "Failed creating proc dir entry file.\n"); ++ goto ERR_PROC_ENTRY; ++ } else{ ++ ts->driver->proc_entry->proc_fops = &apk_fops; ++ } ++ #endif ++ /* register early suspend */ ++//#ifdef CONFIG_HAS_EARLYSUSPEND ++ //ts->driver->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; ++ //ts->driver->early_suspend.suspend = vtl_ts_early_suspend; ++ //ts->driver->early_suspend.resume = vtl_ts_early_resume; ++ //register_early_suspend(&ts->driver->early_suspend); ++ ++ ++//#endif ++ ++ /* Init irq */ ++ ret = request_irq(ts->config_info.irq_number, vtl_ts_irq, IRQF_TRIGGER_FALLING, DRIVER_NAME, ts); ++ if ( ret ) { ++ dev_err(dev, "Unable to request irq for device %s.\n", DRIVER_NAME); ++ goto ERR_IRQ_REQ; ++ } ++ //disable_irq(pg_ts->config_info.irq_number); ++ ts->config_info.ctp_used =1; ++ ++ ts->tp.tp_resume = vtl_ts_early_resume; ++ ts->tp.tp_suspend = vtl_ts_early_suspend; ++ tp_register_fb(&ts->tp); ++ ++ while (!kthread_should_stop())//while(1) ++ { ++ //set_current_state(TASK_INTERRUPTIBLE); ++ wait_event_interruptible(waiter, thread_syn_flag); ++ thread_syn_flag = 0; ++ //set_current_state(TASK_RUNNING); ++ //printk("__state = %x_%x_\n",current->state,ts->driver->ts_thread->state); ++ ret = vtl_ts_read_xy_data(ts); ++ ++ if(!ret){ ++ vtl_ts_report_xy_coord(ts); ++ } ++ else ++ { ++ printk("____read xy_data error___\n"); ++ } ++ // Enable ts interrupt ++ enable_irq(pg_ts->config_info.irq_number); ++ } ++ ++ printk("vtl_ts_Kthread exit,%s(%d)\n",__func__,__LINE__); ++ return 0; ++ ++ ++ ++ ++ERR_IRQ_REQ: ++ //#ifdef CONFIG_HAS_EARLYSUSPEND ++ //unregister_early_suspend(&ts->driver->early_suspend); ++ //#endif ++ tp_unregister_fb(&ts->tp); ++ if ( ts->driver->proc_entry ){ ++ remove_proc_entry(DRIVER_NAME, NULL); ++ ts->driver->proc_entry = NULL; ++ } ++ ++/* ERR_PROC_ENTRY: */ ++ if(ts->driver->input_dev){ + input_unregister_device(ts->driver->input_dev); -+ ts->driver->input_dev = NULL; -+ } -+ERR_INIT_INPUT: -+ERR_CHIP_INIT: -+ gpio_free(ts->config_info.rst_gpio_number); -+ERR_TS_CONFIG: -+ ts->config_info.ctp_used =0; -+ printk("vtl_ts_Kthread exit,%s(%d)\n",__func__,__LINE__); -+ //do_exit(0); -+ return 0; -+} -+ -+ -+ -+int vtl_ts_probe(struct i2c_client *client, const struct i2c_device_id *id) -+{ -+ int err = -1; -+ struct ts_info *ts; -+ struct device *dev; -+ -+ DEBUG(); -+ -+ ts = pg_ts; -+ ts->driver->client = client; -+ dev = &ts->driver->client->dev; -+ -+ /* Check I2C Functionality */ -+ err = i2c_check_functionality(client->adapter, I2C_FUNC_I2C); -+ if ( !err ) { -+ dev_err(dev, "Check I2C Functionality Failed.\n"); -+ return ENODEV; -+ } -+ -+ -+ //ts->driver->ts_thread = kthread_run(vtl_ts_handler, NULL, DRIVER_NAME); -+ ts->driver->ts_thread = kthread_run(vtl_ts_handler, ts, DRIVER_NAME); -+ if (IS_ERR(ts->driver->ts_thread)) { -+ err = PTR_ERR(ts->driver->ts_thread); -+ ts->driver->ts_thread = NULL; -+ dev_err(dev, "failed to create kernel thread: %d\n", err); -+ return -1; -+ //goto ERR_CREATE_TS_THREAD; -+ } -+ -+ printk("___%s() end____ \n", __func__); -+ -+ return 0; -+ -+ -+ -+} -+ -+static struct of_device_id vtl_ts_dt_ids[] = { -+ { .compatible = "ct,vtl_ts" }, -+ { } -+}; -+ -+struct i2c_driver vtl_ts_driver = { -+ -+ .driver = { -+ .owner = THIS_MODULE, -+ .name = DRIVER_NAME, -+ .of_match_table = of_match_ptr(vtl_ts_dt_ids), -+ }, -+ .id_table = vtl_ts_id, -+ .probe = vtl_ts_probe, -+//#ifndef CONFIG_HAS_EARLYSUSPEND -+ //.suspend = vtl_ts_suspend, -+ //.resume = vtl_ts_resume, -+//#endif -+ .remove = vtl_ts_remove, -+}; -+ -+ -+ -+int __init vtl_ts_init(void) -+{ -+ DEBUG(); -+ return i2c_add_driver(&vtl_ts_driver); -+} -+ -+void __exit vtl_ts_exit(void) -+{ -+ DEBUG(); -+ i2c_del_driver(&vtl_ts_driver); -+} -+ -+module_init(vtl_ts_init); -+module_exit(vtl_ts_exit); -+ -+MODULE_AUTHOR("yangdechu@vtl.com.cn"); -+MODULE_DESCRIPTION("VTL touchscreen driver for rockchip,V1.0"); -+MODULE_LICENSE("GPL"); -+ -+ ++ ts->driver->input_dev = NULL; ++ } ++ERR_INIT_INPUT: ++ERR_CHIP_INIT: ++ gpio_free(ts->config_info.rst_gpio_number); ++ERR_TS_CONFIG: ++ ts->config_info.ctp_used =0; ++ printk("vtl_ts_Kthread exit,%s(%d)\n",__func__,__LINE__); ++ //do_exit(0); ++ return 0; ++} ++ ++ ++ ++int vtl_ts_probe(struct i2c_client *client, const struct i2c_device_id *id) ++{ ++ int err = -1; ++ struct ts_info *ts; ++ struct device *dev; ++ ++ DEBUG(); ++ ++ ts = pg_ts; ++ ts->driver->client = client; ++ dev = &ts->driver->client->dev; ++ ++ /* Check I2C Functionality */ ++ err = i2c_check_functionality(client->adapter, I2C_FUNC_I2C); ++ if ( !err ) { ++ dev_err(dev, "Check I2C Functionality Failed.\n"); ++ return ENODEV; ++ } ++ ++ ++ //ts->driver->ts_thread = kthread_run(vtl_ts_handler, NULL, DRIVER_NAME); ++ ts->driver->ts_thread = kthread_run(vtl_ts_handler, ts, DRIVER_NAME); ++ if (IS_ERR(ts->driver->ts_thread)) { ++ err = PTR_ERR(ts->driver->ts_thread); ++ ts->driver->ts_thread = NULL; ++ dev_err(dev, "failed to create kernel thread: %d\n", err); ++ return -1; ++ //goto ERR_CREATE_TS_THREAD; ++ } ++ ++ printk("___%s() end____ \n", __func__); ++ ++ return 0; ++ ++ ++ ++} ++ ++static struct of_device_id vtl_ts_dt_ids[] = { ++ { .compatible = "ct,vtl_ts" }, ++ { } ++}; ++ ++struct i2c_driver vtl_ts_driver = { ++ ++ .driver = { ++ .owner = THIS_MODULE, ++ .name = DRIVER_NAME, ++ .of_match_table = of_match_ptr(vtl_ts_dt_ids), ++ }, ++ .id_table = vtl_ts_id, ++ .probe = vtl_ts_probe, ++//#ifndef CONFIG_HAS_EARLYSUSPEND ++ //.suspend = vtl_ts_suspend, ++ //.resume = vtl_ts_resume, ++//#endif ++ .remove = vtl_ts_remove, ++}; ++ ++ ++ ++int __init vtl_ts_init(void) ++{ ++ DEBUG(); ++ return i2c_add_driver(&vtl_ts_driver); ++} ++ ++void __exit vtl_ts_exit(void) ++{ ++ DEBUG(); ++ i2c_del_driver(&vtl_ts_driver); ++} ++ ++module_init(vtl_ts_init); ++module_exit(vtl_ts_exit); ++ ++MODULE_AUTHOR("yangdechu@vtl.com.cn"); ++MODULE_DESCRIPTION("VTL touchscreen driver for rockchip,V1.0"); ++MODULE_LICENSE("GPL"); ++ ++ diff --git a/drivers/input/touchscreen/vtl_ts/vtl_ts.h b/drivers/input/touchscreen/vtl_ts/vtl_ts.h new file mode 100755 -index 000000000000..95e280688d74 +index 000000000..4184c345d --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/vtl_ts.h @@ -0,0 +1,193 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef _TS_CORE_H_ -+#define _TS_CORE_H_ -+ -+#include -+#ifdef CONFIG_HAS_EARLYSUSPEND -+#include -+#endif -+#include "../tp_suspend.h" -+ -+ -+/*vtl touch IC define*/ -+#define CT36X 0x01//(CT36X:ct362,ct363,ct365) -+#define CT360 0x02//(CT360:ct360) -+ -+/*xy data protocol*/ -+#define OLD_PROTOCOL 0x01 -+#define NEW_PROTOCOL 0x02 -+ -+ -+/***********************vtl ts driver config ******************************************/ -+ -+/*vtl chip ID*/ -+#define CHIP_ID CT36X//CT360// -+ -+#define XY_DATA_PROTOCOL NEW_PROTOCOL//OLD_PROTOCOL// -+ -+#define TS_I2C_SPEED 400000 //for rockchip -+/* -+#if(TB1_USE_F402) -+#define XY_SWAP_ENABLE 1 -+#else -+#define XY_SWAP_ENABLE 0 -+#endif -+ -+#define X_REVERSE_ENABLE 0 -+ -+#if(TB1_USE_F402) -+#define Y_REVERSE_ENABLE 0 -+#else -+#define Y_REVERSE_ENABLE 1 -+#endif -+*/ -+ -+#define CHIP_UPDATE_ENABLE 1 -+ -+#define DEBUG_ENABLE 0 -+ -+ -+/***********************vtl ts driver config end******************************************/ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+/*vtl ts driver name*/ -+#define DRIVER_NAME "vtl_ts" -+//#define DEBUG_ENABLE 1 -+#if(DEBUG_ENABLE) -+#define DEBUG() printk("___%s___\n",__func__); -+//#define XY_DEBUG(id,status,x,y) printk("id = %d,status = %d,X = %d,Y = %d\n",id,status,x,y); -+#else -+#define DEBUG() -+//#define XY_DEBUG(id,status,x,y) -+#endif -+ -+/*TOUCH_POINT_NUM define*/ -+#if(CHIP_ID == CT360) -+#define TOUCH_POINT_NUM 5 -+#elif(CHIP_ID == CT36X) -+#define TOUCH_POINT_NUM 10 -+#endif -+ -+/*priate define and declare*/ -+#if(CHIP_ID == CT360) -+struct xy_data { -+ #if(XY_DATA_PROTOCOL == OLD_PROTOCOL) -+ unsigned char status : 4; // Action information, 1: Down; 2: Move; 3: Up -+ unsigned char id : 4; // ID information, from 1 to CFG_MAX_POINT_NUM -+ #endif -+ unsigned char xhi; // X coordinate Hi -+ unsigned char yhi; // Y coordinate Hi -+ unsigned char ylo : 4; // Y coordinate Lo -+ unsigned char xlo : 4; // X coordinate Lo -+ #if(XY_DATA_PROTOCOL == NEW_PROTOCOL) -+ unsigned char status : 4; // Action information, 1: Down; 2: Move; 3: Up -+ unsigned char id : 4; // ID information, from 1 to CFG_MAX_POINT_NUM -+ #endif -+}; -+#else -+struct xy_data { -+ #if(XY_DATA_PROTOCOL == OLD_PROTOCOL) -+ unsigned char status : 3; // Action information, 1: Down; 2: Move; 3: Up -+ unsigned char id : 5; // ID information, from 1 to CFG_MAX_POINT_NUM -+ #endif -+ unsigned char xhi; // X coordinate Hi -+ unsigned char yhi; // Y coordinate Hi -+ unsigned char ylo : 4; // Y coordinate Lo -+ unsigned char xlo : 4; // X coordinate Lo -+ #if(XY_DATA_PROTOCOL == NEW_PROTOCOL) -+ unsigned char status : 3; // Action information, 1: Down; 2: Move; 3: Up -+ unsigned char id : 5; // ID information, from 1 to CFG_MAX_POINT_NUM -+ #endif -+ unsigned char area; // Touch area -+ unsigned char pressure; // Touch Pressure -+}; -+#endif -+ -+ -+union ts_xy_data { -+ struct xy_data point[TOUCH_POINT_NUM]; -+ unsigned char buf[TOUCH_POINT_NUM * sizeof(struct xy_data)]; -+}; -+ -+ -+struct ts_driver{ -+ -+ struct i2c_client *client; -+ -+ /* input devices */ -+ struct input_dev *input_dev; -+ -+ struct proc_dir_entry *proc_entry; -+ -+ struct task_struct *ts_thread; -+ -+ //#ifdef CONFIG_HAS_EARLYSUSPEND -+ //struct early_suspend early_suspend; -+ //#endif -+}; -+ -+struct ts_config_info{ -+ -+ unsigned int screen_max_x; -+ unsigned int screen_max_y; -+ unsigned int xy_swap; -+ unsigned int x_reverse; -+ unsigned int y_reverse; -+ unsigned int x_mul; -+ unsigned int y_mul; -+ unsigned int bin_ver; -+ unsigned int irq_gpio_number; -+ unsigned int irq_number; -+ unsigned int rst_gpio_number; -+ unsigned char touch_point_number; -+ unsigned char ctp_used; -+ //unsigned char i2c_bus_number; -+ //unsigned char revert_x_flag; -+ //unsigned char revert_y_flag; -+ //unsigned char exchange_x_y_flag; -+}; -+ -+struct ts_info{ -+ -+ struct ts_driver *driver; -+ struct ts_config_info config_info; -+ union ts_xy_data xy_data; -+ unsigned char debug; -+ struct tp_device tp; -+}; -+ -+ -+//extern struct ts_info *pg_ts; -+extern struct ts_info * vtl_ts_get_object(void); -+extern void vtl_ts_hw_reset(void); -+ -+#endif -+ ++#ifndef _TS_CORE_H_ ++#define _TS_CORE_H_ ++ ++#include ++#ifdef CONFIG_HAS_EARLYSUSPEND ++#include ++#endif ++#include "../tp_suspend.h" ++ ++ ++/*vtl touch IC define*/ ++#define CT36X 0x01//(CT36X:ct362,ct363,ct365) ++#define CT360 0x02//(CT360:ct360) ++ ++/*xy data protocol*/ ++#define OLD_PROTOCOL 0x01 ++#define NEW_PROTOCOL 0x02 ++ ++ ++/***********************vtl ts driver config ******************************************/ ++ ++/*vtl chip ID*/ ++#define CHIP_ID CT36X//CT360// ++ ++#define XY_DATA_PROTOCOL NEW_PROTOCOL//OLD_PROTOCOL// ++ ++#define TS_I2C_SPEED 400000 //for rockchip ++/* ++#if(TB1_USE_F402) ++#define XY_SWAP_ENABLE 1 ++#else ++#define XY_SWAP_ENABLE 0 ++#endif ++ ++#define X_REVERSE_ENABLE 0 ++ ++#if(TB1_USE_F402) ++#define Y_REVERSE_ENABLE 0 ++#else ++#define Y_REVERSE_ENABLE 1 ++#endif ++*/ ++ ++#define CHIP_UPDATE_ENABLE 1 ++ ++#define DEBUG_ENABLE 0 ++ ++ ++/***********************vtl ts driver config end******************************************/ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++/*vtl ts driver name*/ ++#define DRIVER_NAME "vtl_ts" ++//#define DEBUG_ENABLE 1 ++#if(DEBUG_ENABLE) ++#define DEBUG() printk("___%s___\n",__func__); ++//#define XY_DEBUG(id,status,x,y) printk("id = %d,status = %d,X = %d,Y = %d\n",id,status,x,y); ++#else ++#define DEBUG() ++//#define XY_DEBUG(id,status,x,y) ++#endif ++ ++/*TOUCH_POINT_NUM define*/ ++#if(CHIP_ID == CT360) ++#define TOUCH_POINT_NUM 5 ++#elif(CHIP_ID == CT36X) ++#define TOUCH_POINT_NUM 10 ++#endif ++ ++/*priate define and declare*/ ++#if(CHIP_ID == CT360) ++struct xy_data { ++ #if(XY_DATA_PROTOCOL == OLD_PROTOCOL) ++ unsigned char status : 4; // Action information, 1: Down; 2: Move; 3: Up ++ unsigned char id : 4; // ID information, from 1 to CFG_MAX_POINT_NUM ++ #endif ++ unsigned char xhi; // X coordinate Hi ++ unsigned char yhi; // Y coordinate Hi ++ unsigned char ylo : 4; // Y coordinate Lo ++ unsigned char xlo : 4; // X coordinate Lo ++ #if(XY_DATA_PROTOCOL == NEW_PROTOCOL) ++ unsigned char status : 4; // Action information, 1: Down; 2: Move; 3: Up ++ unsigned char id : 4; // ID information, from 1 to CFG_MAX_POINT_NUM ++ #endif ++}; ++#else ++struct xy_data { ++ #if(XY_DATA_PROTOCOL == OLD_PROTOCOL) ++ unsigned char status : 3; // Action information, 1: Down; 2: Move; 3: Up ++ unsigned char id : 5; // ID information, from 1 to CFG_MAX_POINT_NUM ++ #endif ++ unsigned char xhi; // X coordinate Hi ++ unsigned char yhi; // Y coordinate Hi ++ unsigned char ylo : 4; // Y coordinate Lo ++ unsigned char xlo : 4; // X coordinate Lo ++ #if(XY_DATA_PROTOCOL == NEW_PROTOCOL) ++ unsigned char status : 3; // Action information, 1: Down; 2: Move; 3: Up ++ unsigned char id : 5; // ID information, from 1 to CFG_MAX_POINT_NUM ++ #endif ++ unsigned char area; // Touch area ++ unsigned char pressure; // Touch Pressure ++}; ++#endif ++ ++ ++union ts_xy_data { ++ struct xy_data point[TOUCH_POINT_NUM]; ++ unsigned char buf[TOUCH_POINT_NUM * sizeof(struct xy_data)]; ++}; ++ ++ ++struct ts_driver{ ++ ++ struct i2c_client *client; ++ ++ /* input devices */ ++ struct input_dev *input_dev; ++ ++ struct proc_dir_entry *proc_entry; ++ ++ struct task_struct *ts_thread; ++ ++ //#ifdef CONFIG_HAS_EARLYSUSPEND ++ //struct early_suspend early_suspend; ++ //#endif ++}; ++ ++struct ts_config_info{ ++ ++ unsigned int screen_max_x; ++ unsigned int screen_max_y; ++ unsigned int xy_swap; ++ unsigned int x_reverse; ++ unsigned int y_reverse; ++ unsigned int x_mul; ++ unsigned int y_mul; ++ unsigned int bin_ver; ++ unsigned int irq_gpio_number; ++ unsigned int irq_number; ++ unsigned int rst_gpio_number; ++ unsigned char touch_point_number; ++ unsigned char ctp_used; ++ //unsigned char i2c_bus_number; ++ //unsigned char revert_x_flag; ++ //unsigned char revert_y_flag; ++ //unsigned char exchange_x_y_flag; ++}; ++ ++struct ts_info{ ++ ++ struct ts_driver *driver; ++ struct ts_config_info config_info; ++ union ts_xy_data xy_data; ++ unsigned char debug; ++ struct tp_device tp; ++}; ++ ++ ++//extern struct ts_info *pg_ts; ++extern struct ts_info * vtl_ts_get_object(void); ++extern void vtl_ts_hw_reset(void); ++ ++#endif ++ diff --git a/drivers/input/touchscreen/vtl_ts/wgj36js07_A1_CT363_V01_0187_140306.dat b/drivers/input/touchscreen/vtl_ts/wgj36js07_A1_CT363_V01_0187_140306.dat new file mode 100755 -index 000000000000..a488e98122a6 +index 000000000..a488e9812 --- /dev/null +++ b/drivers/input/touchscreen/vtl_ts/wgj36js07_A1_CT363_V01_0187_140306.dat @@ -0,0 +1,2048 @@ @@ -836202,7 +836263,7 @@ index 000000000000..a488e98122a6 \ No newline at end of file diff --git a/drivers/input/touchscreen/wacom_w9013.c b/drivers/input/touchscreen/wacom_w9013.c new file mode 100755 -index 000000000000..6bbdb01e40ac +index 000000000..6bbdb01e4 --- /dev/null +++ b/drivers/input/touchscreen/wacom_w9013.c @@ -0,0 +1,510 @@ @@ -836717,7 +836778,7 @@ index 000000000000..6bbdb01e40ac +MODULE_DESCRIPTION("WACOM EMR I2C Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig -index 04878caf6da4..fe1256b01f7e 100644 +index 04878caf6..fe1256b01 100644 --- a/drivers/iommu/Kconfig +++ b/drivers/iommu/Kconfig @@ -160,7 +160,8 @@ config OMAP_IOMMU_DEBUG @@ -836732,7 +836793,7 @@ index 04878caf6da4..fe1256b01f7e 100644 select ARM_DMA_USE_IOMMU diff --git a/drivers/iommu/dma-iommu-ops.c b/drivers/iommu/dma-iommu-ops.c new file mode 100755 -index 000000000000..862d7823985e +index 000000000..862d78239 --- /dev/null +++ b/drivers/iommu/dma-iommu-ops.c @@ -0,0 +1,473 @@ @@ -837210,7 +837271,7 @@ index 000000000000..862d7823985e +} +EXPORT_SYMBOL_GPL(common_iommu_teardown_dma_ops); diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c -index d1539b7399a9..d5020a7299a3 100644 +index d1539b739..d5020a729 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -372,6 +372,52 @@ static int iommu_dma_deferred_attach(struct device *dev, @@ -837278,7 +837339,7 @@ index d1539b7399a9..d5020a7299a3 100644 switch (dir) { case DMA_BIDIRECTIONAL: diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c -index 9d65557dfb2c..abf1b1e6c200 100644 +index 9d65557df..abf1b1e6c 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -8,6 +8,7 @@ @@ -837530,7 +837591,7 @@ index 9d65557dfb2c..abf1b1e6c200 100644 out_err: diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c -index 12551dc11714..bb29a4e18dc8 100644 +index 12551dc11..bb29a4e18 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -19,6 +19,7 @@ @@ -838740,7 +838801,7 @@ index 12551dc11714..bb29a4e18dc8 100644 +MODULE_ALIAS("platform:rockchip-iommu"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig -index 3c24bf45263c..ddcd884d1175 100644 +index 3c24bf452..ddcd884d1 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -417,8 +417,9 @@ config IRQ_UNIPHIER_AIDET @@ -838756,10 +838817,10 @@ index 3c24bf45263c..ddcd884d1175 100644 help Support Meson SoC Family GPIO Interrupt Multiplexer diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c -index 5ec091c64d47..985d8de8445f 100644 +index 23ca48741..e81490844 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c -@@ -2167,6 +2167,8 @@ static struct page *its_allocate_prop_table(gfp_t gfp_flags) +@@ -2192,6 +2192,8 @@ static struct page *its_allocate_prop_table(gfp_t gfp_flags) { struct page *prop_page; @@ -838768,7 +838829,7 @@ index 5ec091c64d47..985d8de8445f 100644 prop_page = alloc_pages(gfp_flags, get_order(LPI_PROPBASE_SZ)); if (!prop_page) return NULL; -@@ -2290,6 +2292,7 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, +@@ -2315,6 +2317,7 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, u32 alloc_pages, psz; struct page *page; void *base; @@ -838776,7 +838837,7 @@ index 5ec091c64d47..985d8de8445f 100644 psz = baser->psz; alloc_pages = (PAGE_ORDER_TO_SIZE(order) / psz); -@@ -2301,7 +2304,10 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, +@@ -2326,7 +2329,10 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, order = get_order(GITS_BASER_PAGES_MAX * psz); } @@ -838788,7 +838849,7 @@ index 5ec091c64d47..985d8de8445f 100644 if (!page) return -ENOMEM; -@@ -2348,6 +2354,14 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, +@@ -2373,6 +2379,14 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, its_write_baser(its, baser, val); tmp = baser->val; @@ -838803,7 +838864,7 @@ index 5ec091c64d47..985d8de8445f 100644 if ((val ^ tmp) & GITS_BASER_SHAREABILITY_MASK) { /* * Shareability didn't stick. Just use -@@ -2930,6 +2944,8 @@ static struct page *its_allocate_pending_table(gfp_t gfp_flags) +@@ -2955,6 +2969,8 @@ static struct page *its_allocate_pending_table(gfp_t gfp_flags) { struct page *pend_page; @@ -838812,7 +838873,7 @@ index 5ec091c64d47..985d8de8445f 100644 pend_page = alloc_pages(gfp_flags | __GFP_ZERO, get_order(LPI_PENDBASE_SZ)); if (!pend_page) -@@ -3077,6 +3093,10 @@ static void its_cpu_init_lpis(void) +@@ -3102,6 +3118,10 @@ static void its_cpu_init_lpis(void) gicr_write_propbaser(val, rbase + GICR_PROPBASER); tmp = gicr_read_propbaser(rbase + GICR_PROPBASER); @@ -838823,7 +838884,7 @@ index 5ec091c64d47..985d8de8445f 100644 if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) { if (!(tmp & GICR_PROPBASER_SHAREABILITY_MASK)) { /* -@@ -3101,6 +3121,10 @@ static void its_cpu_init_lpis(void) +@@ -3126,6 +3146,10 @@ static void its_cpu_init_lpis(void) gicr_write_pendbaser(val, rbase + GICR_PENDBASER); tmp = gicr_read_pendbaser(rbase + GICR_PENDBASER); @@ -838834,7 +838895,7 @@ index 5ec091c64d47..985d8de8445f 100644 if (!(tmp & GICR_PENDBASER_SHAREABILITY_MASK)) { /* * The HW reports non-shareable, we must remove the -@@ -3263,7 +3287,11 @@ static bool its_alloc_table_entry(struct its_node *its, +@@ -3288,7 +3312,11 @@ static bool its_alloc_table_entry(struct its_node *its, /* Allocate memory for 2nd level table */ if (!table[idx]) { @@ -838847,7 +838908,7 @@ index 5ec091c64d47..985d8de8445f 100644 get_order(baser->psz)); if (!page) return false; -@@ -3352,6 +3380,7 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, +@@ -3377,6 +3405,7 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, int nr_lpis; int nr_ites; int sz; @@ -838855,7 +838916,7 @@ index 5ec091c64d47..985d8de8445f 100644 if (!its_alloc_device_table(its, dev_id)) return NULL; -@@ -3367,7 +3396,10 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, +@@ -3392,7 +3421,10 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, nr_ites = max(2, nvecs); sz = nr_ites * (FIELD_GET(GITS_TYPER_ITT_ENTRY_SIZE, its->typer) + 1); sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1; @@ -838867,7 +838928,7 @@ index 5ec091c64d47..985d8de8445f 100644 if (alloc_lpis) { lpi_map = its_lpi_alloc(nvecs, &lpi_base, &nr_lpis); if (lpi_map) -@@ -3841,8 +3873,6 @@ static void its_vpe_schedule(struct its_vpe *vpe) +@@ -3866,8 +3898,6 @@ static void its_vpe_schedule(struct its_vpe *vpe) val |= vpe->idai ? GICR_VPENDBASER_IDAI : 0; val |= GICR_VPENDBASER_Valid; gicr_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER); @@ -838876,7 +838937,7 @@ index 5ec091c64d47..985d8de8445f 100644 } static void its_vpe_deschedule(struct its_vpe *vpe) -@@ -3890,6 +3920,10 @@ static int its_vpe_set_vcpu_affinity(struct irq_data *d, void *vcpu_info) +@@ -3915,6 +3945,10 @@ static int its_vpe_set_vcpu_affinity(struct irq_data *d, void *vcpu_info) its_vpe_deschedule(vpe); return 0; @@ -838887,7 +838948,7 @@ index 5ec091c64d47..985d8de8445f 100644 case INVALL_VPE: its_vpe_invall(vpe); return 0; -@@ -4051,8 +4085,6 @@ static void its_vpe_4_1_schedule(struct its_vpe *vpe, +@@ -4068,8 +4102,6 @@ static void its_vpe_4_1_schedule(struct its_vpe *vpe, val |= FIELD_PREP(GICR_VPENDBASER_4_1_VPEID, vpe->vpe_id); gicr_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER); @@ -838896,7 +838957,7 @@ index 5ec091c64d47..985d8de8445f 100644 } static void its_vpe_4_1_deschedule(struct its_vpe *vpe, -@@ -4127,6 +4159,10 @@ static int its_vpe_4_1_set_vcpu_affinity(struct irq_data *d, void *vcpu_info) +@@ -4144,6 +4176,10 @@ static int its_vpe_4_1_set_vcpu_affinity(struct irq_data *d, void *vcpu_info) its_vpe_4_1_deschedule(vpe, info); return 0; @@ -838907,7 +838968,7 @@ index 5ec091c64d47..985d8de8445f 100644 case INVALL_VPE: its_vpe_4_1_invall(vpe); return 0; -@@ -4945,6 +4981,7 @@ static int __init its_probe_one(struct resource *res, +@@ -4957,6 +4993,7 @@ static int __init its_probe_one(struct resource *res, u64 baser, tmp, typer; struct page *page; int err; @@ -838915,7 +838976,7 @@ index 5ec091c64d47..985d8de8445f 100644 its_base = ioremap(res->start, SZ_64K); if (!its_base) { -@@ -5013,7 +5050,10 @@ static int __init its_probe_one(struct resource *res, +@@ -5025,7 +5062,10 @@ static int __init its_probe_one(struct resource *res, its->numa_node = numa_node; @@ -838927,7 +838988,7 @@ index 5ec091c64d47..985d8de8445f 100644 get_order(ITS_CMD_QUEUE_SZ)); if (!page) { err = -ENOMEM; -@@ -5044,6 +5084,10 @@ static int __init its_probe_one(struct resource *res, +@@ -5056,6 +5096,10 @@ static int __init its_probe_one(struct resource *res, gits_write_cbaser(baser, its->base + GITS_CBASER); tmp = gits_read_cbaser(its->base + GITS_CBASER); @@ -838939,7 +839000,7 @@ index 5ec091c64d47..985d8de8445f 100644 if (!(tmp & GITS_CBASER_SHAREABILITY_MASK)) { /* diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c -index c1f8c1be8485..b9ae28cea29c 100644 +index c1f8c1be8..b9ae28cea 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -18,6 +18,9 @@ @@ -838997,7 +839058,7 @@ index c1f8c1be8485..b9ae28cea29c 100644 if (gic_dist_supports_lpis()) { its_init(handle, &gic_data.rdists, gic_data.domain); diff --git a/drivers/irqchip/irq-gic-v4.c b/drivers/irqchip/irq-gic-v4.c -index 0c18714ae13e..5d1dc9915272 100644 +index 0c18714ae..5d1dc9915 100644 --- a/drivers/irqchip/irq-gic-v4.c +++ b/drivers/irqchip/irq-gic-v4.c @@ -232,6 +232,8 @@ int its_make_vpe_non_resident(struct its_vpe *vpe, bool db) @@ -839034,7 +839095,7 @@ index 0c18714ae13e..5d1dc9915272 100644 { struct its_cmd_info info = { diff --git a/drivers/irqchip/irq-meson-gpio.c b/drivers/irqchip/irq-meson-gpio.c -index e50676ce2ec8..cfc5cf5224cb 100644 +index e50676ce2..cfc5cf522 100644 --- a/drivers/irqchip/irq-meson-gpio.c +++ b/drivers/irqchip/irq-meson-gpio.c @@ -15,6 +15,7 @@ @@ -839181,7 +839242,7 @@ index e50676ce2ec8..cfc5cf5224cb 100644 +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:meson-gpio-intc"); diff --git a/drivers/mailbox/rockchip-mailbox.c b/drivers/mailbox/rockchip-mailbox.c -index 979acc810f30..99b9421b8494 100644 +index 979acc810..99b9421b8 100644 --- a/drivers/mailbox/rockchip-mailbox.c +++ b/drivers/mailbox/rockchip-mailbox.c @@ -11,6 +11,7 @@ @@ -839414,7 +839475,7 @@ index 979acc810f30..99b9421b8494 100644 ret = devm_mbox_controller_register(&pdev->dev, &mb->mbox); diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig -index 878f66ef2719..ab87428481c5 100644 +index 878f66ef2..ab8742848 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -725,6 +725,17 @@ config VIDEO_APTINA_PLL @@ -839436,7 +839497,7 @@ index 878f66ef2719..ab87428481c5 100644 tristate "Hynix Hi-556 sensor support" depends on I2C && VIDEO_V4L2 diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile -index f0a77473979d..298863171375 100644 +index f0a774739..298863171 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -111,6 +111,7 @@ obj-$(CONFIG_VIDEO_I2C) += video-i2c.o @@ -839449,7 +839510,7 @@ index f0a77473979d..298863171375 100644 obj-$(CONFIG_VIDEO_IMX219) += imx219.o diff --git a/drivers/media/i2c/gc8034.c b/drivers/media/i2c/gc8034.c new file mode 100755 -index 000000000000..6edbf5e02995 +index 000000000..b56c05a60 --- /dev/null +++ b/drivers/media/i2c/gc8034.c @@ -0,0 +1,2838 @@ @@ -842293,7 +842354,7 @@ index 000000000000..6edbf5e02995 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/media/i2c/rk628_csi.c b/drivers/media/i2c/rk628_csi.c new file mode 100755 -index 000000000000..3fe765c148c7 +index 000000000..3fe765c14 --- /dev/null +++ b/drivers/media/i2c/rk628_csi.c @@ -0,0 +1,2696 @@ @@ -844995,7 +845056,7 @@ index 000000000000..3fe765c148c7 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/media/i2c/rk628_csi.h b/drivers/media/i2c/rk628_csi.h new file mode 100755 -index 000000000000..e4aa258663b8 +index 000000000..e4aa25866 --- /dev/null +++ b/drivers/media/i2c/rk628_csi.h @@ -0,0 +1,344 @@ @@ -845344,7 +845405,7 @@ index 000000000000..e4aa258663b8 + +#endif diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig -index 7e152bbb4fa6..51d069028c3d 100644 +index 7e152bbb4..51d069028 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -153,6 +153,9 @@ source "drivers/media/platform/xilinx/Kconfig" @@ -845358,7 +845419,7 @@ index 7e152bbb4fa6..51d069028c3d 100644 config VIDEO_TI_CAL tristate "TI CAL (Camera Adaptation Layer) driver" diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile -index 62b6cdc8c730..c7cb2135bb56 100644 +index 62b6cdc8c..c7cb2135b 100644 --- a/drivers/media/platform/Makefile +++ b/drivers/media/platform/Makefile @@ -53,6 +53,9 @@ obj-$(CONFIG_VIDEO_RENESAS_JPU) += rcar_jpu.o @@ -845373,7 +845434,7 @@ index 62b6cdc8c730..c7cb2135bb56 100644 diff --git a/drivers/media/platform/rockchip-tsp/Kconfig b/drivers/media/platform/rockchip-tsp/Kconfig new file mode 100755 -index 000000000000..5394bfa7c63c +index 000000000..5394bfa7c --- /dev/null +++ b/drivers/media/platform/rockchip-tsp/Kconfig @@ -0,0 +1,12 @@ @@ -845391,7 +845452,7 @@ index 000000000000..5394bfa7c63c + diff --git a/drivers/media/platform/rockchip-tsp/Makefile b/drivers/media/platform/rockchip-tsp/Makefile new file mode 100755 -index 000000000000..ca555d0ef9e9 +index 000000000..ca555d0ef --- /dev/null +++ b/drivers/media/platform/rockchip-tsp/Makefile @@ -0,0 +1,6 @@ @@ -845403,7 +845464,7 @@ index 000000000000..ca555d0ef9e9 +obj-$(CONFIG_ROCKCHIP_TSP) += rockchip_tsp.o diff --git a/drivers/media/platform/rockchip-tsp/rockchip_tsp.c b/drivers/media/platform/rockchip-tsp/rockchip_tsp.c new file mode 100755 -index 000000000000..830147909eeb +index 000000000..830147909 --- /dev/null +++ b/drivers/media/platform/rockchip-tsp/rockchip_tsp.c @@ -0,0 +1,1182 @@ @@ -846591,7 +846652,7 @@ index 000000000000..830147909eeb +MODULE_ALIAS("platform:" MODE_NAME); diff --git a/drivers/media/platform/rockchip-tsp/rockchip_tsp.h b/drivers/media/platform/rockchip-tsp/rockchip_tsp.h new file mode 100755 -index 000000000000..bafe641cdf9f +index 000000000..bafe641cd --- /dev/null +++ b/drivers/media/platform/rockchip-tsp/rockchip_tsp.h @@ -0,0 +1,230 @@ @@ -846827,7 +846888,7 @@ index 000000000000..bafe641cdf9f +#endif diff --git a/drivers/media/platform/rockchip/cif/Kconfig b/drivers/media/platform/rockchip/cif/Kconfig new file mode 100755 -index 000000000000..592842bf3386 +index 000000000..592842bf3 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/Kconfig @@ -0,0 +1,40 @@ @@ -846873,7 +846934,7 @@ index 000000000000..592842bf3386 + diff --git a/drivers/media/platform/rockchip/cif/Makefile b/drivers/media/platform/rockchip/cif/Makefile new file mode 100755 -index 000000000000..279be843e093 +index 000000000..279be843e --- /dev/null +++ b/drivers/media/platform/rockchip/cif/Makefile @@ -0,0 +1,11 @@ @@ -846890,7 +846951,7 @@ index 000000000000..279be843e093 + common.o diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c new file mode 100755 -index 000000000000..9832721da8e3 +index 000000000..9832721da --- /dev/null +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -0,0 +1,7915 @@ @@ -854811,7 +854872,7 @@ index 000000000000..9832721da8e3 + diff --git a/drivers/media/platform/rockchip/cif/cif-luma.c b/drivers/media/platform/rockchip/cif/cif-luma.c new file mode 100755 -index 000000000000..9d751df3c4e5 +index 000000000..9d751df3c --- /dev/null +++ b/drivers/media/platform/rockchip/cif/cif-luma.c @@ -0,0 +1,520 @@ @@ -855337,7 +855398,7 @@ index 000000000000..9d751df3c4e5 +} diff --git a/drivers/media/platform/rockchip/cif/cif-luma.h b/drivers/media/platform/rockchip/cif/cif-luma.h new file mode 100755 -index 000000000000..f57d19c4123a +index 000000000..f57d19c41 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/cif-luma.h @@ -0,0 +1,83 @@ @@ -855426,7 +855487,7 @@ index 000000000000..f57d19c4123a +#endif /* _RKCIF_LUMA_H */ diff --git a/drivers/media/platform/rockchip/cif/cif-scale.c b/drivers/media/platform/rockchip/cif/cif-scale.c new file mode 100755 -index 000000000000..afcf8801f425 +index 000000000..afcf8801f --- /dev/null +++ b/drivers/media/platform/rockchip/cif/cif-scale.c @@ -0,0 +1,1202 @@ @@ -856634,7 +856695,7 @@ index 000000000000..afcf8801f425 + diff --git a/drivers/media/platform/rockchip/cif/common.c b/drivers/media/platform/rockchip/cif/common.c new file mode 100755 -index 000000000000..7442dfe82c14 +index 000000000..7442dfe82 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/common.c @@ -0,0 +1,187 @@ @@ -856827,7 +856888,7 @@ index 000000000000..7442dfe82c14 + diff --git a/drivers/media/platform/rockchip/cif/common.h b/drivers/media/platform/rockchip/cif/common.h new file mode 100755 -index 000000000000..86dbd55d1283 +index 000000000..86dbd55d1 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/common.h @@ -0,0 +1,27 @@ @@ -856860,7 +856921,7 @@ index 000000000000..86dbd55d1283 + diff --git a/drivers/media/platform/rockchip/cif/dev.c b/drivers/media/platform/rockchip/cif/dev.c new file mode 100755 -index 000000000000..5f59c9401059 +index 000000000..5f59c9401 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/dev.c @@ -0,0 +1,1928 @@ @@ -858794,7 +858855,7 @@ index 000000000000..5f59c9401059 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/media/platform/rockchip/cif/dev.h b/drivers/media/platform/rockchip/cif/dev.h new file mode 100755 -index 000000000000..a6f210bd8166 +index 000000000..a6f210bd8 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/dev.h @@ -0,0 +1,786 @@ @@ -859586,7 +859647,7 @@ index 000000000000..a6f210bd8166 +#endif diff --git a/drivers/media/platform/rockchip/cif/hw.c b/drivers/media/platform/rockchip/cif/hw.c new file mode 100755 -index 000000000000..a85f2e14c8e7 +index 000000000..a85f2e14c --- /dev/null +++ b/drivers/media/platform/rockchip/cif/hw.c @@ -0,0 +1,1186 @@ @@ -860778,7 +860839,7 @@ index 000000000000..a85f2e14c8e7 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/media/platform/rockchip/cif/hw.h b/drivers/media/platform/rockchip/cif/hw.h new file mode 100755 -index 000000000000..b5698f7c35e6 +index 000000000..b5698f7c3 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/hw.h @@ -0,0 +1,130 @@ @@ -860914,7 +860975,7 @@ index 000000000000..b5698f7c35e6 +#endif diff --git a/drivers/media/platform/rockchip/cif/mipi-csi2.c b/drivers/media/platform/rockchip/cif/mipi-csi2.c new file mode 100755 -index 000000000000..fb2312e2bb63 +index 000000000..fb2312e2b --- /dev/null +++ b/drivers/media/platform/rockchip/cif/mipi-csi2.c @@ -0,0 +1,940 @@ @@ -861860,7 +861921,7 @@ index 000000000000..fb2312e2bb63 +MODULE_LICENSE("GPL"); diff --git a/drivers/media/platform/rockchip/cif/mipi-csi2.h b/drivers/media/platform/rockchip/cif/mipi-csi2.h new file mode 100755 -index 000000000000..e04a7dd2eef3 +index 000000000..e04a7dd2e --- /dev/null +++ b/drivers/media/platform/rockchip/cif/mipi-csi2.h @@ -0,0 +1,159 @@ @@ -862025,7 +862086,7 @@ index 000000000000..e04a7dd2eef3 +#endif diff --git a/drivers/media/platform/rockchip/cif/procfs.c b/drivers/media/platform/rockchip/cif/procfs.c new file mode 100755 -index 000000000000..43d6e2c232b0 +index 000000000..43d6e2c23 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/procfs.c @@ -0,0 +1,406 @@ @@ -862437,7 +862498,7 @@ index 000000000000..43d6e2c232b0 +#endif diff --git a/drivers/media/platform/rockchip/cif/procfs.h b/drivers/media/platform/rockchip/cif/procfs.h new file mode 100755 -index 000000000000..798533849cd9 +index 000000000..798533849 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/procfs.h @@ -0,0 +1,25 @@ @@ -862468,7 +862529,7 @@ index 000000000000..798533849cd9 +#endif diff --git a/drivers/media/platform/rockchip/cif/regs.h b/drivers/media/platform/rockchip/cif/regs.h new file mode 100755 -index 000000000000..d9a1303c16af +index 000000000..d9a1303c1 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/regs.h @@ -0,0 +1,979 @@ @@ -863453,7 +863514,7 @@ index 000000000000..d9a1303c16af +#endif diff --git a/drivers/media/platform/rockchip/cif/subdev-itf.c b/drivers/media/platform/rockchip/cif/subdev-itf.c new file mode 100755 -index 000000000000..3cf240ee4945 +index 000000000..3cf240ee4 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/subdev-itf.c @@ -0,0 +1,635 @@ @@ -864094,7 +864155,7 @@ index 000000000000..3cf240ee4945 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/media/platform/rockchip/cif/subdev-itf.h b/drivers/media/platform/rockchip/cif/subdev-itf.h new file mode 100755 -index 000000000000..a1ebbe02a820 +index 000000000..a1ebbe02a --- /dev/null +++ b/drivers/media/platform/rockchip/cif/subdev-itf.h @@ -0,0 +1,69 @@ @@ -864169,7 +864230,7 @@ index 000000000000..a1ebbe02a820 +#endif diff --git a/drivers/media/platform/rockchip/cif/version.h b/drivers/media/platform/rockchip/cif/version.h new file mode 100755 -index 000000000000..627b4a3a11e5 +index 000000000..627b4a3a1 --- /dev/null +++ b/drivers/media/platform/rockchip/cif/version.h @@ -0,0 +1,74 @@ @@ -864249,7 +864310,7 @@ index 000000000000..627b4a3a11e5 +#endif diff --git a/drivers/media/platform/rockchip/isp/Kconfig b/drivers/media/platform/rockchip/isp/Kconfig new file mode 100755 -index 000000000000..98a530a171f1 +index 000000000..98a530a17 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/Kconfig @@ -0,0 +1,39 @@ @@ -864294,7 +864355,7 @@ index 000000000000..98a530a171f1 +endif diff --git a/drivers/media/platform/rockchip/isp/Makefile b/drivers/media/platform/rockchip/isp/Makefile new file mode 100755 -index 000000000000..52cac629003f +index 000000000..52cac6290 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/Makefile @@ -0,0 +1,42 @@ @@ -864342,7 +864403,7 @@ index 000000000000..52cac629003f +video_rkisp-$(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP) += rkisp_tb_helper.o diff --git a/drivers/media/platform/rockchip/isp/bridge.c b/drivers/media/platform/rockchip/isp/bridge.c new file mode 100755 -index 000000000000..51c8254ccfe2 +index 000000000..51c8254cc --- /dev/null +++ b/drivers/media/platform/rockchip/isp/bridge.c @@ -0,0 +1,629 @@ @@ -864977,7 +865038,7 @@ index 000000000000..51c8254ccfe2 +EXPORT_SYMBOL(rkisp_get_bridge_sd); diff --git a/drivers/media/platform/rockchip/isp/bridge.h b/drivers/media/platform/rockchip/isp/bridge.h new file mode 100755 -index 000000000000..8310b13df88a +index 000000000..8310b13df --- /dev/null +++ b/drivers/media/platform/rockchip/isp/bridge.h @@ -0,0 +1,105 @@ @@ -865088,7 +865149,7 @@ index 000000000000..8310b13df88a +#endif diff --git a/drivers/media/platform/rockchip/isp/bridge_v20.c b/drivers/media/platform/rockchip/isp/bridge_v20.c new file mode 100755 -index 000000000000..ff1d4af07424 +index 000000000..ff1d4af07 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/bridge_v20.c @@ -0,0 +1,1094 @@ @@ -866188,7 +866249,7 @@ index 000000000000..ff1d4af07424 +} diff --git a/drivers/media/platform/rockchip/isp/bridge_v30.c b/drivers/media/platform/rockchip/isp/bridge_v30.c new file mode 100755 -index 000000000000..c0b639bddd56 +index 000000000..c0b639bdd --- /dev/null +++ b/drivers/media/platform/rockchip/isp/bridge_v30.c @@ -0,0 +1,236 @@ @@ -866430,7 +866491,7 @@ index 000000000000..c0b639bddd56 +} diff --git a/drivers/media/platform/rockchip/isp/capture.c b/drivers/media/platform/rockchip/isp/capture.c new file mode 100755 -index 000000000000..476c147b5f60 +index 000000000..476c147b5 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture.c @@ -0,0 +1,1717 @@ @@ -868153,7 +868214,7 @@ index 000000000000..476c147b5f60 +} diff --git a/drivers/media/platform/rockchip/isp/capture.h b/drivers/media/platform/rockchip/isp/capture.h new file mode 100755 -index 000000000000..5a9251a9c973 +index 000000000..5a9251a9c --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture.h @@ -0,0 +1,295 @@ @@ -868454,7 +868515,7 @@ index 000000000000..5a9251a9c973 +#endif /* _RKISP_PATH_VIDEO_H */ diff --git a/drivers/media/platform/rockchip/isp/capture_v1x.c b/drivers/media/platform/rockchip/isp/capture_v1x.c new file mode 100755 -index 000000000000..b829bd5e512a +index 000000000..b829bd5e5 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture_v1x.c @@ -0,0 +1,957 @@ @@ -869417,7 +869478,7 @@ index 000000000000..b829bd5e512a +} diff --git a/drivers/media/platform/rockchip/isp/capture_v1x.h b/drivers/media/platform/rockchip/isp/capture_v1x.h new file mode 100755 -index 000000000000..f26f1bde0010 +index 000000000..f26f1bde0 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture_v1x.h @@ -0,0 +1,17 @@ @@ -869440,7 +869501,7 @@ index 000000000000..f26f1bde0010 +#endif diff --git a/drivers/media/platform/rockchip/isp/capture_v20.c b/drivers/media/platform/rockchip/isp/capture_v20.c new file mode 100755 -index 000000000000..4dbb87110d54 +index 000000000..4dbb87110 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture_v20.c @@ -0,0 +1,1969 @@ @@ -871415,7 +871476,7 @@ index 000000000000..4dbb87110d54 +} diff --git a/drivers/media/platform/rockchip/isp/capture_v21.c b/drivers/media/platform/rockchip/isp/capture_v21.c new file mode 100755 -index 000000000000..4bef12f6a9a4 +index 000000000..4bef12f6a --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture_v21.c @@ -0,0 +1,1699 @@ @@ -873120,7 +873181,7 @@ index 000000000000..4bef12f6a9a4 +} diff --git a/drivers/media/platform/rockchip/isp/capture_v2x.h b/drivers/media/platform/rockchip/isp/capture_v2x.h new file mode 100755 -index 000000000000..8ec036998a4a +index 000000000..8ec036998 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture_v2x.h @@ -0,0 +1,48 @@ @@ -873174,7 +873235,7 @@ index 000000000000..8ec036998a4a +#endif diff --git a/drivers/media/platform/rockchip/isp/capture_v30.c b/drivers/media/platform/rockchip/isp/capture_v30.c new file mode 100755 -index 000000000000..05fad30e2ba3 +index 000000000..05fad30e2 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture_v30.c @@ -0,0 +1,1495 @@ @@ -874675,7 +874736,7 @@ index 000000000000..05fad30e2ba3 +} diff --git a/drivers/media/platform/rockchip/isp/capture_v3x.h b/drivers/media/platform/rockchip/isp/capture_v3x.h new file mode 100755 -index 000000000000..cb3d59391e87 +index 000000000..cb3d59391 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/capture_v3x.h @@ -0,0 +1,23 @@ @@ -874704,7 +874765,7 @@ index 000000000000..cb3d59391e87 +#endif diff --git a/drivers/media/platform/rockchip/isp/common.c b/drivers/media/platform/rockchip/isp/common.c new file mode 100755 -index 000000000000..30b69b204914 +index 000000000..30b69b204 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/common.c @@ -0,0 +1,369 @@ @@ -875079,7 +875140,7 @@ index 000000000000..30b69b204914 +} diff --git a/drivers/media/platform/rockchip/isp/common.h b/drivers/media/platform/rockchip/isp/common.h new file mode 100755 -index 000000000000..6ff84a21b216 +index 000000000..6ff84a21b --- /dev/null +++ b/drivers/media/platform/rockchip/isp/common.h @@ -0,0 +1,212 @@ @@ -875297,7 +875358,7 @@ index 000000000000..6ff84a21b216 +#endif /* _RKISP_COMMON_H */ diff --git a/drivers/media/platform/rockchip/isp/csi.c b/drivers/media/platform/rockchip/isp/csi.c new file mode 100755 -index 000000000000..2ffd02c73e0d +index 000000000..2ffd02c73 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/csi.c @@ -0,0 +1,637 @@ @@ -875940,7 +876001,7 @@ index 000000000000..2ffd02c73e0d +} diff --git a/drivers/media/platform/rockchip/isp/csi.h b/drivers/media/platform/rockchip/isp/csi.h new file mode 100755 -index 000000000000..4a8c7020078b +index 000000000..4a8c70200 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/csi.h @@ -0,0 +1,83 @@ @@ -876029,7 +876090,7 @@ index 000000000000..4a8c7020078b +#endif diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c new file mode 100755 -index 000000000000..e8628681d570 +index 000000000..e8628681d --- /dev/null +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -0,0 +1,913 @@ @@ -876948,7 +877009,7 @@ index 000000000000..e8628681d570 +MODULE_LICENSE("Dual BSD/GPL"); diff --git a/drivers/media/platform/rockchip/isp/dev.h b/drivers/media/platform/rockchip/isp/dev.h new file mode 100755 -index 000000000000..e057491111fa +index 000000000..e05749111 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/dev.h @@ -0,0 +1,238 @@ @@ -877192,7 +877253,7 @@ index 000000000000..e057491111fa +#endif diff --git a/drivers/media/platform/rockchip/isp/dmarx.c b/drivers/media/platform/rockchip/isp/dmarx.c new file mode 100755 -index 000000000000..0dcc080d7cdc +index 000000000..0dcc080d7 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/dmarx.c @@ -0,0 +1,1183 @@ @@ -878381,7 +878442,7 @@ index 000000000000..0dcc080d7cdc +} diff --git a/drivers/media/platform/rockchip/isp/dmarx.h b/drivers/media/platform/rockchip/isp/dmarx.h new file mode 100755 -index 000000000000..348096e286ef +index 000000000..348096e28 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/dmarx.h @@ -0,0 +1,67 @@ @@ -878454,7 +878515,7 @@ index 000000000000..348096e286ef +#endif /* _RKISP_DMARX_H */ diff --git a/drivers/media/platform/rockchip/isp/hw.c b/drivers/media/platform/rockchip/isp/hw.c new file mode 100755 -index 000000000000..899bee986397 +index 000000000..899bee986 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/hw.c @@ -0,0 +1,1019 @@ @@ -879479,7 +879540,7 @@ index 000000000000..899bee986397 +module_init(rkisp_hw_drv_init); diff --git a/drivers/media/platform/rockchip/isp/hw.h b/drivers/media/platform/rockchip/isp/hw.h new file mode 100755 -index 000000000000..dce2f0a715ee +index 000000000..dce2f0a71 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/hw.h @@ -0,0 +1,89 @@ @@ -879574,7 +879635,7 @@ index 000000000000..dce2f0a715ee +#endif diff --git a/drivers/media/platform/rockchip/isp/isp_external.h b/drivers/media/platform/rockchip/isp/isp_external.h new file mode 100755 -index 000000000000..655c4b943835 +index 000000000..655c4b943 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_external.h @@ -0,0 +1,44 @@ @@ -879624,7 +879685,7 @@ index 000000000000..655c4b943835 +#endif diff --git a/drivers/media/platform/rockchip/isp/isp_ispp.h b/drivers/media/platform/rockchip/isp/isp_ispp.h new file mode 100755 -index 000000000000..98300cae0347 +index 000000000..98300cae0 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_ispp.h @@ -0,0 +1,138 @@ @@ -879768,7 +879829,7 @@ index 000000000000..98300cae0347 +#endif diff --git a/drivers/media/platform/rockchip/isp/isp_mipi_luma.c b/drivers/media/platform/rockchip/isp/isp_mipi_luma.c new file mode 100755 -index 000000000000..ebca58e7102f +index 000000000..ebca58e71 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_mipi_luma.c @@ -0,0 +1,524 @@ @@ -880298,7 +880359,7 @@ index 000000000000..ebca58e7102f +} diff --git a/drivers/media/platform/rockchip/isp/isp_mipi_luma.h b/drivers/media/platform/rockchip/isp/isp_mipi_luma.h new file mode 100755 -index 000000000000..537a9d6a0796 +index 000000000..537a9d6a0 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_mipi_luma.h @@ -0,0 +1,79 @@ @@ -880383,7 +880444,7 @@ index 000000000000..537a9d6a0796 +#endif /* _RKISP_ISP_LUMA_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_params.c b/drivers/media/platform/rockchip/isp/isp_params.c new file mode 100755 -index 000000000000..c5e91d18f973 +index 000000000..c5e91d18f --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params.c @@ -0,0 +1,459 @@ @@ -880848,7 +880909,7 @@ index 000000000000..c5e91d18f973 + diff --git a/drivers/media/platform/rockchip/isp/isp_params.h b/drivers/media/platform/rockchip/isp/isp_params.h new file mode 100755 -index 000000000000..fb4e3a2d7569 +index 000000000..fb4e3a2d7 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params.h @@ -0,0 +1,147 @@ @@ -881001,7 +881062,7 @@ index 000000000000..fb4e3a2d7569 +#endif /* _RKISP_ISP_PARAM_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_params_v1x.c b/drivers/media/platform/rockchip/isp/isp_params_v1x.c new file mode 100755 -index 000000000000..4ca6c6dbbd2c +index 000000000..4ca6c6dbb --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v1x.c @@ -0,0 +1,2352 @@ @@ -883359,7 +883420,7 @@ index 000000000000..4ca6c6dbbd2c + diff --git a/drivers/media/platform/rockchip/isp/isp_params_v1x.h b/drivers/media/platform/rockchip/isp/isp_params_v1x.h new file mode 100755 -index 000000000000..316bef51eaca +index 000000000..316bef51e --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v1x.h @@ -0,0 +1,87 @@ @@ -883452,7 +883513,7 @@ index 000000000000..316bef51eaca +#endif /* _RKISP_ISP_PARAM_V1X_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_params_v21.c b/drivers/media/platform/rockchip/isp/isp_params_v21.c new file mode 100755 -index 000000000000..eeb242a14a79 +index 000000000..eeb242a14 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v21.c @@ -0,0 +1,4195 @@ @@ -887653,7 +887714,7 @@ index 000000000000..eeb242a14a79 +} diff --git a/drivers/media/platform/rockchip/isp/isp_params_v21.h b/drivers/media/platform/rockchip/isp/isp_params_v21.h new file mode 100755 -index 000000000000..860b9156f761 +index 000000000..860b9156f --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v21.h @@ -0,0 +1,175 @@ @@ -887834,7 +887895,7 @@ index 000000000000..860b9156f761 +#endif /* _RKISP_ISP_PARAM_V21_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_params_v2x.c b/drivers/media/platform/rockchip/isp/isp_params_v2x.c new file mode 100755 -index 000000000000..656834e2a922 +index 000000000..656834e2a --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v2x.c @@ -0,0 +1,4466 @@ @@ -892306,7 +892367,7 @@ index 000000000000..656834e2a922 + diff --git a/drivers/media/platform/rockchip/isp/isp_params_v2x.h b/drivers/media/platform/rockchip/isp/isp_params_v2x.h new file mode 100755 -index 000000000000..707ada18205b +index 000000000..707ada182 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v2x.h @@ -0,0 +1,359 @@ @@ -892671,7 +892732,7 @@ index 000000000000..707ada18205b +#endif /* _RKISP_ISP_PARAM_V2X_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.c b/drivers/media/platform/rockchip/isp/isp_params_v3x.c new file mode 100755 -index 000000000000..2f35b42e1d7c +index 000000000..2f35b42e1 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.c @@ -0,0 +1,4688 @@ @@ -897365,7 +897426,7 @@ index 000000000000..2f35b42e1d7c +} diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.h b/drivers/media/platform/rockchip/isp/isp_params_v3x.h new file mode 100755 -index 000000000000..3f9d6989d453 +index 000000000..3f9d6989d --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.h @@ -0,0 +1,210 @@ @@ -897581,7 +897642,7 @@ index 000000000000..3f9d6989d453 +#endif /* _RKISP_ISP_PARAM_V3X_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_stats.c b/drivers/media/platform/rockchip/isp/isp_stats.c new file mode 100755 -index 000000000000..e472dbdb7bee +index 000000000..e472dbdb7 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats.c @@ -0,0 +1,373 @@ @@ -897960,7 +898021,7 @@ index 000000000000..e472dbdb7bee + diff --git a/drivers/media/platform/rockchip/isp/isp_stats.h b/drivers/media/platform/rockchip/isp/isp_stats.h new file mode 100755 -index 000000000000..249ed2535585 +index 000000000..249ed2535 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats.h @@ -0,0 +1,89 @@ @@ -898055,7 +898116,7 @@ index 000000000000..249ed2535585 +#endif /* _RKISP_ISP_STATS_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v1x.c b/drivers/media/platform/rockchip/isp/isp_stats_v1x.c new file mode 100755 -index 000000000000..dce904b5f7c5 +index 000000000..dce904b5f --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v1x.c @@ -0,0 +1,420 @@ @@ -898481,7 +898542,7 @@ index 000000000000..dce904b5f7c5 + diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v1x.h b/drivers/media/platform/rockchip/isp/isp_stats_v1x.h new file mode 100755 -index 000000000000..8f1853d4b01d +index 000000000..8f1853d4b --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v1x.h @@ -0,0 +1,42 @@ @@ -898529,7 +898590,7 @@ index 000000000000..8f1853d4b01d +#endif /* _RKISP_ISP_STATS_V1X_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v21.c b/drivers/media/platform/rockchip/isp/isp_stats_v21.c new file mode 100755 -index 000000000000..956775f3bbaf +index 000000000..956775f3b --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v21.c @@ -0,0 +1,1166 @@ @@ -899701,7 +899762,7 @@ index 000000000000..956775f3bbaf +} diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v21.h b/drivers/media/platform/rockchip/isp/isp_stats_v21.h new file mode 100755 -index 000000000000..c1dba6c65933 +index 000000000..c1dba6c65 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v21.h @@ -0,0 +1,52 @@ @@ -899759,7 +899820,7 @@ index 000000000000..c1dba6c65933 +#endif /* _RKISP_ISP_STATS_V21_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v2x.c b/drivers/media/platform/rockchip/isp/isp_stats_v2x.c new file mode 100755 -index 000000000000..6e458a571b18 +index 000000000..6e458a571 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v2x.c @@ -0,0 +1,1526 @@ @@ -901291,7 +901352,7 @@ index 000000000000..6e458a571b18 + diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v2x.h b/drivers/media/platform/rockchip/isp/isp_stats_v2x.h new file mode 100755 -index 000000000000..5793ebfefcbb +index 000000000..5793ebfef --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v2x.h @@ -0,0 +1,70 @@ @@ -901367,7 +901428,7 @@ index 000000000000..5793ebfefcbb +#endif /* _RKISP_ISP_STATS_V2X_H */ diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v3x.c b/drivers/media/platform/rockchip/isp/isp_stats_v3x.c new file mode 100755 -index 000000000000..7d1883c37ba8 +index 000000000..7d1883c37 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v3x.c @@ -0,0 +1,1309 @@ @@ -902682,7 +902743,7 @@ index 000000000000..7d1883c37ba8 +} diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v3x.h b/drivers/media/platform/rockchip/isp/isp_stats_v3x.h new file mode 100755 -index 000000000000..1b40c571f19e +index 000000000..1b40c571f --- /dev/null +++ b/drivers/media/platform/rockchip/isp/isp_stats_v3x.h @@ -0,0 +1,52 @@ @@ -902740,7 +902801,7 @@ index 000000000000..1b40c571f19e +#endif /* _RKISP_ISP_STATS_V3X_H */ diff --git a/drivers/media/platform/rockchip/isp/procfs.c b/drivers/media/platform/rockchip/isp/procfs.c new file mode 100755 -index 000000000000..4594789ac355 +index 000000000..4594789ac --- /dev/null +++ b/drivers/media/platform/rockchip/isp/procfs.c @@ -0,0 +1,805 @@ @@ -903551,7 +903612,7 @@ index 000000000000..4594789ac355 +#endif /* CONFIG_PROC_FS */ diff --git a/drivers/media/platform/rockchip/isp/procfs.h b/drivers/media/platform/rockchip/isp/procfs.h new file mode 100755 -index 000000000000..09c650abc5cb +index 000000000..09c650abc --- /dev/null +++ b/drivers/media/platform/rockchip/isp/procfs.h @@ -0,0 +1,21 @@ @@ -903578,7 +903639,7 @@ index 000000000000..09c650abc5cb +#endif diff --git a/drivers/media/platform/rockchip/isp/regs.c b/drivers/media/platform/rockchip/isp/regs.c new file mode 100755 -index 000000000000..908e05d8c6a0 +index 000000000..908e05d8c --- /dev/null +++ b/drivers/media/platform/rockchip/isp/regs.c @@ -0,0 +1,328 @@ @@ -903912,7 +903973,7 @@ index 000000000000..908e05d8c6a0 +} diff --git a/drivers/media/platform/rockchip/isp/regs.h b/drivers/media/platform/rockchip/isp/regs.h new file mode 100755 -index 000000000000..7b7f5972a3a9 +index 000000000..7b7f5972a --- /dev/null +++ b/drivers/media/platform/rockchip/isp/regs.h @@ -0,0 +1,2031 @@ @@ -905949,7 +906010,7 @@ index 000000000000..7b7f5972a3a9 +#endif /* _RKISP_REGS_H */ diff --git a/drivers/media/platform/rockchip/isp/regs_v2x.h b/drivers/media/platform/rockchip/isp/regs_v2x.h new file mode 100755 -index 000000000000..9e55bdfa7783 +index 000000000..9e55bdfa7 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/regs_v2x.h @@ -0,0 +1,2717 @@ @@ -908672,7 +908733,7 @@ index 000000000000..9e55bdfa7783 +#endif /* _RKISP_REGS_V2X_H */ diff --git a/drivers/media/platform/rockchip/isp/regs_v3x.h b/drivers/media/platform/rockchip/isp/regs_v3x.h new file mode 100755 -index 000000000000..b8db3e46f439 +index 000000000..b8db3e46f --- /dev/null +++ b/drivers/media/platform/rockchip/isp/regs_v3x.h @@ -0,0 +1,1822 @@ @@ -910500,7 +910561,7 @@ index 000000000000..b8db3e46f439 +#endif /* _RKISP_REGS_V3X_H */ diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c new file mode 100755 -index 000000000000..31bbb5eb09d0 +index 000000000..31bbb5eb0 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -0,0 +1,3578 @@ @@ -914084,7 +914145,7 @@ index 000000000000..31bbb5eb09d0 + diff --git a/drivers/media/platform/rockchip/isp/rkisp.h b/drivers/media/platform/rockchip/isp/rkisp.h new file mode 100755 -index 000000000000..bb19692e8a87 +index 000000000..bb19692e8 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/rkisp.h @@ -0,0 +1,197 @@ @@ -914287,7 +914348,7 @@ index 000000000000..bb19692e8a87 +#endif /* _RKISP_H */ diff --git a/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c b/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c new file mode 100755 -index 000000000000..a32e5fe5e370 +index 000000000..a32e5fe5e --- /dev/null +++ b/drivers/media/platform/rockchip/isp/rkisp_tb_helper.c @@ -0,0 +1,266 @@ @@ -914559,7 +914620,7 @@ index 000000000000..a32e5fe5e370 +EXPORT_SYMBOL(rkisp_tb_get_state); diff --git a/drivers/media/platform/rockchip/isp/rkisp_tb_helper.h b/drivers/media/platform/rockchip/isp/rkisp_tb_helper.h new file mode 100755 -index 000000000000..79d06469a354 +index 000000000..79d06469a --- /dev/null +++ b/drivers/media/platform/rockchip/isp/rkisp_tb_helper.h @@ -0,0 +1,33 @@ @@ -914598,7 +914659,7 @@ index 000000000000..79d06469a354 +#endif diff --git a/drivers/media/platform/rockchip/isp/version.h b/drivers/media/platform/rockchip/isp/version.h new file mode 100755 -index 000000000000..fd10553869e9 +index 000000000..fd1055386 --- /dev/null +++ b/drivers/media/platform/rockchip/isp/version.h @@ -0,0 +1,224 @@ @@ -914828,7 +914889,7 @@ index 000000000000..fd10553869e9 +#endif diff --git a/drivers/media/platform/rockchip/isp/videobuf2-rdma-sg.c b/drivers/media/platform/rockchip/isp/videobuf2-rdma-sg.c new file mode 100755 -index 000000000000..5fe71b21d930 +index 000000000..5fe71b21d --- /dev/null +++ b/drivers/media/platform/rockchip/isp/videobuf2-rdma-sg.c @@ -0,0 +1,608 @@ @@ -915442,7 +915503,7 @@ index 000000000000..5fe71b21d930 +EXPORT_SYMBOL_GPL(vb2_rdma_sg_memops); diff --git a/drivers/media/platform/rockchip/isp1/Kconfig b/drivers/media/platform/rockchip/isp1/Kconfig new file mode 100755 -index 000000000000..5637cc758cc5 +index 000000000..5637cc758 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/Kconfig @@ -0,0 +1,12 @@ @@ -915460,7 +915521,7 @@ index 000000000000..5637cc758cc5 + Support for ISP1 on the rockchip SoC. diff --git a/drivers/media/platform/rockchip/isp1/Makefile b/drivers/media/platform/rockchip/isp1/Makefile new file mode 100755 -index 000000000000..788e3d97978a +index 000000000..788e3d979 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/Makefile @@ -0,0 +1,10 @@ @@ -915476,7 +915537,7 @@ index 000000000000..788e3d97978a + dmarx.o diff --git a/drivers/media/platform/rockchip/isp1/capture.c b/drivers/media/platform/rockchip/isp1/capture.c new file mode 100755 -index 000000000000..e61d59a4000a +index 000000000..e61d59a40 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/capture.c @@ -0,0 +1,2313 @@ @@ -917795,7 +917856,7 @@ index 000000000000..e61d59a4000a +} diff --git a/drivers/media/platform/rockchip/isp1/capture.h b/drivers/media/platform/rockchip/isp1/capture.h new file mode 100755 -index 000000000000..8613618352e9 +index 000000000..861361835 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/capture.h @@ -0,0 +1,219 @@ @@ -918020,7 +918081,7 @@ index 000000000000..8613618352e9 +#endif /* _RKISP1_PATH_VIDEO_H */ diff --git a/drivers/media/platform/rockchip/isp1/common.h b/drivers/media/platform/rockchip/isp1/common.h new file mode 100755 -index 000000000000..f20a0829c96c +index 000000000..f20a0829c --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/common.h @@ -0,0 +1,133 @@ @@ -918159,7 +918220,7 @@ index 000000000000..f20a0829c96c +#endif /* _RKISP1_COMMON_H */ diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c new file mode 100755 -index 000000000000..4e548f0ae81b +index 000000000..4e548f0ae --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/dev.c @@ -0,0 +1,1200 @@ @@ -919365,7 +919426,7 @@ index 000000000000..4e548f0ae81b +MODULE_LICENSE("Dual BSD/GPL"); diff --git a/drivers/media/platform/rockchip/isp1/dev.h b/drivers/media/platform/rockchip/isp1/dev.h new file mode 100755 -index 000000000000..980f7711302d +index 000000000..980f77113 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/dev.h @@ -0,0 +1,173 @@ @@ -919544,7 +919605,7 @@ index 000000000000..980f7711302d +#endif diff --git a/drivers/media/platform/rockchip/isp1/dmarx.c b/drivers/media/platform/rockchip/isp1/dmarx.c new file mode 100755 -index 000000000000..7ac08d249c0b +index 000000000..7ac08d249 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/dmarx.c @@ -0,0 +1,687 @@ @@ -920237,7 +920298,7 @@ index 000000000000..7ac08d249c0b +} diff --git a/drivers/media/platform/rockchip/isp1/dmarx.h b/drivers/media/platform/rockchip/isp1/dmarx.h new file mode 100755 -index 000000000000..abc3b39aa0b5 +index 000000000..abc3b39aa --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/dmarx.h @@ -0,0 +1,29 @@ @@ -920272,7 +920333,7 @@ index 000000000000..abc3b39aa0b5 +#endif /* _RKISP1_DMARX_H */ diff --git a/drivers/media/platform/rockchip/isp1/isp_params.c b/drivers/media/platform/rockchip/isp1/isp_params.c new file mode 100755 -index 000000000000..5315aabf3957 +index 000000000..5315aabf3 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/isp_params.c @@ -0,0 +1,2655 @@ @@ -922933,7 +922994,7 @@ index 000000000000..5315aabf3957 +} diff --git a/drivers/media/platform/rockchip/isp1/isp_params.h b/drivers/media/platform/rockchip/isp1/isp_params.h new file mode 100755 -index 000000000000..ea707b7cf0e4 +index 000000000..ea707b7cf --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/isp_params.h @@ -0,0 +1,151 @@ @@ -923090,7 +923151,7 @@ index 000000000000..ea707b7cf0e4 +#endif /* _RKISP1_ISP_H */ diff --git a/drivers/media/platform/rockchip/isp1/isp_stats.c b/drivers/media/platform/rockchip/isp1/isp_stats.c new file mode 100755 -index 000000000000..b682f6a4f9d1 +index 000000000..b682f6a4f --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/isp_stats.c @@ -0,0 +1,684 @@ @@ -923780,7 +923841,7 @@ index 000000000000..b682f6a4f9d1 +} diff --git a/drivers/media/platform/rockchip/isp1/isp_stats.h b/drivers/media/platform/rockchip/isp1/isp_stats.h new file mode 100755 -index 000000000000..bdb4779b1f69 +index 000000000..bdb4779b1 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/isp_stats.h @@ -0,0 +1,112 @@ @@ -923898,7 +923959,7 @@ index 000000000000..bdb4779b1f69 +#endif /* _RKISP1_ISP_STATS_H */ diff --git a/drivers/media/platform/rockchip/isp1/regs.c b/drivers/media/platform/rockchip/isp1/regs.c new file mode 100755 -index 000000000000..82f6cd92475e +index 000000000..82f6cd924 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/regs.c @@ -0,0 +1,244 @@ @@ -924148,7 +924209,7 @@ index 000000000000..82f6cd92475e +} diff --git a/drivers/media/platform/rockchip/isp1/regs.h b/drivers/media/platform/rockchip/isp1/regs.h new file mode 100755 -index 000000000000..d31ef1b127f5 +index 000000000..d31ef1b12 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/regs.h @@ -0,0 +1,1994 @@ @@ -926148,7 +926209,7 @@ index 000000000000..d31ef1b127f5 +#endif /* _RKISP1_REGS_H */ diff --git a/drivers/media/platform/rockchip/isp1/rkisp1.c b/drivers/media/platform/rockchip/isp1/rkisp1.c new file mode 100755 -index 000000000000..07246bca865c +index 000000000..07246bca8 --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/rkisp1.c @@ -0,0 +1,1873 @@ @@ -928027,7 +928088,7 @@ index 000000000000..07246bca865c + diff --git a/drivers/media/platform/rockchip/isp1/rkisp1.h b/drivers/media/platform/rockchip/isp1/rkisp1.h new file mode 100755 -index 000000000000..afafc2c0f78f +index 000000000..afafc2c0f --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/rkisp1.h @@ -0,0 +1,163 @@ @@ -928196,7 +928257,7 @@ index 000000000000..afafc2c0f78f +#endif /* _RKISP1_H */ diff --git a/drivers/media/platform/rockchip/isp1/version.h b/drivers/media/platform/rockchip/isp1/version.h new file mode 100755 -index 000000000000..3bfb0c98fd6e +index 000000000..3bfb0c98f --- /dev/null +++ b/drivers/media/platform/rockchip/isp1/version.h @@ -0,0 +1,61 @@ @@ -928263,7 +928324,7 @@ index 000000000000..3bfb0c98fd6e +#endif diff --git a/drivers/media/platform/rockchip/ispp/Kconfig b/drivers/media/platform/rockchip/ispp/Kconfig new file mode 100755 -index 000000000000..7de4f688633b +index 000000000..7de4f6886 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/Kconfig @@ -0,0 +1,31 @@ @@ -928300,7 +928361,7 @@ index 000000000000..7de4f688633b +endif diff --git a/drivers/media/platform/rockchip/ispp/Makefile b/drivers/media/platform/rockchip/ispp/Makefile new file mode 100755 -index 000000000000..6148f70ff50a +index 000000000..6148f70ff --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/Makefile @@ -0,0 +1,23 @@ @@ -928329,7 +928390,7 @@ index 000000000000..6148f70ff50a +endif diff --git a/drivers/media/platform/rockchip/ispp/common.c b/drivers/media/platform/rockchip/ispp/common.c new file mode 100755 -index 000000000000..91bd4cb96840 +index 000000000..91bd4cb96 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/common.c @@ -0,0 +1,595 @@ @@ -928930,7 +928991,7 @@ index 000000000000..91bd4cb96840 +} diff --git a/drivers/media/platform/rockchip/ispp/common.h b/drivers/media/platform/rockchip/ispp/common.h new file mode 100755 -index 000000000000..0d24cbb6c2d0 +index 000000000..0d24cbb6c --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/common.h @@ -0,0 +1,145 @@ @@ -929081,7 +929142,7 @@ index 000000000000..0d24cbb6c2d0 +#endif diff --git a/drivers/media/platform/rockchip/ispp/dev.c b/drivers/media/platform/rockchip/ispp/dev.c new file mode 100755 -index 000000000000..54fa571f8de1 +index 000000000..54fa571f8 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/dev.c @@ -0,0 +1,385 @@ @@ -929472,7 +929533,7 @@ index 000000000000..54fa571f8de1 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/media/platform/rockchip/ispp/dev.h b/drivers/media/platform/rockchip/ispp/dev.h new file mode 100755 -index 000000000000..32a6736bbb1c +index 000000000..32a6736bb --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/dev.h @@ -0,0 +1,60 @@ @@ -929538,7 +929599,7 @@ index 000000000000..32a6736bbb1c +#endif diff --git a/drivers/media/platform/rockchip/ispp/fec.c b/drivers/media/platform/rockchip/ispp/fec.c new file mode 100755 -index 000000000000..a742dc18b8c7 +index 000000000..a742dc18b --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/fec.c @@ -0,0 +1,480 @@ @@ -930024,7 +930085,7 @@ index 000000000000..a742dc18b8c7 +} diff --git a/drivers/media/platform/rockchip/ispp/fec.h b/drivers/media/platform/rockchip/ispp/fec.h new file mode 100755 -index 000000000000..b89615a0747d +index 000000000..b89615a07 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/fec.h @@ -0,0 +1,27 @@ @@ -930057,7 +930118,7 @@ index 000000000000..b89615a0747d +#endif diff --git a/drivers/media/platform/rockchip/ispp/hw.c b/drivers/media/platform/rockchip/ispp/hw.c new file mode 100755 -index 000000000000..2d0466070fd6 +index 000000000..2d0466070 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/hw.c @@ -0,0 +1,510 @@ @@ -930573,7 +930634,7 @@ index 000000000000..2d0466070fd6 +#endif diff --git a/drivers/media/platform/rockchip/ispp/hw.h b/drivers/media/platform/rockchip/ispp/hw.h new file mode 100755 -index 000000000000..8eb2585ecb71 +index 000000000..8eb2585ec --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/hw.h @@ -0,0 +1,67 @@ @@ -930646,7 +930707,7 @@ index 000000000000..8eb2585ecb71 +#endif diff --git a/drivers/media/platform/rockchip/ispp/ispp.c b/drivers/media/platform/rockchip/ispp/ispp.c new file mode 100755 -index 000000000000..e1efba145533 +index 000000000..e1efba145 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/ispp.c @@ -0,0 +1,590 @@ @@ -931242,7 +931303,7 @@ index 000000000000..e1efba145533 +} diff --git a/drivers/media/platform/rockchip/ispp/ispp.h b/drivers/media/platform/rockchip/ispp/ispp.h new file mode 100755 -index 000000000000..baa07a09352c +index 000000000..baa07a093 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/ispp.h @@ -0,0 +1,50 @@ @@ -931298,7 +931359,7 @@ index 000000000000..baa07a09352c +#endif diff --git a/drivers/media/platform/rockchip/ispp/params.c b/drivers/media/platform/rockchip/ispp/params.c new file mode 100755 -index 000000000000..9d82b959b3c9 +index 000000000..9d82b959b --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/params.c @@ -0,0 +1,427 @@ @@ -931731,7 +931792,7 @@ index 000000000000..9d82b959b3c9 +} diff --git a/drivers/media/platform/rockchip/ispp/params.h b/drivers/media/platform/rockchip/ispp/params.h new file mode 100755 -index 000000000000..a5083891ac1f +index 000000000..a5083891a --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/params.h @@ -0,0 +1,69 @@ @@ -931806,7 +931867,7 @@ index 000000000000..a5083891ac1f +#endif diff --git a/drivers/media/platform/rockchip/ispp/params_v10.c b/drivers/media/platform/rockchip/ispp/params_v10.c new file mode 100755 -index 000000000000..9430d0b84797 +index 000000000..9430d0b84 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/params_v10.c @@ -0,0 +1,739 @@ @@ -932551,7 +932612,7 @@ index 000000000000..9430d0b84797 +} diff --git a/drivers/media/platform/rockchip/ispp/params_v20.c b/drivers/media/platform/rockchip/ispp/params_v20.c new file mode 100755 -index 000000000000..03c944c8af0d +index 000000000..03c944c8a --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/params_v20.c @@ -0,0 +1,209 @@ @@ -932766,7 +932827,7 @@ index 000000000000..03c944c8af0d +} diff --git a/drivers/media/platform/rockchip/ispp/procfs.c b/drivers/media/platform/rockchip/ispp/procfs.c new file mode 100755 -index 000000000000..9cee3fc71ce1 +index 000000000..9cee3fc71 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/procfs.c @@ -0,0 +1,143 @@ @@ -932915,7 +932976,7 @@ index 000000000000..9cee3fc71ce1 +#endif /* CONFIG_PROC_FS */ diff --git a/drivers/media/platform/rockchip/ispp/procfs.h b/drivers/media/platform/rockchip/ispp/procfs.h new file mode 100755 -index 000000000000..21ea0c471b58 +index 000000000..21ea0c471 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/procfs.h @@ -0,0 +1,21 @@ @@ -932942,7 +933003,7 @@ index 000000000000..21ea0c471b58 +#endif diff --git a/drivers/media/platform/rockchip/ispp/regs.h b/drivers/media/platform/rockchip/ispp/regs.h new file mode 100755 -index 000000000000..bc9f66766e0c +index 000000000..bc9f66766 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/regs.h @@ -0,0 +1,523 @@ @@ -933471,7 +933532,7 @@ index 000000000000..bc9f66766e0c +#endif /* _RKISPP_REGS_H */ diff --git a/drivers/media/platform/rockchip/ispp/stats.c b/drivers/media/platform/rockchip/ispp/stats.c new file mode 100755 -index 000000000000..df011710b1aa +index 000000000..df011710b --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/stats.c @@ -0,0 +1,388 @@ @@ -933865,7 +933926,7 @@ index 000000000000..df011710b1aa + diff --git a/drivers/media/platform/rockchip/ispp/stats.h b/drivers/media/platform/rockchip/ispp/stats.h new file mode 100755 -index 000000000000..e4d43bf25bde +index 000000000..e4d43bf25 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/stats.h @@ -0,0 +1,53 @@ @@ -933924,7 +933985,7 @@ index 000000000000..e4d43bf25bde +#endif /* _RKISPP_STATS_H */ diff --git a/drivers/media/platform/rockchip/ispp/stream.c b/drivers/media/platform/rockchip/ispp/stream.c new file mode 100755 -index 000000000000..a2f4a96bdec2 +index 000000000..a2f4a96bd --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/stream.c @@ -0,0 +1,2016 @@ @@ -935946,7 +936007,7 @@ index 000000000000..a2f4a96bdec2 +} diff --git a/drivers/media/platform/rockchip/ispp/stream.h b/drivers/media/platform/rockchip/ispp/stream.h new file mode 100755 -index 000000000000..8ffde026109d +index 000000000..8ffde0261 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/stream.h @@ -0,0 +1,280 @@ @@ -936232,7 +936293,7 @@ index 000000000000..8ffde026109d +#endif diff --git a/drivers/media/platform/rockchip/ispp/stream_v10.c b/drivers/media/platform/rockchip/ispp/stream_v10.c new file mode 100755 -index 000000000000..9a6ed6d89fda +index 000000000..9a6ed6d89 --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/stream_v10.c @@ -0,0 +1,1733 @@ @@ -937971,7 +938032,7 @@ index 000000000000..9a6ed6d89fda +} diff --git a/drivers/media/platform/rockchip/ispp/stream_v20.c b/drivers/media/platform/rockchip/ispp/stream_v20.c new file mode 100755 -index 000000000000..728a9c0afdf8 +index 000000000..728a9c0af --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/stream_v20.c @@ -0,0 +1,463 @@ @@ -938440,7 +938501,7 @@ index 000000000000..728a9c0afdf8 +} diff --git a/drivers/media/platform/rockchip/ispp/version.h b/drivers/media/platform/rockchip/ispp/version.h new file mode 100755 -index 000000000000..b7f01737aa92 +index 000000000..b7f01737a --- /dev/null +++ b/drivers/media/platform/rockchip/ispp/version.h @@ -0,0 +1,138 @@ @@ -938583,7 +938644,7 @@ index 000000000000..b7f01737aa92 + +#endif diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c -index 6334f99f1854..e4603e2833d7 100644 +index c03e7f3e7..b3a568fdb 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -12,6 +12,7 @@ @@ -938594,7 +938655,7 @@ index 6334f99f1854..e4603e2833d7 100644 #include #include #include -@@ -2331,7 +2332,11 @@ static int uvc_probe(struct usb_interface *intf, +@@ -2346,7 +2347,11 @@ static int uvc_probe(struct usb_interface *intf, } uvc_trace(UVC_TRACE_PROBE, "UVC device initialized.\n"); @@ -938608,7 +938669,7 @@ index 6334f99f1854..e4603e2833d7 100644 error: diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c -index 33babe6e8b3a..1b5d4d99ec68 100644 +index 33babe6e8..1b5d4d99e 100644 --- a/drivers/media/v4l2-core/v4l2-async.c +++ b/drivers/media/v4l2-core/v4l2-async.c @@ -555,6 +555,60 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, @@ -938673,7 +938734,7 @@ index 33babe6e8b3a..1b5d4d99ec68 100644 struct v4l2_async_notifier *notifier) { diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c -index d109b9f14407..fd755d98af84 100644 +index d109b9f14..fd755d98a 100644 --- a/drivers/mfd/rk808.c +++ b/drivers/mfd/rk808.c @@ -2,7 +2,7 @@ @@ -939909,10 +939970,10 @@ index d109b9f14407..fd755d98af84 100644 MODULE_LICENSE("GPL"); MODULE_AUTHOR("Chris Zhong "); diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c -index 599b7317b59a..f3f8000f0bb0 100644 +index 2c9f157ac..7423e3276 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c -@@ -2902,6 +2902,9 @@ static void mmc_blk_remove_debugfs(struct mmc_card *card, +@@ -2947,6 +2947,9 @@ static void mmc_blk_remove_debugfs(struct mmc_card *card, #endif /* CONFIG_DEBUG_FS */ @@ -939923,7 +939984,7 @@ index 599b7317b59a..f3f8000f0bb0 100644 { struct mmc_blk_data *md, *part_md; diff --git a/drivers/mmc/core/block.h b/drivers/mmc/core/block.h -index 31153f656f41..b71b3ec148f3 100644 +index 31153f656..b71b3ec14 100644 --- a/drivers/mmc/core/block.h +++ b/drivers/mmc/core/block.h @@ -17,4 +17,5 @@ struct work_struct; @@ -939933,7 +939994,7 @@ index 31153f656f41..b71b3ec148f3 100644 +extern struct mmc_card *this_card; #endif diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h -index a6c814fdbf0a..16746d211718 100644 +index a6c814fdb..16746d211 100644 --- a/drivers/mmc/core/core.h +++ b/drivers/mmc/core/core.h @@ -81,6 +81,8 @@ int mmc_attach_mmc(struct mmc_host *host); @@ -939946,10 +940007,10 @@ index a6c814fdbf0a..16746d211718 100644 extern bool use_spi_crc; diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c -index 03e2f965a96a..8d5e68527880 100644 +index b949a4468..9ca75caa1 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c -@@ -523,6 +523,9 @@ static int mmc_validate_host_caps(struct mmc_host *host) +@@ -549,6 +549,9 @@ static int mmc_validate_host_caps(struct mmc_host *host) return 0; } @@ -939959,7 +940020,7 @@ index 03e2f965a96a..8d5e68527880 100644 /** * mmc_add_host - initialise host hardware * @host: mmc host -@@ -591,3 +594,45 @@ void mmc_free_host(struct mmc_host *host) +@@ -618,3 +621,45 @@ void mmc_free_host(struct mmc_host *host) } EXPORT_SYMBOL(mmc_free_host); @@ -940006,7 +940067,7 @@ index 03e2f965a96a..8d5e68527880 100644 +} +EXPORT_SYMBOL(mmc_host_rescan); diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c -index 99a4ce68d82f..11b4cc339309 100644 +index 85c2947ed..ccaccc009 100644 --- a/drivers/mmc/core/sdio.c +++ b/drivers/mmc/core/sdio.c @@ -3,9 +3,15 @@ @@ -940717,7 +940778,7 @@ index 99a4ce68d82f..11b4cc339309 100644 +} +EXPORT_SYMBOL(sdio_reset_comm); diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile -index 451c25fc2c69..6dfb791fa621 100644 +index 451c25fc2..6dfb791fa 100644 --- a/drivers/mmc/host/Makefile +++ b/drivers/mmc/host/Makefile @@ -61,6 +61,7 @@ obj-$(CONFIG_MMC_DW_HI3798CV200) += dw_mmc-hi3798cv200.o @@ -940729,7 +940790,7 @@ index 451c25fc2c69..6dfb791fa621 100644 obj-$(CONFIG_MMC_SH_MMCIF) += sh_mmcif.o obj-$(CONFIG_MMC_JZ4740) += jz4740_mmc.o diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c -index 753502ce3c85..ac2ef5ea0c8d 100644 +index 753502ce3..ac2ef5ea0 100644 --- a/drivers/mmc/host/dw_mmc-rockchip.c +++ b/drivers/mmc/host/dw_mmc-rockchip.c @@ -22,6 +22,9 @@ struct dw_mci_rockchip_priv_data { @@ -940906,7 +940967,7 @@ index 753502ce3c85..ac2ef5ea0c8d 100644 return 0; } diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h -index da5923a92e60..0b53484e9306 100644 +index da5923a92..0b53484e9 100644 --- a/drivers/mmc/host/dw_mmc.h +++ b/drivers/mmc/host/dw_mmc.h @@ -230,6 +230,8 @@ struct dw_mci { @@ -940920,7 +940981,7 @@ index da5923a92e60..0b53484e9306 100644 /* DMA ops for Internal/External DMAC interface */ diff --git a/drivers/mmc/host/rk_sdmmc.h b/drivers/mmc/host/rk_sdmmc.h new file mode 100755 -index 000000000000..cad989246002 +index 000000000..cad989246 --- /dev/null +++ b/drivers/mmc/host/rk_sdmmc.h @@ -0,0 +1,387 @@ @@ -941313,7 +941374,7 @@ index 000000000000..cad989246002 +#endif /* _DW_MMC_H_ */ diff --git a/drivers/mmc/host/rk_sdmmc_ops.c b/drivers/mmc/host/rk_sdmmc_ops.c new file mode 100755 -index 000000000000..96f20d2dcfc7 +index 000000000..96f20d2dc --- /dev/null +++ b/drivers/mmc/host/rk_sdmmc_ops.c @@ -0,0 +1,194 @@ @@ -941513,7 +941574,7 @@ index 000000000000..96f20d2dcfc7 +MODULE_LICENSE("GPL"); diff --git a/drivers/mmc/host/rk_sdmmc_ops.h b/drivers/mmc/host/rk_sdmmc_ops.h new file mode 100755 -index 000000000000..8261d69f561d +index 000000000..8261d69f5 --- /dev/null +++ b/drivers/mmc/host/rk_sdmmc_ops.h @@ -0,0 +1,11 @@ @@ -941529,7 +941590,7 @@ index 000000000000..8261d69f561d + +#endif diff --git a/drivers/mmc/host/sdhci-of-dwcmshc.c b/drivers/mmc/host/sdhci-of-dwcmshc.c -index 59d8d96ce206..f344bd300018 100644 +index 59d8d96ce..f344bd300 100644 --- a/drivers/mmc/host/sdhci-of-dwcmshc.c +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c @@ -9,9 +9,12 @@ @@ -941885,7 +941946,7 @@ index 59d8d96ce206..f344bd300018 100644 MODULE_DEVICE_TABLE(of, sdhci_dwcmshc_dt_ids); diff --git a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/raw/Kconfig -index 6c46f25b57e2..2cc533e4e239 100644 +index 6c46f25b5..2cc533e4e 100644 --- a/drivers/mtd/nand/raw/Kconfig +++ b/drivers/mtd/nand/raw/Kconfig @@ -462,6 +462,18 @@ config MTD_NAND_ARASAN @@ -941908,7 +941969,7 @@ index 6c46f25b57e2..2cc533e4e239 100644 config MTD_SM_COMMON diff --git a/drivers/mtd/nand/raw/Makefile b/drivers/mtd/nand/raw/Makefile -index 2930f5b9015d..960c9be25204 100644 +index 2930f5b90..960c9be25 100644 --- a/drivers/mtd/nand/raw/Makefile +++ b/drivers/mtd/nand/raw/Makefile @@ -58,6 +58,7 @@ obj-$(CONFIG_MTD_NAND_STM32_FMC2) += stm32_fmc2_nand.o @@ -941921,7 +941982,7 @@ index 2930f5b9015d..960c9be25204 100644 nand-objs += nand_onfi.o diff --git a/drivers/mtd/nand/raw/rockchip-nand-controller.c b/drivers/mtd/nand/raw/rockchip-nand-controller.c new file mode 100644 -index 000000000000..796b678cb108 +index 000000000..796b678cb --- /dev/null +++ b/drivers/mtd/nand/raw/rockchip-nand-controller.c @@ -0,0 +1,1495 @@ @@ -943421,7 +943482,7 @@ index 000000000000..796b678cb108 +MODULE_DESCRIPTION("Rockchip Nand Flash Controller Driver"); +MODULE_ALIAS("platform:rockchip-nand-controller"); diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c -index 65b9e5846be4..7b25d960d0a2 100644 +index 65b9e5846..7b25d960d 100644 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c @@ -559,11 +559,6 @@ int hw_atl_utils_fw_rpc_wait(struct aq_hw_s *self, @@ -943449,7 +943510,7 @@ index 65b9e5846be4..7b25d960d0a2 100644 hw_atl_utils_fw_downld_dwords(self, self->rpc_addr, diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile -index 24e6145d4eae..be661832cef8 100644 +index 24e6145d4..be661832c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/Makefile +++ b/drivers/net/ethernet/stmicro/stmmac/Makefile @@ -19,7 +19,8 @@ obj-$(CONFIG_DWMAC_MEDIATEK) += dwmac-mediatek.o @@ -943464,7 +943525,7 @@ index 24e6145d4eae..be661832cef8 100644 obj-$(CONFIG_DWMAC_STM32) += dwmac-stm32.o diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c new file mode 100755 -index 000000000000..541788f9e2c8 +index 000000000..541788f9e --- /dev/null +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c @@ -0,0 +1,1613 @@ @@ -945083,7 +945144,7 @@ index 000000000000..541788f9e2c8 +} diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.h b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.h new file mode 100755 -index 000000000000..d71989b0fc74 +index 000000000..d71989b0f --- /dev/null +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.h @@ -0,0 +1,25 @@ @@ -945113,7 +945174,7 @@ index 000000000000..d71989b0fc74 +#endif /* __DWMAC_RK_TOOL_H__ */ + diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c -index d0d47d91b460..31560a312fe2 100644 +index d0d47d91b..31560a312 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c @@ -11,6 +11,7 @@ @@ -946332,7 +946393,7 @@ index d0d47d91b460..31560a312fe2 100644 }; MODULE_DEVICE_TABLE(of, rk_gmac_dwmac_match); diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig -index 170a64e67709..46f5cc40788a 100644 +index 170a64e67..46f5cc407 100644 --- a/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig @@ -48,6 +48,7 @@ source "drivers/net/wireless/st/Kconfig" @@ -946344,7 +946405,7 @@ index 170a64e67709..46f5cc40788a 100644 config PCMCIA_RAYCS tristate "Aviator/Raytheon 2.4GHz wireless support" diff --git a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile -index 80b324499786..5671364ae98d 100644 +index 80b324499..5671364ae 100644 --- a/drivers/net/wireless/Makefile +++ b/drivers/net/wireless/Makefile @@ -30,3 +30,4 @@ obj-$(CONFIG_USB_NET_RNDIS_WLAN) += rndis_wlan.o @@ -946353,7 +946414,7 @@ index 80b324499786..5671364ae98d 100644 obj-$(CONFIG_VIRT_WIFI) += virt_wifi.o +obj-$(CONFIG_WL_ROCKCHIP) += rockchip_wlan/ diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c -index 8f01fcbe9396..9736aa0ab7fd 100644 +index 8f01fcbe9..9736aa0ab 100644 --- a/drivers/net/wireless/marvell/mwifiex/usb.c +++ b/drivers/net/wireless/marvell/mwifiex/usb.c @@ -130,8 +130,7 @@ static int mwifiex_usb_recv(struct mwifiex_adapter *adapter, @@ -946368,7 +946429,7 @@ index 8f01fcbe9396..9736aa0ab7fd 100644 case MWIFIEX_USB_EP_DATA: diff --git a/drivers/net/wireless/rockchip_wlan/Kconfig b/drivers/net/wireless/rockchip_wlan/Kconfig new file mode 100755 -index 000000000000..d77741df5cc0 +index 000000000..d77741df5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/Kconfig @@ -0,0 +1,39 @@ @@ -946413,7 +946474,7 @@ index 000000000000..d77741df5cc0 +endif # WL_ROCKCHIP diff --git a/drivers/net/wireless/rockchip_wlan/Makefile b/drivers/net/wireless/rockchip_wlan/Makefile new file mode 100755 -index 000000000000..8279a393719f +index 000000000..8279a3937 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/Makefile @@ -0,0 +1,3 @@ @@ -946422,7 +946483,7 @@ index 000000000000..8279a393719f +obj-$(CONFIG_WL_ROCKCHIP) += rkwifi/rk_wifi_config.o diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/Kconfig b/drivers/net/wireless/rockchip_wlan/rkwifi/Kconfig new file mode 100755 -index 000000000000..2ec5138b79a7 +index 000000000..2ec5138b7 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/Kconfig @@ -0,0 +1,33 @@ @@ -946461,7 +946522,7 @@ index 000000000000..2ec5138b79a7 + default to add wlan1 interface diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/Makefile b/drivers/net/wireless/rockchip_wlan/rkwifi/Makefile new file mode 100755 -index 000000000000..e4e2c6964a6b +index 000000000..e4e2c6964 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/Makefile @@ -0,0 +1,10 @@ @@ -946477,7 +946538,7 @@ index 000000000000..e4e2c6964a6b + find . -name '*.o*' -exec rm -f {} \; diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/Kconfig b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/Kconfig new file mode 100755 -index 000000000000..3e6e78888be2 +index 000000000..3e6e78888 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/Kconfig @@ -0,0 +1,59 @@ @@ -946542,7 +946603,7 @@ index 000000000000..3e6e78888be2 +endchoice diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/Makefile b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/Makefile new file mode 100755 -index 000000000000..b8b4c353ee61 +index 000000000..b8b4c353e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/Makefile @@ -0,0 +1,258 @@ @@ -946806,7 +946867,7 @@ index 000000000000..b8b4c353ee61 +EXTRA_CFLAGS += -Wno-non-literal-null-conversion diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/aiutils.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/aiutils.c new file mode 100755 -index 000000000000..cc0b854d34d5 +index 000000000..cc0b854d3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/aiutils.c @@ -0,0 +1,2099 @@ @@ -948911,7 +948972,7 @@ index 000000000000..cc0b854d34d5 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcm_app_utils.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcm_app_utils.c new file mode 100755 -index 000000000000..76490b575fae +index 000000000..76490b575 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcm_app_utils.c @@ -0,0 +1,1033 @@ @@ -949950,7 +950011,7 @@ index 000000000000..76490b575fae +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmbloom.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmbloom.c new file mode 100755 -index 000000000000..80eb786f035a +index 000000000..80eb786f0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmbloom.c @@ -0,0 +1,243 @@ @@ -950199,7 +950260,7 @@ index 000000000000..80eb786f035a +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmevent.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmevent.c new file mode 100755 -index 000000000000..40bdb4bfda4f +index 000000000..40bdb4bfd --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmevent.c @@ -0,0 +1,396 @@ @@ -950601,7 +950662,7 @@ index 000000000000..40bdb4bfda4f +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh.c new file mode 100755 -index 000000000000..b59edd7540ca +index 000000000..b59edd754 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh.c @@ -0,0 +1,893 @@ @@ -951500,7 +951561,7 @@ index 000000000000..b59edd7540ca +#endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_linux.c new file mode 100755 -index 000000000000..84cc71992635 +index 000000000..84cc71992 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_linux.c @@ -0,0 +1,524 @@ @@ -952030,7 +952091,7 @@ index 000000000000..84cc71992635 +#endif /* BCMSDH_MODULE */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_sdmmc.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_sdmmc.c new file mode 100755 -index 000000000000..01f7fa23b2b3 +index 000000000..01f7fa23b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_sdmmc.c @@ -0,0 +1,1801 @@ @@ -953837,7 +953898,7 @@ index 000000000000..01f7fa23b2b3 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_sdmmc_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_sdmmc_linux.c new file mode 100755 -index 000000000000..a2d34724f6c4 +index 000000000..a2d34724f --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdh_sdmmc_linux.c @@ -0,0 +1,381 @@ @@ -954224,7 +954285,7 @@ index 000000000000..a2d34724f6c4 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdspi_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdspi_linux.c new file mode 100755 -index 000000000000..86d4cb9e3575 +index 000000000..86d4cb9e3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmsdspi_linux.c @@ -0,0 +1,438 @@ @@ -954668,7 +954729,7 @@ index 000000000000..86d4cb9e3575 +#endif /* !BCMSPI_ANDROID */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmspibrcm.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmspibrcm.c new file mode 100755 -index 000000000000..c0431638b995 +index 000000000..c0431638b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmspibrcm.c @@ -0,0 +1,1800 @@ @@ -956474,7 +956535,7 @@ index 000000000000..c0431638b995 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmstdlib_s.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmstdlib_s.c new file mode 100755 -index 000000000000..269db4c3c0c1 +index 000000000..269db4c3c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmstdlib_s.c @@ -0,0 +1,314 @@ @@ -956794,7 +956855,7 @@ index 000000000000..269db4c3c0c1 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmutils.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmutils.c new file mode 100755 -index 000000000000..c9b01bd66820 +index 000000000..c9b01bd66 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmutils.c @@ -0,0 +1,4379 @@ @@ -961179,7 +961240,7 @@ index 000000000000..c9b01bd66820 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_channels.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_channels.c new file mode 100755 -index 000000000000..fc916db9cb61 +index 000000000..fc916db9c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_channels.c @@ -0,0 +1,1494 @@ @@ -962679,7 +962740,7 @@ index 000000000000..fc916db9cb61 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_channels.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_channels.h new file mode 100755 -index 000000000000..ad3a6a4ae693 +index 000000000..ad3a6a4ae --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_channels.h @@ -0,0 +1,816 @@ @@ -963501,7 +963562,7 @@ index 000000000000..ad3a6a4ae693 +#endif /* _bcmwifi_channels_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_rates.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_rates.h new file mode 100755 -index 000000000000..196ff0fe0eff +index 000000000..196ff0fe0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_rates.h @@ -0,0 +1,832 @@ @@ -964339,7 +964400,7 @@ index 000000000000..196ff0fe0eff +#endif /* _bcmwifi_rates_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_rspec.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_rspec.h new file mode 100755 -index 000000000000..5c3d4a674814 +index 000000000..5c3d4a674 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmwifi_rspec.h @@ -0,0 +1,213 @@ @@ -964558,7 +964619,7 @@ index 000000000000..5c3d4a674814 +#endif /* _bcmwifi_rspec_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmxtlv.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmxtlv.c new file mode 100755 -index 000000000000..51d0f5aaf623 +index 000000000..51d0f5aaf --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/bcmxtlv.c @@ -0,0 +1,623 @@ @@ -965187,7 +965248,7 @@ index 000000000000..51d0f5aaf623 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus.c new file mode 100755 -index 000000000000..3de52fac5172 +index 000000000..3de52fac5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus.c @@ -0,0 +1,2903 @@ @@ -968096,7 +968157,7 @@ index 000000000000..3de52fac5172 +#endif /* #ifdef LINUX_EXTERNAL_MODULE_DBUS */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus_usb.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus_usb.c new file mode 100755 -index 000000000000..3be28b2da9d4 +index 000000000..3be28b2da --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus_usb.c @@ -0,0 +1,1173 @@ @@ -969275,7 +969336,7 @@ index 000000000000..3be28b2da9d4 +} /* dbus_bus_fw_get */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus_usb_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus_usb_linux.c new file mode 100755 -index 000000000000..2d999b12bc94 +index 000000000..2d999b12b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dbus_usb_linux.c @@ -0,0 +1,3404 @@ @@ -972685,7 +972746,7 @@ index 000000000000..2d999b12bc94 +#endif /* BCMUSBDEV_COMPOSITE */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd.h new file mode 100755 -index 000000000000..427e96ea33bb +index 000000000..427e96ea3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd.h @@ -0,0 +1,3433 @@ @@ -976124,7 +976185,7 @@ index 000000000000..427e96ea33bb +#endif /* _dhd_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_bus.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_bus.h new file mode 100755 -index 000000000000..c5b07cf493d9 +index 000000000..c5b07cf49 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_bus.h @@ -0,0 +1,357 @@ @@ -976487,7 +976548,7 @@ index 000000000000..c5b07cf493d9 +#endif /* _dhd_bus_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_buzzz.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_buzzz.h new file mode 100755 -index 000000000000..342cc004d25a +index 000000000..342cc004d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_buzzz.h @@ -0,0 +1,38 @@ @@ -976531,287 +976592,287 @@ index 000000000000..342cc004d25a +#endif /* _DHD_BUZZZ_H_INCLUDED_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ccode.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ccode.c new file mode 100755 -index 000000000000..fe9a826325e6 +index 000000000..9dd716b70 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ccode.c @@ -0,0 +1,274 @@ -+ -+#ifdef CCODE_LIST -+#ifdef CONFIG_COMPAT -+#include -+#endif /* COMFIG_COMPAT */ -+#include -+#include -+ -+#ifdef BCMSDIO -+#define CCODE_43438 -+#define CCODE_43436 -+#define CCODE_43455C0 -+#endif -+#if defined(BCMSDIO) || defined(BCMPCIE) -+#define CCODE_4356A2 -+#define CCODE_4359C0 -+#endif -+#if defined(BCMPCIE) -+#define CCODE_4375B4 -+#endif -+#ifdef BCMDBUS -+#define CCODE_4358U -+#endif -+ -+#ifdef BCMSDIO -+#ifdef CCODE_43438 -+const char ccode_43438[] = "RU/13"; -+#else -+const char ccode_43438[] = ""; -+#endif -+ -+#ifdef CCODE_43436 -+const char ccode_43436[] = \ -+"AE/1 AR/1 AT/1 AU/2 "\ -+"BE/1 BG/1 BN/1 "\ -+"CA/2 CH/1 CN/38 CY/1 CZ/1 "\ -+"DE/3 DK/1 "\ -+"EE/1 ES/1 "\ -+"FI/1 FR/1 "\ -+"GB/1 GR/1 "\ -+"HR/1 HU/1 "\ -+"ID/5 IE/1 IS/1 IT/1 "\ -+"JP/3 "\ -+"KR/4 KW/1 "\ -+"LI/1 LT/1 LU/1 LV/1 "\ -+"MA/1 MT/1 MX/1 "\ -+"NL/1 NO/1 "\ -+"PL/1 PT/1 PY/1 "\ -+"RO/1 RU/5 "\ -+"SE/1 SI/1 SK/1 "\ -+"TR/7 TW/2 "\ -+"US/26 "\ -+"XZ/11"; -+#else -+const char ccode_43436[] = ""; -+#endif -+ -+#ifdef CCODE_43455C0 -+const char ccode_43455c0[] = \ -+"AE/6 AG/2 AI/1 AL/2 AS/12 AT/4 AU/6 AW/2 AZ/2 "\ -+"BA/2 BD/1 BE/4 BG/4 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\ -+"CA/2 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ -+"DE/7 DK/4 "\ -+"EC/21 EE/4 EG/13 ES/4 ET/2 "\ -+"FI/4 FR/5 "\ -+"GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/30 "\ -+"HK/2 HR/4 HU/4 "\ -+"ID/1 IE/5 IL/14 IN/3 IS/4 IT/4 "\ -+"JO/3 JP/45 "\ -+"KH/2 KR/96 KW/5 KY/3 "\ -+"LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\ -+"MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MQ/2 MR/2 MT/4 MU/2 MV/3 MW/1 MX/44 MY/3 "\ -+"NI/2 NL/4 NO/4 NZ/4 "\ -+"OM/4 "\ -+"PA/17 PE/20 PH/5 PL/4 PR/38 PT/4 PY/2 "\ -+"Q2/993 "\ -+"RE/2 RO/4 RS/2 RU/13 "\ -+"SE/4 SI/4 SK/4 SV/25 "\ -+"TH/5 TN/1 TR/7 TT/3 TW/65 "\ -+"UA/8 US/988 "\ -+"VA/2 VE/3 VG/2 VN/4 "\ -+"XZ/11 "\ -+"YT/2 "\ -+"ZA/6"; -+#else -+const char ccode_43455c0[] = ""; -+#endif -+#endif -+ -+#ifdef CCODE_4356A2 -+const char ccode_4356a2[] = \ -+"AE/6 AG/2 AI/1 AL/2 AN/2 AR/21 AS/12 AT/4 AU/6 AW/2 AZ/2 "\ -+"BA/2 BD/2 BE/4 BG/4 BH/4 BM/12 BN/4 BR/4 BS/2 BY/3 "\ -+"CA/31 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ -+"DE/7 DK/4 DZ/1 "\ -+"EC/21 EE/4 ES/4 ET/2 "\ -+"FI/4 FR/5 "\ -+"GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/12 "\ -+"HK/2 HR/4 HU/4 "\ -+"ID/13 IE/5 IL/7 IN/28 IS/4 IT/4 "\ -+"JO/3 JP/58 "\ -+"KH/2 KR/57 KW/5 KY/3 "\ -+"LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\ -+"MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MO/2 MR/2 MT/4 MQ/2 MU/2 MV/3 MW/1 MX/20 MY/16 "\ -+"NI/2 NL/4 NO/4 NP/3 NZ/4 "\ -+"OM/4 "\ -+"PA/17 PE/20 PG/2 PH/5 PL/4 PR/20 PT/4 PY/2 "\ -+"RE/2 RO/4 RS/2 RU/986 "\ -+"SE/4 SG/19 SI/4 SK/4 SN/2 SV/19 "\ -+"TH/9 TN/1 TR/7 TT/3 TW/1 "\ -+"UA/8 UG/2 US/1 UY/1 "\ -+"VA/2 VE/3 VG/2 VI/13 VN/4 "\ -+"XZ/11 "\ -+"YT/2 "\ -+"ZM/2 "\ -+"E0/32"; -+#else -+const char ccode_4356a2[] = ""; -+#endif -+ -+#ifdef CCODE_4359C0 -+const char ccode_4359c0[] = \ -+"AD/1 AE/6 AG/2 AI/1 AL/3 AS/12 AT/21 AU/6 AW/2 AZ/8 "\ -+"BA/4 BD/1 BE/19 BG/18 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\ -+"CA/2 CN/38 CO/17 CR/17 CY/18 CZ/18 "\ -+"DE/30 DK/19 "\ -+"E0/32 EC/21 EE/18 EG/13 ES/21 ET/2 "\ -+"FI/19 FR/21 "\ -+"GB/996 GD/2 GE/1 GF/2 GP/2 GR/18 GT/1 GU/30 "\ -+"HK/2 HR/18 HU/18 "\ -+"ID/1 IE/21 IL/276 IN/3 IS/17 IT/20 "\ -+"JO/3 JP/967 "\ -+"KH/2 KR/70 KW/5 KY/3 "\ -+"LA/2 LB/5 LI/17 LK/1 LS/2 LT/18 LU/18 LV/18 "\ -+"MA/2 MC/2 MD/3 ME/5 MK/4 MN/1 MQ/2 MR/2 MT/18 MU/2 MV/3 MW/1 MX/44 MY/3 "\ -+"NI/2 NL/19 NO/18 NZ/4 "\ -+"OM/4 "\ -+"PA/17 PE/20 PH/5 PL/18 PR/38 PT/20 PY/2 "\ -+"Q1/947 Q2/993 "\ -+"RE/2 RO/18 RS/4 RU/986 "\ -+"SE/19 SI/18 SK/18 SM/1 SV/25 "\ -+"TH/5 TN/1 TR/18 TT/3 TW/980 "\ -+"UA/16 US/988 "\ -+"VA/3 VE/3 VG/2 VN/4 "\ -+"XZ/11 "\ -+"YT/2 "\ -+"ZA/6"; -+#else -+const char ccode_4359c0[] = ""; -+#endif -+ -+#ifdef CCODE_4375B4 -+const char ccode_4375b4[] = \ -+"AE/6 AL/2 AM/1 AN/5 AR/21 AT/4 AU/6 AZ/2 "\ -+"BA/2 BE/4 BG/4 BH/4 BN/4 BO/5 BR/17 BY/3 "\ -+"CA/2 CH/4 CL/7 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ -+"DE/7 DK/4 DZ/2 EC/18 EE/4 EG/13 ES/4 "\ -+"FI/4 FR/5 "\ -+"GB/6 GR/4 "\ -+"HK/999 HN/8 HR/4 HU/4 "\ -+"ID/5 IE/5 IL/7 IN/3 IS/4 IT/4 "\ -+"JO/3 JP/72 "\ -+"KE/1 KR/96 KW/5 KZ/5 "\ -+"LA/2 LB/5 LI/4 LK/2 LT/4 LU/4 LV/4 "\ -+"MA/7 MC/1 ME/2 MK/2 MO/4 MT/4 MX/20 MY/19 "\ -+"NL/4 NO/4 NZ/4 "\ -+"OM/4 "\ -+"PA/17 PE/20 PH/5 PK/2 PL/4 PR/20 PT/4 "\ -+"RO/4 RU/62 "\ -+"SA/5 SE/4 SG/12 SI/4 SK/4 SV/17 "\ -+"TH/5 TN/1 TR/7 TT/3 TW/65 "\ -+"UA/16 US/140 UY/10 "\ -+"VE/3 VN/4 "\ -+"XZ/11 "\ -+"ZA/19"; -+#else -+const char ccode_4375b4[] = ""; -+#endif -+ -+#ifdef CCODE_4358U -+const char ccode_4358u[] = \ -+"BE/4 BR/4 "\ -+"CA/2 CH/4 CN/38 CY/4 "\ -+"DE/7 DK/4 "\ -+"ES/4 "\ -+"FI/4 FR/5 "\ -+"GB/6 GR/4 "\ -+"HK/2 HU/4 "\ -+"IE/5 IL/7 IS/4 IT/4 "\ -+"JP/72 "\ -+"KE/0 KR/4 "\ -+"MY/3 "\ -+"NL/4 "\ -+"PT/4 "\ -+"SA/5 SE/4 SG/0 SZ/0 "\ -+"TH/5 TR/7 TW/230 "\ -+"US/0 "\ -+"VN/4"; -+#else -+const char ccode_4358u[] = ""; -+#endif -+ -+typedef struct ccode_list_map_t { -+ uint chip; -+ uint chiprev; -+ const char *ccode_list; -+ const char *ccode_ww; -+} ccode_list_map_t; -+ -+extern const char ccode_43438[]; -+extern const char ccode_43455c0[]; -+extern const char ccode_4356a2[]; -+extern const char ccode_4359c0[]; -+extern const char ccode_4358u[]; -+ -+const ccode_list_map_t ccode_list_map[] = { -+ /* ChipID Chiprev ccode */ -+#ifdef BCMSDIO -+ {BCM43430_CHIP_ID, 0, ccode_43438, ""}, -+ {BCM43430_CHIP_ID, 1, ccode_43438, ""}, -+ {BCM43430_CHIP_ID, 2, ccode_43436, ""}, -+ {BCM4345_CHIP_ID, 6, ccode_43455c0, "XZ/11"}, -+ {BCM43454_CHIP_ID, 6, ccode_43455c0, "XZ/11"}, -+ {BCM4345_CHIP_ID, 9, ccode_43455c0, "XZ/11"}, -+ {BCM43454_CHIP_ID, 9, ccode_43455c0, "XZ/11"}, -+ {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, -+ {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, -+ {BCM4371_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, -+ {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"}, -+#endif -+#ifdef BCMPCIE -+ {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, -+ {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, -+ {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"}, -+ {BCM4375_CHIP_ID, 5, ccode_4375b4, "XZ/11"}, -+#endif -+#ifdef BCMDBUS -+ {BCM43569_CHIP_ID, 2, ccode_4358u, "XW/0"}, -+#endif -+}; -+ -+int -+dhd_ccode_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec) -+{ -+ int bcmerror = -1, i; -+ uint chip = dhd->conf->chip, chiprev = dhd->conf->chiprev; -+ const char *ccode_list = NULL, *ccode_ww = NULL; -+ char *pch; -+ -+ for (i=0; ichip == chip && row->chiprev == chiprev) { -+ ccode_list = row->ccode_list; -+ ccode_ww = row->ccode_ww; -+ break; -+ } -+ } -+ -+ if (ccode_list) { -+ pch = strstr(ccode_list, cspec->ccode); -+ if (pch) { -+ cspec->rev = (int)simple_strtol(pch+strlen(cspec->ccode)+1, NULL, 0); -+ bcmerror = 0; -+ } -+ } -+ -+ if (bcmerror && ccode_ww && strlen(ccode_ww)>=4) { -+ memcpy(cspec->ccode, ccode_ww, 2); -+ cspec->rev = (int)simple_strtol(ccode_ww+3, NULL, 0); -+ } -+ -+ return bcmerror; -+} -+#endif ++ ++#ifdef CCODE_LIST ++#ifdef CONFIG_COMPAT ++#include ++#endif /* COMFIG_COMPAT */ ++#include ++#include ++ ++#ifdef BCMSDIO ++#define CCODE_43438 ++#define CCODE_43436 ++#define CCODE_43455C0 ++#endif ++#if defined(BCMSDIO) || defined(BCMPCIE) ++#define CCODE_4356A2 ++#define CCODE_4359C0 ++#endif ++#if defined(BCMPCIE) ++#define CCODE_4375B4 ++#endif ++#ifdef BCMDBUS ++#define CCODE_4358U ++#endif ++ ++#ifdef BCMSDIO ++#ifdef CCODE_43438 ++const char ccode_43438[] = "RU/13"; ++#else ++const char ccode_43438[] = ""; ++#endif ++ ++#ifdef CCODE_43436 ++const char ccode_43436[] = \ ++"AE/1 AR/1 AT/1 AU/2 "\ ++"BE/1 BG/1 BN/1 "\ ++"CA/2 CH/1 CN/38 CY/1 CZ/1 "\ ++"DE/3 DK/1 "\ ++"EE/1 ES/1 "\ ++"FI/1 FR/1 "\ ++"GB/1 GR/1 "\ ++"HR/1 HU/1 "\ ++"ID/5 IE/1 IS/1 IT/1 "\ ++"JP/3 "\ ++"KR/4 KW/1 "\ ++"LI/1 LT/1 LU/1 LV/1 "\ ++"MA/1 MT/1 MX/1 "\ ++"NL/1 NO/1 "\ ++"PL/1 PT/1 PY/1 "\ ++"RO/1 RU/5 "\ ++"SE/1 SI/1 SK/1 "\ ++"TR/7 TW/2 "\ ++"US/26 "\ ++"XZ/11"; ++#else ++const char ccode_43436[] = ""; ++#endif ++ ++#ifdef CCODE_43455C0 ++const char ccode_43455c0[] = \ ++"AE/6 AG/2 AI/1 AL/2 AS/12 AT/4 AU/6 AW/2 AZ/2 "\ ++"BA/2 BD/1 BE/4 BG/4 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\ ++"CA/2 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ ++"DE/7 DK/4 "\ ++"EC/21 EE/4 EG/13 ES/4 ET/2 "\ ++"FI/4 FR/5 "\ ++"GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/30 "\ ++"HK/2 HR/4 HU/4 "\ ++"ID/1 IE/5 IL/14 IN/3 IS/4 IT/4 "\ ++"JO/3 JP/45 "\ ++"KH/2 KR/96 KW/5 KY/3 "\ ++"LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\ ++"MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MQ/2 MR/2 MT/4 MU/2 MV/3 MW/1 MX/44 MY/3 "\ ++"NI/2 NL/4 NO/4 NZ/4 "\ ++"OM/4 "\ ++"PA/17 PE/20 PH/5 PL/4 PR/38 PT/4 PY/2 "\ ++"Q2/993 "\ ++"RE/2 RO/4 RS/2 RU/13 "\ ++"SE/4 SI/4 SK/4 SV/25 "\ ++"TH/5 TN/1 TR/7 TT/3 TW/65 "\ ++"UA/8 US/988 "\ ++"VA/2 VE/3 VG/2 VN/4 "\ ++"XZ/11 "\ ++"YT/2 "\ ++"ZA/6"; ++#else ++const char ccode_43455c0[] = ""; ++#endif ++#endif ++ ++#ifdef CCODE_4356A2 ++const char ccode_4356a2[] = \ ++"AE/6 AG/2 AI/1 AL/2 AN/2 AR/21 AS/12 AT/4 AU/6 AW/2 AZ/2 "\ ++"BA/2 BD/2 BE/4 BG/4 BH/4 BM/12 BN/4 BR/4 BS/2 BY/3 "\ ++"CA/31 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ ++"DE/7 DK/4 DZ/1 "\ ++"EC/21 EE/4 ES/4 ET/2 "\ ++"FI/4 FR/5 "\ ++"GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/12 "\ ++"HK/2 HR/4 HU/4 "\ ++"ID/13 IE/5 IL/7 IN/28 IS/4 IT/4 "\ ++"JO/3 JP/58 "\ ++"KH/2 KR/57 KW/5 KY/3 "\ ++"LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\ ++"MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MO/2 MR/2 MT/4 MQ/2 MU/2 MV/3 MW/1 MX/20 MY/16 "\ ++"NI/2 NL/4 NO/4 NP/3 NZ/4 "\ ++"OM/4 "\ ++"PA/17 PE/20 PG/2 PH/5 PL/4 PR/20 PT/4 PY/2 "\ ++"RE/2 RO/4 RS/2 RU/986 "\ ++"SE/4 SG/19 SI/4 SK/4 SN/2 SV/19 "\ ++"TH/9 TN/1 TR/7 TT/3 TW/1 "\ ++"UA/8 UG/2 US/1 UY/1 "\ ++"VA/2 VE/3 VG/2 VI/13 VN/4 "\ ++"XZ/11 "\ ++"YT/2 "\ ++"ZM/2 "\ ++"E0/32"; ++#else ++const char ccode_4356a2[] = ""; ++#endif ++ ++#ifdef CCODE_4359C0 ++const char ccode_4359c0[] = \ ++"AD/1 AE/6 AG/2 AI/1 AL/3 AS/12 AT/21 AU/6 AW/2 AZ/8 "\ ++"BA/4 BD/1 BE/19 BG/18 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\ ++"CA/2 CN/38 CO/17 CR/17 CY/18 CZ/18 "\ ++"DE/30 DK/19 "\ ++"E0/32 EC/21 EE/18 EG/13 ES/21 ET/2 "\ ++"FI/19 FR/21 "\ ++"GB/996 GD/2 GE/1 GF/2 GP/2 GR/18 GT/1 GU/30 "\ ++"HK/2 HR/18 HU/18 "\ ++"ID/1 IE/21 IL/276 IN/3 IS/17 IT/20 "\ ++"JO/3 JP/967 "\ ++"KH/2 KR/70 KW/5 KY/3 "\ ++"LA/2 LB/5 LI/17 LK/1 LS/2 LT/18 LU/18 LV/18 "\ ++"MA/2 MC/2 MD/3 ME/5 MK/4 MN/1 MQ/2 MR/2 MT/18 MU/2 MV/3 MW/1 MX/44 MY/3 "\ ++"NI/2 NL/19 NO/18 NZ/4 "\ ++"OM/4 "\ ++"PA/17 PE/20 PH/5 PL/18 PR/38 PT/20 PY/2 "\ ++"Q1/947 Q2/993 "\ ++"RE/2 RO/18 RS/4 RU/986 "\ ++"SE/19 SI/18 SK/18 SM/1 SV/25 "\ ++"TH/5 TN/1 TR/18 TT/3 TW/980 "\ ++"UA/16 US/988 "\ ++"VA/3 VE/3 VG/2 VN/4 "\ ++"XZ/11 "\ ++"YT/2 "\ ++"ZA/6"; ++#else ++const char ccode_4359c0[] = ""; ++#endif ++ ++#ifdef CCODE_4375B4 ++const char ccode_4375b4[] = \ ++"AE/6 AL/2 AM/1 AN/5 AR/21 AT/4 AU/6 AZ/2 "\ ++"BA/2 BE/4 BG/4 BH/4 BN/4 BO/5 BR/17 BY/3 "\ ++"CA/2 CH/4 CL/7 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ ++"DE/7 DK/4 DZ/2 EC/18 EE/4 EG/13 ES/4 "\ ++"FI/4 FR/5 "\ ++"GB/6 GR/4 "\ ++"HK/999 HN/8 HR/4 HU/4 "\ ++"ID/5 IE/5 IL/7 IN/3 IS/4 IT/4 "\ ++"JO/3 JP/72 "\ ++"KE/1 KR/96 KW/5 KZ/5 "\ ++"LA/2 LB/5 LI/4 LK/2 LT/4 LU/4 LV/4 "\ ++"MA/7 MC/1 ME/2 MK/2 MO/4 MT/4 MX/20 MY/19 "\ ++"NL/4 NO/4 NZ/4 "\ ++"OM/4 "\ ++"PA/17 PE/20 PH/5 PK/2 PL/4 PR/20 PT/4 "\ ++"RO/4 RU/62 "\ ++"SA/5 SE/4 SG/12 SI/4 SK/4 SV/17 "\ ++"TH/5 TN/1 TR/7 TT/3 TW/65 "\ ++"UA/16 US/140 UY/10 "\ ++"VE/3 VN/4 "\ ++"XZ/11 "\ ++"ZA/19"; ++#else ++const char ccode_4375b4[] = ""; ++#endif ++ ++#ifdef CCODE_4358U ++const char ccode_4358u[] = \ ++"BE/4 BR/4 "\ ++"CA/2 CH/4 CN/38 CY/4 "\ ++"DE/7 DK/4 "\ ++"ES/4 "\ ++"FI/4 FR/5 "\ ++"GB/6 GR/4 "\ ++"HK/2 HU/4 "\ ++"IE/5 IL/7 IS/4 IT/4 "\ ++"JP/72 "\ ++"KE/0 KR/4 "\ ++"MY/3 "\ ++"NL/4 "\ ++"PT/4 "\ ++"SA/5 SE/4 SG/0 SZ/0 "\ ++"TH/5 TR/7 TW/230 "\ ++"US/0 "\ ++"VN/4"; ++#else ++const char ccode_4358u[] = ""; ++#endif ++ ++typedef struct ccode_list_map_t { ++ uint chip; ++ uint chiprev; ++ const char *ccode_list; ++ const char *ccode_ww; ++} ccode_list_map_t; ++ ++extern const char ccode_43438[]; ++extern const char ccode_43455c0[]; ++extern const char ccode_4356a2[]; ++extern const char ccode_4359c0[]; ++extern const char ccode_4358u[]; ++ ++const ccode_list_map_t ccode_list_map[] = { ++ /* ChipID Chiprev ccode */ ++#ifdef BCMSDIO ++ {BCM43430_CHIP_ID, 0, ccode_43438, ""}, ++ {BCM43430_CHIP_ID, 1, ccode_43438, ""}, ++ {BCM43430_CHIP_ID, 2, ccode_43436, ""}, ++ {BCM4345_CHIP_ID, 6, ccode_43455c0, "XZ/11"}, ++ {BCM43454_CHIP_ID, 6, ccode_43455c0, "XZ/11"}, ++ {BCM4345_CHIP_ID, 9, ccode_43455c0, "XZ/11"}, ++ {BCM43454_CHIP_ID, 9, ccode_43455c0, "XZ/11"}, ++ {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, ++ {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, ++ {BCM4371_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, ++ {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"}, ++#endif ++#ifdef BCMPCIE ++ {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, ++ {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, ++ {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"}, ++ {BCM4375_CHIP_ID, 5, ccode_4375b4, "XZ/11"}, ++#endif ++#ifdef BCMDBUS ++ {BCM43569_CHIP_ID, 2, ccode_4358u, "XW/0"}, ++#endif ++}; ++ ++int ++dhd_ccode_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec) ++{ ++ int bcmerror = -1, i; ++ uint chip = dhd->conf->chip, chiprev = dhd->conf->chiprev; ++ const char *ccode_list = NULL, *ccode_ww = NULL; ++ char *pch; ++ ++ for (i=0; ichip == chip && row->chiprev == chiprev) { ++ ccode_list = row->ccode_list; ++ ccode_ww = row->ccode_ww; ++ break; ++ } ++ } ++ ++ if (ccode_list) { ++ pch = strstr(ccode_list, cspec->ccode); ++ if (pch) { ++ cspec->rev = (int)simple_strtol(pch+strlen(cspec->ccode)+1, NULL, 0); ++ bcmerror = 0; ++ } ++ } ++ ++ if (bcmerror && ccode_ww && strlen(ccode_ww)>=4) { ++ memcpy(cspec->ccode, ccode_ww, 2); ++ cspec->rev = (int)simple_strtol(ccode_ww+3, NULL, 0); ++ } ++ ++ return bcmerror; ++} ++#endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cdc.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cdc.c new file mode 100755 -index 000000000000..44cd1cbf24e6 +index 000000000..44cd1cbf2 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cdc.c @@ -0,0 +1,981 @@ @@ -977798,7 +977859,7 @@ index 000000000000..44cd1cbf24e6 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cfg80211.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cfg80211.c new file mode 100755 -index 000000000000..51a13e092a3e +index 000000000..51a13e092 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cfg80211.c @@ -0,0 +1,332 @@ @@ -978136,7 +978197,7 @@ index 000000000000..51a13e092a3e +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cfg80211.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cfg80211.h new file mode 100755 -index 000000000000..88c2e0a16bcc +index 000000000..88c2e0a16 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_cfg80211.h @@ -0,0 +1,55 @@ @@ -978197,7 +978258,7 @@ index 000000000000..88c2e0a16bcc +#endif /* __DHD_CFG80211__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_common.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_common.c new file mode 100755 -index 000000000000..df11fa183e60 +index 000000000..df11fa183 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_common.c @@ -0,0 +1,7496 @@ @@ -985699,7 +985760,7 @@ index 000000000000..df11fa183e60 +#endif /* DISABLE_HE_ENAB || CUSTOM_CONTROL_HE_ENAB */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_config.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_config.c new file mode 100755 -index 000000000000..c4713ded8a23 +index 000000000..c4713ded8 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_config.c @@ -0,0 +1,4730 @@ @@ -990435,7 +990496,7 @@ index 000000000000..c4713ded8a23 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_config.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_config.h new file mode 100755 -index 000000000000..6af9c7b18013 +index 000000000..6af9c7b18 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_config.h @@ -0,0 +1,384 @@ @@ -990825,316 +990886,316 @@ index 000000000000..6af9c7b18013 +#endif /* _dhd_config_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_csi.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_csi.c new file mode 100755 -index 000000000000..dd1a0681bf4f +index 000000000..f61cced09 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_csi.c @@ -0,0 +1,220 @@ -+/* -+ * Broadcom Dongle Host Driver (DHD) -+ * -+ * Copyright (C) 1999-2018, Broadcom. -+ * -+ * Unless you and Broadcom execute a separate written software license -+ * agreement governing use of this software, this software is licensed to you -+ * under the terms of the GNU General Public License version 2 (the "GPL"), -+ * available at http://www.broadcom.com/licenses/GPLv2.php, with the -+ * following added to such license: -+ * -+ * As a special exception, the copyright holders of this software give you -+ * permission to link this software with independent modules, and to copy and -+ * distribute the resulting executable under terms of your choice, provided that -+ * you also meet, for each linked independent module, the terms and conditions of -+ * the license of that module. An independent module is a module which is not -+ * derived from this software. The special exception does not apply to any -+ * modifications of the software. -+ * -+ * Notwithstanding the above, under no circumstances may you combine this -+ * software in any way with any other Broadcom software provided under a license -+ * other than the GPL, without Broadcom's express prior written consent. -+ * -+ * $Id: dhd_csi.c 606280 2015-12-15 05:28:25Z $ -+ */ -+#include -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#define NULL_CHECK(p, s, err) \ -+ do { \ -+ if (!(p)) { \ -+ printf("NULL POINTER (%s) : %s\n", __FUNCTION__, (s)); \ -+ err = BCME_ERROR; \ -+ return err; \ -+ } \ -+ } while (0) -+ -+#define TIMESPEC_TO_US(ts) (((uint64)(ts).tv_sec * USEC_PER_SEC) + \ -+ (ts).tv_nsec / NSEC_PER_USEC) -+ -+#define NULL_ADDR "\x00\x00\x00\x00\x00\x00" -+ -+int -+dhd_csi_event_handler(dhd_pub_t *dhd, wl_event_msg_t *event, void *event_data) -+{ -+ int ret = BCME_OK; -+ bool is_new = TRUE; -+ cfr_dump_data_t *p_event; -+ cfr_dump_list_t *ptr, *next, *new; -+ -+ NULL_CHECK(dhd, "dhd is NULL", ret); -+ -+ DHD_TRACE(("Enter %s\n", __FUNCTION__)); -+ -+ if (!event_data) { -+ DHD_ERROR(("%s: event_data is NULL\n", __FUNCTION__)); -+ return -EINVAL; -+ } -+ p_event = (cfr_dump_data_t *)event_data; -+ -+ /* check if this addr exist */ -+ if (!list_empty(&dhd->csi_list)) { -+ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { -+ if (bcmp(&ptr->entry.header.peer_macaddr, &p_event->header.peer_macaddr, -+ ETHER_ADDR_LEN) == 0) { -+ int pos = 0, dump_len = 0, remain = 0; -+ is_new = FALSE; -+ DHD_INFO(("CSI data exist\n")); -+ if (p_event->header.status == 0) { -+ bcopy(&p_event->header, &ptr->entry.header, sizeof(cfr_dump_header_t)); -+ dump_len = p_event->header.cfr_dump_length; -+ if (dump_len < MAX_EVENT_SIZE) { -+ bcopy(&p_event->data, &ptr->entry.data, dump_len); -+ } else { -+ /* for big csi data */ -+ uint8 *p = (uint8 *)&ptr->entry.data; -+ remain = p_event->header.remain_length; -+ if (remain) { -+ pos = dump_len - remain - MAX_EVENT_SIZE; -+ p += pos; -+ bcopy(&p_event->data, p, MAX_EVENT_SIZE); -+ } -+ /* copy rest of csi data */ -+ else { -+ pos = dump_len - (dump_len % MAX_EVENT_SIZE); -+ p += pos; -+ bcopy(&p_event->data, p, (dump_len % MAX_EVENT_SIZE)); -+ } -+ } -+ return BCME_OK; -+ } -+ } -+ } -+ } -+ if (is_new) { -+ if (dhd->csi_count < MAX_CSI_NUM) { -+ new = (cfr_dump_list_t *)MALLOCZ(dhd->osh, sizeof(cfr_dump_list_t)); -+ if (!new){ -+ DHD_ERROR(("Malloc cfr dump list error\n")); -+ return BCME_NOMEM; -+ } -+ bcopy(&p_event->header, &new->entry.header, sizeof(cfr_dump_header_t)); -+ DHD_INFO(("New entry data size %d\n", p_event->header.cfr_dump_length)); -+ /* for big csi data */ -+ if (p_event->header.remain_length) { -+ DHD_TRACE(("remain %d\n", p_event->header.remain_length)); -+ bcopy(&p_event->data, &new->entry.data, MAX_EVENT_SIZE); -+ } -+ else -+ bcopy(&p_event->data, &new->entry.data, p_event->header.cfr_dump_length); -+ INIT_LIST_HEAD(&(new->list)); -+ list_add_tail(&(new->list), &dhd->csi_list); -+ dhd->csi_count++; -+ } -+ else { -+ DHD_TRACE(("Over maximum CSI Number 8. SKIP it.\n")); -+ } -+ } -+ return ret; -+} -+ -+int -+dhd_csi_init(dhd_pub_t *dhd) -+{ -+ int err = BCME_OK; -+ -+ NULL_CHECK(dhd, "dhd is NULL", err); -+ INIT_LIST_HEAD(&dhd->csi_list); -+ dhd->csi_count = 0; -+ -+ return err; -+} -+ -+int -+dhd_csi_deinit(dhd_pub_t *dhd) -+{ -+ int err = BCME_OK; -+ cfr_dump_list_t *ptr, *next; -+ -+ NULL_CHECK(dhd, "dhd is NULL", err); -+ -+ if (!list_empty(&dhd->csi_list)) { -+ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { -+ list_del(&ptr->list); -+ MFREE(dhd->osh, ptr, sizeof(cfr_dump_list_t)); -+ } -+ } -+ return err; -+} -+ -+void -+dhd_csi_clean_list(dhd_pub_t *dhd) -+{ -+ cfr_dump_list_t *ptr, *next; -+ int num = 0; -+ -+ if (!dhd) { -+ DHD_ERROR(("NULL POINTER: %s\n", __FUNCTION__)); -+ return; -+ } -+ -+ if (!list_empty(&dhd->csi_list)) { -+ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { -+ if (0 == ptr->entry.header.remain_length) { -+ list_del(&ptr->list); -+ num++; -+ MFREE(dhd->osh, ptr, sizeof(cfr_dump_list_t)); -+ } -+ } -+ } -+ dhd->csi_count = 0; -+ DHD_TRACE(("Clean up %d record\n", num)); -+} -+ -+int -+dhd_csi_dump_list(dhd_pub_t *dhd, char *buf) -+{ -+ int ret = BCME_OK; -+ cfr_dump_list_t *ptr, *next; -+ uint8 * pbuf = buf; -+ int num = 0; -+ int length = 0; -+ -+ NULL_CHECK(dhd, "dhd is NULL", ret); -+ -+ /* check if this addr exist */ -+ if (!list_empty(&dhd->csi_list)) { -+ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { -+ if (ptr->entry.header.remain_length) { -+ DHD_ERROR(("data not ready %d\n", ptr->entry.header.remain_length)); -+ continue; -+ } -+ bcopy(&ptr->entry.header, pbuf, sizeof(cfr_dump_header_t)); -+ length += sizeof(cfr_dump_header_t); -+ pbuf += sizeof(cfr_dump_header_t); -+ DHD_TRACE(("Copy data size %d\n", ptr->entry.header.cfr_dump_length)); -+ bcopy(&ptr->entry.data, pbuf, ptr->entry.header.cfr_dump_length); -+ length += ptr->entry.header.cfr_dump_length; -+ pbuf += ptr->entry.header.cfr_dump_length; -+ num++; -+ } -+ } -+ DHD_TRACE(("dump %d record %d bytes\n", num, length)); -+ -+ return length; -+} -+ ++/* ++ * Broadcom Dongle Host Driver (DHD) ++ * ++ * Copyright (C) 1999-2018, Broadcom. ++ * ++ * Unless you and Broadcom execute a separate written software license ++ * agreement governing use of this software, this software is licensed to you ++ * under the terms of the GNU General Public License version 2 (the "GPL"), ++ * available at http://www.broadcom.com/licenses/GPLv2.php, with the ++ * following added to such license: ++ * ++ * As a special exception, the copyright holders of this software give you ++ * permission to link this software with independent modules, and to copy and ++ * distribute the resulting executable under terms of your choice, provided that ++ * you also meet, for each linked independent module, the terms and conditions of ++ * the license of that module. An independent module is a module which is not ++ * derived from this software. The special exception does not apply to any ++ * modifications of the software. ++ * ++ * Notwithstanding the above, under no circumstances may you combine this ++ * software in any way with any other Broadcom software provided under a license ++ * other than the GPL, without Broadcom's express prior written consent. ++ * ++ * $Id: dhd_csi.c 606280 2015-12-15 05:28:25Z $ ++ */ ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#define NULL_CHECK(p, s, err) \ ++ do { \ ++ if (!(p)) { \ ++ printf("NULL POINTER (%s) : %s\n", __FUNCTION__, (s)); \ ++ err = BCME_ERROR; \ ++ return err; \ ++ } \ ++ } while (0) ++ ++#define TIMESPEC_TO_US(ts) (((uint64)(ts).tv_sec * USEC_PER_SEC) + \ ++ (ts).tv_nsec / NSEC_PER_USEC) ++ ++#define NULL_ADDR "\x00\x00\x00\x00\x00\x00" ++ ++int ++dhd_csi_event_handler(dhd_pub_t *dhd, wl_event_msg_t *event, void *event_data) ++{ ++ int ret = BCME_OK; ++ bool is_new = TRUE; ++ cfr_dump_data_t *p_event; ++ cfr_dump_list_t *ptr, *next, *new; ++ ++ NULL_CHECK(dhd, "dhd is NULL", ret); ++ ++ DHD_TRACE(("Enter %s\n", __FUNCTION__)); ++ ++ if (!event_data) { ++ DHD_ERROR(("%s: event_data is NULL\n", __FUNCTION__)); ++ return -EINVAL; ++ } ++ p_event = (cfr_dump_data_t *)event_data; ++ ++ /* check if this addr exist */ ++ if (!list_empty(&dhd->csi_list)) { ++ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { ++ if (bcmp(&ptr->entry.header.peer_macaddr, &p_event->header.peer_macaddr, ++ ETHER_ADDR_LEN) == 0) { ++ int pos = 0, dump_len = 0, remain = 0; ++ is_new = FALSE; ++ DHD_INFO(("CSI data exist\n")); ++ if (p_event->header.status == 0) { ++ bcopy(&p_event->header, &ptr->entry.header, sizeof(cfr_dump_header_t)); ++ dump_len = p_event->header.cfr_dump_length; ++ if (dump_len < MAX_EVENT_SIZE) { ++ bcopy(&p_event->data, &ptr->entry.data, dump_len); ++ } else { ++ /* for big csi data */ ++ uint8 *p = (uint8 *)&ptr->entry.data; ++ remain = p_event->header.remain_length; ++ if (remain) { ++ pos = dump_len - remain - MAX_EVENT_SIZE; ++ p += pos; ++ bcopy(&p_event->data, p, MAX_EVENT_SIZE); ++ } ++ /* copy rest of csi data */ ++ else { ++ pos = dump_len - (dump_len % MAX_EVENT_SIZE); ++ p += pos; ++ bcopy(&p_event->data, p, (dump_len % MAX_EVENT_SIZE)); ++ } ++ } ++ return BCME_OK; ++ } ++ } ++ } ++ } ++ if (is_new) { ++ if (dhd->csi_count < MAX_CSI_NUM) { ++ new = (cfr_dump_list_t *)MALLOCZ(dhd->osh, sizeof(cfr_dump_list_t)); ++ if (!new){ ++ DHD_ERROR(("Malloc cfr dump list error\n")); ++ return BCME_NOMEM; ++ } ++ bcopy(&p_event->header, &new->entry.header, sizeof(cfr_dump_header_t)); ++ DHD_INFO(("New entry data size %d\n", p_event->header.cfr_dump_length)); ++ /* for big csi data */ ++ if (p_event->header.remain_length) { ++ DHD_TRACE(("remain %d\n", p_event->header.remain_length)); ++ bcopy(&p_event->data, &new->entry.data, MAX_EVENT_SIZE); ++ } ++ else ++ bcopy(&p_event->data, &new->entry.data, p_event->header.cfr_dump_length); ++ INIT_LIST_HEAD(&(new->list)); ++ list_add_tail(&(new->list), &dhd->csi_list); ++ dhd->csi_count++; ++ } ++ else { ++ DHD_TRACE(("Over maximum CSI Number 8. SKIP it.\n")); ++ } ++ } ++ return ret; ++} ++ ++int ++dhd_csi_init(dhd_pub_t *dhd) ++{ ++ int err = BCME_OK; ++ ++ NULL_CHECK(dhd, "dhd is NULL", err); ++ INIT_LIST_HEAD(&dhd->csi_list); ++ dhd->csi_count = 0; ++ ++ return err; ++} ++ ++int ++dhd_csi_deinit(dhd_pub_t *dhd) ++{ ++ int err = BCME_OK; ++ cfr_dump_list_t *ptr, *next; ++ ++ NULL_CHECK(dhd, "dhd is NULL", err); ++ ++ if (!list_empty(&dhd->csi_list)) { ++ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { ++ list_del(&ptr->list); ++ MFREE(dhd->osh, ptr, sizeof(cfr_dump_list_t)); ++ } ++ } ++ return err; ++} ++ ++void ++dhd_csi_clean_list(dhd_pub_t *dhd) ++{ ++ cfr_dump_list_t *ptr, *next; ++ int num = 0; ++ ++ if (!dhd) { ++ DHD_ERROR(("NULL POINTER: %s\n", __FUNCTION__)); ++ return; ++ } ++ ++ if (!list_empty(&dhd->csi_list)) { ++ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { ++ if (0 == ptr->entry.header.remain_length) { ++ list_del(&ptr->list); ++ num++; ++ MFREE(dhd->osh, ptr, sizeof(cfr_dump_list_t)); ++ } ++ } ++ } ++ dhd->csi_count = 0; ++ DHD_TRACE(("Clean up %d record\n", num)); ++} ++ ++int ++dhd_csi_dump_list(dhd_pub_t *dhd, char *buf) ++{ ++ int ret = BCME_OK; ++ cfr_dump_list_t *ptr, *next; ++ uint8 * pbuf = buf; ++ int num = 0; ++ int length = 0; ++ ++ NULL_CHECK(dhd, "dhd is NULL", ret); ++ ++ /* check if this addr exist */ ++ if (!list_empty(&dhd->csi_list)) { ++ list_for_each_entry_safe(ptr, next, &dhd->csi_list, list) { ++ if (ptr->entry.header.remain_length) { ++ DHD_ERROR(("data not ready %d\n", ptr->entry.header.remain_length)); ++ continue; ++ } ++ bcopy(&ptr->entry.header, pbuf, sizeof(cfr_dump_header_t)); ++ length += sizeof(cfr_dump_header_t); ++ pbuf += sizeof(cfr_dump_header_t); ++ DHD_TRACE(("Copy data size %d\n", ptr->entry.header.cfr_dump_length)); ++ bcopy(&ptr->entry.data, pbuf, ptr->entry.header.cfr_dump_length); ++ length += ptr->entry.header.cfr_dump_length; ++ pbuf += ptr->entry.header.cfr_dump_length; ++ num++; ++ } ++ } ++ DHD_TRACE(("dump %d record %d bytes\n", num, length)); ++ ++ return length; ++} ++ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_csi.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_csi.h new file mode 100755 -index 000000000000..bcc712c2999b +index 000000000..448753c1b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_csi.h @@ -0,0 +1,77 @@ -+/* -+ * Broadcom Dongle Host Driver (DHD), CSI -+ * -+ * Copyright (C) 1999-2018, Broadcom. -+ * -+ * Unless you and Broadcom execute a separate written software license -+ * agreement governing use of this software, this software is licensed to you -+ * under the terms of the GNU General Public License version 2 (the "GPL"), -+ * available at http://www.broadcom.com/licenses/GPLv2.php, with the -+ * following added to such license: -+ * -+ * As a special exception, the copyright holders of this software give you -+ * permission to link this software with independent modules, and to copy and -+ * distribute the resulting executable under terms of your choice, provided that -+ * you also meet, for each linked independent module, the terms and conditions of -+ * the license of that module. An independent module is a module which is not -+ * derived from this software. The special exception does not apply to any -+ * modifications of the software. -+ * -+ * Notwithstanding the above, under no circumstances may you combine this -+ * software in any way with any other Broadcom software provided under a license -+ * other than the GPL, without Broadcom's express prior written consent. -+ * -+ * $Id: dhd_csi.h 558438 2015-05-22 06:05:11Z $ -+ */ -+#ifndef __DHD_CSI_H__ -+#define __DHD_CSI_H__ -+ -+/* Maxinum csi file dump size */ -+#define MAX_CSI_FILESZ (32 * 1024) -+/* Maxinum subcarrier number */ -+#define MAXINUM_CFR_DATA 256 * 4 -+#define CSI_DUMP_PATH "/sys/bcm-dhd/csi" -+#define MAX_EVENT_SIZE 1400 -+/* maximun csi number stored at dhd */ -+#define MAX_CSI_NUM 8 -+ -+typedef struct cfr_dump_header { -+ /* 0 - successful; 1 - Failed */ -+ uint8 status; -+ /* Peer MAC address */ -+ uint8 peer_macaddr[6]; -+ /* Number of Space Time Streams */ -+ uint8 sts; -+ /* Number of RX chain */ -+ uint8 num_rx; -+ /* Number of subcarrier */ -+ uint16 num_carrier; -+ /* Length of the CSI dump */ -+ uint32 cfr_dump_length; -+ /* remain unsend CSI data length */ -+ uint32 remain_length; -+ /* RSSI */ -+ int8 rssi; -+} __attribute__((packed)) cfr_dump_header_t; -+ -+typedef struct cfr_dump_data { -+ cfr_dump_header_t header; -+ uint32 data[MAXINUM_CFR_DATA]; -+} cfr_dump_data_t; -+ -+typedef struct { -+ struct list_head list; -+ cfr_dump_data_t entry; -+} cfr_dump_list_t; -+ -+int dhd_csi_event_handler(dhd_pub_t *dhd, wl_event_msg_t *event, void *event_data); -+ -+int dhd_csi_init(dhd_pub_t *dhd); -+ -+int dhd_csi_deinit(dhd_pub_t *dhd); -+ -+void dhd_csi_clean_list(dhd_pub_t *dhd); -+ -+int dhd_csi_dump_list(dhd_pub_t *dhd, char *buf); -+#endif /* __DHD_CSI_H__ */ -+ ++/* ++ * Broadcom Dongle Host Driver (DHD), CSI ++ * ++ * Copyright (C) 1999-2018, Broadcom. ++ * ++ * Unless you and Broadcom execute a separate written software license ++ * agreement governing use of this software, this software is licensed to you ++ * under the terms of the GNU General Public License version 2 (the "GPL"), ++ * available at http://www.broadcom.com/licenses/GPLv2.php, with the ++ * following added to such license: ++ * ++ * As a special exception, the copyright holders of this software give you ++ * permission to link this software with independent modules, and to copy and ++ * distribute the resulting executable under terms of your choice, provided that ++ * you also meet, for each linked independent module, the terms and conditions of ++ * the license of that module. An independent module is a module which is not ++ * derived from this software. The special exception does not apply to any ++ * modifications of the software. ++ * ++ * Notwithstanding the above, under no circumstances may you combine this ++ * software in any way with any other Broadcom software provided under a license ++ * other than the GPL, without Broadcom's express prior written consent. ++ * ++ * $Id: dhd_csi.h 558438 2015-05-22 06:05:11Z $ ++ */ ++#ifndef __DHD_CSI_H__ ++#define __DHD_CSI_H__ ++ ++/* Maxinum csi file dump size */ ++#define MAX_CSI_FILESZ (32 * 1024) ++/* Maxinum subcarrier number */ ++#define MAXINUM_CFR_DATA 256 * 4 ++#define CSI_DUMP_PATH "/sys/bcm-dhd/csi" ++#define MAX_EVENT_SIZE 1400 ++/* maximun csi number stored at dhd */ ++#define MAX_CSI_NUM 8 ++ ++typedef struct cfr_dump_header { ++ /* 0 - successful; 1 - Failed */ ++ uint8 status; ++ /* Peer MAC address */ ++ uint8 peer_macaddr[6]; ++ /* Number of Space Time Streams */ ++ uint8 sts; ++ /* Number of RX chain */ ++ uint8 num_rx; ++ /* Number of subcarrier */ ++ uint16 num_carrier; ++ /* Length of the CSI dump */ ++ uint32 cfr_dump_length; ++ /* remain unsend CSI data length */ ++ uint32 remain_length; ++ /* RSSI */ ++ int8 rssi; ++} __attribute__((packed)) cfr_dump_header_t; ++ ++typedef struct cfr_dump_data { ++ cfr_dump_header_t header; ++ uint32 data[MAXINUM_CFR_DATA]; ++} cfr_dump_data_t; ++ ++typedef struct { ++ struct list_head list; ++ cfr_dump_data_t entry; ++} cfr_dump_list_t; ++ ++int dhd_csi_event_handler(dhd_pub_t *dhd, wl_event_msg_t *event, void *event_data); ++ ++int dhd_csi_init(dhd_pub_t *dhd); ++ ++int dhd_csi_deinit(dhd_pub_t *dhd); ++ ++void dhd_csi_clean_list(dhd_pub_t *dhd); ++ ++int dhd_csi_dump_list(dhd_pub_t *dhd, char *buf); ++#endif /* __DHD_CSI_H__ */ ++ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_gpio.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_gpio.c new file mode 100755 -index 000000000000..8553e74562dc +index 000000000..8553e7456 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_gpio.c @@ -0,0 +1,279 @@ @@ -991419,7 +991480,7 @@ index 000000000000..8553e74562dc +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_hikey.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_hikey.c new file mode 100755 -index 000000000000..8acb153a45e3 +index 000000000..8acb153a4 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_hikey.c @@ -0,0 +1,294 @@ @@ -991719,7 +991780,7 @@ index 000000000000..8acb153a45e3 +#endif /* BOARD_HIKEY_MODULAR */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_memprealloc.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_memprealloc.c new file mode 100755 -index 000000000000..1c0f3ca65e7a +index 000000000..1c0f3ca65 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_custom_memprealloc.c @@ -0,0 +1,562 @@ @@ -992287,7 +992348,7 @@ index 000000000000..1c0f3ca65e7a +#endif /* CONFIG_BROADCOM_WIFI_RESERVED_MEM */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg.h new file mode 100755 -index 000000000000..4bc2511c6da2 +index 000000000..4bc2511c6 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg.h @@ -0,0 +1,367 @@ @@ -992660,7 +992721,7 @@ index 000000000000..4bc2511c6da2 +#endif /* _dhd_dbg_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg_ring.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg_ring.c new file mode 100755 -index 000000000000..c909431c0b46 +index 000000000..c909431c0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg_ring.c @@ -0,0 +1,426 @@ @@ -993092,7 +993153,7 @@ index 000000000000..c909431c0b46 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg_ring.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg_ring.h new file mode 100755 -index 000000000000..c6deb98f2ace +index 000000000..c6deb98f2 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_dbg_ring.h @@ -0,0 +1,141 @@ @@ -993239,7 +993300,7 @@ index 000000000000..c6deb98f2ace +#endif /* __DHD_DBG_RING_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug.c new file mode 100755 -index 000000000000..a6066289c543 +index 000000000..a6066289c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug.c @@ -0,0 +1,2411 @@ @@ -995656,7 +995717,7 @@ index 000000000000..a6066289c543 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug.h new file mode 100755 -index 000000000000..008c45316f1c +index 000000000..008c45316 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug.h @@ -0,0 +1,853 @@ @@ -996515,7 +996576,7 @@ index 000000000000..008c45316f1c +#endif /* _dhd_debug_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug_linux.c new file mode 100755 -index 000000000000..2f33db421877 +index 000000000..2f33db421 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_debug_linux.c @@ -0,0 +1,516 @@ @@ -997037,7 +997098,7 @@ index 000000000000..2f33db421877 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_flowring.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_flowring.c new file mode 100755 -index 000000000000..d457437d39ed +index 000000000..d457437d3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_flowring.c @@ -0,0 +1,1238 @@ @@ -998281,7 +998342,7 @@ index 000000000000..d457437d39ed +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_flowring.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_flowring.h new file mode 100755 -index 000000000000..ac2639d19396 +index 000000000..ac2639d19 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_flowring.h @@ -0,0 +1,289 @@ @@ -998576,7 +998637,7 @@ index 000000000000..ac2639d19396 +#endif /* _dhd_flowrings_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_gpio.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_gpio.c new file mode 100755 -index 000000000000..cdb70099fb19 +index 000000000..cdb70099f --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_gpio.c @@ -0,0 +1,350 @@ @@ -998932,7 +998993,7 @@ index 000000000000..cdb70099fb19 + diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ip.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ip.c new file mode 100755 -index 000000000000..3772fdfca4e5 +index 000000000..3772fdfca --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ip.c @@ -0,0 +1,1429 @@ @@ -1000367,7 +1000428,7 @@ index 000000000000..3772fdfca4e5 +#endif /* DHDTCPSYNC_FLOOD_BLK */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ip.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ip.h new file mode 100755 -index 000000000000..45be081e3473 +index 000000000..45be081e3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_ip.h @@ -0,0 +1,97 @@ @@ -1000470,7 +1000531,7 @@ index 000000000000..45be081e3473 +#endif /* _dhd_ip_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux.c new file mode 100755 -index 000000000000..b6d43d44d222 +index 000000000..ae5ed32b7 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux.c @@ -0,0 +1,22464 @@ @@ -1022940,7 +1023001,7 @@ index 000000000000..b6d43d44d222 +#endif /* defiend(WLDWDS) && defined(FOURADDR_AUTO_BRG) */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux.h new file mode 100755 -index 000000000000..f2b295f54f5b +index 000000000..f2b295f54 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux.h @@ -0,0 +1,448 @@ @@ -1023394,7 +1023455,7 @@ index 000000000000..f2b295f54f5b +#endif /* __DHD_LINUX_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_exportfs.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_exportfs.c new file mode 100755 -index 000000000000..6518b357aa30 +index 000000000..6518b357a --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_exportfs.c @@ -0,0 +1,1420 @@ @@ -1024820,7 +1024881,7 @@ index 000000000000..6518b357aa30 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_lb.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_lb.c new file mode 100755 -index 000000000000..30dfaa2b7e41 +index 000000000..30dfaa2b7 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_lb.c @@ -0,0 +1,1324 @@ @@ -1026150,7 +1026211,7 @@ index 000000000000..30dfaa2b7e41 +#endif /* DHD_LB_TXP */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_pktdump.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_pktdump.c new file mode 100755 -index 000000000000..3efe02c9ed49 +index 000000000..3efe02c9e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_pktdump.c @@ -0,0 +1,1472 @@ @@ -1027628,7 +1027689,7 @@ index 000000000000..3efe02c9ed49 +#endif /* DHD_RX_DUMP */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_pktdump.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_pktdump.h new file mode 100755 -index 000000000000..12bb32fd5dae +index 000000000..12bb32fd5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_pktdump.h @@ -0,0 +1,125 @@ @@ -1027759,7 +1027820,7 @@ index 000000000000..12bb32fd5dae +#endif /* __DHD_LINUX_PKTDUMP_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_platdev.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_platdev.c new file mode 100755 -index 000000000000..93961824abae +index 000000000..93961824a --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_platdev.c @@ -0,0 +1,1041 @@ @@ -1028806,7 +1028867,7 @@ index 000000000000..93961824abae +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_priv.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_priv.h new file mode 100755 -index 000000000000..9959c2c50141 +index 000000000..9959c2c50 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_priv.h @@ -0,0 +1,432 @@ @@ -1029244,7 +1029305,7 @@ index 000000000000..9959c2c50141 +#endif /* __DHD_LINUX_PRIV_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_sched.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_sched.c new file mode 100755 -index 000000000000..7980b02c65ab +index 000000000..7980b02c6 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_sched.c @@ -0,0 +1,52 @@ @@ -1029302,7 +1029363,7 @@ index 000000000000..7980b02c65ab +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_wq.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_wq.c new file mode 100755 -index 000000000000..26c66add8aa3 +index 000000000..26c66add8 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_wq.c @@ -0,0 +1,397 @@ @@ -1029705,7 +1029766,7 @@ index 000000000000..26c66add8aa3 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_wq.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_wq.h new file mode 100755 -index 000000000000..f6c77c4b30b0 +index 000000000..f6c77c4b3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_linux_wq.h @@ -0,0 +1,93 @@ @@ -1029804,7 +1029865,7 @@ index 000000000000..f6c77c4b30b0 +#endif /* _dhd_linux_wq_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_mschdbg.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_mschdbg.c new file mode 100755 -index 000000000000..713422a713cc +index 000000000..713422a71 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_mschdbg.c @@ -0,0 +1,789 @@ @@ -1030599,7 +1030660,7 @@ index 000000000000..713422a713cc +#endif /* SHOW_LOGTRACE */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_mschdbg.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_mschdbg.h new file mode 100755 -index 000000000000..4645ccb890ab +index 000000000..4645ccb89 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_mschdbg.h @@ -0,0 +1,40 @@ @@ -1030645,7 +1030706,7 @@ index 000000000000..4645ccb890ab +#endif /* _dhd_mschdbg_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_msgbuf.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_msgbuf.c new file mode 100755 -index 000000000000..ab8c9b399308 +index 000000000..ab8c9b399 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_msgbuf.c @@ -0,0 +1,11162 @@ @@ -1041813,7 +1041874,7 @@ index 000000000000..ab8c9b399308 +#endif /* DHD_MAP_LOGGING */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie.c new file mode 100755 -index 000000000000..45dd0e66ea04 +index 000000000..45dd0e66e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie.c @@ -0,0 +1,11618 @@ @@ -1053437,7 +1053498,7 @@ index 000000000000..45dd0e66ea04 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie.h new file mode 100755 -index 000000000000..9fe53dcf0b02 +index 000000000..9fe53dcf0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie.h @@ -0,0 +1,596 @@ @@ -1054039,7 +1054100,7 @@ index 000000000000..9fe53dcf0b02 +#endif /* dhd_pcie_h */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie_linux.c new file mode 100755 -index 000000000000..3fb799247421 +index 000000000..3fb799247 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pcie_linux.c @@ -0,0 +1,2738 @@ @@ -1056783,7 +1056844,7 @@ index 000000000000..3fb799247421 +EXPORT_SYMBOL(dhd_bus_check_driver_up); diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pno.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pno.c new file mode 100755 -index 000000000000..005c03e3d181 +index 000000000..005c03e3d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pno.c @@ -0,0 +1,4458 @@ @@ -1061247,7 +1061308,7 @@ index 000000000000..005c03e3d181 +#endif /* PNO_SUPPORT */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pno.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pno.h new file mode 100755 -index 000000000000..903a732554c0 +index 000000000..903a73255 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_pno.h @@ -0,0 +1,590 @@ @@ -1061843,7 +1061904,7 @@ index 000000000000..903a732554c0 +#endif /* __DHD_PNO_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_proto.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_proto.h new file mode 100755 -index 000000000000..b83c1bdc0b83 +index 000000000..b83c1bdc0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_proto.h @@ -0,0 +1,243 @@ @@ -1062092,7 +1062153,7 @@ index 000000000000..b83c1bdc0b83 +#endif /* _dhd_proto_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_rtt.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_rtt.c new file mode 100755 -index 000000000000..49e367890f47 +index 000000000..49e367890 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_rtt.c @@ -0,0 +1,4103 @@ @@ -1066201,7 +1066262,7 @@ index 000000000000..49e367890f47 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_rtt.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_rtt.h new file mode 100755 -index 000000000000..d0c6af209db6 +index 000000000..d0c6af209 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_rtt.h @@ -0,0 +1,537 @@ @@ -1066744,7 +1066805,7 @@ index 000000000000..d0c6af209db6 +#endif /* __DHD_RTT_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_sdio.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_sdio.c new file mode 100755 -index 000000000000..3638be21d754 +index 000000000..3638be21d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_sdio.c @@ -0,0 +1,10489 @@ @@ -1077240,7 +1077301,7 @@ index 000000000000..3638be21d754 \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_static_buf.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_static_buf.c new file mode 100755 -index 000000000000..2df6b62cd6b2 +index 000000000..2df6b62cd --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_static_buf.c @@ -0,0 +1,586 @@ @@ -1077832,7 +1077893,7 @@ index 000000000000..2df6b62cd6b2 +module_exit(dhd_static_buf_exit); diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_wlfc.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_wlfc.c new file mode 100755 -index 000000000000..bafcb0b5c7e4 +index 000000000..bafcb0b5c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_wlfc.c @@ -0,0 +1,4616 @@ @@ -1082454,7 +1082515,7 @@ index 000000000000..bafcb0b5c7e4 +#endif /* PROP_TXSTATUS */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_wlfc.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_wlfc.h new file mode 100755 -index 000000000000..b8ee0f14efe2 +index 000000000..b8ee0f14e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dhd_wlfc.h @@ -0,0 +1,796 @@ @@ -1083256,7 +1083317,7 @@ index 000000000000..b8ee0f14efe2 +#endif /* __wlfc_host_driver_definitions_h__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dngl_stats.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dngl_stats.h new file mode 100755 -index 000000000000..5bd8e4613da0 +index 000000000..5bd8e4613 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dngl_stats.h @@ -0,0 +1,387 @@ @@ -1083649,7 +1083710,7 @@ index 000000000000..5bd8e4613da0 +#endif /* _dngl_stats_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dngl_wlhdr.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dngl_wlhdr.h new file mode 100755 -index 000000000000..d71ebb65d63d +index 000000000..d71ebb65d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/dngl_wlhdr.h @@ -0,0 +1,44 @@ @@ -1083699,7 +1083760,7 @@ index 000000000000..d71ebb65d63d +#endif /* _dngl_wlhdr_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/frag.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/frag.c new file mode 100755 -index 000000000000..fa9ff43e5c2c +index 000000000..fa9ff43e5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/frag.c @@ -0,0 +1,113 @@ @@ -1083818,7 +1083879,7 @@ index 000000000000..fa9ff43e5c2c +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/frag.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/frag.h new file mode 100755 -index 000000000000..57c149dfdff3 +index 000000000..57c149dfd --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/frag.h @@ -0,0 +1,39 @@ @@ -1083863,138 +1083924,138 @@ index 000000000000..57c149dfdff3 +#endif /* __FRAG_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hdf_public_ap6275s.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hdf_public_ap6275s.h new file mode 100755 -index 000000000000..5daf2bfb6c49 +index 000000000..b53071a34 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hdf_public_ap6275s.h @@ -0,0 +1,125 @@ -+/* -+ * hdf_public_ap6275s.h -+ * -+ * ap6275s driver header -+ * -+ * Copyright (c) 2021-2022 Huawei Device Co., Ltd. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version 2 -+ * of the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ */ -+ -+#ifndef _HDF_PUBLIC_AP6275S_H_ -+#define _HDF_PUBLIC_AP6275S_H_ -+#include -+#include "net_device.h" -+#include "hdf_wl_interface.h" -+ -+#include "wifi_module.h" -+#include "wifi_mac80211_ops.h" -+#include "hdf_wlan_utils.h" -+#include "net_bdh_adpater.h" -+ -+int get_scan_ifidx(const char *ifname); -+extern struct cfg80211_ops wl_cfg80211_ops; -+extern struct net_device_ops dhd_ops_pri; -+extern struct hdf_inf_map g_hdf_infmap[HDF_INF_MAX]; -+extern struct net_device *GetLinuxInfByNetDevice(const struct NetDevice *netDevice); -+extern struct wireless_dev *wrap_get_widev(void); -+extern struct ieee80211_regdomain *wrp_get_regdomain(void); -+extern int32_t wl_get_all_sta(struct net_device *ndev, uint32_t *num); -+extern s32 wl_get_all_sta_info(struct net_device *ndev, char* mac, uint32_t num); -+extern int g_hdf_ifidx; -+extern int g_mgmt_tx_event_ifidx; -+extern u32 p2p_remain_freq; -+extern struct NetDevice* GetHdfNetDeviceByLinuxInf(struct net_device *dev); -+extern int g_scan_event_ifidx; -+extern int g_conn_event_ifidx; -+extern int bdh6_reset_driver_flag; -+extern int start_p2p_completed; -+extern struct mutex bdh6_reset_driver_lock; -+void dhd_get_mac_address(struct net_device *dev, unsigned char **addr); -+ -+int32_t wal_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy, struct net_device *netDev); -+int32_t wal_cfg80211_remain_on_channel(struct wiphy *wiphy, struct net_device *netDev, int32_t freq, -+ unsigned int duration); -+void wl_cfg80211_add_virtual_iface_wrap(struct wiphy *wiphy, char *name, enum nl80211_iftype type, -+ struct vif_params *params); -+extern int memcpy_s(void *dest, size_t dest_max, const void *src, size_t count); -+extern int32_t HdfWifiEventDelSta(struct NetDevice *netDev, const uint8_t *macAddr, uint8_t addrLen); -+int hdf_cfgp2p_register_ndev(struct net_device *p2p_netdev, struct net_device *primary_netdev, struct wiphy *wiphy); -+struct NetDeviceInterFace *wal_get_net_p2p_ops(void); -+int hdf_start_p2p_device(void); -+s32 wldev_ioctl_get(struct net_device *dev, u32 cmd, unsigned char *arg, u32 len); -+struct wiphy *get_linux_wiphy_hdfdev(NetDevice *netDev); -+extern int dhd_netdev_changemtu_wrapper(struct net_device *netdev, int mtu); -+extern struct NetDeviceInterFace *wal_get_net_dev_ops(void); -+ -+int BDH6InitNetdev(struct NetDevice *netDevice, int private_data_size, int type, int ifidx); -+struct NetDevice *get_hdf_netdev(int ifidx); -+struct net_device *get_krn_netdev(int ifidx); -+extern void rtnl_lock(void); -+extern void rtnl_unlock(void); -+ -+struct NetDevice *get_real_netdev(NetDevice *netDev); -+extern struct wiphy *get_linux_wiphy_ndev(struct net_device *ndev); -+int get_dhd_priv_data_size(void); -+extern int32_t wl_cfg80211_set_country_code(struct net_device *net, char *country_code, -+ bool notify, bool user_enforced, int revinfo); -+extern int snprintf_s(char *dest, size_t dest_max, size_t count, const char *format, ...); -+ -+extern int32_t WalChangeBeacon(NetDevice *hnetDev, struct WlanBeaconConf *param); -+extern int32_t Bdh6Ghcap(struct NetDevice *hnetDev, struct WlanHwCapability **capability); -+extern int32_t HdfStartScan(NetDevice *hhnetDev, struct WlanScanRequest *scanParam); -+extern int32_t WifiScanSetUserIe(const struct WlanScanRequest *params, struct cfg80211_scan_request *request); -+extern int32_t WifiScanSetChannel(const struct wiphy *wiphy, const struct WlanScanRequest *params, -+ struct cfg80211_scan_request *request); -+extern int32_t BDH6Init(struct HdfChipDriver *chipDriver, struct NetDevice *netDevice); -+ -+/********************************* hdf_bdh_mac80211 ***********************************************/ -+typedef enum { -+ WLAN_BAND_2G, -+ WLAN_BAND_5G, -+ WLAN_BAND_BUTT -+} wlan_channel_band_enum; -+#define WIFI_24G_CHANNEL_NUMS (14) -+#define WAL_MIN_CHANNEL_2G (1) -+#define WAL_MAX_CHANNEL_2G (14) -+#define WAL_MIN_FREQ_2G (2412 + 5*(WAL_MIN_CHANNEL_2G - 1)) -+#define WAL_MAX_FREQ_2G (2484) -+#define WAL_FREQ_2G_INTERVAL (5) -+ -+#define WLAN_WPS_IE_MAX_SIZE (352) // (WLAN_MEM_EVENT_SIZE2 - 32) /* 32表示事件自身å ç”¨çš„空间 */ -+#define MAC_80211_FRAME_LEN 24 /* éžå››åœ°å€æƒ…况下,MAC帧头的长度 */ -+extern struct ieee80211_regdomain *bdh6_get_regdomain(void); -+extern void BDH6WalReleaseHwCapability(struct WlanHwCapability *self); -+ -+/************************************* ap.c *************************************************/ -+extern void bdh6_nl80211_calculate_ap_params(struct cfg80211_ap_settings *params); -+extern int32_t WalStartAp(NetDevice *hnetDev); -+ -+ -+/************************************ sta.c ***************************************/ -+extern int32_t WifiScanSetRequest(struct NetDevice *netdev, const struct WlanScanRequest *params, -+ struct cfg80211_scan_request *request); -+extern struct ieee80211_channel *WalGetChannel(struct wiphy *wiphy, int32_t freq); -+extern struct ieee80211_channel *GetChannelByFreq(const struct wiphy *wiphy, uint16_t center_freq); -+ -+/************************************* hdf_wl_interface.h **************************************/ -+extern int g_event_ifidx; -+ -+extern int32_t Bdh6SAction(struct NetDevice *hhnetDev, WifiActionData *actionData); -+extern int32_t Bdh6Fband(NetDevice *hnetDev, int32_t band, int32_t *freqs, uint32_t *num); -+extern int32_t HdfConnect(NetDevice *hnetDev, WlanConnectParams *param); -+#endif ++/* ++ * hdf_public_ap6275s.h ++ * ++ * ap6275s driver header ++ * ++ * Copyright (c) 2021-2022 Huawei Device Co., Ltd. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ */ ++ ++#ifndef _HDF_PUBLIC_AP6275S_H_ ++#define _HDF_PUBLIC_AP6275S_H_ ++#include ++#include "net_device.h" ++#include "hdf_wl_interface.h" ++ ++#include "wifi_module.h" ++#include "wifi_mac80211_ops.h" ++#include "hdf_wlan_utils.h" ++#include "net_bdh_adpater.h" ++ ++int get_scan_ifidx(const char *ifname); ++extern struct cfg80211_ops wl_cfg80211_ops; ++extern struct net_device_ops dhd_ops_pri; ++extern struct hdf_inf_map g_hdf_infmap[HDF_INF_MAX]; ++extern struct net_device *GetLinuxInfByNetDevice(const struct NetDevice *netDevice); ++extern struct wireless_dev *wrap_get_widev(void); ++extern struct ieee80211_regdomain *wrp_get_regdomain(void); ++extern int32_t wl_get_all_sta(struct net_device *ndev, uint32_t *num); ++extern s32 wl_get_all_sta_info(struct net_device *ndev, char* mac, uint32_t num); ++extern int g_hdf_ifidx; ++extern int g_mgmt_tx_event_ifidx; ++extern u32 p2p_remain_freq; ++extern struct NetDevice* GetHdfNetDeviceByLinuxInf(struct net_device *dev); ++extern int g_scan_event_ifidx; ++extern int g_conn_event_ifidx; ++extern int bdh6_reset_driver_flag; ++extern int start_p2p_completed; ++extern struct mutex bdh6_reset_driver_lock; ++void dhd_get_mac_address(struct net_device *dev, unsigned char **addr); ++ ++int32_t wal_cfg80211_cancel_remain_on_channel(struct wiphy *wiphy, struct net_device *netDev); ++int32_t wal_cfg80211_remain_on_channel(struct wiphy *wiphy, struct net_device *netDev, int32_t freq, ++ unsigned int duration); ++void wl_cfg80211_add_virtual_iface_wrap(struct wiphy *wiphy, char *name, enum nl80211_iftype type, ++ struct vif_params *params); ++extern int memcpy_s(void *dest, size_t dest_max, const void *src, size_t count); ++extern int32_t HdfWifiEventDelSta(struct NetDevice *netDev, const uint8_t *macAddr, uint8_t addrLen); ++int hdf_cfgp2p_register_ndev(struct net_device *p2p_netdev, struct net_device *primary_netdev, struct wiphy *wiphy); ++struct NetDeviceInterFace *wal_get_net_p2p_ops(void); ++int hdf_start_p2p_device(void); ++s32 wldev_ioctl_get(struct net_device *dev, u32 cmd, unsigned char *arg, u32 len); ++struct wiphy *get_linux_wiphy_hdfdev(NetDevice *netDev); ++extern int dhd_netdev_changemtu_wrapper(struct net_device *netdev, int mtu); ++extern struct NetDeviceInterFace *wal_get_net_dev_ops(void); ++ ++int BDH6InitNetdev(struct NetDevice *netDevice, int private_data_size, int type, int ifidx); ++struct NetDevice *get_hdf_netdev(int ifidx); ++struct net_device *get_krn_netdev(int ifidx); ++extern void rtnl_lock(void); ++extern void rtnl_unlock(void); ++ ++struct NetDevice *get_real_netdev(NetDevice *netDev); ++extern struct wiphy *get_linux_wiphy_ndev(struct net_device *ndev); ++int get_dhd_priv_data_size(void); ++extern int32_t wl_cfg80211_set_country_code(struct net_device *net, char *country_code, ++ bool notify, bool user_enforced, int revinfo); ++extern int snprintf_s(char *dest, size_t dest_max, size_t count, const char *format, ...); ++ ++extern int32_t WalChangeBeacon(NetDevice *hnetDev, struct WlanBeaconConf *param); ++extern int32_t Bdh6Ghcap(struct NetDevice *hnetDev, struct WlanHwCapability **capability); ++extern int32_t HdfStartScan(NetDevice *hhnetDev, struct WlanScanRequest *scanParam); ++extern int32_t WifiScanSetUserIe(const struct WlanScanRequest *params, struct cfg80211_scan_request *request); ++extern int32_t WifiScanSetChannel(const struct wiphy *wiphy, const struct WlanScanRequest *params, ++ struct cfg80211_scan_request *request); ++extern int32_t BDH6Init(struct HdfChipDriver *chipDriver, struct NetDevice *netDevice); ++ ++/********************************* hdf_bdh_mac80211 ***********************************************/ ++typedef enum { ++ WLAN_BAND_2G, ++ WLAN_BAND_5G, ++ WLAN_BAND_BUTT ++} wlan_channel_band_enum; ++#define WIFI_24G_CHANNEL_NUMS (14) ++#define WAL_MIN_CHANNEL_2G (1) ++#define WAL_MAX_CHANNEL_2G (14) ++#define WAL_MIN_FREQ_2G (2412 + 5*(WAL_MIN_CHANNEL_2G - 1)) ++#define WAL_MAX_FREQ_2G (2484) ++#define WAL_FREQ_2G_INTERVAL (5) ++ ++#define WLAN_WPS_IE_MAX_SIZE (352) // (WLAN_MEM_EVENT_SIZE2 - 32) /* 32表示事件自身å ç”¨çš„空间 */ ++#define MAC_80211_FRAME_LEN 24 /* éžå››åœ°å€æƒ…况下,MAC帧头的长度 */ ++extern struct ieee80211_regdomain *bdh6_get_regdomain(void); ++extern void BDH6WalReleaseHwCapability(struct WlanHwCapability *self); ++ ++/************************************* ap.c *************************************************/ ++extern void bdh6_nl80211_calculate_ap_params(struct cfg80211_ap_settings *params); ++extern int32_t WalStartAp(NetDevice *hnetDev); ++ ++ ++/************************************ sta.c ***************************************/ ++extern int32_t WifiScanSetRequest(struct NetDevice *netdev, const struct WlanScanRequest *params, ++ struct cfg80211_scan_request *request); ++extern struct ieee80211_channel *WalGetChannel(struct wiphy *wiphy, int32_t freq); ++extern struct ieee80211_channel *GetChannelByFreq(const struct wiphy *wiphy, uint16_t center_freq); ++ ++/************************************* hdf_wl_interface.h **************************************/ ++extern int g_event_ifidx; ++ ++extern int32_t Bdh6SAction(struct NetDevice *hhnetDev, WifiActionData *actionData); ++extern int32_t Bdh6Fband(NetDevice *hnetDev, int32_t band, int32_t *freqs, uint32_t *num); ++extern int32_t HdfConnect(NetDevice *hnetDev, WlanConnectParams *param); ++#endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hnd_pktpool.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hnd_pktpool.c new file mode 100755 -index 000000000000..09c2520b8fec +index 000000000..09c2520b8 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hnd_pktpool.c @@ -0,0 +1,1428 @@ @@ -1085428,7 +1085489,7 @@ index 000000000000..09c2520b8fec +#endif /* BCMPKTPOOL */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hnd_pktq.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hnd_pktq.c new file mode 100755 -index 000000000000..f4768ff69096 +index 000000000..f4768ff69 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hnd_pktq.c @@ -0,0 +1,1429 @@ @@ -1086863,7 +1086924,7 @@ index 000000000000..f4768ff69096 +#endif /* HND_PKTQ_THREAD_SAFE */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndlhl.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndlhl.c new file mode 100755 -index 000000000000..fd229c2f585b +index 000000000..fd229c2f5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndlhl.c @@ -0,0 +1,538 @@ @@ -1087407,7 +1087468,7 @@ index 000000000000..fd229c2f585b +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndmem.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndmem.c new file mode 100755 -index 000000000000..fde6108c50e2 +index 000000000..fde6108c5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndmem.c @@ -0,0 +1,430 @@ @@ -1087843,7 +1087904,7 @@ index 000000000000..fde6108c50e2 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndpmu.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndpmu.c new file mode 100755 -index 000000000000..cb8294f25274 +index 000000000..cb8294f25 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/hndpmu.c @@ -0,0 +1,789 @@ @@ -1088638,7 +1088699,7 @@ index 000000000000..cb8294f25274 +#endif /* BCMPMU_STATS */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11.h new file mode 100755 -index 000000000000..cd46e747cc8b +index 000000000..cd46e747c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11.h @@ -0,0 +1,5364 @@ @@ -1094008,7 +1094069,7 @@ index 000000000000..cd46e747cc8b +#endif /* _802_11_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11e.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11e.h new file mode 100755 -index 000000000000..7b1414961ee1 +index 000000000..7b1414961 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11e.h @@ -0,0 +1,140 @@ @@ -1094154,7 +1094215,7 @@ index 000000000000..7b1414961ee1 +#endif /* _802_11e_CAC_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11s.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11s.h new file mode 100755 -index 000000000000..91ca2f3b1ce4 +index 000000000..91ca2f3b1 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.11s.h @@ -0,0 +1,335 @@ @@ -1094495,7 +1094556,7 @@ index 000000000000..91ca2f3b1ce4 +#endif /* #ifndef _802_11s_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.1d.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.1d.h new file mode 100755 -index 000000000000..06364be73fa8 +index 000000000..06364be73 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.1d.h @@ -0,0 +1,54 @@ @@ -1094555,7 +1094616,7 @@ index 000000000000..06364be73fa8 +#endif /* _802_1_D__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.3.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.3.h new file mode 100755 -index 000000000000..496ca3a3795e +index 000000000..496ca3a37 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/802.3.h @@ -0,0 +1,56 @@ @@ -1094617,7 +1094678,7 @@ index 000000000000..496ca3a3795e +#endif /* #ifndef _802_3_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/aidmp.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/aidmp.h new file mode 100755 -index 000000000000..8c826062d436 +index 000000000..8c826062d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/aidmp.h @@ -0,0 +1,430 @@ @@ -1095053,7 +1095114,7 @@ index 000000000000..8c826062d436 +#endif /* _AIDMP_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_cfg.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_cfg.h new file mode 100755 -index 000000000000..63c72e481fe8 +index 000000000..63c72e481 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_cfg.h @@ -0,0 +1,33 @@ @@ -1095092,7 +1095153,7 @@ index 000000000000..63c72e481fe8 +#endif /* _bcm_cfg_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_mpool_pub.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_mpool_pub.h new file mode 100755 -index 000000000000..347d53a862d2 +index 000000000..347d53a86 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_mpool_pub.h @@ -0,0 +1,351 @@ @@ -1095449,7 +1095510,7 @@ index 000000000000..347d53a862d2 +#endif /* _BCM_MPOOL_PUB_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_ring.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_ring.h new file mode 100755 -index 000000000000..978e5dd2f554 +index 000000000..978e5dd2f --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcm_ring.h @@ -0,0 +1,614 @@ @@ -1096069,7 +1096130,7 @@ index 000000000000..978e5dd2f554 +#endif /* ! __bcm_ring_h_included__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmarp.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmarp.h new file mode 100755 -index 000000000000..f0fc3e32fda9 +index 000000000..f0fc3e32f --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmarp.h @@ -0,0 +1,91 @@ @@ -1096166,7 +1096227,7 @@ index 000000000000..f0fc3e32fda9 +#endif /* !defined(_bcmarp_h_) */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmbloom.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmbloom.h new file mode 100755 -index 000000000000..cb572307e126 +index 000000000..cb572307e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmbloom.h @@ -0,0 +1,80 @@ @@ -1096252,7 +1096313,7 @@ index 000000000000..cb572307e126 +#endif /* _bcmbloom_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmcdc.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmcdc.h new file mode 100755 -index 000000000000..e88366426909 +index 000000000..e88366426 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmcdc.h @@ -0,0 +1,122 @@ @@ -1096380,7 +1096441,7 @@ index 000000000000..e88366426909 +#endif /* _bcmcdc_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdefs.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdefs.h new file mode 100755 -index 000000000000..393ec7d10e12 +index 000000000..393ec7d10 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdefs.h @@ -0,0 +1,616 @@ @@ -1097002,7 +1097063,7 @@ index 000000000000..393ec7d10e12 +#endif /* _bcmdefs_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdevs.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdevs.h new file mode 100755 -index 000000000000..afc6b54d9e0b +index 000000000..afc6b54d9 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdevs.h @@ -0,0 +1,945 @@ @@ -1097953,7 +1098014,7 @@ index 000000000000..afc6b54d9e0b +#endif /* _BCMDEVS_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdhcp.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdhcp.h new file mode 100755 -index 000000000000..da46d1a717b5 +index 000000000..da46d1a71 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmdhcp.h @@ -0,0 +1,93 @@ @@ -1098052,7 +1098113,7 @@ index 000000000000..da46d1a717b5 +#endif /* #ifndef _bcmdhcp_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmendian.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmendian.h new file mode 100755 -index 000000000000..7eecf9f16115 +index 000000000..7eecf9f16 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmendian.h @@ -0,0 +1,417 @@ @@ -1098475,7 +1098536,7 @@ index 000000000000..7eecf9f16115 +#endif /* !_BCMENDIAN_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmeth.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmeth.h new file mode 100755 -index 000000000000..4ac3c376ca98 +index 000000000..4ac3c376c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmeth.h @@ -0,0 +1,116 @@ @@ -1098597,7 +1098658,7 @@ index 000000000000..4ac3c376ca98 +#endif /* _BCMETH_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmevent.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmevent.h new file mode 100755 -index 000000000000..fc47263e81e2 +index 000000000..fc47263e8 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmevent.h @@ -0,0 +1,1297 @@ @@ -1099900,7 +1099961,7 @@ index 000000000000..fc47263e81e2 +#endif /* _BCMEVENT_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmicmp.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmicmp.h new file mode 100755 -index 000000000000..472ec722339b +index 000000000..472ec7223 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmicmp.h @@ -0,0 +1,90 @@ @@ -1099996,7 +1100057,7 @@ index 000000000000..472ec722339b +#endif /* #ifndef _bcmicmp_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmiov.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmiov.h new file mode 100755 -index 000000000000..42633f8c7d32 +index 000000000..42633f8c7 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmiov.h @@ -0,0 +1,357 @@ @@ -1100359,7 +1100420,7 @@ index 000000000000..42633f8c7d32 +#endif /* _bcmiov_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmip.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmip.h new file mode 100755 -index 000000000000..cec5b903c6f4 +index 000000000..cec5b903c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmip.h @@ -0,0 +1,251 @@ @@ -1100616,7 +1100677,7 @@ index 000000000000..cec5b903c6f4 +#endif /* _bcmip_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmipv6.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmipv6.h new file mode 100755 -index 000000000000..88cac9009183 +index 000000000..88cac9009 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmipv6.h @@ -0,0 +1,162 @@ @@ -1100784,7 +1100845,7 @@ index 000000000000..88cac9009183 +#endif /* !defined(_bcmipv6_h_) */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmmsgbuf.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmmsgbuf.h new file mode 100755 -index 000000000000..4215d3298c21 +index 000000000..4215d3298 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmmsgbuf.h @@ -0,0 +1,1395 @@ @@ -1102185,7 +1102246,7 @@ index 000000000000..4215d3298c21 +#endif /* _bcmmsgbuf_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmnvram.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmnvram.h new file mode 100755 -index 000000000000..988ac4813a5f +index 000000000..988ac4813 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmnvram.h @@ -0,0 +1,329 @@ @@ -1102520,7 +1102581,7 @@ index 000000000000..988ac4813a5f +#endif /* _bcmnvram_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmpcie.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmpcie.h new file mode 100755 -index 000000000000..8f80018ac9dd +index 000000000..8f80018ac --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmpcie.h @@ -0,0 +1,537 @@ @@ -1103063,7 +1103124,7 @@ index 000000000000..8f80018ac9dd +#endif /* _bcmpcie_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmpcispi.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmpcispi.h new file mode 100755 -index 000000000000..6308a3aaf7f5 +index 000000000..6308a3aaf --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmpcispi.h @@ -0,0 +1,182 @@ @@ -1103251,7 +1103312,7 @@ index 000000000000..6308a3aaf7f5 +#endif /* _BCM_PCI_SPI_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmperf.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmperf.h new file mode 100755 -index 000000000000..8ac9001f55eb +index 000000000..8ac9001f5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmperf.h @@ -0,0 +1,40 @@ @@ -1103297,7 +1103358,7 @@ index 000000000000..8ac9001f55eb +#endif /* _BCMPERF_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdbus.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdbus.h new file mode 100755 -index 000000000000..b9759b9b186e +index 000000000..b9759b9b1 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdbus.h @@ -0,0 +1,184 @@ @@ -1103487,7 +1103548,7 @@ index 000000000000..b9759b9b186e +#endif /* _sdio_api_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdh.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdh.h new file mode 100755 -index 000000000000..b2300ec635c6 +index 000000000..b2300ec63 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdh.h @@ -0,0 +1,279 @@ @@ -1103772,7 +1103833,7 @@ index 000000000000..b2300ec635c6 +#endif /* _bcmsdh_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdh_sdmmc.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdh_sdmmc.h new file mode 100755 -index 000000000000..4e3c72d194ce +index 000000000..4e3c72d19 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdh_sdmmc.h @@ -0,0 +1,130 @@ @@ -1103908,7 +1103969,7 @@ index 000000000000..4e3c72d194ce +#endif /* __BCMSDH_SDMMC_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdpcm.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdpcm.h new file mode 100755 -index 000000000000..09a81c24398f +index 000000000..09a81c243 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdpcm.h @@ -0,0 +1,310 @@ @@ -1104224,7 +1104285,7 @@ index 000000000000..09a81c24398f +#endif /* _bcmsdpcm_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdspi.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdspi.h new file mode 100755 -index 000000000000..2d299a140cb3 +index 000000000..2d299a140 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdspi.h @@ -0,0 +1,139 @@ @@ -1104369,7 +1104430,7 @@ index 000000000000..2d299a140cb3 +#endif /* _BCM_SD_SPI_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdstd.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdstd.h new file mode 100755 -index 000000000000..5132d4340ecd +index 000000000..5132d4340 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsdstd.h @@ -0,0 +1,282 @@ @@ -1104657,7 +1104718,7 @@ index 000000000000..5132d4340ecd +#endif /* _BCM_SD_STD_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmspi.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmspi.h new file mode 100755 -index 000000000000..6f71ddc9519e +index 000000000..6f71ddc95 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmspi.h @@ -0,0 +1,44 @@ @@ -1104707,7 +1104768,7 @@ index 000000000000..6f71ddc9519e +#endif /* _BCM_SPI_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmspibrcm.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmspibrcm.h new file mode 100755 -index 000000000000..2d9f972496c3 +index 000000000..2d9f97249 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmspibrcm.h @@ -0,0 +1,168 @@ @@ -1104881,7 +1104942,7 @@ index 000000000000..2d9f972496c3 +#endif /* _BCM_SPI_BRCM_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsrom_fmt.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsrom_fmt.h new file mode 100755 -index 000000000000..e1bd05548c1f +index 000000000..e1bd05548 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsrom_fmt.h @@ -0,0 +1,1014 @@ @@ -1105901,7 +1105962,7 @@ index 000000000000..e1bd05548c1f +#endif /* _bcmsrom_fmt_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsrom_tbl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsrom_tbl.h new file mode 100755 -index 000000000000..aa72338de34f +index 000000000..aa72338de --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmsrom_tbl.h @@ -0,0 +1,1459 @@ @@ -1107366,7 +1107427,7 @@ index 000000000000..aa72338de34f +#endif /* _bcmsrom_tbl_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmstdlib_s.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmstdlib_s.h new file mode 100755 -index 000000000000..b80b3195fda5 +index 000000000..b80b3195f --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmstdlib_s.h @@ -0,0 +1,52 @@ @@ -1107424,7 +1107485,7 @@ index 000000000000..b80b3195fda5 +#endif /* _bcmstdlib_s_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmtcp.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmtcp.h new file mode 100755 -index 000000000000..6803cad809c3 +index 000000000..6803cad80 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmtcp.h @@ -0,0 +1,93 @@ @@ -1107523,7 +1107584,7 @@ index 000000000000..6803cad809c3 +#endif /* #ifndef _bcmtcp_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmtlv.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmtlv.h new file mode 100755 -index 000000000000..279840e41a35 +index 000000000..279840e41 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmtlv.h @@ -0,0 +1,343 @@ @@ -1107872,7 +1107933,7 @@ index 000000000000..279840e41a35 +#endif /* _bcmtlv_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmudp.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmudp.h new file mode 100755 -index 000000000000..397bc5985e25 +index 000000000..397bc5985 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmudp.h @@ -0,0 +1,61 @@ @@ -1107939,7 +1108000,7 @@ index 000000000000..397bc5985e25 +#endif /* #ifndef _bcmudp_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmutils.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmutils.h new file mode 100755 -index 000000000000..c779ea07ea2d +index 000000000..c779ea07e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/bcmutils.h @@ -0,0 +1,1342 @@ @@ -1109287,7 +1109348,7 @@ index 000000000000..c779ea07ea2d +#endif /* _bcmutils_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/brcm_nl80211.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/brcm_nl80211.h new file mode 100755 -index 000000000000..0e0aa766a678 +index 000000000..0e0aa766a --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/brcm_nl80211.h @@ -0,0 +1,73 @@ @@ -1109366,7 +1109427,7 @@ index 000000000000..0e0aa766a678 +#endif /* _brcm_nl80211_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dbus.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dbus.h new file mode 100755 -index 000000000000..e4b87288b3d6 +index 000000000..e4b87288b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dbus.h @@ -0,0 +1,599 @@ @@ -1109971,7 +1110032,7 @@ index 000000000000..e4b87288b3d6 +#endif /* __DBUS_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dhd_daemon.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dhd_daemon.h new file mode 100755 -index 000000000000..785b440116cc +index 000000000..785b44011 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dhd_daemon.h @@ -0,0 +1,67 @@ @@ -1110044,7 +1110105,7 @@ index 000000000000..785b440116cc +#endif /* __BCM_DHDD_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dhdioctl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dhdioctl.h new file mode 100755 -index 000000000000..f7012a0f5115 +index 000000000..f7012a0f5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dhdioctl.h @@ -0,0 +1,278 @@ @@ -1110328,7 +1110389,7 @@ index 000000000000..f7012a0f5115 +#endif /* _dhdioctl_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dnglevent.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dnglevent.h new file mode 100755 -index 000000000000..ec2cbbaf0b1f +index 000000000..ec2cbbaf0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/dnglevent.h @@ -0,0 +1,142 @@ @@ -1110476,7 +1110537,7 @@ index 000000000000..ec2cbbaf0b1f +#endif /* _DNGLEVENT_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/eapol.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/eapol.h new file mode 100755 -index 000000000000..08a296828189 +index 000000000..08a296828 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/eapol.h @@ -0,0 +1,283 @@ @@ -1110765,7 +1110826,7 @@ index 000000000000..08a296828189 +#endif /* _eapol_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/epivers.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/epivers.h new file mode 100755 -index 000000000000..23f8d324361b +index 000000000..23f8d3243 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/epivers.h @@ -0,0 +1,52 @@ @@ -1110823,7 +1110884,7 @@ index 000000000000..23f8d324361b +#endif /* _epivers_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/etd.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/etd.h new file mode 100755 -index 000000000000..a2181daf525e +index 000000000..a2181daf5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/etd.h @@ -0,0 +1,626 @@ @@ -1111455,7 +1111516,7 @@ index 000000000000..a2181daf525e +#endif /* _ETD_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/ethernet.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/ethernet.h new file mode 100755 -index 000000000000..41c9b62b0d5c +index 000000000..41c9b62b0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/ethernet.h @@ -0,0 +1,225 @@ @@ -1111686,7 +1111747,7 @@ index 000000000000..41c9b62b0d5c +#endif /* _NET_ETHERNET_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log.h new file mode 100755 -index 000000000000..e43715d72646 +index 000000000..e43715d72 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log.h @@ -0,0 +1,423 @@ @@ -1112115,7 +1112176,7 @@ index 000000000000..e43715d72646 +#endif /* _EVENT_LOG_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_payload.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_payload.h new file mode 100755 -index 000000000000..fc110219ec75 +index 000000000..fc110219e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_payload.h @@ -0,0 +1,1017 @@ @@ -1113138,7 +1113199,7 @@ index 000000000000..fc110219ec75 +#endif /* _EVENT_LOG_PAYLOAD_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_set.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_set.h new file mode 100755 -index 000000000000..47c991c20019 +index 000000000..47c991c20 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_set.h @@ -0,0 +1,124 @@ @@ -1113268,7 +1113329,7 @@ index 000000000000..47c991c20019 +#endif /* _EVENT_LOG_SET_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_tag.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_tag.h new file mode 100755 -index 000000000000..144ed7275932 +index 000000000..144ed7275 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_log_tag.h @@ -0,0 +1,479 @@ @@ -1113753,7 +1113814,7 @@ index 000000000000..144ed7275932 +#endif /* _EVENT_LOG_TAG_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_trace.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_trace.h new file mode 100755 -index 000000000000..0c6fc6b262a0 +index 000000000..0c6fc6b26 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/event_trace.h @@ -0,0 +1,124 @@ @@ -1113883,7 +1113944,7 @@ index 000000000000..0c6fc6b262a0 +#endif /* _WL_DIAG_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/fils.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/fils.h new file mode 100755 -index 000000000000..1d3c8e0b52a8 +index 000000000..1d3c8e0b5 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/fils.h @@ -0,0 +1,295 @@ @@ -1114184,7 +1114245,7 @@ index 000000000000..1d3c8e0b52a8 +#endif /* __FILSAUTH_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_armtrap.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_armtrap.h new file mode 100755 -index 000000000000..177ef53141fe +index 000000000..177ef5314 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_armtrap.h @@ -0,0 +1,90 @@ @@ -1114280,7 +1114341,7 @@ index 000000000000..177ef53141fe +#endif /* _hnd_armtrap_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_cons.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_cons.h new file mode 100755 -index 000000000000..81a699d8b5de +index 000000000..81a699d8b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_cons.h @@ -0,0 +1,87 @@ @@ -1114373,7 +1114434,7 @@ index 000000000000..81a699d8b5de +#endif /* _hnd_cons_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_debug.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_debug.h new file mode 100755 -index 000000000000..b8dca36b84c6 +index 000000000..b8dca36b8 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_debug.h @@ -0,0 +1,169 @@ @@ -1114548,7 +1114609,7 @@ index 000000000000..b8dca36b84c6 +#endif /* _HND_DEBUG_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_pktpool.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_pktpool.h new file mode 100755 -index 000000000000..57f222967488 +index 000000000..57f222967 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_pktpool.h @@ -0,0 +1,244 @@ @@ -1114798,7 +1114859,7 @@ index 000000000000..57f222967488 +#endif /* _hnd_pktpool_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_pktq.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_pktq.h new file mode 100755 -index 000000000000..824bbc1420d9 +index 000000000..824bbc142 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_pktq.h @@ -0,0 +1,326 @@ @@ -1115130,7 +1115191,7 @@ index 000000000000..824bbc1420d9 +#endif /* _hnd_pktq_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_trap.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_trap.h new file mode 100755 -index 000000000000..caf006ee26d9 +index 000000000..caf006ee2 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hnd_trap.h @@ -0,0 +1,40 @@ @@ -1115176,7 +1115237,7 @@ index 000000000000..caf006ee26d9 +#endif /* _hnd_trap_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndchipc.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndchipc.h new file mode 100755 -index 000000000000..be9a2e65cb55 +index 000000000..be9a2e65c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndchipc.h @@ -0,0 +1,54 @@ @@ -1115236,7 +1115297,7 @@ index 000000000000..be9a2e65cb55 +#endif /* _hndchipc_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndlhl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndlhl.h new file mode 100755 -index 000000000000..c6794464ebe7 +index 000000000..c6794464e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndlhl.h @@ -0,0 +1,62 @@ @@ -1115304,7 +1115365,7 @@ index 000000000000..c6794464ebe7 +#endif /* _hndlhl_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndmem.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndmem.h new file mode 100755 -index 000000000000..de348e7d3c45 +index 000000000..de348e7d3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndmem.h @@ -0,0 +1,81 @@ @@ -1115391,7 +1115452,7 @@ index 000000000000..de348e7d3c45 +#endif /* _HNDMEM_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndoobr.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndoobr.h new file mode 100755 -index 000000000000..88e2952cf7c5 +index 000000000..88e2952cf --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndoobr.h @@ -0,0 +1,76 @@ @@ -1115473,7 +1115534,7 @@ index 000000000000..88e2952cf7c5 +#endif /* _hndoobr_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndpmu.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndpmu.h new file mode 100755 -index 000000000000..df3b31bf46ee +index 000000000..df3b31bf4 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndpmu.h @@ -0,0 +1,80 @@ @@ -1115559,7 +1115620,7 @@ index 000000000000..df3b31bf46ee +#endif /* _hndpmu_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndsoc.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndsoc.h new file mode 100755 -index 000000000000..b4cb16001b97 +index 000000000..b4cb16001 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/hndsoc.h @@ -0,0 +1,351 @@ @@ -1115916,7 +1115977,7 @@ index 000000000000..b4cb16001b97 +#endif /* _HNDSOC_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linux_osl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linux_osl.h new file mode 100755 -index 000000000000..bb916706702d +index 000000000..bb9167067 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linux_osl.h @@ -0,0 +1,636 @@ @@ -1116558,7 +1116619,7 @@ index 000000000000..bb916706702d +#endif /* _linux_osl_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linux_pkt.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linux_pkt.h new file mode 100755 -index 000000000000..30fff18479f3 +index 000000000..30fff1847 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linux_pkt.h @@ -0,0 +1,236 @@ @@ -1116800,7 +1116861,7 @@ index 000000000000..30fff18479f3 +#endif /* _linux_pkt_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linuxver.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linuxver.h new file mode 100755 -index 000000000000..32ad78f6c932 +index 000000000..32ad78f6c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/linuxver.h @@ -0,0 +1,900 @@ @@ -1117706,7 +1117767,7 @@ index 000000000000..32ad78f6c932 +#endif /* _linuxver_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/lpflags.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/lpflags.h new file mode 100755 -index 000000000000..ed0ff7825b08 +index 000000000..ed0ff7825 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/lpflags.h @@ -0,0 +1,46 @@ @@ -1117758,7 +1117819,7 @@ index 000000000000..ed0ff7825b08 +#endif /* _lpflags_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/mbo.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/mbo.h new file mode 100755 -index 000000000000..eef005063065 +index 000000000..eef005063 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/mbo.h @@ -0,0 +1,286 @@ @@ -1118050,7 +1118111,7 @@ index 000000000000..eef005063065 +#endif /* __MBO_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/miniopt.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/miniopt.h new file mode 100755 -index 000000000000..1c1d8e9e2004 +index 000000000..1c1d8e9e2 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/miniopt.h @@ -0,0 +1,80 @@ @@ -1118136,7 +1118197,7 @@ index 000000000000..1c1d8e9e2004 +#endif /* MINI_OPT_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/msf.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/msf.h new file mode 100755 -index 000000000000..5f0022e53250 +index 000000000..5f0022e53 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/msf.h @@ -0,0 +1,67 @@ @@ -1118209,7 +1118270,7 @@ index 000000000000..5f0022e53250 +#endif /* _WLC_MSF_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/msgtrace.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/msgtrace.h new file mode 100755 -index 000000000000..c871c7ce620d +index 000000000..c871c7ce6 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/msgtrace.h @@ -0,0 +1,63 @@ @@ -1118278,7 +1118339,7 @@ index 000000000000..c871c7ce620d +#endif /* _MSGTRACE_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/nan.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/nan.h new file mode 100755 -index 000000000000..bdb07f8460da +index 000000000..bdb07f846 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/nan.h @@ -0,0 +1,1559 @@ @@ -1119843,7 +1119904,7 @@ index 000000000000..bdb07f8460da +#endif /* _NAN_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl.h new file mode 100755 -index 000000000000..2a7aec17d1db +index 000000000..2a7aec17d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl.h @@ -0,0 +1,378 @@ @@ -1120227,7 +1120288,7 @@ index 000000000000..2a7aec17d1db +#endif /* _osl_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl_decl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl_decl.h new file mode 100755 -index 000000000000..a5643079c831 +index 000000000..a5643079c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl_decl.h @@ -0,0 +1,38 @@ @@ -1120271,7 +1120332,7 @@ index 000000000000..a5643079c831 +#endif // endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl_ext.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl_ext.h new file mode 100755 -index 000000000000..2c182ca29bd1 +index 000000000..2c182ca29 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/osl_ext.h @@ -0,0 +1,766 @@ @@ -1121043,7 +1121104,7 @@ index 000000000000..2c182ca29bd1 +#endif /* _osl_ext_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/p2p.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/p2p.h new file mode 100755 -index 000000000000..b68d5c32e466 +index 000000000..b68d5c32e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/p2p.h @@ -0,0 +1,702 @@ @@ -1121751,7 +1121812,7 @@ index 000000000000..b68d5c32e466 +#endif /* _P2P_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/packed_section_end.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/packed_section_end.h new file mode 100755 -index 000000000000..64c7579ae26c +index 000000000..64c7579ae --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/packed_section_end.h @@ -0,0 +1,60 @@ @@ -1121817,7 +1121878,7 @@ index 000000000000..64c7579ae26c +#undef BWL_POST_PACKED_STRUCT diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/packed_section_start.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/packed_section_start.h new file mode 100755 -index 000000000000..097611ed404a +index 000000000..097611ed4 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/packed_section_start.h @@ -0,0 +1,105 @@ @@ -1121928,7 +1121989,7 @@ index 000000000000..097611ed404a +#endif // endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/pcicfg.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/pcicfg.h new file mode 100755 -index 000000000000..c8ec32a62406 +index 000000000..c8ec32a62 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/pcicfg.h @@ -0,0 +1,402 @@ @@ -1122336,7 +1122397,7 @@ index 000000000000..c8ec32a62406 +#endif /* _h_pcicfg_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/pcie_core.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/pcie_core.h new file mode 100755 -index 000000000000..592ad25e4832 +index 000000000..592ad25e4 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/pcie_core.h @@ -0,0 +1,1193 @@ @@ -1123535,7 +1123596,7 @@ index 000000000000..592ad25e4832 +#endif /* _PCIE_CORE_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/rte_ioctl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/rte_ioctl.h new file mode 100755 -index 000000000000..90669be876b4 +index 000000000..90669be87 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/rte_ioctl.h @@ -0,0 +1,104 @@ @@ -1123645,7 +1123706,7 @@ index 000000000000..90669be876b4 +#endif /* _rte_ioctl_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbchipc.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbchipc.h new file mode 100755 -index 000000000000..f7eb1cfde400 +index 000000000..f7eb1cfde --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbchipc.h @@ -0,0 +1,4619 @@ @@ -1128270,7 +1128331,7 @@ index 000000000000..f7eb1cfde400 +#endif /* _SBCHIPC_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbconfig.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbconfig.h new file mode 100755 -index 000000000000..b05cd510aa0b +index 000000000..b05cd510a --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbconfig.h @@ -0,0 +1,286 @@ @@ -1128562,7 +1128623,7 @@ index 000000000000..b05cd510aa0b +#endif /* _SBCONFIG_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbgci.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbgci.h new file mode 100755 -index 000000000000..bbf0e4337124 +index 000000000..bbf0e4337 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbgci.h @@ -0,0 +1,274 @@ @@ -1128842,7 +1128903,7 @@ index 000000000000..bbf0e4337124 +#endif /* _SBGCI_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbhndarm.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbhndarm.h new file mode 100755 -index 000000000000..ee1279a4a807 +index 000000000..ee1279a4a --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbhndarm.h @@ -0,0 +1,142 @@ @@ -1128990,7 +1129051,7 @@ index 000000000000..ee1279a4a807 +#endif /* _sbhndarm_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbhnddma.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbhnddma.h new file mode 100755 -index 000000000000..52a39dc6d415 +index 000000000..52a39dc6d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbhnddma.h @@ -0,0 +1,450 @@ @@ -1129446,7 +1129507,7 @@ index 000000000000..52a39dc6d415 +#endif /* _sbhnddma_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbpcmcia.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbpcmcia.h new file mode 100755 -index 000000000000..8b6c6cf45556 +index 000000000..8b6c6cf45 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbpcmcia.h @@ -0,0 +1,138 @@ @@ -1129590,7 +1129651,7 @@ index 000000000000..8b6c6cf45556 +#endif /* _SBPCMCIA_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsdio.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsdio.h new file mode 100755 -index 000000000000..ba7d66266afb +index 000000000..ba7d66266 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsdio.h @@ -0,0 +1,189 @@ @@ -1129785,7 +1129846,7 @@ index 000000000000..ba7d66266afb +#endif /* _SBSDIO_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsdpcmdev.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsdpcmdev.h new file mode 100755 -index 000000000000..7134247e7cf4 +index 000000000..7134247e7 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsdpcmdev.h @@ -0,0 +1,312 @@ @@ -1130103,7 +1130164,7 @@ index 000000000000..7134247e7cf4 +#endif /* _sbsdpcmdev_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsocram.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsocram.h new file mode 100755 -index 000000000000..5e709aa52d4e +index 000000000..5e709aa52 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsocram.h @@ -0,0 +1,205 @@ @@ -1130314,7 +1130375,7 @@ index 000000000000..5e709aa52d4e +#endif /* _SBSOCRAM_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsysmem.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsysmem.h new file mode 100755 -index 000000000000..065b3f1980f6 +index 000000000..065b3f198 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sbsysmem.h @@ -0,0 +1,181 @@ @@ -1130501,7 +1130562,7 @@ index 000000000000..065b3f1980f6 +#endif /* _SBSYSMEM_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdio.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdio.h new file mode 100755 -index 000000000000..844fc2780d5b +index 000000000..844fc2780 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdio.h @@ -0,0 +1,626 @@ @@ -1131133,7 +1131194,7 @@ index 000000000000..844fc2780d5b +#endif /* _SDIO_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdioh.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdioh.h new file mode 100755 -index 000000000000..327d1c4d0e1f +index 000000000..327d1c4d0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdioh.h @@ -0,0 +1,451 @@ @@ -1131590,7 +1131651,7 @@ index 000000000000..327d1c4d0e1f +#endif /* _SDIOH_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdiovar.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdiovar.h new file mode 100755 -index 000000000000..bfbe2bf94390 +index 000000000..bfbe2bf94 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdiovar.h @@ -0,0 +1,125 @@ @@ -1131721,7 +1131782,7 @@ index 000000000000..bfbe2bf94390 +#endif /* _sdiovar_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdspi.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdspi.h new file mode 100755 -index 000000000000..d42f4c783490 +index 000000000..d42f4c783 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/sdspi.h @@ -0,0 +1,79 @@ @@ -1131806,7 +1131867,7 @@ index 000000000000..d42f4c783490 +#endif /* _SD_SPI_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/siutils.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/siutils.h new file mode 100755 -index 000000000000..eba0d0a97c89 +index 000000000..eba0d0a97 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/siutils.h @@ -0,0 +1,810 @@ @@ -1132622,7 +1132683,7 @@ index 000000000000..eba0d0a97c89 +#endif /* _siutils_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/spid.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/spid.h new file mode 100755 -index 000000000000..3a08b59986ac +index 000000000..3a08b5998 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/spid.h @@ -0,0 +1,169 @@ @@ -1132797,7 +1132858,7 @@ index 000000000000..3a08b59986ac +#endif /* _SPI_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/trxhdr.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/trxhdr.h new file mode 100755 -index 000000000000..b717e62017d9 +index 000000000..b717e6201 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/trxhdr.h @@ -0,0 +1,96 @@ @@ -1132899,7 +1132960,7 @@ index 000000000000..b717e62017d9 +#endif /* _TRX_HDR_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/typedefs.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/typedefs.h new file mode 100755 -index 000000000000..c446005668db +index 000000000..c44600566 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/typedefs.h @@ -0,0 +1,368 @@ @@ -1133273,7 +1133334,7 @@ index 000000000000..c446005668db +#endif /* _TYPEDEFS_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/usbrdl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/usbrdl.h new file mode 100755 -index 000000000000..f15fbd697cea +index 000000000..f15fbd697 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/usbrdl.h @@ -0,0 +1,135 @@ @@ -1133414,7 +1133475,7 @@ index 000000000000..f15fbd697cea +#endif /* _USB_RDL_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/vlan.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/vlan.h new file mode 100755 -index 000000000000..ddc64a9381cb +index 000000000..ddc64a938 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/vlan.h @@ -0,0 +1,98 @@ @@ -1133518,7 +1133579,7 @@ index 000000000000..ddc64a9381cb +#endif /* _vlan_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlfc_proto.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlfc_proto.h new file mode 100755 -index 000000000000..0b592c6a2bc6 +index 000000000..0b592c6a2 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlfc_proto.h @@ -0,0 +1,414 @@ @@ -1133938,7 +1133999,7 @@ index 000000000000..0b592c6a2bc6 +#endif /* __wlfc_proto_definitions_h__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl.h new file mode 100755 -index 000000000000..7f14967db99d +index 000000000..7f14967db --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl.h @@ -0,0 +1,20752 @@ @@ -1154696,7 +1154757,7 @@ index 000000000000..7f14967db99d +#endif /* _wlioctl_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl_defs.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl_defs.h new file mode 100755 -index 000000000000..100b836284ce +index 000000000..100b83628 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl_defs.h @@ -0,0 +1,2466 @@ @@ -1157168,7 +1157229,7 @@ index 000000000000..100b836284ce +#endif /* wlioctl_defs_h */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl_utils.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl_utils.h new file mode 100755 -index 000000000000..6dee521a3853 +index 000000000..6dee521a3 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wlioctl_utils.h @@ -0,0 +1,62 @@ @@ -1157236,7 +1157297,7 @@ index 000000000000..6dee521a3853 +#endif /* _wlioctl_utils_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wpa.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wpa.h new file mode 100755 -index 000000000000..d618ea91b1ee +index 000000000..d618ea91b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wpa.h @@ -0,0 +1,312 @@ @@ -1157554,7 +1157615,7 @@ index 000000000000..d618ea91b1ee +#endif /* _proto_wpa_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wps.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wps.h new file mode 100755 -index 000000000000..c2ebace54013 +index 000000000..c2ebace54 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/include/wps.h @@ -0,0 +1,386 @@ @@ -1157946,7 +1158007,7 @@ index 000000000000..c2ebace54013 +#endif /* _WPS_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_osl.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_osl.c new file mode 100755 -index 000000000000..321ee05c4ccb +index 000000000..321ee05c4 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_osl.c @@ -0,0 +1,2124 @@ @@ -1160077,7 +1160138,7 @@ index 000000000000..321ee05c4ccb \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_osl_priv.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_osl_priv.h new file mode 100755 -index 000000000000..f56f292c0ecf +index 000000000..f56f292c0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_osl_priv.h @@ -0,0 +1,185 @@ @@ -1160268,7 +1160329,7 @@ index 000000000000..f56f292c0ecf +#endif /* _LINUX_OSL_PRIV_H_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_pkt.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_pkt.c new file mode 100755 -index 000000000000..e66ea740c092 +index 000000000..e66ea740c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/linux_pkt.c @@ -0,0 +1,694 @@ @@ -1160968,7 +1161029,7 @@ index 000000000000..e66ea740c092 +#endif /* LINUX_VERSION >= 3.6.0 && TSQ_MULTIPLIER */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/otpdefs.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/otpdefs.h new file mode 100755 -index 000000000000..542e5a90b3f3 +index 000000000..542e5a90b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/otpdefs.h @@ -0,0 +1,122 @@ @@ -1161096,7 +1161157,7 @@ index 000000000000..542e5a90b3f3 +#endif /* _OTPDEFS_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/pcie_core.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/pcie_core.c new file mode 100755 -index 000000000000..dd54c675a180 +index 000000000..dd54c675a --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/pcie_core.c @@ -0,0 +1,159 @@ @@ -1161261,7 +1161322,7 @@ index 000000000000..dd54c675a180 +#endif /* BCMDRIVER */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/sbutils.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/sbutils.c new file mode 100755 -index 000000000000..bd22c9aab076 +index 000000000..bd22c9aab --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/sbutils.c @@ -0,0 +1,1094 @@ @@ -1162361,7 +1162422,7 @@ index 000000000000..bd22c9aab076 +#endif // endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/siutils.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/siutils.c new file mode 100755 -index 000000000000..1f9cc39d17a4 +index 000000000..1f9cc39d1 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/siutils.c @@ -0,0 +1,3801 @@ @@ -1166168,7 +1166229,7 @@ index 000000000000..1f9cc39d17a4 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/siutils_priv.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/siutils_priv.h new file mode 100755 -index 000000000000..1686e888248d +index 000000000..1686e8882 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/siutils_priv.h @@ -0,0 +1,356 @@ @@ -1166530,7 +1166591,7 @@ index 000000000000..1686e888248d +#endif /* _siutils_priv_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android.c new file mode 100755 -index 000000000000..f1ca3f2270c9 +index 000000000..f1ca3f227 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android.c @@ -0,0 +1,6644 @@ @@ -1173180,7 +1173241,7 @@ index 000000000000..f1ca3f2270c9 +#endif /* WL_STATIC_IF */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android.h new file mode 100755 -index 000000000000..46af4b736f77 +index 000000000..46af4b736 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android.h @@ -0,0 +1,420 @@ @@ -1173606,7 +1173667,7 @@ index 000000000000..46af4b736f77 +#endif /* _wl_android_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android_ext.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android_ext.c new file mode 100755 -index 000000000000..dd9784bc0733 +index 000000000..dd9784bc0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_android_ext.c @@ -0,0 +1,7974 @@ @@ -1181586,7 +1181647,7 @@ index 000000000000..dd9784bc0733 + diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg80211.c new file mode 100755 -index 000000000000..1534f3919a3e +index 000000000..1534f3919 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg80211.c @@ -0,0 +1,25039 @@ @@ -1206631,7 +1206692,7 @@ index 000000000000..1534f3919a3e +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg80211.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg80211.h new file mode 100755 -index 000000000000..39e827d8b887 +index 000000000..39e827d8b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg80211.h @@ -0,0 +1,2451 @@ @@ -1209088,7 +1209149,7 @@ index 000000000000..39e827d8b887 +#endif /* _wl_cfg80211_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg_btcoex.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg_btcoex.c new file mode 100755 -index 000000000000..4780d116e5fe +index 000000000..4780d116e --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfg_btcoex.c @@ -0,0 +1,569 @@ @@ -1209663,7 +1209724,7 @@ index 000000000000..4780d116e5fe +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgnan.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgnan.c new file mode 100755 -index 000000000000..70a2022b0c9f +index 000000000..70a2022b0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgnan.c @@ -0,0 +1,8182 @@ @@ -1217851,7 +1217912,7 @@ index 000000000000..70a2022b0c9f +#endif /* WL_NAN */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgnan.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgnan.h new file mode 100755 -index 000000000000..6eca82b8067c +index 000000000..6eca82b80 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgnan.h @@ -0,0 +1,899 @@ @@ -1218756,7 +1218817,7 @@ index 000000000000..6eca82b8067c +#endif /* _wl_cfgnan_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgp2p.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgp2p.c new file mode 100755 -index 000000000000..673566e4a696 +index 000000000..673566e4a --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgp2p.c @@ -0,0 +1,2792 @@ @@ -1221554,7 +1221615,7 @@ index 000000000000..673566e4a696 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgp2p.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgp2p.h new file mode 100755 -index 000000000000..e47f8af9b4d6 +index 000000000..e47f8af9b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgp2p.h @@ -0,0 +1,458 @@ @@ -1222018,7 +1222079,7 @@ index 000000000000..e47f8af9b4d6 +#endif /* _wl_cfgp2p_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgscan.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgscan.c new file mode 100755 -index 000000000000..6de12e1432d7 +index 000000000..6de12e143 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgscan.c @@ -0,0 +1,3348 @@ @@ -1225372,7 +1225433,7 @@ index 000000000000..6de12e1432d7 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgscan.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgscan.h new file mode 100755 -index 000000000000..ddd133514b6f +index 000000000..ddd133514 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgscan.h @@ -0,0 +1,101 @@ @@ -1225479,7 +1225540,7 @@ index 000000000000..ddd133514b6f +#endif /* _wl_cfgscan_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgvendor.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgvendor.c new file mode 100755 -index 000000000000..b2f6cb5087d0 +index 000000000..b2f6cb508 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgvendor.c @@ -0,0 +1,8751 @@ @@ -1234236,7 +1234297,7 @@ index 000000000000..b2f6cb5087d0 +#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(3, 13, 0)) || defined(WL_VENDOR_EXT_SUPPORT) */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgvendor.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgvendor.h new file mode 100755 -index 000000000000..b70aa354dad3 +index 000000000..b70aa354d --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_cfgvendor.h @@ -0,0 +1,721 @@ @@ -1234963,7 +1235024,7 @@ index 000000000000..b70aa354dad3 +#endif /* _wl_cfgvendor_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_dbg.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_dbg.h new file mode 100755 -index 000000000000..640907ea81ff +index 000000000..640907ea8 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_dbg.h @@ -0,0 +1,381 @@ @@ -1235350,7 +1235411,7 @@ index 000000000000..640907ea81ff +#endif /* _wl_dbg_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_escan.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_escan.c new file mode 100755 -index 000000000000..9403d0600998 +index 000000000..9403d0600 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_escan.c @@ -0,0 +1,1692 @@ @@ -1237048,7 +1237109,7 @@ index 000000000000..9403d0600998 + diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_escan.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_escan.h new file mode 100755 -index 000000000000..7e4241eae508 +index 000000000..7e4241eae --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_escan.h @@ -0,0 +1,78 @@ @@ -1237132,7 +1237193,7 @@ index 000000000000..7e4241eae508 + diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_event.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_event.c new file mode 100755 -index 000000000000..fd2cb3cd0eee +index 000000000..fd2cb3cd0 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_event.c @@ -0,0 +1,506 @@ @@ -1237644,7 +1237705,7 @@ index 000000000000..fd2cb3cd0eee +#endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_ext_genl.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_ext_genl.c new file mode 100755 -index 000000000000..316f9ea6cbf2 +index 000000000..316f9ea6c --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_ext_genl.c @@ -0,0 +1,569 @@ @@ -1238219,7 +1238280,7 @@ index 000000000000..316f9ea6cbf2 + diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_iw.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_iw.c new file mode 100755 -index 000000000000..3eee7339f455 +index 000000000..3eee7339f --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_iw.c @@ -0,0 +1,4342 @@ @@ -1242567,7 +1242628,7 @@ index 000000000000..3eee7339f455 +#endif /* USE_IW */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_iw.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_iw.h new file mode 100755 -index 000000000000..ba2cae8bd7c6 +index 000000000..ba2cae8bd --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_iw.h @@ -0,0 +1,178 @@ @@ -1242751,7 +1242812,7 @@ index 000000000000..ba2cae8bd7c6 +#endif /* _wl_iw_h_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_linux_mon.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_linux_mon.c new file mode 100755 -index 000000000000..920eb42dba27 +index 000000000..920eb42db --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_linux_mon.c @@ -0,0 +1,474 @@ @@ -1243231,7 +1243292,7 @@ index 000000000000..920eb42dba27 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_roam.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_roam.c new file mode 100755 -index 000000000000..a7d49bddc3e6 +index 000000000..a7d49bddc --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wl_roam.c @@ -0,0 +1,375 @@ @@ -1243612,7 +1243673,7 @@ index 000000000000..a7d49bddc3e6 +#endif /* ESCAN_CHANNEL_CACHE */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wldev_common.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wldev_common.c new file mode 100755 -index 000000000000..4a1aae7316e0 +index 000000000..4a1aae731 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wldev_common.c @@ -0,0 +1,535 @@ @@ -1244153,7 +1244214,7 @@ index 000000000000..4a1aae7316e0 +} diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wldev_common.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wldev_common.h new file mode 100755 -index 000000000000..772152e79070 +index 000000000..772152e79 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd_wifi6/wldev_common.h @@ -0,0 +1,135 @@ @@ -1244294,7 +1244355,7 @@ index 000000000000..772152e79070 +#endif /* __WLDEV_COMMON_H__ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/rk_wifi_config.c b/drivers/net/wireless/rockchip_wlan/rkwifi/rk_wifi_config.c new file mode 100755 -index 000000000000..82799df987e8 +index 000000000..82799df98 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/rk_wifi_config.c @@ -0,0 +1,30 @@ @@ -1244329,7 +1244390,7 @@ index 000000000000..82799df987e8 +EXPORT_SYMBOL(rkwifi_set_firmware); +MODULE_LICENSE("GPL"); diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c -index 1505c745154e..b9ed2b7e4e0f 100644 +index 1505c7451..b9ed2b7e4 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -1668,7 +1668,11 @@ static void __exit nvmem_exit(void) @@ -1244345,7 +1244406,7 @@ index 1505c745154e..b9ed2b7e4e0f 100644 MODULE_AUTHOR("Srinivas Kandagatla "); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/pinctrl/pinctrl-rk805.c b/drivers/pinctrl/pinctrl-rk805.c -index c6f4229eb106..46e426cf4e20 100644 +index c6f4229eb..46e426cf4 100644 --- a/drivers/pinctrl/pinctrl-rk805.c +++ b/drivers/pinctrl/pinctrl-rk805.c @@ -78,6 +78,7 @@ struct rk805_pctrl_info { @@ -1287386,7 +1287447,7 @@ index c6f4229eb106..46e426cf4e20 100644 MODULE_DESCRIPTION("RK805 pin control and GPIO driver"); MODULE_AUTHOR("Joseph Chen "); diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c -index 2a454098eaaa..7af6f74df96a 100644 +index 2a454098e..7af6f74df 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -16,12 +16,14 @@ @@ -1289564,7 +1289625,7 @@ index 2a454098eaaa..7af6f74df96a 100644 +MODULE_DEVICE_TABLE(of, rockchip_pinctrl_dt_match); diff --git a/drivers/pinctrl/pinctrl-rockchip.h b/drivers/pinctrl/pinctrl-rockchip.h new file mode 100755 -index 000000000000..cd1662db5c97 +index 000000000..cd1662db5 --- /dev/null +++ b/drivers/pinctrl/pinctrl-rockchip.h @@ -0,0 +1,277 @@ @@ -1289847,7 +1289908,7 @@ index 000000000000..cd1662db5c97 +#endif diff --git a/drivers/power/ec_battery.c b/drivers/power/ec_battery.c new file mode 100755 -index 000000000000..9627cd1a0a11 +index 000000000..9627cd1a0 --- /dev/null +++ b/drivers/power/ec_battery.c @@ -0,0 +1,466 @@ @@ -1290318,7 +1290379,7 @@ index 000000000000..9627cd1a0a11 +MODULE_ALIAS("platform:ec-charger"); +MODULE_AUTHOR("Shunqing Chen"); diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c -index 1c5af2fef142..c5067eb75370 100644 +index 1c5af2fef..c5067eb75 100644 --- a/drivers/power/reset/gpio-poweroff.c +++ b/drivers/power/reset/gpio-poweroff.c @@ -90,7 +90,6 @@ static const struct of_device_id of_gpio_poweroff_match[] = { @@ -1290331,7 +1290392,7 @@ index 1c5af2fef142..c5067eb75370 100644 .probe = gpio_poweroff_probe, diff --git a/drivers/power/reset/reboot-mode.h b/drivers/power/reset/reboot-mode.h new file mode 100755 -index 000000000000..342df786d043 +index 000000000..342df786d --- /dev/null +++ b/drivers/power/reset/reboot-mode.h @@ -0,0 +1,7 @@ @@ -1290343,7 +1290404,7 @@ index 000000000000..342df786d043 + +#endif diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig -index 0aa46b451017..31abccec4d93 100644 +index 0aa46b451..31abccec4 100644 --- a/drivers/power/supply/Kconfig +++ b/drivers/power/supply/Kconfig @@ -629,6 +629,12 @@ config CHARGER_BQ2515X @@ -1290412,7 +1290473,7 @@ index 0aa46b451017..31abccec4d93 100644 + endif # POWER_SUPPLY diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile -index dd4b86318cd9..eec17d90f846 100644 +index dd4b86318..eec17d90f 100644 --- a/drivers/power/supply/Makefile +++ b/drivers/power/supply/Makefile @@ -83,6 +83,7 @@ obj-$(CONFIG_CHARGER_BQ24190) += bq24190_charger.o @@ -1290434,7 +1290495,7 @@ index dd4b86318cd9..eec17d90f846 100644 +obj-$(CONFIG_BATTERY_RK818) += rk818_battery.o +obj-$(CONFIG_CHARGER_RK818) += rk818_charger.o diff --git a/drivers/power/supply/ab8500_btemp.c b/drivers/power/supply/ab8500_btemp.c -index 5a1adceb6974..56e6bc66aa2c 100644 +index 5a1adceb6..56e6bc66a 100644 --- a/drivers/power/supply/ab8500_btemp.c +++ b/drivers/power/supply/ab8500_btemp.c @@ -1140,7 +1140,6 @@ static const struct of_device_id ab8500_btemp_match[] = { @@ -1290446,7 +1290507,7 @@ index 5a1adceb6974..56e6bc66aa2c 100644 static struct platform_driver ab8500_btemp_driver = { .probe = ab8500_btemp_probe, diff --git a/drivers/power/supply/ab8500_charger.c b/drivers/power/supply/ab8500_charger.c -index 3d627768ad7b..db65be026920 100644 +index 3d627768a..db65be026 100644 --- a/drivers/power/supply/ab8500_charger.c +++ b/drivers/power/supply/ab8500_charger.c @@ -413,14 +413,6 @@ static void ab8500_enable_disable_sw_fallback(struct ab8500_charger *di, @@ -1290490,7 +1290551,7 @@ index 3d627768ad7b..db65be026920 100644 static struct platform_driver ab8500_charger_driver = { .probe = ab8500_charger_probe, diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c -index a88590563647..47297c4069e6 100644 +index a88590563..47297c406 100644 --- a/drivers/power/supply/ab8500_fg.c +++ b/drivers/power/supply/ab8500_fg.c @@ -3249,7 +3249,6 @@ static const struct of_device_id ab8500_fg_match[] = { @@ -1290502,7 +1290563,7 @@ index a88590563647..47297c4069e6 100644 static struct platform_driver ab8500_fg_driver = { .probe = ab8500_fg_probe, diff --git a/drivers/power/supply/axp288_fuel_gauge.c b/drivers/power/supply/axp288_fuel_gauge.c -index be24529157be..148eb8105803 100644 +index be2452915..148eb8105 100644 --- a/drivers/power/supply/axp288_fuel_gauge.c +++ b/drivers/power/supply/axp288_fuel_gauge.c @@ -149,7 +149,7 @@ static int fuel_gauge_reg_readb(struct axp288_fg_info *info, int reg) @@ -1290525,7 +1290586,7 @@ index be24529157be..148eb8105803 100644 } diff --git a/drivers/power/supply/bq25700_charger.c b/drivers/power/supply/bq25700_charger.c new file mode 100755 -index 000000000000..5b2a516509ed +index 000000000..5b2a51650 --- /dev/null +++ b/drivers/power/supply/bq25700_charger.c @@ -0,0 +1,2105 @@ @@ -1292635,7 +1292696,7 @@ index 000000000000..5b2a516509ed +MODULE_AUTHOR("shengfeixu "); +MODULE_DESCRIPTION("TI bq25700 Charger Driver"); diff --git a/drivers/power/supply/charger-manager.c b/drivers/power/supply/charger-manager.c -index 333349275b96..6fcebe441552 100644 +index 333349275..6fcebe441 100644 --- a/drivers/power/supply/charger-manager.c +++ b/drivers/power/supply/charger-manager.c @@ -1279,7 +1279,6 @@ static const struct of_device_id charger_manager_match[] = { @@ -1292647,7 +1292708,7 @@ index 333349275b96..6fcebe441552 100644 static struct charger_desc *of_cm_parse_desc(struct device *dev) { diff --git a/drivers/power/supply/cw2015_battery.c b/drivers/power/supply/cw2015_battery.c -index de1fa71be1e8..0146f1bfc29b 100644 +index de1fa71be..0146f1bfc 100644 --- a/drivers/power/supply/cw2015_battery.c +++ b/drivers/power/supply/cw2015_battery.c @@ -673,9 +673,7 @@ static int cw_bat_probe(struct i2c_client *client) @@ -1292662,7 +1292723,7 @@ index de1fa71be1e8..0146f1bfc29b 100644 } diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c -index 76b0f45a20b4..fb4399a90758 100644 +index 76b0f45a2..fb4399a90 100644 --- a/drivers/power/supply/max17042_battery.c +++ b/drivers/power/supply/max17042_battery.c @@ -741,7 +741,7 @@ static inline void max17042_override_por_values(struct max17042_chip *chip) @@ -1292698,7 +1292759,7 @@ index 76b0f45a20b4..fb4399a90758 100644 /* * On ACPI systems the IRQ may be handled by ACPI-event code, diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c -index 5c8c117b396e..631fcaa68d64 100644 +index 5c8c117b3..631fcaa68 100644 --- a/drivers/power/supply/power_supply_core.c +++ b/drivers/power/supply/power_supply_core.c @@ -32,6 +32,13 @@ EXPORT_SYMBOL_GPL(power_supply_notifier); @@ -1292794,7 +1292855,7 @@ index 5c8c117b396e..631fcaa68d64 100644 { struct power_supply **psy = res; diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c -index 2b1df9c33969..932b890a8f3d 100644 +index 2b1df9c33..932b890a8 100644 --- a/drivers/power/supply/power_supply_sysfs.c +++ b/drivers/power/supply/power_supply_sysfs.c @@ -89,6 +89,7 @@ static const char * const POWER_SUPPLY_CHARGE_TYPE_TEXT[] = { @@ -1292807,7 +1292868,7 @@ index 2b1df9c33969..932b890a8f3d 100644 static const char * const POWER_SUPPLY_HEALTH_TEXT[] = { diff --git a/drivers/power/supply/rk816_battery.c b/drivers/power/supply/rk816_battery.c new file mode 100755 -index 000000000000..d204a0129a8d +index 000000000..d204a0129 --- /dev/null +++ b/drivers/power/supply/rk816_battery.c @@ -0,0 +1,5172 @@ @@ -1297985,7 +1298046,7 @@ index 000000000000..d204a0129a8d +MODULE_AUTHOR("chenjh"); diff --git a/drivers/power/supply/rk816_battery.h b/drivers/power/supply/rk816_battery.h new file mode 100755 -index 000000000000..b8b467114c1f +index 000000000..b8b467114 --- /dev/null +++ b/drivers/power/supply/rk816_battery.h @@ -0,0 +1,286 @@ @@ -1298277,7 +1298338,7 @@ index 000000000000..b8b467114c1f +#endif diff --git a/drivers/power/supply/rk817_battery.c b/drivers/power/supply/rk817_battery.c new file mode 100755 -index 000000000000..d9003ad9e534 +index 000000000..d9003ad9e --- /dev/null +++ b/drivers/power/supply/rk817_battery.c @@ -0,0 +1,3418 @@ @@ -1301701,7 +1301762,7 @@ index 000000000000..d9003ad9e534 +MODULE_LICENSE("GPL"); diff --git a/drivers/power/supply/rk817_charger.c b/drivers/power/supply/rk817_charger.c new file mode 100755 -index 000000000000..b7e4f7627bdb +index 000000000..b7e4f7627 --- /dev/null +++ b/drivers/power/supply/rk817_charger.c @@ -0,0 +1,1798 @@ @@ -1303505,7 +1303566,7 @@ index 000000000000..b7e4f7627bdb +MODULE_LICENSE("GPL"); diff --git a/drivers/power/supply/rk818_battery.c b/drivers/power/supply/rk818_battery.c new file mode 100755 -index 000000000000..90ff1fac163c +index 000000000..90ff1fac1 --- /dev/null +++ b/drivers/power/supply/rk818_battery.c @@ -0,0 +1,3622 @@ @@ -1307133,7 +1307194,7 @@ index 000000000000..90ff1fac163c +MODULE_AUTHOR("chenjh"); diff --git a/drivers/power/supply/rk818_battery.h b/drivers/power/supply/rk818_battery.h new file mode 100755 -index 000000000000..66cbbe9dac4c +index 000000000..66cbbe9da --- /dev/null +++ b/drivers/power/supply/rk818_battery.h @@ -0,0 +1,168 @@ @@ -1307307,7 +1307368,7 @@ index 000000000000..66cbbe9dac4c +#endif diff --git a/drivers/power/supply/rk818_charger.c b/drivers/power/supply/rk818_charger.c new file mode 100755 -index 000000000000..56961effd13c +index 000000000..56961effd --- /dev/null +++ b/drivers/power/supply/rk818_charger.c @@ -0,0 +1,1889 @@ @@ -1309201,7 +1309262,7 @@ index 000000000000..56961effd13c +MODULE_ALIAS("platform:rk818-charger"); +MODULE_AUTHOR("chenjh"); diff --git a/drivers/power/supply/rt5033_battery.c b/drivers/power/supply/rt5033_battery.c -index 7a23c70f4879..11768892d078 100644 +index 7a23c70f4..11768892d 100644 --- a/drivers/power/supply/rt5033_battery.c +++ b/drivers/power/supply/rt5033_battery.c @@ -164,16 +164,9 @@ static const struct i2c_device_id rt5033_battery_id[] = { @@ -1309222,7 +1309283,7 @@ index 7a23c70f4879..11768892d078 100644 .probe = rt5033_battery_probe, .remove = rt5033_battery_remove, diff --git a/drivers/power/supply/sc2731_charger.c b/drivers/power/supply/sc2731_charger.c -index 288b79836c13..335cb857ef30 100644 +index 288b79836..335cb857e 100644 --- a/drivers/power/supply/sc2731_charger.c +++ b/drivers/power/supply/sc2731_charger.c @@ -524,7 +524,6 @@ static const struct of_device_id sc2731_charger_of_match[] = { @@ -1309234,7 +1309295,7 @@ index 288b79836c13..335cb857ef30 100644 static struct platform_driver sc2731_charger_driver = { .driver = { diff --git a/drivers/power/supply/sc27xx_fuel_gauge.c b/drivers/power/supply/sc27xx_fuel_gauge.c -index 3bf4b263950d..ad2265834314 100644 +index 3bf4b2639..ad2265834 100644 --- a/drivers/power/supply/sc27xx_fuel_gauge.c +++ b/drivers/power/supply/sc27xx_fuel_gauge.c @@ -1335,7 +1335,6 @@ static const struct of_device_id sc27xx_fgu_of_match[] = { @@ -1309246,7 +1309307,7 @@ index 3bf4b263950d..ad2265834314 100644 static struct platform_driver sc27xx_fgu_driver = { .probe = sc27xx_fgu_probe, diff --git a/drivers/power/supply/smb347-charger.c b/drivers/power/supply/smb347-charger.c -index 912e2184f918..8cfbd8d6b478 100644 +index 912e2184f..8cfbd8d6b 100644 --- a/drivers/power/supply/smb347-charger.c +++ b/drivers/power/supply/smb347-charger.c @@ -56,7 +56,6 @@ @@ -1309275,7 +1309336,7 @@ index 912e2184f918..8cfbd8d6b478 100644 * command register unless pin control is specified in the platform diff --git a/drivers/power/sy6982c_charger.c b/drivers/power/sy6982c_charger.c new file mode 100755 -index 000000000000..dfa82c3f8d27 +index 000000000..dfa82c3f8 --- /dev/null +++ b/drivers/power/sy6982c_charger.c @@ -0,0 +1,401 @@ @@ -1309682,7 +1309743,7 @@ index 000000000000..dfa82c3f8d27 +MODULE_AUTHOR("chen Shunqing"); diff --git a/drivers/power/universal_charger.c b/drivers/power/universal_charger.c new file mode 100755 -index 000000000000..0f7b4c9e8003 +index 000000000..0f7b4c9e8 --- /dev/null +++ b/drivers/power/universal_charger.c @@ -0,0 +1,419 @@ @@ -1310106,7 +1310167,7 @@ index 000000000000..0f7b4c9e8003 +MODULE_ALIAS("platform:universal-charger"); +MODULE_AUTHOR("chen Shunqing"); diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig -index 63be5362fd3a..ca5db43118d4 100644 +index 63be5362f..ca5db4311 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -408,6 +408,12 @@ config PWM_ROCKCHIP @@ -1310123,7 +1310184,7 @@ index 63be5362fd3a..ca5db43118d4 100644 tristate "Samsung PWM support" depends on PLAT_SAMSUNG || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST diff --git a/drivers/pwm/pwm-rockchip.c b/drivers/pwm/pwm-rockchip.c -index 1f3079562b38..e6394eb8176b 100644 +index 1f3079562..e6394eb81 100644 --- a/drivers/pwm/pwm-rockchip.c +++ b/drivers/pwm/pwm-rockchip.c @@ -11,6 +11,7 @@ @@ -1310407,7 +1310468,7 @@ index 1f3079562b38..e6394eb8176b 100644 MODULE_AUTHOR("Beniamino Galvani "); MODULE_DESCRIPTION("Rockchip SoC PWM driver"); diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c -index 9903c3a7eced..54619969dce6 100644 +index b8417a8d2..937c0235b 100644 --- a/drivers/pwm/sysfs.c +++ b/drivers/pwm/sysfs.c @@ -103,6 +103,43 @@ static ssize_t duty_cycle_store(struct device *child, @@ -1310475,7 +1310536,7 @@ index 9903c3a7eced..54619969dce6 100644 &dev_attr_polarity.attr, &dev_attr_capture.attr, diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig -index 020a00d6696b..2da933776c81 100644 +index 020a00d66..2da933776 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -1279,5 +1279,11 @@ config REGULATOR_QCOM_LABIBB @@ -1310491,7 +1310552,7 @@ index 020a00d6696b..2da933776c81 100644 endif diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile -index 6ebae516258e..17e3300e71d5 100644 +index 6ebae5162..17e3300e7 100644 --- a/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile @@ -24,6 +24,7 @@ obj-$(CONFIG_REGULATOR_AD5398) += ad5398.o @@ -1310526,7 +1310587,7 @@ index 6ebae516258e..17e3300e71d5 100644 ccflags-$(CONFIG_REGULATOR_DEBUG) += -DDEBUG diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c -index c2b6b1befcf2..ee4f9a653635 100644 +index 50cbfe54c..7efd88cc3 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -51,6 +51,7 @@ static LIST_HEAD(regulator_map_list); @@ -1310904,7 +1310965,7 @@ index c2b6b1befcf2..ee4f9a653635 100644 static int regulator_register_resolve_supply(struct device *dev, void *data) { struct regulator_dev *rdev = dev_to_rdev(dev); -@@ -5526,6 +5866,7 @@ void regulator_unregister(struct regulator_dev *rdev) +@@ -5522,6 +5862,7 @@ void regulator_unregister(struct regulator_dev *rdev) mutex_lock(®ulator_list_mutex); @@ -1310912,7 +1310973,7 @@ index c2b6b1befcf2..ee4f9a653635 100644 WARN_ON(rdev->open_count); regulator_remove_coupling(rdev); unset_regulator_supplies(rdev); -@@ -5957,7 +6298,11 @@ static int __init regulator_init(void) +@@ -5953,7 +6294,11 @@ static int __init regulator_init(void) } /* init early to allow our consumers to complete system booting */ @@ -1310925,7 +1310986,7 @@ index c2b6b1befcf2..ee4f9a653635 100644 static int regulator_late_cleanup(struct device *dev, void *data) { diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c -index 1af12074a75a..534028ec15c2 100644 +index 1af12074a..534028ec1 100644 --- a/drivers/regulator/fan53555.c +++ b/drivers/regulator/fan53555.c @@ -18,6 +18,8 @@ @@ -1311622,7 +1311683,7 @@ index 1af12074a75a..534028ec15c2 100644 diff --git a/drivers/regulator/lp8752.c b/drivers/regulator/lp8752.c new file mode 100755 -index 000000000000..cf8e685f304a +index 000000000..cf8e685f3 --- /dev/null +++ b/drivers/regulator/lp8752.c @@ -0,0 +1,316 @@ @@ -1311944,7 +1312005,7 @@ index 000000000000..cf8e685f304a +MODULE_LICENSE("GPL v2"); diff --git a/drivers/regulator/mp8865-regulator.c b/drivers/regulator/mp8865-regulator.c new file mode 100755 -index 000000000000..607e3a8f2df4 +index 000000000..607e3a8f2 --- /dev/null +++ b/drivers/regulator/mp8865-regulator.c @@ -0,0 +1,248 @@ @@ -1312197,7 +1312258,7 @@ index 000000000000..607e3a8f2df4 +MODULE_DESCRIPTION("mp8865 voltage regulator driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c -index 5d844697c7b6..b11a434ec9fd 100644 +index 5d844697c..b11a434ec 100644 --- a/drivers/regulator/of_regulator.c +++ b/drivers/regulator/of_regulator.c @@ -417,8 +417,12 @@ device_node *regulator_of_get_init_node(struct device *dev, @@ -1312216,7 +1312277,7 @@ index 5d844697c7b6..b11a434ec9fd 100644 if (!strcmp(desc->of_match, name)) { of_node_put(search); diff --git a/drivers/regulator/rk808-regulator.c b/drivers/regulator/rk808-regulator.c -index e926c1a85846..bb8b2f604a24 100644 +index e926c1a85..bb8b2f604 100644 --- a/drivers/regulator/rk808-regulator.c +++ b/drivers/regulator/rk808-regulator.c @@ -34,6 +34,11 @@ @@ -1313106,7 +1313167,7 @@ index e926c1a85846..bb8b2f604a24 100644 MODULE_AUTHOR("Zhang Qing "); diff --git a/drivers/regulator/scmi-regulator.c b/drivers/regulator/scmi-regulator.c new file mode 100755 -index 000000000000..9a4297276098 +index 000000000..9a4297276 --- /dev/null +++ b/drivers/regulator/scmi-regulator.c @@ -0,0 +1,421 @@ @@ -1313533,7 +1313594,7 @@ index 000000000000..9a4297276098 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/regulator/syr82x.c b/drivers/regulator/syr82x.c new file mode 100755 -index 000000000000..4f7b0892a3bc +index 000000000..4f7b0892a --- /dev/null +++ b/drivers/regulator/syr82x.c @@ -0,0 +1,520 @@ @@ -1314059,7 +1314120,7 @@ index 000000000000..4f7b0892a3bc + diff --git a/drivers/regulator/tps549b22-regulator.c b/drivers/regulator/tps549b22-regulator.c new file mode 100755 -index 000000000000..bae2a67f4345 +index 000000000..bae2a67f4 --- /dev/null +++ b/drivers/regulator/tps549b22-regulator.c @@ -0,0 +1,437 @@ @@ -1314502,7 +1314563,7 @@ index 000000000000..bae2a67f4345 +MODULE_DESCRIPTION(" tps549b22 dcdc driver"); diff --git a/drivers/regulator/xz3216.c b/drivers/regulator/xz3216.c new file mode 100755 -index 000000000000..54182559b161 +index 000000000..54182559b --- /dev/null +++ b/drivers/regulator/xz3216.c @@ -0,0 +1,404 @@ @@ -1314912,7 +1314973,7 @@ index 000000000000..54182559b161 +MODULE_DESCRIPTION("xz3216 PMIC driver"); diff --git a/drivers/rk_nand/Kconfig b/drivers/rk_nand/Kconfig new file mode 100755 -index 000000000000..c49a1c28b702 +index 000000000..c49a1c28b --- /dev/null +++ b/drivers/rk_nand/Kconfig @@ -0,0 +1,10 @@ @@ -1314928,7 +1314989,7 @@ index 000000000000..c49a1c28b702 +endif diff --git a/drivers/rk_nand/Makefile b/drivers/rk_nand/Makefile new file mode 100755 -index 000000000000..dbd156f6e78b +index 000000000..dbd156f6e --- /dev/null +++ b/drivers/rk_nand/Makefile @@ -0,0 +1,9 @@ @@ -1314943,7 +1315004,7 @@ index 000000000000..dbd156f6e78b +endif diff --git a/drivers/rk_nand/rk_ftl_api.h b/drivers/rk_nand/rk_ftl_api.h new file mode 100755 -index 000000000000..ebde01e3dbb6 +index 000000000..ebde01e3d --- /dev/null +++ b/drivers/rk_nand/rk_ftl_api.h @@ -0,0 +1,41 @@ @@ -1314990,7 +1315051,7 @@ index 000000000000..ebde01e3dbb6 + diff --git a/drivers/rk_nand/rk_ftl_arm_v7.S b/drivers/rk_nand/rk_ftl_arm_v7.S new file mode 100755 -index 000000000000..db549c3b269e +index 000000000..db549c3b2 --- /dev/null +++ b/drivers/rk_nand/rk_ftl_arm_v7.S @@ -0,0 +1,30165 @@ @@ -1345161,7 +1345222,7 @@ index 000000000000..db549c3b269e + .ascii "\0013vendor storage %x,%x,%x\012\000" diff --git a/drivers/rk_nand/rk_ftl_arm_v7_thumb.S b/drivers/rk_nand/rk_ftl_arm_v7_thumb.S new file mode 100755 -index 000000000000..a67898acb677 +index 000000000..a67898acb --- /dev/null +++ b/drivers/rk_nand/rk_ftl_arm_v7_thumb.S @@ -0,0 +1,30192 @@ @@ -1375359,7 +1375420,7 @@ index 000000000000..a67898acb677 + .ascii "\0013vendor storage %x,%x,%x\012\000" diff --git a/drivers/rk_nand/rk_ftl_arm_v8.S b/drivers/rk_nand/rk_ftl_arm_v8.S new file mode 100755 -index 000000000000..537155f1fcde +index 000000000..537155f1f --- /dev/null +++ b/drivers/rk_nand/rk_ftl_arm_v8.S @@ -0,0 +1,27968 @@ @@ -1403333,7 +1403394,7 @@ index 000000000000..537155f1fcde + .string "\0013vendor storage %x,%x,%x\n" diff --git a/drivers/rk_nand/rk_ftlv5_arm32.S b/drivers/rk_nand/rk_ftlv5_arm32.S new file mode 100755 -index 000000000000..26e2a694fb6d +index 000000000..26e2a694f --- /dev/null +++ b/drivers/rk_nand/rk_ftlv5_arm32.S @@ -0,0 +1,27612 @@ @@ -1430951,7 +1431012,7 @@ index 000000000000..26e2a694fb6d + .ascii "erase power lost blk = %x vpc=%x\012\000" diff --git a/drivers/rk_nand/rk_ftlv5_arm64.S b/drivers/rk_nand/rk_ftlv5_arm64.S new file mode 100755 -index 000000000000..260a57d855b5 +index 000000000..260a57d85 --- /dev/null +++ b/drivers/rk_nand/rk_ftlv5_arm64.S @@ -0,0 +1,25632 @@ @@ -1456589,7 +1456650,7 @@ index 000000000000..260a57d855b5 + .string "erase power lost blk = %x vpc=%x\n" diff --git a/drivers/rk_nand/rk_nand_base.c b/drivers/rk_nand/rk_nand_base.c new file mode 100755 -index 000000000000..9d5e2fb02baa +index 000000000..9d5e2fb02 --- /dev/null +++ b/drivers/rk_nand/rk_nand_base.c @@ -0,0 +1,456 @@ @@ -1457051,7 +1457112,7 @@ index 000000000000..9d5e2fb02baa +MODULE_LICENSE("GPL v2"); diff --git a/drivers/rk_nand/rk_nand_base.h b/drivers/rk_nand/rk_nand_base.h new file mode 100755 -index 000000000000..023e58d5fc5c +index 000000000..023e58d5f --- /dev/null +++ b/drivers/rk_nand/rk_nand_base.h @@ -0,0 +1,46 @@ @@ -1457103,7 +1457164,7 @@ index 000000000000..023e58d5fc5c +#endif diff --git a/drivers/rk_nand/rk_nand_blk.c b/drivers/rk_nand/rk_nand_blk.c new file mode 100755 -index 000000000000..7d1c46966481 +index 000000000..7d1c46966 --- /dev/null +++ b/drivers/rk_nand/rk_nand_blk.c @@ -0,0 +1,711 @@ @@ -1457820,7 +1457881,7 @@ index 000000000000..7d1c46966481 +} diff --git a/drivers/rk_nand/rk_nand_blk.h b/drivers/rk_nand/rk_nand_blk.h new file mode 100755 -index 000000000000..681c625f5081 +index 000000000..681c625f5 --- /dev/null +++ b/drivers/rk_nand/rk_nand_blk.h @@ -0,0 +1,67 @@ @@ -1457893,7 +1457954,7 @@ index 000000000000..681c625f5081 +#endif diff --git a/drivers/rk_nand/rk_zftl_arm32.S b/drivers/rk_nand/rk_zftl_arm32.S new file mode 100755 -index 000000000000..ec6959a4c9c9 +index 000000000..ec6959a4c --- /dev/null +++ b/drivers/rk_nand/rk_zftl_arm32.S @@ -0,0 +1,37095 @@ @@ -1494994,7 +1495055,7 @@ index 000000000000..ec6959a4c9c9 + .ascii "\0013vendor storage %x,%x,%x\012\000" diff --git a/drivers/rk_nand/rk_zftl_arm64.S b/drivers/rk_nand/rk_zftl_arm64.S new file mode 100755 -index 000000000000..943e37110677 +index 000000000..943e37110 --- /dev/null +++ b/drivers/rk_nand/rk_zftl_arm64.S @@ -0,0 +1,35207 @@ @@ -1530207,7 +1530268,7 @@ index 000000000000..943e37110677 + .string "\0013vendor storage %x,%x,%x\n" diff --git a/drivers/rkflash/Kconfig b/drivers/rkflash/Kconfig new file mode 100755 -index 000000000000..4c791915e7bc +index 000000000..4c791915e --- /dev/null +++ b/drivers/rkflash/Kconfig @@ -0,0 +1,80 @@ @@ -1530293,7 +1530354,7 @@ index 000000000000..4c791915e7bc +endif # ARCH_ROCKCHIP diff --git a/drivers/rkflash/Makefile b/drivers/rkflash/Makefile new file mode 100755 -index 000000000000..283a217eb6ca +index 000000000..283a217eb --- /dev/null +++ b/drivers/rkflash/Makefile @@ -0,0 +1,14 @@ @@ -1530313,7 +1530374,7 @@ index 000000000000..283a217eb6ca +endif diff --git a/drivers/rkflash/flash.c b/drivers/rkflash/flash.c new file mode 100755 -index 000000000000..52be15969cda +index 000000000..52be15969 --- /dev/null +++ b/drivers/rkflash/flash.c @@ -0,0 +1,505 @@ @@ -1530824,7 +1530885,7 @@ index 000000000000..52be15969cda +} diff --git a/drivers/rkflash/flash.h b/drivers/rkflash/flash.h new file mode 100755 -index 000000000000..8f1284c9026a +index 000000000..8f1284c90 --- /dev/null +++ b/drivers/rkflash/flash.h @@ -0,0 +1,132 @@ @@ -1530962,7 +1531023,7 @@ index 000000000000..8f1284c9026a +#endif diff --git a/drivers/rkflash/flash_com.h b/drivers/rkflash/flash_com.h new file mode 100755 -index 000000000000..da6eb29968a1 +index 000000000..da6eb2996 --- /dev/null +++ b/drivers/rkflash/flash_com.h @@ -0,0 +1,77 @@ @@ -1531045,7 +1531106,7 @@ index 000000000000..da6eb29968a1 +#endif diff --git a/drivers/rkflash/nand_boot.c b/drivers/rkflash/nand_boot.c new file mode 100755 -index 000000000000..7db6ff9e7f48 +index 000000000..7db6ff9e7 --- /dev/null +++ b/drivers/rkflash/nand_boot.c @@ -0,0 +1,83 @@ @@ -1531134,7 +1531195,7 @@ index 000000000000..7db6ff9e7f48 + diff --git a/drivers/rkflash/nandc.c b/drivers/rkflash/nandc.c new file mode 100755 -index 000000000000..69e3b0ed5598 +index 000000000..69e3b0ed5 --- /dev/null +++ b/drivers/rkflash/nandc.c @@ -0,0 +1,467 @@ @@ -1531607,7 +1531668,7 @@ index 000000000000..69e3b0ed5598 +} diff --git a/drivers/rkflash/nandc.h b/drivers/rkflash/nandc.h new file mode 100755 -index 000000000000..e650493dbe4d +index 000000000..e650493db --- /dev/null +++ b/drivers/rkflash/nandc.h @@ -0,0 +1,346 @@ @@ -1531959,7 +1532020,7 @@ index 000000000000..e650493dbe4d +#endif diff --git a/drivers/rkflash/rk_sftl.h b/drivers/rkflash/rk_sftl.h new file mode 100755 -index 000000000000..378f83714b5d +index 000000000..378f83714 --- /dev/null +++ b/drivers/rkflash/rk_sftl.h @@ -0,0 +1,48 @@ @@ -1532013,7 +1532074,7 @@ index 000000000000..378f83714b5d +#endif diff --git a/drivers/rkflash/rk_sftl_arm_v7.S b/drivers/rkflash/rk_sftl_arm_v7.S new file mode 100755 -index 000000000000..a8119e884d35 +index 000000000..a8119e884 --- /dev/null +++ b/drivers/rkflash/rk_sftl_arm_v7.S @@ -0,0 +1,15787 @@ @@ -1547806,7 +1547867,7 @@ index 000000000000..a8119e884d35 + .ascii "vendor_storage\000" diff --git a/drivers/rkflash/rk_sftl_arm_v7_thumb.S b/drivers/rkflash/rk_sftl_arm_v7_thumb.S new file mode 100755 -index 000000000000..d4429f7f1db4 +index 000000000..d4429f7f1 --- /dev/null +++ b/drivers/rkflash/rk_sftl_arm_v7_thumb.S @@ -0,0 +1,15586 @@ @@ -1563398,7 +1563459,7 @@ index 000000000000..d4429f7f1db4 + .ascii "vendor_storage\000" diff --git a/drivers/rkflash/rk_sftl_arm_v8.S b/drivers/rkflash/rk_sftl_arm_v8.S new file mode 100755 -index 000000000000..7e2944e55a76 +index 000000000..7e2944e55 --- /dev/null +++ b/drivers/rkflash/rk_sftl_arm_v8.S @@ -0,0 +1,15768 @@ @@ -1579172,7 +1579233,7 @@ index 000000000000..7e2944e55a76 + .align 3 diff --git a/drivers/rkflash/rkflash_api.h b/drivers/rkflash/rkflash_api.h new file mode 100755 -index 000000000000..402109b60521 +index 000000000..402109b60 --- /dev/null +++ b/drivers/rkflash/rkflash_api.h @@ -0,0 +1,58 @@ @@ -1579236,7 +1579297,7 @@ index 000000000000..402109b60521 +#endif diff --git a/drivers/rkflash/rkflash_blk.c b/drivers/rkflash/rkflash_blk.c new file mode 100755 -index 000000000000..17ffe73865fe +index 000000000..17ffe7386 --- /dev/null +++ b/drivers/rkflash/rkflash_blk.c @@ -0,0 +1,789 @@ @@ -1580031,7 +1580092,7 @@ index 000000000000..17ffe73865fe +} diff --git a/drivers/rkflash/rkflash_blk.h b/drivers/rkflash/rkflash_blk.h new file mode 100755 -index 000000000000..3d95436c55e7 +index 000000000..3d95436c5 --- /dev/null +++ b/drivers/rkflash/rkflash_blk.h @@ -0,0 +1,121 @@ @@ -1580158,7 +1580219,7 @@ index 000000000000..3d95436c55e7 +#endif diff --git a/drivers/rkflash/rkflash_debug.c b/drivers/rkflash/rkflash_debug.c new file mode 100755 -index 000000000000..ce742b0382ef +index 000000000..ce742b038 --- /dev/null +++ b/drivers/rkflash/rkflash_debug.c @@ -0,0 +1,116 @@ @@ -1580280,7 +1580341,7 @@ index 000000000000..ce742b0382ef +MODULE_PARM_DESC(rkflash_debug, "config rkflash_debug module"); diff --git a/drivers/rkflash/rkflash_debug.h b/drivers/rkflash/rkflash_debug.h new file mode 100755 -index 000000000000..3fe4068322e7 +index 000000000..3fe406832 --- /dev/null +++ b/drivers/rkflash/rkflash_debug.h @@ -0,0 +1,42 @@ @@ -1580328,7 +1580389,7 @@ index 000000000000..3fe4068322e7 + diff --git a/drivers/rkflash/rknandc_base.c b/drivers/rkflash/rknandc_base.c new file mode 100755 -index 000000000000..d2e97883dec4 +index 000000000..d2e97883d --- /dev/null +++ b/drivers/rkflash/rknandc_base.c @@ -0,0 +1,192 @@ @@ -1580526,7 +1580587,7 @@ index 000000000000..d2e97883dec4 +MODULE_ALIAS("rknandc"); diff --git a/drivers/rkflash/rksfc_base.c b/drivers/rkflash/rksfc_base.c new file mode 100755 -index 000000000000..6cf74e103972 +index 000000000..6cf74e103 --- /dev/null +++ b/drivers/rkflash/rksfc_base.c @@ -0,0 +1,267 @@ @@ -1580799,7 +1580860,7 @@ index 000000000000..6cf74e103972 +MODULE_ALIAS("rksfc"); diff --git a/drivers/rkflash/sfc.c b/drivers/rkflash/sfc.c new file mode 100755 -index 000000000000..9ee5d6a97f13 +index 000000000..9ee5d6a97 --- /dev/null +++ b/drivers/rkflash/sfc.c @@ -0,0 +1,255 @@ @@ -1581060,7 +1581121,7 @@ index 000000000000..9ee5d6a97f13 +} diff --git a/drivers/rkflash/sfc.h b/drivers/rkflash/sfc.h new file mode 100755 -index 000000000000..355cd26170c6 +index 000000000..355cd2617 --- /dev/null +++ b/drivers/rkflash/sfc.h @@ -0,0 +1,224 @@ @@ -1581290,7 +1581351,7 @@ index 000000000000..355cd26170c6 +#endif diff --git a/drivers/rkflash/sfc_nand.c b/drivers/rkflash/sfc_nand.c new file mode 100755 -index 000000000000..cf3d3e887198 +index 000000000..cf3d3e887 --- /dev/null +++ b/drivers/rkflash/sfc_nand.c @@ -0,0 +1,1051 @@ @@ -1582347,7 +1582408,7 @@ index 000000000000..cf3d3e887198 +} diff --git a/drivers/rkflash/sfc_nand.h b/drivers/rkflash/sfc_nand.h new file mode 100755 -index 000000000000..43f4adf4508b +index 000000000..43f4adf45 --- /dev/null +++ b/drivers/rkflash/sfc_nand.h @@ -0,0 +1,133 @@ @@ -1582486,7 +1582547,7 @@ index 000000000000..43f4adf4508b +#endif diff --git a/drivers/rkflash/sfc_nand_boot.c b/drivers/rkflash/sfc_nand_boot.c new file mode 100755 -index 000000000000..8db7f8df968f +index 000000000..8db7f8df9 --- /dev/null +++ b/drivers/rkflash/sfc_nand_boot.c @@ -0,0 +1,89 @@ @@ -1582581,7 +1582642,7 @@ index 000000000000..8db7f8df968f +}; diff --git a/drivers/rkflash/sfc_nand_mtd.c b/drivers/rkflash/sfc_nand_mtd.c new file mode 100755 -index 000000000000..1b4d306050cf +index 000000000..1b4d30605 --- /dev/null +++ b/drivers/rkflash/sfc_nand_mtd.c @@ -0,0 +1,423 @@ @@ -1583010,7 +1583071,7 @@ index 000000000000..1b4d306050cf +#endif diff --git a/drivers/rkflash/sfc_nand_mtd.h b/drivers/rkflash/sfc_nand_mtd.h new file mode 100755 -index 000000000000..0d49c74654ab +index 000000000..0d49c7465 --- /dev/null +++ b/drivers/rkflash/sfc_nand_mtd.h @@ -0,0 +1,82 @@ @@ -1583098,7 +1583159,7 @@ index 000000000000..0d49c74654ab +#endif diff --git a/drivers/rkflash/sfc_nand_mtd_bbt.c b/drivers/rkflash/sfc_nand_mtd_bbt.c new file mode 100755 -index 000000000000..eb641f89306c +index 000000000..eb641f893 --- /dev/null +++ b/drivers/rkflash/sfc_nand_mtd_bbt.c @@ -0,0 +1,441 @@ @@ -1583545,7 +1583606,7 @@ index 000000000000..eb641f89306c +EXPORT_SYMBOL_GPL(snanddev_bbt_set_block_status); diff --git a/drivers/rkflash/sfc_nor.c b/drivers/rkflash/sfc_nor.c new file mode 100755 -index 000000000000..f7abe75a5b09 +index 000000000..f7abe75a5 --- /dev/null +++ b/drivers/rkflash/sfc_nor.c @@ -0,0 +1,783 @@ @@ -1584334,7 +1584395,7 @@ index 000000000000..f7abe75a5b09 + diff --git a/drivers/rkflash/sfc_nor.h b/drivers/rkflash/sfc_nor.h new file mode 100755 -index 000000000000..950af6a5e686 +index 000000000..950af6a5e --- /dev/null +++ b/drivers/rkflash/sfc_nor.h @@ -0,0 +1,176 @@ @@ -1584516,7 +1584577,7 @@ index 000000000000..950af6a5e686 +#endif diff --git a/drivers/rkflash/sfc_nor_boot.c b/drivers/rkflash/sfc_nor_boot.c new file mode 100755 -index 000000000000..791c1291b475 +index 000000000..791c1291b --- /dev/null +++ b/drivers/rkflash/sfc_nor_boot.c @@ -0,0 +1,180 @@ @@ -1584702,7 +1584763,7 @@ index 000000000000..791c1291b475 +}; diff --git a/drivers/rkflash/sfc_nor_mtd.c b/drivers/rkflash/sfc_nor_mtd.c new file mode 100755 -index 000000000000..8c9d69a581f2 +index 000000000..8c9d69a58 --- /dev/null +++ b/drivers/rkflash/sfc_nor_mtd.c @@ -0,0 +1,266 @@ @@ -1584974,7 +1585035,7 @@ index 000000000000..8c9d69a581f2 +} diff --git a/drivers/rkflash/typedef.h b/drivers/rkflash/typedef.h new file mode 100755 -index 000000000000..5808ec281fa2 +index 000000000..5808ec281 --- /dev/null +++ b/drivers/rkflash/typedef.h @@ -0,0 +1,30 @@ @@ -1585009,7 +1585070,7 @@ index 000000000000..5808ec281fa2 + +#endif /*__TYPEDEF_H */ diff --git a/drivers/soc/rockchip/Kconfig b/drivers/soc/rockchip/Kconfig -index 25eb2c1e31bb..a9d09b3e902e 100644 +index 25eb2c1e3..a9d09b3e9 100644 --- a/drivers/soc/rockchip/Kconfig +++ b/drivers/soc/rockchip/Kconfig @@ -1,19 +1,85 @@ @@ -1585313,7 +1585374,7 @@ index 25eb2c1e31bb..a9d09b3e902e 100644 endif diff --git a/drivers/soc/rockchip/Kconfig.cpu b/drivers/soc/rockchip/Kconfig.cpu new file mode 100755 -index 000000000000..1ffc763434bf +index 000000000..1ffc76343 --- /dev/null +++ b/drivers/soc/rockchip/Kconfig.cpu @@ -0,0 +1,72 @@ @@ -1585390,7 +1585451,7 @@ index 000000000000..1ffc763434bf + +endmenu diff --git a/drivers/soc/rockchip/Makefile b/drivers/soc/rockchip/Makefile -index 875032f7344e..7a1ae8d8a6bb 100644 +index 875032f73..7a1ae8d8a 100644 --- a/drivers/soc/rockchip/Makefile +++ b/drivers/soc/rockchip/Makefile @@ -2,6 +2,35 @@ @@ -1585431,7 +1585492,7 @@ index 875032f7344e..7a1ae8d8a6bb 100644 +obj-$(CONFIG_ROCKCHIP_MINIDUMP) += minidump/ diff --git a/drivers/soc/rockchip/fiq_debugger/Kconfig b/drivers/soc/rockchip/fiq_debugger/Kconfig new file mode 100644 -index 000000000000..4805100b127a +index 000000000..4805100b1 --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/Kconfig @@ -0,0 +1,87 @@ @@ -1585524,7 +1585585,7 @@ index 000000000000..4805100b127a + Say y here to enable Rockchip FIQ Debugger platform driver. diff --git a/drivers/soc/rockchip/fiq_debugger/Makefile b/drivers/soc/rockchip/fiq_debugger/Makefile new file mode 100644 -index 000000000000..6ac2cd61bf8e +index 000000000..6ac2cd61b --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/Makefile @@ -0,0 +1,3 @@ @@ -1585533,7 +1585594,7 @@ index 000000000000..6ac2cd61bf8e +obj-$(CONFIG_ROCKCHIP_FIQ_DEBUGGER) += rk_fiq_debugger.o diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_debugger.c b/drivers/soc/rockchip/fiq_debugger/fiq_debugger.c new file mode 100644 -index 000000000000..4647144ea757 +index 000000000..4647144ea --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_debugger.c @@ -0,0 +1,1730 @@ @@ -1587269,7 +1587330,7 @@ index 000000000000..4647144ea757 +MODULE_ALIAS("platform:fiq-debugger"); diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_debugger.h b/drivers/soc/rockchip/fiq_debugger/fiq_debugger.h new file mode 100644 -index 000000000000..e2003e47904d +index 000000000..e2003e479 --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_debugger.h @@ -0,0 +1,81 @@ @@ -1587356,7 +1587417,7 @@ index 000000000000..e2003e47904d +#endif diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_debugger_arm.c b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_arm.c new file mode 100644 -index 000000000000..d44287eba4bd +index 000000000..d44287eba --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_arm.c @@ -0,0 +1,270 @@ @@ -1587632,7 +1587693,7 @@ index 000000000000..d44287eba4bd +#endif diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_debugger_arm64.c b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_arm64.c new file mode 100644 -index 000000000000..ee8052bfd817 +index 000000000..ee8052bfd --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_arm64.c @@ -0,0 +1,199 @@ @@ -1587837,7 +1587898,7 @@ index 000000000000..ee8052bfd817 +#endif diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_debugger_priv.h b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_priv.h new file mode 100644 -index 000000000000..915860a6b38a +index 000000000..915860a6b --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_priv.h @@ -0,0 +1,39 @@ @@ -1587882,7 +1587943,7 @@ index 000000000000..915860a6b38a +#endif diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_debugger_ringbuf.h b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_ringbuf.h new file mode 100644 -index 000000000000..10c3c5d09098 +index 000000000..10c3c5d09 --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_debugger_ringbuf.h @@ -0,0 +1,94 @@ @@ -1587982,7 +1588043,7 @@ index 000000000000..10c3c5d09098 +} diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_watchdog.c b/drivers/soc/rockchip/fiq_debugger/fiq_watchdog.c new file mode 100644 -index 000000000000..194b54138417 +index 000000000..194b54138 --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_watchdog.c @@ -0,0 +1,56 @@ @@ -1588044,7 +1588105,7 @@ index 000000000000..194b54138417 +} diff --git a/drivers/soc/rockchip/fiq_debugger/fiq_watchdog.h b/drivers/soc/rockchip/fiq_debugger/fiq_watchdog.h new file mode 100644 -index 000000000000..c6b507f8d976 +index 000000000..c6b507f8d --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/fiq_watchdog.h @@ -0,0 +1,20 @@ @@ -1588070,7 +1588131,7 @@ index 000000000000..c6b507f8d976 +#endif diff --git a/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c b/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c new file mode 100644 -index 000000000000..6dafdde7b6b0 +index 000000000..6dafdde7b --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.c @@ -0,0 +1,1136 @@ @@ -1589212,7 +1589273,7 @@ index 000000000000..6dafdde7b6b0 +MODULE_ALIAS("platform:rk-fiq-debugger"); diff --git a/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.h b/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.h new file mode 100644 -index 000000000000..f5ec8d143b22 +index 000000000..f5ec8d143 --- /dev/null +++ b/drivers/soc/rockchip/fiq_debugger/rk_fiq_debugger.h @@ -0,0 +1,22 @@ @@ -1589240,7 +1589301,7 @@ index 000000000000..f5ec8d143b22 +#endif diff --git a/drivers/soc/rockchip/flash_vendor_storage.c b/drivers/soc/rockchip/flash_vendor_storage.c new file mode 100755 -index 000000000000..7c8cd338d286 +index 000000000..7c8cd338d --- /dev/null +++ b/drivers/soc/rockchip/flash_vendor_storage.c @@ -0,0 +1,342 @@ @@ -1589588,7 +1589649,7 @@ index 000000000000..7c8cd338d286 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/flash_vendor_storage.h b/drivers/soc/rockchip/flash_vendor_storage.h new file mode 100755 -index 000000000000..55ca52486de7 +index 000000000..55ca52486 --- /dev/null +++ b/drivers/soc/rockchip/flash_vendor_storage.h @@ -0,0 +1,16 @@ @@ -1589609,7 +1589670,7 @@ index 000000000000..55ca52486de7 +#endif + diff --git a/drivers/soc/rockchip/grf.c b/drivers/soc/rockchip/grf.c -index 343ff61ccccb..890158d0da7f 100644 +index 343ff61cc..890158d0d 100644 --- a/drivers/soc/rockchip/grf.c +++ b/drivers/soc/rockchip/grf.c @@ -5,12 +5,105 @@ @@ -1589856,7 +1589917,7 @@ index 343ff61ccccb..890158d0da7f 100644 +MODULE_DESCRIPTION("Rockchip GRF"); +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/io-domain.c b/drivers/soc/rockchip/io-domain.c -index b29e829e815e..f5ec81667ef3 100644 +index b29e829e8..f5ec81667 100644 --- a/drivers/soc/rockchip/io-domain.c +++ b/drivers/soc/rockchip/io-domain.c @@ -14,6 +14,13 @@ @@ -1590345,7 +1590406,7 @@ index b29e829e815e..f5ec81667ef3 100644 MODULE_AUTHOR("Heiko Stuebner "); diff --git a/drivers/soc/rockchip/iomux.c b/drivers/soc/rockchip/iomux.c new file mode 100644 -index 000000000000..110feb7f839d +index 000000000..110feb7f8 --- /dev/null +++ b/drivers/soc/rockchip/iomux.c @@ -0,0 +1,88 @@ @@ -1590439,7 +1590500,7 @@ index 000000000000..110feb7f839d +late_initcall(rk_iomux_device_create); diff --git a/drivers/soc/rockchip/minidump/Kconfig b/drivers/soc/rockchip/minidump/Kconfig new file mode 100644 -index 000000000000..64dc1465004b +index 000000000..64dc14650 --- /dev/null +++ b/drivers/soc/rockchip/minidump/Kconfig @@ -0,0 +1,40 @@ @@ -1590485,7 +1590546,7 @@ index 000000000000..64dc1465004b +endmenu diff --git a/drivers/soc/rockchip/minidump/Makefile b/drivers/soc/rockchip/minidump/Makefile new file mode 100644 -index 000000000000..7f799a034c01 +index 000000000..7f799a034 --- /dev/null +++ b/drivers/soc/rockchip/minidump/Makefile @@ -0,0 +1,3 @@ @@ -1590494,7 +1590555,7 @@ index 000000000000..7f799a034c01 +rockchip_minidump-y := rk_minidump.o minidump_log.o minidump_memory.o rk_minidump_asm.o diff --git a/drivers/soc/rockchip/minidump/elf.h b/drivers/soc/rockchip/minidump/elf.h new file mode 100644 -index 000000000000..dbccd0316008 +index 000000000..dbccd0316 --- /dev/null +++ b/drivers/soc/rockchip/minidump/elf.h @@ -0,0 +1,45 @@ @@ -1590545,7 +1590606,7 @@ index 000000000000..dbccd0316008 +#endif diff --git a/drivers/soc/rockchip/minidump/minidump_log.c b/drivers/soc/rockchip/minidump/minidump_log.c new file mode 100644 -index 000000000000..18b1934e9356 +index 000000000..18b1934e9 --- /dev/null +++ b/drivers/soc/rockchip/minidump/minidump_log.c @@ -0,0 +1,1508 @@ @@ -1592059,7 +1592120,7 @@ index 000000000000..18b1934e9356 +} diff --git a/drivers/soc/rockchip/minidump/minidump_memory.c b/drivers/soc/rockchip/minidump/minidump_memory.c new file mode 100644 -index 000000000000..d7f93e2f12b6 +index 000000000..d7f93e2f1 --- /dev/null +++ b/drivers/soc/rockchip/minidump/minidump_memory.c @@ -0,0 +1,1350 @@ @@ -1593415,7 +1593476,7 @@ index 000000000000..d7f93e2f12b6 +} diff --git a/drivers/soc/rockchip/minidump/minidump_memory.h b/drivers/soc/rockchip/minidump/minidump_memory.h new file mode 100644 -index 000000000000..086f1f89a090 +index 000000000..086f1f89a --- /dev/null +++ b/drivers/soc/rockchip/minidump/minidump_memory.h @@ -0,0 +1,51 @@ @@ -1593472,7 +1593533,7 @@ index 000000000000..086f1f89a090 +void md_debugfs_dmabufprocs(struct dentry *minidump_dir); diff --git a/drivers/soc/rockchip/minidump/minidump_private.h b/drivers/soc/rockchip/minidump/minidump_private.h new file mode 100644 -index 000000000000..f2dadce35bf0 +index 000000000..f2dadce35 --- /dev/null +++ b/drivers/soc/rockchip/minidump/minidump_private.h @@ -0,0 +1,90 @@ @@ -1593568,7 +1593629,7 @@ index 000000000000..f2dadce35bf0 +#endif diff --git a/drivers/soc/rockchip/minidump/rk_minidump.c b/drivers/soc/rockchip/minidump/rk_minidump.c new file mode 100644 -index 000000000000..d742b7e2eda6 +index 000000000..d742b7e2e --- /dev/null +++ b/drivers/soc/rockchip/minidump/rk_minidump.c @@ -0,0 +1,779 @@ @@ -1594353,7 +1594414,7 @@ index 000000000000..d742b7e2eda6 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/minidump/rk_minidump_asm.S b/drivers/soc/rockchip/minidump/rk_minidump_asm.S new file mode 100644 -index 000000000000..c8fa137be25e +index 000000000..c8fa137be --- /dev/null +++ b/drivers/soc/rockchip/minidump/rk_minidump_asm.S @@ -0,0 +1,23 @@ @@ -1594382,7 +1594443,7 @@ index 000000000000..c8fa137be25e +SYM_FUNC_END_PI(rk_md_flush_dcache_area) diff --git a/drivers/soc/rockchip/mtd_vendor_storage.c b/drivers/soc/rockchip/mtd_vendor_storage.c new file mode 100755 -index 000000000000..1f32930d906c +index 000000000..1f32930d9 --- /dev/null +++ b/drivers/soc/rockchip/mtd_vendor_storage.c @@ -0,0 +1,445 @@ @@ -1594832,7 +1594893,7 @@ index 000000000000..1f32930d906c +module_exit(vendor_storage_deinit); +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c -index 54eb6cfc5d5b..6e98b2a9ef81 100644 +index 54eb6cfc5..6e98b2a9e 100644 --- a/drivers/soc/rockchip/pm_domains.c +++ b/drivers/soc/rockchip/pm_domains.c @@ -5,6 +5,7 @@ @@ -1596689,7 +1596750,7 @@ index 54eb6cfc5d5b..6e98b2a9ef81 100644 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/ram_vendor_storage.c b/drivers/soc/rockchip/ram_vendor_storage.c new file mode 100644 -index 000000000000..eb9768d88d3d +index 000000000..eb9768d88 --- /dev/null +++ b/drivers/soc/rockchip/ram_vendor_storage.c @@ -0,0 +1,214 @@ @@ -1596909,7 +1596970,7 @@ index 000000000000..eb9768d88d3d +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rk_camera_sensor_info.h b/drivers/soc/rockchip/rk_camera_sensor_info.h new file mode 100755 -index 000000000000..55823b3839b2 +index 000000000..55823b383 --- /dev/null +++ b/drivers/soc/rockchip/rk_camera_sensor_info.h @@ -0,0 +1,421 @@ @@ -1597336,7 +1597397,7 @@ index 000000000000..55823b3839b2 +#endif diff --git a/drivers/soc/rockchip/rk_cma_procfs.c b/drivers/soc/rockchip/rk_cma_procfs.c new file mode 100644 -index 000000000000..3fbfef095834 +index 000000000..3fbfef095 --- /dev/null +++ b/drivers/soc/rockchip/rk_cma_procfs.c @@ -0,0 +1,92 @@ @@ -1597434,7 +1597495,7 @@ index 000000000000..3fbfef095834 +MODULE_ALIAS("platform:rk-cma"); diff --git a/drivers/soc/rockchip/rk_dmabuf_procfs.c b/drivers/soc/rockchip/rk_dmabuf_procfs.c new file mode 100644 -index 000000000000..0d82f0a38b91 +index 000000000..0d82f0a38 --- /dev/null +++ b/drivers/soc/rockchip/rk_dmabuf_procfs.c @@ -0,0 +1,206 @@ @@ -1597646,7 +1597707,7 @@ index 000000000000..0d82f0a38b91 +MODULE_ALIAS("platform:rk-dmabuf"); diff --git a/drivers/soc/rockchip/rk_memblock_procfs.c b/drivers/soc/rockchip/rk_memblock_procfs.c new file mode 100644 -index 000000000000..f888c9c18738 +index 000000000..f888c9c18 --- /dev/null +++ b/drivers/soc/rockchip/rk_memblock_procfs.c @@ -0,0 +1,50 @@ @@ -1597702,7 +1597763,7 @@ index 000000000000..f888c9c18738 +late_initcall_sync(rk_memblock_procfs_init); diff --git a/drivers/soc/rockchip/rk_vendor_storage.c b/drivers/soc/rockchip/rk_vendor_storage.c new file mode 100755 -index 000000000000..a8a316e47ff9 +index 000000000..a8a316e47 --- /dev/null +++ b/drivers/soc/rockchip/rk_vendor_storage.c @@ -0,0 +1,50 @@ @@ -1597758,7 +1597819,7 @@ index 000000000000..a8a316e47ff9 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip-cpuinfo.c b/drivers/soc/rockchip/rockchip-cpuinfo.c new file mode 100755 -index 000000000000..02befb165d98 +index 000000000..02befb165 --- /dev/null +++ b/drivers/soc/rockchip/rockchip-cpuinfo.c @@ -0,0 +1,309 @@ @@ -1598073,7 +1598134,7 @@ index 000000000000..02befb165d98 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip_amp.c b/drivers/soc/rockchip/rockchip_amp.c new file mode 100644 -index 000000000000..6f5bdc678756 +index 000000000..6f5bdc678 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_amp.c @@ -0,0 +1,660 @@ @@ -1598739,7 +1598800,7 @@ index 000000000000..6f5bdc678756 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip_csu.c b/drivers/soc/rockchip/rockchip_csu.c new file mode 100644 -index 000000000000..04a6a5b39715 +index 000000000..04a6a5b39 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_csu.c @@ -0,0 +1,377 @@ @@ -1599122,7 +1599183,7 @@ index 000000000000..04a6a5b39715 +MODULE_DESCRIPTION("Rockchip clock subunit driver"); diff --git a/drivers/soc/rockchip/rockchip_debug.c b/drivers/soc/rockchip/rockchip_debug.c new file mode 100755 -index 000000000000..2f9eac20bc4b +index 000000000..2f9eac20b --- /dev/null +++ b/drivers/soc/rockchip/rockchip_debug.c @@ -0,0 +1,679 @@ @@ -1599807,7 +1599868,7 @@ index 000000000000..2f9eac20bc4b +MODULE_ALIAS("platform:rockchip-debugger"); diff --git a/drivers/soc/rockchip/rockchip_debug.h b/drivers/soc/rockchip/rockchip_debug.h new file mode 100755 -index 000000000000..82036d8ebf72 +index 000000000..82036d8eb --- /dev/null +++ b/drivers/soc/rockchip/rockchip_debug.h @@ -0,0 +1,14 @@ @@ -1599827,7 +1599888,7 @@ index 000000000000..82036d8ebf72 +#endif diff --git a/drivers/soc/rockchip/rockchip_decompress.c b/drivers/soc/rockchip/rockchip_decompress.c new file mode 100755 -index 000000000000..275a605cfccb +index 000000000..275a605cf --- /dev/null +++ b/drivers/soc/rockchip/rockchip_decompress.c @@ -0,0 +1,388 @@ @@ -1600221,7 +1600282,7 @@ index 000000000000..275a605cfccb +pure_initcall(rockchip_hw_decompress_init); diff --git a/drivers/soc/rockchip/rockchip_decompress_user.c b/drivers/soc/rockchip/rockchip_decompress_user.c new file mode 100644 -index 000000000000..4e47e810c48f +index 000000000..4e47e810c --- /dev/null +++ b/drivers/soc/rockchip/rockchip_decompress_user.c @@ -0,0 +1,287 @@ @@ -1600514,7 +1600575,7 @@ index 000000000000..4e47e810c48f +MODULE_DESCRIPTION("Rockchip decom driver"); diff --git a/drivers/soc/rockchip/rockchip_disable_unused.c b/drivers/soc/rockchip/rockchip_disable_unused.c new file mode 100644 -index 000000000000..5f9a9b3b9338 +index 000000000..5f9a9b3b9 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_disable_unused.c @@ -0,0 +1,24 @@ @@ -1600544,7 +1600605,7 @@ index 000000000000..5f9a9b3b9338 +#endif diff --git a/drivers/soc/rockchip/rockchip_ipa.c b/drivers/soc/rockchip/rockchip_ipa.c new file mode 100755 -index 000000000000..e8982b7defee +index 000000000..e8982b7de --- /dev/null +++ b/drivers/soc/rockchip/rockchip_ipa.c @@ -0,0 +1,232 @@ @@ -1600782,7 +1600843,7 @@ index 000000000000..e8982b7defee +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip_npor_powergood.c b/drivers/soc/rockchip/rockchip_npor_powergood.c new file mode 100644 -index 000000000000..1c92541ce2ae +index 000000000..1c92541ce --- /dev/null +++ b/drivers/soc/rockchip/rockchip_npor_powergood.c @@ -0,0 +1,101 @@ @@ -1600889,7 +1600950,7 @@ index 000000000000..1c92541ce2ae +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip_opp_select.c b/drivers/soc/rockchip/rockchip_opp_select.c new file mode 100755 -index 000000000000..6c496ad051f6 +index 000000000..6c496ad05 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_opp_select.c @@ -0,0 +1,2106 @@ @@ -1603001,7 +1603062,7 @@ index 000000000000..6c496ad051f6 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip_performance.c b/drivers/soc/rockchip/rockchip_performance.c new file mode 100644 -index 000000000000..13d077548167 +index 000000000..13d077548 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_performance.c @@ -0,0 +1,185 @@ @@ -1603192,7 +1603253,7 @@ index 000000000000..13d077548167 +#endif /* CONFIG_SMP */ diff --git a/drivers/soc/rockchip/rockchip_pm_config.c b/drivers/soc/rockchip/rockchip_pm_config.c new file mode 100755 -index 000000000000..c319b790ee24 +index 000000000..c319b790e --- /dev/null +++ b/drivers/soc/rockchip/rockchip_pm_config.c @@ -0,0 +1,606 @@ @@ -1603804,7 +1603865,7 @@ index 000000000000..c319b790ee24 +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip_pvtm.c b/drivers/soc/rockchip/rockchip_pvtm.c new file mode 100755 -index 000000000000..75006737f421 +index 000000000..75006737f --- /dev/null +++ b/drivers/soc/rockchip/rockchip_pvtm.c @@ -0,0 +1,1046 @@ @@ -1604856,7 +1604917,7 @@ index 000000000000..75006737f421 +MODULE_LICENSE("GPL v2"); diff --git a/drivers/soc/rockchip/rockchip_ramdisk.c b/drivers/soc/rockchip/rockchip_ramdisk.c new file mode 100755 -index 000000000000..e2118ac52d2a +index 000000000..e2118ac52 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_ramdisk.c @@ -0,0 +1,365 @@ @@ -1605227,7 +1605288,7 @@ index 000000000000..e2118ac52d2a +MODULE_LICENSE("GPL"); diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c new file mode 100755 -index 000000000000..51844a9c8025 +index 000000000..51844a9c8 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_system_monitor.c @@ -0,0 +1,1946 @@ @@ -1607179,7 +1607240,7 @@ index 000000000000..51844a9c8025 +MODULE_DESCRIPTION("rockchip system monitor driver"); diff --git a/drivers/soc/rockchip/rockchip_thunderboot_crypto.c b/drivers/soc/rockchip/rockchip_thunderboot_crypto.c new file mode 100755 -index 000000000000..7a3c93a0304e +index 000000000..7a3c93a03 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_thunderboot_crypto.c @@ -0,0 +1,440 @@ @@ -1607625,7 +1607686,7 @@ index 000000000000..7a3c93a0304e +pure_initcall(rk_tb_crypto_init); diff --git a/drivers/soc/rockchip/rockchip_thunderboot_mmc.c b/drivers/soc/rockchip/rockchip_thunderboot_mmc.c new file mode 100755 -index 000000000000..10618811f0e9 +index 000000000..10618811f --- /dev/null +++ b/drivers/soc/rockchip/rockchip_thunderboot_mmc.c @@ -0,0 +1,165 @@ @@ -1607796,7 +1607857,7 @@ index 000000000000..10618811f0e9 +pure_initcall(rk_tb_mmc_init); diff --git a/drivers/soc/rockchip/rockchip_thunderboot_service.c b/drivers/soc/rockchip/rockchip_thunderboot_service.c new file mode 100644 -index 000000000000..6002d64c8b05 +index 000000000..6002d64c8 --- /dev/null +++ b/drivers/soc/rockchip/rockchip_thunderboot_service.c @@ -0,0 +1,192 @@ @@ -1607994,7 +1608055,7 @@ index 000000000000..6002d64c8b05 +arch_initcall(rk_tb_serv_init); diff --git a/drivers/soc/rockchip/rockchip_thunderboot_sfc.c b/drivers/soc/rockchip/rockchip_thunderboot_sfc.c new file mode 100755 -index 000000000000..d81ca755aa12 +index 000000000..d81ca755a --- /dev/null +++ b/drivers/soc/rockchip/rockchip_thunderboot_sfc.c @@ -0,0 +1,141 @@ @@ -1608141,7 +1608202,7 @@ index 000000000000..d81ca755aa12 +pure_initcall(rk_tb_sfc_init); diff --git a/drivers/soc/rockchip/sdmmc_vendor_storage.c b/drivers/soc/rockchip/sdmmc_vendor_storage.c new file mode 100755 -index 000000000000..ea1d9410b8eb +index 000000000..ea1d9410b --- /dev/null +++ b/drivers/soc/rockchip/sdmmc_vendor_storage.c @@ -0,0 +1,586 @@ @@ -1608732,7 +1608793,7 @@ index 000000000000..ea1d9410b8eb +module_exit(vendor_storage_deinit); +MODULE_LICENSE("GPL"); diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c -index a9f97023d5a0..63ffccb1eb46 100644 +index a9f97023d..63ffccb1e 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -10,6 +10,7 @@ @@ -1609132,7 +1609193,7 @@ index a9f97023d5a0..63ffccb1eb46 100644 }; MODULE_DEVICE_TABLE(of, rockchip_spi_dt_match); diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c -index aee960a7d7f9..e08de32ea454 100644 +index aee960a7d..e08de32ea 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c @@ -691,6 +691,7 @@ static const struct of_device_id spidev_dt_ids[] = { @@ -1609144,7 +1609205,7 @@ index aee960a7d7f9..e08de32ea454 100644 }; MODULE_DEVICE_TABLE(of, spidev_dt_ids); diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig -index 989fe84a9f9d..7b7da979991e 100644 +index 989fe84a9..7b7da9799 100644 --- a/drivers/staging/android/ion/Kconfig +++ b/drivers/staging/android/ion/Kconfig @@ -11,17 +11,4 @@ menuconfig ION @@ -1609167,7 +1609228,7 @@ index 989fe84a9f9d..7b7da979991e 100644 - regions, you should say Y here. +source "drivers/staging/android/ion/heaps/Kconfig" diff --git a/drivers/staging/android/ion/Makefile b/drivers/staging/android/ion/Makefile -index 5f4487b1a224..7f8fd0f537b4 100644 +index 5f4487b1a..7f8fd0f53 100644 --- a/drivers/staging/android/ion/Makefile +++ b/drivers/staging/android/ion/Makefile @@ -1,4 +1,4 @@ @@ -1609180,7 +1609241,7 @@ index 5f4487b1a224..7f8fd0f537b4 100644 +obj-y += heaps/ diff --git a/drivers/staging/android/ion/heaps/Kconfig b/drivers/staging/android/ion/heaps/Kconfig new file mode 100755 -index 000000000000..5034c45a397d +index 000000000..5034c45a3 --- /dev/null +++ b/drivers/staging/android/ion/heaps/Kconfig @@ -0,0 +1,15 @@ @@ -1609201,7 +1609262,7 @@ index 000000000000..5034c45a397d + regions, you should say Y here. diff --git a/drivers/staging/android/ion/heaps/Makefile b/drivers/staging/android/ion/heaps/Makefile new file mode 100755 -index 000000000000..82e36e89e978 +index 000000000..82e36e89e --- /dev/null +++ b/drivers/staging/android/ion/heaps/Makefile @@ -0,0 +1,5 @@ @@ -1609216,7 +1609277,7 @@ new mode 100755 similarity index 72% rename from drivers/staging/android/ion/ion_cma_heap.c rename to drivers/staging/android/ion/heaps/ion_cma_heap.c -index bf65e67ef9d8..6ba7fd84c9ee +index bf65e67ef..6ba7fd84c --- a/drivers/staging/android/ion/ion_cma_heap.c +++ b/drivers/staging/android/ion/heaps/ion_cma_heap.c @@ -7,6 +7,7 @@ @@ -1609335,7 +1609396,7 @@ new mode 100755 similarity index 87% rename from drivers/staging/android/ion/ion_page_pool.c rename to drivers/staging/android/ion/heaps/ion_page_pool.c -index 0198b886d906..efd6ce4cc0ad +index 0198b886d..efd6ce4cc --- a/drivers/staging/android/ion/ion_page_pool.c +++ b/drivers/staging/android/ion/heaps/ion_page_pool.c @@ -10,7 +10,7 @@ @@ -1609403,7 +1609464,7 @@ index 0198b886d906..efd6ce4cc0ad +EXPORT_SYMBOL_GPL(ion_page_pool_destroy); diff --git a/drivers/staging/android/ion/heaps/ion_page_pool.h b/drivers/staging/android/ion/heaps/ion_page_pool.h new file mode 100755 -index 000000000000..10c79090c7a0 +index 000000000..10c79090c --- /dev/null +++ b/drivers/staging/android/ion/heaps/ion_page_pool.h @@ -0,0 +1,67 @@ @@ -1609480,7 +1609541,7 @@ new mode 100755 similarity index 65% rename from drivers/staging/android/ion/ion_system_heap.c rename to drivers/staging/android/ion/heaps/ion_system_heap.c -index eac0632ab4e8..45d23bea3822 +index eac0632ab..45d23bea3 --- a/drivers/staging/android/ion/ion_system_heap.c +++ b/drivers/staging/android/ion/heaps/ion_system_heap.c @@ -9,12 +9,14 @@ @@ -1609796,7 +1609857,7 @@ index eac0632ab4e8..45d23bea3822 +module_exit(ion_system_heap_exit); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c -index e6d4a3ee6cda..3d9ec5f1045c 100644 +index e6d4a3ee6..3d9ec5f10 100644 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -3,8 +3,11 @@ @@ -1610517,7 +1610578,7 @@ index e6d4a3ee6cda..3d9ec5f1045c 100644 subsys_initcall(ion_device_create); diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h deleted file mode 100644 -index c199e88afc6c..000000000000 +index c199e88af..000000000 --- a/drivers/staging/android/ion/ion.h +++ /dev/null @@ -1,302 +0,0 @@ @@ -1610825,7 +1610886,7 @@ index c199e88afc6c..000000000000 -#endif /* _ION_H */ diff --git a/drivers/staging/android/ion/ion_buffer.c b/drivers/staging/android/ion/ion_buffer.c new file mode 100755 -index 000000000000..9baca1a472b6 +index 000000000..9baca1a47 --- /dev/null +++ b/drivers/staging/android/ion/ion_buffer.c @@ -0,0 +1,278 @@ @@ -1611109,7 +1611170,7 @@ index 000000000000..9baca1a472b6 +} diff --git a/drivers/staging/android/ion/ion_dma_buf.c b/drivers/staging/android/ion/ion_dma_buf.c new file mode 100755 -index 000000000000..47ae54af5ccf +index 000000000..47ae54af5 --- /dev/null +++ b/drivers/staging/android/ion/ion_dma_buf.c @@ -0,0 +1,359 @@ @@ -1611473,7 +1611534,7 @@ index 000000000000..47ae54af5ccf + return dmabuf; +} diff --git a/drivers/staging/android/ion/ion_heap.c b/drivers/staging/android/ion/ion_heap.c -index ea7e0a244ffc..aa29a4ee48a3 100644 +index ea7e0a244..aa29a4ee4 100644 --- a/drivers/staging/android/ion/ion_heap.c +++ b/drivers/staging/android/ion/ion_heap.c @@ -15,12 +15,118 @@ @@ -1611879,7 +1611940,7 @@ index ea7e0a244ffc..aa29a4ee48a3 100644 } diff --git a/drivers/staging/android/ion/ion_private.h b/drivers/staging/android/ion/ion_private.h new file mode 100755 -index 000000000000..db4e90683f4c +index 000000000..db4e90683 --- /dev/null +++ b/drivers/staging/android/ion/ion_private.h @@ -0,0 +1,58 @@ @@ -1611943,7 +1612004,7 @@ index 000000000000..db4e90683f4c +#endif /* _ION_PRIVATE_H */ diff --git a/drivers/staging/android/ion/ion_protected_heap.c b/drivers/staging/android/ion/ion_protected_heap.c new file mode 100755 -index 000000000000..c7f25373a744 +index 000000000..c7f25373a --- /dev/null +++ b/drivers/staging/android/ion/ion_protected_heap.c @@ -0,0 +1,526 @@ @@ -1612475,7 +1612536,7 @@ index 000000000000..c7f25373a744 +#endif diff --git a/drivers/staging/android/ion/ion_trace.h b/drivers/staging/android/ion/ion_trace.h new file mode 100755 -index 000000000000..eacb47d4f135 +index 000000000..eacb47d4f --- /dev/null +++ b/drivers/staging/android/ion/ion_trace.h @@ -0,0 +1,55 @@ @@ -1612536,7 +1612597,7 @@ index 000000000000..eacb47d4f135 +#include diff --git a/drivers/staging/android/ion/rockchip/Makefile b/drivers/staging/android/ion/rockchip/Makefile new file mode 100755 -index 000000000000..89265fcbbe6f +index 000000000..89265fcbb --- /dev/null +++ b/drivers/staging/android/ion/rockchip/Makefile @@ -0,0 +1,3 @@ @@ -1612545,7 +1612606,7 @@ index 000000000000..89265fcbbe6f +obj-$(CONFIG_ION_ROCKCHIP_SNAPSHOT) += rockchip_ion_snapshot.o diff --git a/drivers/staging/android/ion/rockchip/rockchip_ion.c b/drivers/staging/android/ion/rockchip/rockchip_ion.c new file mode 100755 -index 000000000000..d3c3d06856ad +index 000000000..d3c3d0685 --- /dev/null +++ b/drivers/staging/android/ion/rockchip/rockchip_ion.c @@ -0,0 +1,224 @@ @@ -1612775,7 +1612836,7 @@ index 000000000000..d3c3d06856ad +MODULE_DEVICE_TABLE(of, rk_ion_match); diff --git a/drivers/staging/android/ion/rockchip/rockchip_ion_snapshot.c b/drivers/staging/android/ion/rockchip/rockchip_ion_snapshot.c new file mode 100755 -index 000000000000..ab27d05319ae +index 000000000..ab27d0531 --- /dev/null +++ b/drivers/staging/android/ion/rockchip/rockchip_ion_snapshot.c @@ -0,0 +1,145 @@ @@ -1612925,7 +1612986,7 @@ index 000000000000..ab27d05319ae + +postcore_initcall(rockchip_ion_snapshot_init); diff --git a/drivers/staging/blackbox/Kconfig b/drivers/staging/blackbox/Kconfig -index 0e985823c2e8..7f1eb0e16e2d 100644 +index 0e985823c..7f1eb0e16 100644 --- a/drivers/staging/blackbox/Kconfig +++ b/drivers/staging/blackbox/Kconfig @@ -106,3 +106,14 @@ config DEF_BLACKBOX_STORAGE @@ -1612944,7 +1613005,7 @@ index 0e985823c2e8..7f1eb0e16e2d 100644 + +endif diff --git a/drivers/staging/blackbox/Makefile b/drivers/staging/blackbox/Makefile -index 9befa81a176e..77c1a37e5102 100644 +index 9befa81a1..77c1a37e5 100644 --- a/drivers/staging/blackbox/Makefile +++ b/drivers/staging/blackbox/Makefile @@ -3,3 +3,5 @@ @@ -1612954,7 +1613015,7 @@ index 9befa81a176e..77c1a37e5102 100644 + +obj-$(CONFIG_BLACKBOX_ROCKCHIP) += rockchip/ diff --git a/drivers/staging/blackbox/blackbox_storage.c b/drivers/staging/blackbox/blackbox_storage.c -index 635e3aa036ab..aad08c7291f1 100644 +index 635e3aa03..aad08c729 100644 --- a/drivers/staging/blackbox/blackbox_storage.c +++ b/drivers/staging/blackbox/blackbox_storage.c @@ -62,7 +62,7 @@ static void do_kmsg_dump(struct kmsg_dumper *dumper, @@ -1612968,7 +1613029,7 @@ index 635e3aa036ab..aad08c7291f1 100644 #define PSTORE_MOUNT_POINT "/sys/fs/pstore/" diff --git a/drivers/staging/blackbox/rockchip/Makefile b/drivers/staging/blackbox/rockchip/Makefile new file mode 100644 -index 000000000000..8bef3d7285ed +index 000000000..8bef3d728 --- /dev/null +++ b/drivers/staging/blackbox/rockchip/Makefile @@ -0,0 +1,4 @@ @@ -1612978,7 +1613039,7 @@ index 000000000000..8bef3d7285ed +obj-$(CONFIG_BLACKBOX_STORAGE_BY_MEMORY) += system_adapter_by_memory.o diff --git a/drivers/staging/blackbox/rockchip/system_adapter.c b/drivers/staging/blackbox/rockchip/system_adapter.c new file mode 100644 -index 000000000000..538f8fbd745d +index 000000000..538f8fbd7 --- /dev/null +++ b/drivers/staging/blackbox/rockchip/system_adapter.c @@ -0,0 +1,312 @@ @@ -1613296,7 +1613357,7 @@ index 000000000000..538f8fbd745d +MODULE_AUTHOR("OHOS"); diff --git a/drivers/staging/blackbox/rockchip/system_adapter_by_memory.c b/drivers/staging/blackbox/rockchip/system_adapter_by_memory.c new file mode 100644 -index 000000000000..30757db43e42 +index 000000000..30757db43 --- /dev/null +++ b/drivers/staging/blackbox/rockchip/system_adapter_by_memory.c @@ -0,0 +1,313 @@ @@ -1613614,7 +1613675,7 @@ index 000000000000..30757db43e42 +MODULE_DESCRIPTION("Blackbox for system"); +MODULE_AUTHOR("OHOS"); diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c -index aa9e0e31ef98..e1c667e8fe2a 100644 +index aa9e0e31e..e1c667e8f 100644 --- a/drivers/thermal/rockchip_thermal.c +++ b/drivers/thermal/rockchip_thermal.c @@ -18,6 +18,7 @@ @@ -1614577,7 +1614638,7 @@ index aa9e0e31ef98..e1c667e8fe2a 100644 module_platform_driver(rockchip_thermal_driver); diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c -index dd449945e1e5..560b1b83d057 100644 +index 1cf49912d..f7b4f0c94 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -542,6 +542,7 @@ int thermal_zone_device_is_enabled(struct thermal_zone_device *tz) @@ -1614589,7 +1614650,7 @@ index dd449945e1e5..560b1b83d057 100644 void thermal_zone_device_update(struct thermal_zone_device *tz, enum thermal_notify_event event) diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h -index 681209db42a8..5e80cb3264d9 100644 +index 681209db4..5e80cb326 100644 --- a/drivers/thermal/thermal_core.h +++ b/drivers/thermal/thermal_core.h @@ -179,6 +179,4 @@ of_thermal_get_trip_points(struct thermal_zone_device *tz) @@ -1614600,7 +1614661,7 @@ index 681209db42a8..5e80cb3264d9 100644 - #endif /* __THERMAL_CORE_H__ */ diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h -index 0771cd226581..fcbd557f3866 100644 +index 61b11490a..437f50c20 100644 --- a/drivers/tty/serial/8250/8250.h +++ b/drivers/tty/serial/8250/8250.h @@ -48,6 +48,9 @@ struct uart_8250_dma { @@ -1614613,7 +1614674,7 @@ index 0771cd226581..fcbd557f3866 100644 }; struct old_serial_port { -@@ -158,6 +161,9 @@ static inline bool serial8250_set_THRI(struct uart_8250_port *up) +@@ -157,6 +160,9 @@ static inline bool serial8250_set_THRI(struct uart_8250_port *up) if (up->ier & UART_IER_THRI) return false; up->ier |= UART_IER_THRI; @@ -1614623,7 +1614684,7 @@ index 0771cd226581..fcbd557f3866 100644 serial_out(up, UART_IER, up->ier); return true; } -@@ -327,6 +333,9 @@ static inline int is_omap1510_8250(struct uart_8250_port *pt) +@@ -326,6 +332,9 @@ static inline int is_omap1510_8250(struct uart_8250_port *pt) #ifdef CONFIG_SERIAL_8250_DMA extern int serial8250_tx_dma(struct uart_8250_port *); extern int serial8250_rx_dma(struct uart_8250_port *); @@ -1614633,7 +1614694,7 @@ index 0771cd226581..fcbd557f3866 100644 extern void serial8250_rx_dma_flush(struct uart_8250_port *); extern int serial8250_request_dma(struct uart_8250_port *); extern void serial8250_release_dma(struct uart_8250_port *); -@@ -346,6 +355,12 @@ static inline int serial8250_rx_dma(struct uart_8250_port *p) +@@ -345,6 +354,12 @@ static inline int serial8250_rx_dma(struct uart_8250_port *p) { return -1; } @@ -1614647,7 +1614708,7 @@ index 0771cd226581..fcbd557f3866 100644 static inline int serial8250_request_dma(struct uart_8250_port *p) { diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index 43f2eed6df78..c3953e7a5e94 100644 +index 43f2eed6d..c3953e7a5 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -565,6 +565,7 @@ static void __init serial8250_isa_init_ports(void) @@ -1614690,7 +1614751,7 @@ index 43f2eed6df78..c3953e7a5e94 100644 MODULE_LICENSE("GPL"); diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c -index 33ce4b218d9e..13c0161fa04c 100644 +index 33ce4b218..13c0161fa 100644 --- a/drivers/tty/serial/8250/8250_dma.c +++ b/drivers/tty/serial/8250/8250_dma.c @@ -11,6 +11,12 @@ @@ -1614980,7 +1615041,7 @@ index 33ce4b218d9e..13c0161fa04c 100644 } EXPORT_SYMBOL_GPL(serial8250_release_dma); diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c -index ace221afeb03..c5bba750fcbc 100644 +index ace221afe..c5bba750f 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -33,6 +33,7 @@ @@ -1615171,10 +1615232,10 @@ index ace221afeb03..c5bba750fcbc 100644 return 0; } diff --git a/drivers/tty/serial/8250/8250_dwlib.c b/drivers/tty/serial/8250/8250_dwlib.c -index 6d6a78eead3e..fee4f2933919 100644 +index 1cf229cca..da65f0658 100644 --- a/drivers/tty/serial/8250/8250_dwlib.c +++ b/drivers/tty/serial/8250/8250_dwlib.c -@@ -106,6 +106,15 @@ void dw8250_setup_port(struct uart_port *p) +@@ -108,6 +108,15 @@ void dw8250_setup_port(struct uart_port *p) } reg = dw8250_readl_ext(p, DW_UART_CPR); @@ -1615190,7 +1615251,7 @@ index 6d6a78eead3e..fee4f2933919 100644 if (!reg) return; -@@ -114,6 +123,9 @@ void dw8250_setup_port(struct uart_port *p) +@@ -116,6 +125,9 @@ void dw8250_setup_port(struct uart_port *p) p->type = PORT_16550A; p->flags |= UPF_FIXED_TYPE; p->fifosize = DW_UART_CPR_FIFO_SIZE(reg); @@ -1615201,7 +1615262,7 @@ index 6d6a78eead3e..fee4f2933919 100644 } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index b19908779e3b..aa4f2f1eccda 100644 +index 8b49ac485..25ce3e58c 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -1538,8 +1538,13 @@ static inline void __start_tx(struct uart_port *port) @@ -1615267,7 +1615328,7 @@ index b19908779e3b..aa4f2f1eccda 100644 /* * If port is stopped and there are no error conditions in the * FIFO, then don't drain the FIFO, as this may lead to TTY buffer -@@ -1919,11 +1944,34 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) +@@ -1922,11 +1947,34 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) if (!up->dma || handle_rx_dma(up, iir)) status = serial8250_rx_chars(up, status); } @@ -1615304,7 +1615365,7 @@ index b19908779e3b..aa4f2f1eccda 100644 uart_unlock_and_check_sysrq(port, flags); return 1; } -@@ -2403,7 +2451,11 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2406,7 +2454,11 @@ int serial8250_do_startup(struct uart_port *port) if (uart_console(port)) msg = "forbid DMA for kernel console"; else if (serial8250_request_dma(up)) @@ -1615345,7 +1615406,7 @@ index b19908779e3b..aa4f2f1eccda 100644 } EXPORT_SYMBOL_GPL(serial8250_do_set_divisor); -@@ -2795,6 +2862,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2794,6 +2861,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, if ((termios->c_cflag & CREAD) == 0) port->ignore_status_mask |= UART_LSR_DR; @@ -1615353,7 +1615414,7 @@ index b19908779e3b..aa4f2f1eccda 100644 /* * CTS flow control flag and modem status interrupts */ -@@ -2808,6 +2876,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2807,6 +2875,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, up->ier |= UART_IER_RTOIE; serial_port_out(port, UART_IER, up->ier); @@ -1615361,7 +1615422,7 @@ index b19908779e3b..aa4f2f1eccda 100644 if (up->capabilities & UART_CAP_EFR) { unsigned char efr = 0; -@@ -2826,16 +2895,25 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2825,16 +2894,25 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, UART_EFR, efr); } @@ -1615389,7 +1615450,7 @@ index b19908779e3b..aa4f2f1eccda 100644 if (port->type != PORT_16750) { /* emulated UARTs (Lucent Venus 167x) need two steps */ if (up->fcr & UART_FCR_ENABLE_FIFO) -@@ -2843,6 +2921,23 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2842,6 +2920,23 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ } serial8250_set_mctrl(port, port->mctrl); @@ -1615414,7 +1615475,7 @@ index b19908779e3b..aa4f2f1eccda 100644 serial8250_rpm_put(up); diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c -index aa0026a9839c..379fe28f0f63 100644 +index aa0026a98..379fe28f0 100644 --- a/drivers/tty/vt/keyboard.c +++ b/drivers/tty/vt/keyboard.c @@ -488,6 +488,7 @@ static void fn_hold(struct vc_data *vc) @@ -1615428,10 +1615489,10 @@ index aa0026a9839c..379fe28f0f63 100644 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c old mode 100644 new mode 100755 -index 580604596499..bc1d3385e790 +index 331f41c6c..75a7afc3f --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -1832,7 +1832,8 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) +@@ -1841,7 +1841,8 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) * bus_resume methods. */ if (hdev->parent) { /* normal device */ @@ -1615441,7 +1615502,7 @@ index 580604596499..bc1d3385e790 } else { /* root hub */ const struct hc_driver *drv = bus_to_hcd(hdev->bus)->driver; -@@ -5396,7 +5397,8 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, +@@ -5495,7 +5496,8 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, done: hub_port_disable(hub, port1, 1); if (hcd->driver->relinquish_port && !hub->hdev->parent) { @@ -1615452,7 +1615513,7 @@ index 580604596499..bc1d3385e790 } } diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index 4ac1c22f13be..16befba71a79 100644 +index 856947620..701e6ce38 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -322,6 +322,10 @@ static const struct usb_device_id usb_quirk_list[] = { @@ -1615480,7 +1615541,7 @@ index 4ac1c22f13be..16befba71a79 100644 diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h old mode 100644 new mode 100755 -index 03d16a08261d..9bb4b8994f5c +index 03d16a082..9bb4b8994 --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h @@ -1061,6 +1061,7 @@ struct dwc2_hsotg { @@ -1615504,7 +1615565,7 @@ index 03d16a08261d..9bb4b8994f5c diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c old mode 100644 new mode 100755 -index da0df69cc234..1b3dbb880008 +index da0df69cc..1b3dbb880 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -4529,6 +4529,14 @@ static int dwc2_hsotg_udc_start(struct usb_gadget *gadget, @@ -1615537,7 +1615598,7 @@ index da0df69cc234..1b3dbb880008 diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c old mode 100644 new mode 100755 -index 9279d3d3698c..76ef2f024478 +index 14925fedb..b058764cb --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -812,11 +812,13 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, @@ -1615663,7 +1615724,7 @@ index 9279d3d3698c..76ef2f024478 diff --git a/drivers/usb/dwc2/hcd_intr.c b/drivers/usb/dwc2/hcd_intr.c old mode 100644 new mode 100755 -index d5f4ec1b73b1..4989ec761667 +index 08e2792cb..785ca412a --- a/drivers/usb/dwc2/hcd_intr.c +++ b/drivers/usb/dwc2/hcd_intr.c @@ -1180,7 +1180,10 @@ static void dwc2_update_urb_state_abn(struct dwc2_hsotg *hsotg, @@ -1615681,7 +1615742,7 @@ index d5f4ec1b73b1..4989ec761667 diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c old mode 100644 new mode 100755 -index 94af71e9856f..b2e0721a3eb8 +index 94af71e98..b2e0721a3 --- a/drivers/usb/dwc2/hcd_queue.c +++ b/drivers/usb/dwc2/hcd_queue.c @@ -730,8 +730,14 @@ static int dwc2_uframe_schedule_split(struct dwc2_hsotg *hsotg, @@ -1615703,7 +1615764,7 @@ index 94af71e9856f..b2e0721a3eb8 diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c old mode 100644 new mode 100755 -index 267543c3dc38..195cca1fe3c6 +index 267543c3d..195cca1fe --- a/drivers/usb/dwc2/params.c +++ b/drivers/usb/dwc2/params.c @@ -90,6 +90,8 @@ static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg) @@ -1615742,7 +1615803,7 @@ index 267543c3dc38..195cca1fe3c6 diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c old mode 100644 new mode 100755 -index 9d0dd09a2015..74c2ff080f3e +index 9d0dd09a2..74c2ff080 --- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c @@ -121,6 +121,74 @@ static int dwc2_get_dr_mode(struct dwc2_hsotg *hsotg) @@ -1615932,7 +1615993,7 @@ index 9d0dd09a2015..74c2ff080f3e diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig old mode 100644 new mode 100755 -index 7a2304565a73..2133acf8ee69 +index 7a2304565..2133acf8e --- a/drivers/usb/dwc3/Kconfig +++ b/drivers/usb/dwc3/Kconfig @@ -139,4 +139,14 @@ config USB_DWC3_QCOM @@ -1615953,7 +1616014,7 @@ index 7a2304565a73..2133acf8ee69 diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile old mode 100644 new mode 100755 -index ae86da0dc5bd..2259f8876fb2 +index ae86da0dc..2259f8876 --- a/drivers/usb/dwc3/Makefile +++ b/drivers/usb/dwc3/Makefile @@ -51,3 +51,4 @@ obj-$(CONFIG_USB_DWC3_MESON_G12A) += dwc3-meson-g12a.o @@ -1615964,7 +1616025,7 @@ index ae86da0dc5bd..2259f8876fb2 diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c old mode 100644 new mode 100755 -index 5709b959b1d9..922247b818b4 +index 214a8ff2d..12129a197 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -119,6 +119,7 @@ static void __dwc3_set_mode(struct work_struct *work) @@ -1616042,7 +1616103,7 @@ index 5709b959b1d9..922247b818b4 /* * We're resetting only the device side because, if we're in host mode, -@@ -305,6 +350,9 @@ int dwc3_core_soft_reset(struct dwc3 *dwc) +@@ -342,6 +387,9 @@ int dwc3_core_soft_reset(struct dwc3 *dwc) udelay(1); } while (--retries); @@ -1616052,7 +1616113,7 @@ index 5709b959b1d9..922247b818b4 return -ETIMEDOUT; done: -@@ -562,6 +610,9 @@ static void dwc3_cache_hwparams(struct dwc3 *dwc) +@@ -599,6 +647,9 @@ static void dwc3_cache_hwparams(struct dwc3 *dwc) parms->hwparams6 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS6); parms->hwparams7 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS7); parms->hwparams8 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS8); @@ -1616062,7 +1616123,7 @@ index 5709b959b1d9..922247b818b4 } static int dwc3_core_ulpi_init(struct dwc3 *dwc) -@@ -977,21 +1028,9 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1014,21 +1065,9 @@ static int dwc3_core_init(struct dwc3 *dwc) dwc->phys_ready = true; } @@ -1616085,7 +1616146,7 @@ index 5709b959b1d9..922247b818b4 if (hw_mode == DWC3_GHWPARAMS0_MODE_DRD && !DWC3_VER_IS_WITHIN(DWC3, ANY, 194A)) { -@@ -1057,12 +1096,25 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1094,12 +1133,25 @@ static int dwc3_core_init(struct dwc3 *dwc) if (!DWC3_VER_IS_PRIOR(DWC3, 290A)) reg |= DWC3_GUCTL1_DEV_L1_EXIT_BY_HW; @@ -1616111,7 +1616172,7 @@ index 5709b959b1d9..922247b818b4 dwc3_writel(dwc->regs, DWC3_GUCTL1, reg); } -@@ -1162,11 +1214,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) +@@ -1183,11 +1235,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) ret = PTR_ERR(dwc->usb2_phy); if (ret == -ENXIO || ret == -ENODEV) { dwc->usb2_phy = NULL; @@ -1616124,7 +1616185,7 @@ index 5709b959b1d9..922247b818b4 } } -@@ -1174,11 +1223,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) +@@ -1195,11 +1244,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) ret = PTR_ERR(dwc->usb3_phy); if (ret == -ENXIO || ret == -ENODEV) { dwc->usb3_phy = NULL; @@ -1616137,7 +1616198,7 @@ index 5709b959b1d9..922247b818b4 } } -@@ -1187,11 +1233,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) +@@ -1208,11 +1254,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) ret = PTR_ERR(dwc->usb2_generic_phy); if (ret == -ENOSYS || ret == -ENODEV) { dwc->usb2_generic_phy = NULL; @@ -1616150,7 +1616211,7 @@ index 5709b959b1d9..922247b818b4 } } -@@ -1200,11 +1243,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) +@@ -1221,11 +1264,8 @@ static int dwc3_core_get_phy(struct dwc3 *dwc) ret = PTR_ERR(dwc->usb3_generic_phy); if (ret == -ENOSYS || ret == -ENODEV) { dwc->usb3_generic_phy = NULL; @@ -1616163,7 +1616224,7 @@ index 5709b959b1d9..922247b818b4 } } -@@ -1226,11 +1266,8 @@ static int dwc3_core_init_mode(struct dwc3 *dwc) +@@ -1247,11 +1287,8 @@ static int dwc3_core_init_mode(struct dwc3 *dwc) phy_set_mode(dwc->usb3_generic_phy, PHY_MODE_USB_DEVICE); ret = dwc3_gadget_init(dwc); @@ -1616177,7 +1616238,7 @@ index 5709b959b1d9..922247b818b4 break; case USB_DR_MODE_HOST: dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST); -@@ -1241,20 +1278,14 @@ static int dwc3_core_init_mode(struct dwc3 *dwc) +@@ -1262,20 +1299,14 @@ static int dwc3_core_init_mode(struct dwc3 *dwc) phy_set_mode(dwc->usb3_generic_phy, PHY_MODE_USB_HOST); ret = dwc3_host_init(dwc); @@ -1616202,7 +1616263,7 @@ index 5709b959b1d9..922247b818b4 break; default: dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode); -@@ -1295,6 +1326,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1316,6 +1347,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) u8 rx_max_burst_prd = 0; u8 tx_thr_num_pkt_prd = 0; u8 tx_max_burst_prd = 0; @@ -1616212,7 +1616273,7 @@ index 5709b959b1d9..922247b818b4 /* default to highest possible threshold */ lpm_nyet_threshold = 0xf; -@@ -1308,7 +1342,15 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1329,7 +1363,15 @@ static void dwc3_get_properties(struct dwc3 *dwc) */ hird_threshold = 12; @@ -1616228,7 +1616289,7 @@ index 5709b959b1d9..922247b818b4 dwc->dr_mode = usb_get_dr_mode(dev); dwc->hsphy_mode = of_usb_get_phy_mode(dev->of_node); -@@ -1319,6 +1361,13 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1340,6 +1382,13 @@ static void dwc3_get_properties(struct dwc3 *dwc) else dwc->sysdev = dwc->dev; @@ -1616242,7 +1616303,7 @@ index 5709b959b1d9..922247b818b4 dwc->has_lpm_erratum = device_property_read_bool(dev, "snps,has-lpm-erratum"); device_property_read_u8(dev, "snps,lpm-nyet-threshold", -@@ -1343,6 +1392,11 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1364,6 +1413,11 @@ static void dwc3_get_properties(struct dwc3 *dwc) &tx_thr_num_pkt_prd); device_property_read_u8(dev, "snps,tx-max-burst-prd", &tx_max_burst_prd); @@ -1616254,7 +1616315,7 @@ index 5709b959b1d9..922247b818b4 dwc->disable_scramble_quirk = device_property_read_bool(dev, "snps,disable_scramble_quirk"); -@@ -1408,6 +1462,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1429,6 +1483,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) dwc->tx_max_burst_prd = tx_max_burst_prd; dwc->imod_interval = 0; @@ -1616263,7 +1616324,7 @@ index 5709b959b1d9..922247b818b4 } /* check whether the core supports IMOD */ -@@ -1482,21 +1538,59 @@ static void dwc3_check_params(struct dwc3 *dwc) +@@ -1503,21 +1559,59 @@ static void dwc3_check_params(struct dwc3 *dwc) } break; } @@ -1616325,7 +1616386,7 @@ index 5709b959b1d9..922247b818b4 dwc->dev = dev; -@@ -1528,7 +1622,7 @@ static int dwc3_probe(struct platform_device *pdev) +@@ -1549,7 +1643,7 @@ static int dwc3_probe(struct platform_device *pdev) dwc3_get_properties(dwc); @@ -1616334,7 +1616395,7 @@ index 5709b959b1d9..922247b818b4 if (IS_ERR(dwc->reset)) return PTR_ERR(dwc->reset); -@@ -1592,8 +1686,7 @@ static int dwc3_probe(struct platform_device *pdev) +@@ -1613,8 +1707,7 @@ static int dwc3_probe(struct platform_device *pdev) ret = dwc3_core_init(dwc); if (ret) { @@ -1616344,7 +1616405,7 @@ index 5709b959b1d9..922247b818b4 goto err4; } -@@ -1604,7 +1697,17 @@ static int dwc3_probe(struct platform_device *pdev) +@@ -1625,7 +1718,17 @@ static int dwc3_probe(struct platform_device *pdev) if (ret) goto err5; @@ -1616361,9 +1616422,9 @@ index 5709b959b1d9..922247b818b4 + pm_runtime_put(dev); + } - return 0; + dma_set_max_seg_size(dev, UINT_MAX); -@@ -1640,6 +1743,9 @@ static int dwc3_probe(struct platform_device *pdev) +@@ -1663,6 +1766,9 @@ static int dwc3_probe(struct platform_device *pdev) assert_reset: reset_control_assert(dwc->reset); @@ -1616373,7 +1616434,7 @@ index 5709b959b1d9..922247b818b4 return ret; } -@@ -1663,6 +1769,9 @@ static int dwc3_remove(struct platform_device *pdev) +@@ -1686,6 +1792,9 @@ static int dwc3_remove(struct platform_device *pdev) dwc3_free_event_buffers(dwc); dwc3_free_scratch_buffers(dwc); @@ -1616383,7 +1616444,7 @@ index 5709b959b1d9..922247b818b4 return 0; } -@@ -1847,7 +1956,7 @@ static int dwc3_runtime_suspend(struct device *dev) +@@ -1870,7 +1979,7 @@ static int dwc3_runtime_suspend(struct device *dev) if (ret) return ret; @@ -1616392,7 +1616453,7 @@ index 5709b959b1d9..922247b818b4 return 0; } -@@ -1857,7 +1966,7 @@ static int dwc3_runtime_resume(struct device *dev) +@@ -1880,7 +1989,7 @@ static int dwc3_runtime_resume(struct device *dev) struct dwc3 *dwc = dev_get_drvdata(dev); int ret; @@ -1616401,7 +1616462,7 @@ index 5709b959b1d9..922247b818b4 ret = dwc3_resume_common(dwc, PMSG_AUTO_RESUME); if (ret) -@@ -1906,6 +2015,9 @@ static int dwc3_suspend(struct device *dev) +@@ -1929,6 +2038,9 @@ static int dwc3_suspend(struct device *dev) struct dwc3 *dwc = dev_get_drvdata(dev); int ret; @@ -1616411,7 +1616472,7 @@ index 5709b959b1d9..922247b818b4 ret = dwc3_suspend_common(dwc, PMSG_SUSPEND); if (ret) return ret; -@@ -1920,6 +2032,9 @@ static int dwc3_resume(struct device *dev) +@@ -1943,6 +2055,9 @@ static int dwc3_resume(struct device *dev) struct dwc3 *dwc = dev_get_drvdata(dev); int ret; @@ -1616424,7 +1616485,7 @@ index 5709b959b1d9..922247b818b4 diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h old mode 100644 new mode 100755 -index cbebe541f7e8..6de6e689265c +index 291893d27..a1174bd0f --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -31,6 +31,8 @@ @@ -1616453,8 +1616514,8 @@ index cbebe541f7e8..6de6e689265c /* Device Registers */ #define DWC3_DCFG 0xc700 -@@ -253,9 +256,11 @@ - #define DWC3_GUCTL_HSTINAUTORETRY BIT(14) +@@ -250,9 +253,11 @@ + #define DWC3_GCTL_DSBLCLKGTNG BIT(0) /* Global User Control 1 Register */ -#define DWC3_GUCTL1_PARKMODE_DISABLE_SS BIT(17) @@ -1616467,7 +1616528,7 @@ index cbebe541f7e8..6de6e689265c /* Global Status Register */ #define DWC3_GSTS_OTG_IP BIT(10) -@@ -376,6 +381,9 @@ +@@ -373,6 +378,9 @@ #define DWC3_GHWPARAMS7_RAM1_DEPTH(n) ((n) & 0xffff) #define DWC3_GHWPARAMS7_RAM2_DEPTH(n) (((n) >> 16) & 0xffff) @@ -1616477,7 +1616538,7 @@ index cbebe541f7e8..6de6e689265c /* Global Frame Length Adjustment Register */ #define DWC3_GFLADJ_30MHZ_SDBND_SEL BIT(7) #define DWC3_GFLADJ_30MHZ_MASK 0x3f -@@ -387,6 +395,8 @@ +@@ -384,6 +392,8 @@ #define DWC3_GUCTL3_SPLITDISABLE BIT(14) /* Device Configuration Register */ @@ -1616486,7 +1616547,7 @@ index cbebe541f7e8..6de6e689265c #define DWC3_DCFG_DEVADDR(addr) ((addr) << 3) #define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f) -@@ -401,6 +411,7 @@ +@@ -398,6 +408,7 @@ #define DWC3_DCFG_NUMP(n) (((n) >> DWC3_DCFG_NUMP_SHIFT) & 0x1f) #define DWC3_DCFG_NUMP_MASK (0x1f << DWC3_DCFG_NUMP_SHIFT) #define DWC3_DCFG_LPM_CAP BIT(22) @@ -1616494,7 +1616555,7 @@ index cbebe541f7e8..6de6e689265c /* Device Control Register */ #define DWC3_DCTL_RUN_STOP BIT(31) -@@ -452,7 +463,7 @@ +@@ -449,7 +460,7 @@ #define DWC3_DEVTEN_CMDCMPLTEN BIT(10) #define DWC3_DEVTEN_ERRTICERREN BIT(9) #define DWC3_DEVTEN_SOFEN BIT(7) @@ -1616503,7 +1616564,7 @@ index cbebe541f7e8..6de6e689265c #define DWC3_DEVTEN_HIBERNATIONREQEVTEN BIT(5) #define DWC3_DEVTEN_WKUPEVTEN BIT(4) #define DWC3_DEVTEN_ULSTCNGEN BIT(3) -@@ -460,6 +471,8 @@ +@@ -457,6 +468,8 @@ #define DWC3_DEVTEN_USBRSTEN BIT(1) #define DWC3_DEVTEN_DISCONNEVTEN BIT(0) @@ -1616512,7 +1616573,7 @@ index cbebe541f7e8..6de6e689265c /* Device Status Register */ #define DWC3_DSTS_DCNRD BIT(29) -@@ -713,6 +726,7 @@ struct dwc3_ep { +@@ -710,6 +723,7 @@ struct dwc3_ep { #define DWC3_EP_FORCE_RESTART_STREAM BIT(9) #define DWC3_EP_FIRST_STREAM_PRIMED BIT(10) #define DWC3_EP_PENDING_CLEAR_STALL BIT(11) @@ -1616520,7 +1616581,7 @@ index cbebe541f7e8..6de6e689265c /* This last one is specific to EP0 */ #define DWC3_EP0_DIR_IN BIT(31) -@@ -852,13 +866,12 @@ struct dwc3_hwparams { +@@ -849,13 +863,12 @@ struct dwc3_hwparams { u32 hwparams6; u32 hwparams7; u32 hwparams8; @@ -1616535,7 +1616596,7 @@ index cbebe541f7e8..6de6e689265c /* HWPARAMS1 */ #define DWC3_NUM_INT(n) (((n) & (0x3f << 15)) >> 15) -@@ -905,11 +918,13 @@ struct dwc3_request { +@@ -902,11 +915,13 @@ struct dwc3_request { unsigned int remaining; unsigned int status; @@ -1616554,7 +1616615,7 @@ index cbebe541f7e8..6de6e689265c u8 epnum; struct dwc3_trb *trb; -@@ -1123,6 +1138,12 @@ struct dwc3 { +@@ -1120,6 +1135,12 @@ struct dwc3 { enum usb_phy_interface hsphy_mode; struct usb_role_switch *role_sw; enum usb_dr_mode role_switch_default_mode; @@ -1616567,7 +1616628,7 @@ index cbebe541f7e8..6de6e689265c u32 fladj; u32 irq_gadget; -@@ -1133,6 +1154,9 @@ struct dwc3 { +@@ -1130,6 +1151,9 @@ struct dwc3 { u32 nr_scratch; u32 u1u2; u32 maximum_speed; @@ -1616577,7 +1616638,7 @@ index cbebe541f7e8..6de6e689265c u32 ip; -@@ -1215,6 +1239,7 @@ struct dwc3 { +@@ -1212,6 +1236,7 @@ struct dwc3 { u8 rx_max_burst_prd; u8 tx_thr_num_pkt_prd; u8 tx_max_burst_prd; @@ -1616585,7 +1616646,7 @@ index cbebe541f7e8..6de6e689265c const char *hsphy_interface; -@@ -1229,6 +1254,7 @@ struct dwc3 { +@@ -1226,6 +1251,7 @@ struct dwc3 { unsigned is_utmi_l1_suspend:1; unsigned is_fpga:1; unsigned pending_events:1; @@ -1616593,7 +1616654,7 @@ index cbebe541f7e8..6de6e689265c unsigned pullups_connected:1; unsigned setup_packet_pending:1; unsigned three_stage_setup:1; -@@ -1262,8 +1288,24 @@ struct dwc3 { +@@ -1259,8 +1285,24 @@ struct dwc3 { unsigned dis_metastability_quirk:1; unsigned dis_split_quirk:1; @@ -1616618,7 +1616679,7 @@ index cbebe541f7e8..6de6e689265c }; #define INCRX_BURST_MODE 0 -@@ -1453,6 +1495,23 @@ u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type); +@@ -1450,6 +1492,23 @@ u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type); (!(_ip##_VERSIONTYPE_##_to) || \ dwc->version_type <= _ip##_VERSIONTYPE_##_to)) @@ -1616642,7 +1616703,7 @@ index cbebe541f7e8..6de6e689265c bool dwc3_has_imod(struct dwc3 *dwc); int dwc3_event_buffers_setup(struct dwc3 *dwc); -@@ -1480,6 +1539,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd, +@@ -1477,6 +1536,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd, struct dwc3_gadget_ep_cmd_params *params); int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned int cmd, u32 param); @@ -1616651,7 +1616712,7 @@ index cbebe541f7e8..6de6e689265c #else static inline int dwc3_gadget_init(struct dwc3 *dwc) { return 0; } -@@ -1499,6 +1560,11 @@ static inline int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd, +@@ -1496,6 +1557,11 @@ static inline int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd, static inline int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int cmd, u32 param) { return 0; } @@ -1616666,7 +1616727,7 @@ index cbebe541f7e8..6de6e689265c diff --git a/drivers/usb/dwc3/debug.h b/drivers/usb/dwc3/debug.h old mode 100644 new mode 100755 -index 74d9c2c38193..b2aa7272f5de +index 74d9c2c38..b2aa7272f --- a/drivers/usb/dwc3/debug.h +++ b/drivers/usb/dwc3/debug.h @@ -221,8 +221,8 @@ static inline const char *dwc3_gadget_event_string(char *str, size_t size, @@ -1616694,7 +1616755,7 @@ index 74d9c2c38193..b2aa7272f5de diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c old mode 100644 new mode 100755 -index da8b62db49fb..f0f04d7b10ea +index da8b62db4..f0f04d7b1 --- a/drivers/usb/dwc3/debugfs.c +++ b/drivers/usb/dwc3/debugfs.c @@ -454,6 +454,10 @@ static ssize_t dwc3_mode_write(struct file *file, @@ -1616751,7 +1616812,7 @@ index da8b62db49fb..f0f04d7b10ea diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c old mode 100644 new mode 100755 -index 0a96f44ccca7..347795a8b3c1 +index 8bcfbb29c..9d549730e --- a/drivers/usb/dwc3/drd.c +++ b/drivers/usb/dwc3/drd.c @@ -420,6 +420,12 @@ static void dwc3_drd_update(struct dwc3 *dwc) @@ -1616837,7 +1616898,7 @@ index 0a96f44ccca7..347795a8b3c1 mode = DWC3_GCTL_PRTCAP_HOST; diff --git a/drivers/usb/dwc3/dwc3-imx8mp.c b/drivers/usb/dwc3/dwc3-imx8mp.c new file mode 100755 -index 000000000000..84c1a4ac2444 +index 000000000..84c1a4ac2 --- /dev/null +++ b/drivers/usb/dwc3/dwc3-imx8mp.c @@ -0,0 +1,364 @@ @@ -1617208,7 +1617269,7 @@ index 000000000000..84c1a4ac2444 diff --git a/drivers/usb/dwc3/dwc3-keystone.c b/drivers/usb/dwc3/dwc3-keystone.c old mode 100644 new mode 100755 -index 9a99253d5ba3..057056c0975e +index 9a99253d5..057056c09 --- a/drivers/usb/dwc3/dwc3-keystone.c +++ b/drivers/usb/dwc3/dwc3-keystone.c @@ -99,13 +99,8 @@ static int kdwc3_probe(struct platform_device *pdev) @@ -1617230,7 +1617291,7 @@ index 9a99253d5ba3..057056c0975e diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c old mode 100644 new mode 100755 -index a5a8c5712bce..73c20a93208e +index 9f420cc8d..a431747bb --- a/drivers/usb/dwc3/dwc3-pci.c +++ b/drivers/usb/dwc3/dwc3-pci.c @@ -40,7 +40,9 @@ @@ -1617262,7 +1617323,7 @@ index a5a8c5712bce..73c20a93208e static int dwc3_pci_quirks(struct dwc3_pci *dwc) { struct pci_dev *pdev = dwc->pci; -@@ -225,7 +239,6 @@ static void dwc3_pci_resume_work(struct work_struct *work) +@@ -227,7 +241,6 @@ static void dwc3_pci_resume_work(struct work_struct *work) static int dwc3_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) { @@ -1617270,7 +1617331,7 @@ index a5a8c5712bce..73c20a93208e struct dwc3_pci *dwc; struct resource res[2]; int ret; -@@ -268,7 +281,7 @@ static int dwc3_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) +@@ -270,7 +283,7 @@ static int dwc3_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) dwc->dwc3->dev.parent = dev; ACPI_COMPANION_SET(&dwc->dwc3->dev, ACPI_COMPANION(dev)); @@ -1617279,7 +1617340,7 @@ index a5a8c5712bce..73c20a93208e if (ret < 0) goto err; -@@ -291,6 +304,7 @@ static int dwc3_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) +@@ -293,6 +306,7 @@ static int dwc3_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) return 0; err: @@ -1617287,7 +1617348,7 @@ index a5a8c5712bce..73c20a93208e platform_device_put(dwc->dwc3); return ret; } -@@ -307,75 +321,82 @@ static void dwc3_pci_remove(struct pci_dev *pci) +@@ -309,75 +323,82 @@ static void dwc3_pci_remove(struct pci_dev *pci) #endif device_init_wakeup(&pci->dev, false); pm_runtime_get(&pci->dev); @@ -1617395,10 +1617456,10 @@ index a5a8c5712bce..73c20a93208e diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c old mode 100644 new mode 100755 -index 416c94c612f5..ec51e2859d6e +index 568973582..d93dde9b1 --- a/drivers/usb/dwc3/dwc3-qcom.c +++ b/drivers/usb/dwc3/dwc3-qcom.c -@@ -678,6 +678,20 @@ static int dwc3_qcom_of_register_core(struct platform_device *pdev) +@@ -687,6 +687,20 @@ static int dwc3_qcom_of_register_core(struct platform_device *pdev) return -ENODEV; } @@ -1617422,7 +1617483,7 @@ index 416c94c612f5..ec51e2859d6e diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c old mode 100644 new mode 100755 -index 3cd294264372..658739410992 +index 3cd294264..658739410 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -597,11 +597,13 @@ static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) @@ -1617455,7 +1617516,7 @@ index 3cd294264372..658739410992 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c old mode 100644 new mode 100755 -index 076032128c34..18f7712010da +index 667fa8e88..392010c9e --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -418,6 +418,7 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd, @@ -1618349,7 +1618410,7 @@ index 076032128c34..18f7712010da diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h old mode 100644 new mode 100755 -index 0cd281949970..77df4b6d6c13 +index 0cd281949..77df4b6d6 --- a/drivers/usb/dwc3/gadget.h +++ b/drivers/usb/dwc3/gadget.h @@ -90,15 +90,17 @@ static inline void dwc3_gadget_move_started_request(struct dwc3_request *req) @@ -1618375,7 +1618436,7 @@ index 0cd281949970..77df4b6d6c13 diff --git a/drivers/usb/dwc3/trace.c b/drivers/usb/dwc3/trace.c old mode 100644 new mode 100755 -index 1b45a9723eeb..8a4fe12bb2e3 +index 1b45a9723..8a4fe12bb --- a/drivers/usb/dwc3/trace.c +++ b/drivers/usb/dwc3/trace.c @@ -9,3 +9,10 @@ @@ -1618390,7 +1618451,7 @@ index 1b45a9723eeb..8a4fe12bb2e3 +EXPORT_TRACEPOINT_SYMBOL_GPL(dwc3_ctrl_req); +EXPORT_TRACEPOINT_SYMBOL_GPL(dwc3_complete_trb); diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig -index 2d152571a7de..b5deb1be21b7 100644 +index 2d152571a..b5deb1be2 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -216,6 +216,12 @@ config USB_F_PRINTER @@ -1618461,7 +1618522,7 @@ index 2d152571a7de..b5deb1be21b7 100644 endif # USB_GADGET diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c -index a980799900e7..553382ce3837 100644 +index a98079990..553382ce3 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -13,6 +13,7 @@ @@ -1618621,7 +1618682,7 @@ index a980799900e7..553382ce3837 100644 diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c old mode 100644 new mode 100755 -index d51ea1c052f2..f2a2f11936b3 +index d51ea1c05..f2a2f1193 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -10,6 +10,32 @@ @@ -1619038,7 +1619099,7 @@ index d51ea1c052f2..f2a2f11936b3 } module_exit(gadget_cfs_exit); diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c -index 1eb4fa2e623f..177645f3250a 100644 +index 1eb4fa2e6..177645f32 100644 --- a/drivers/usb/gadget/epautoconf.c +++ b/drivers/usb/gadget/epautoconf.c @@ -67,6 +67,9 @@ struct usb_ep *usb_ep_autoconfig_ss( @@ -1619082,7 +1619143,7 @@ index 1eb4fa2e623f..177645f3250a 100644 diff --git a/drivers/usb/gadget/function/Makefile b/drivers/usb/gadget/function/Makefile old mode 100644 new mode 100755 -index 5d3a6cf02218..14e5c906a6e0 +index 5d3a6cf02..14e5c906a --- a/drivers/usb/gadget/function/Makefile +++ b/drivers/usb/gadget/function/Makefile @@ -50,3 +50,9 @@ usb_f_printer-y := f_printer.o @@ -1619098,7 +1619159,7 @@ index 5d3a6cf02218..14e5c906a6e0 \ No newline at end of file diff --git a/drivers/usb/gadget/function/f_accessory.c b/drivers/usb/gadget/function/f_accessory.c new file mode 100755 -index 000000000000..73185410d3a0 +index 000000000..73185410d --- /dev/null +++ b/drivers/usb/gadget/function/f_accessory.c @@ -0,0 +1,1556 @@ @@ -1620660,7 +1620721,7 @@ index 000000000000..73185410d3a0 +MODULE_LICENSE("GPL"); diff --git a/drivers/usb/gadget/function/f_audio_source.c b/drivers/usb/gadget/function/f_audio_source.c new file mode 100755 -index 000000000000..c768a526b315 +index 000000000..c768a526b --- /dev/null +++ b/drivers/usb/gadget/function/f_audio_source.c @@ -0,0 +1,1071 @@ @@ -1621738,7 +1621799,7 @@ index 000000000000..c768a526b315 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c old mode 100644 new mode 100755 -index b17acab77fe2..7c30858fc156 +index d80df9286..2a0e35679 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -71,7 +71,7 @@ struct ffs_function { @@ -1621759,7 +1621820,7 @@ index b17acab77fe2..7c30858fc156 } static long ffs_ep0_ioctl(struct file *file, unsigned code, unsigned long value) -@@ -1277,7 +1277,7 @@ ffs_epfile_release(struct inode *inode, struct file *file) +@@ -1281,7 +1281,7 @@ ffs_epfile_release(struct inode *inode, struct file *file) __ffs_epfile_read_buffer_free(epfile); ffs_data_closed(epfile->ffs); @@ -1621768,7 +1621829,7 @@ index b17acab77fe2..7c30858fc156 } static long ffs_epfile_ioctl(struct file *file, unsigned code, -@@ -2836,7 +2836,7 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep, +@@ -2840,7 +2840,7 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep, struct ffs_function *func = priv; struct ffs_ep *ffs_ep; unsigned ep_desc_id; @@ -1621777,7 +1621838,7 @@ index b17acab77fe2..7c30858fc156 static const char *speed_names[] = { "full", "high", "super" }; if (type != FFS_DESCRIPTOR) -@@ -2909,8 +2909,9 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep, +@@ -2913,8 +2913,9 @@ static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep, ffs_ep->ep = ep; ffs_ep->req = req; @@ -1621789,7 +1621850,7 @@ index b17acab77fe2..7c30858fc156 /* * If we use virtual address mapping, we restore * original bEndpointAddress value. -@@ -3445,7 +3446,10 @@ static void ffs_func_resume(struct usb_function *f) +@@ -3449,7 +3450,10 @@ static void ffs_func_resume(struct usb_function *f) static int ffs_func_revmap_ep(struct ffs_function *func, u8 num) { @@ -1621804,7 +1621865,7 @@ index b17acab77fe2..7c30858fc156 diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c old mode 100644 new mode 100755 -index 950c9435beec..73a28f8a38a7 +index 553547f12..bc55ed1b8 --- a/drivers/usb/gadget/function/f_mass_storage.c +++ b/drivers/usb/gadget/function/f_mass_storage.c @@ -2301,6 +2301,16 @@ static void fsg_disable(struct usb_function *f) @@ -1621827,7 +1621888,7 @@ index 950c9435beec..73a28f8a38a7 diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c old mode 100644 new mode 100755 -index 8fff995b8dd5..566531bf6cab +index 8fff995b8..566531bf6 --- a/drivers/usb/gadget/function/f_midi.c +++ b/drivers/usb/gadget/function/f_midi.c @@ -1222,6 +1222,65 @@ static void f_midi_free_inst(struct usb_function_instance *f) @@ -1621927,7 +1621988,7 @@ index 8fff995b8dd5..566531bf6cab diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c old mode 100644 new mode 100755 -index c13bb29a160e..939f174a956c +index c13bb29a1..939f174a9 --- a/drivers/usb/gadget/function/f_printer.c +++ b/drivers/usb/gadget/function/f_printer.c @@ -51,6 +51,8 @@ @@ -1621950,7 +1622011,7 @@ index c13bb29a160e..939f174a956c if (ida_is_empty(&printer_ida)) { diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c -index ee95e8f5f9d4..b550fcb234ff 100644 +index ee95e8f5f..b550fcb23 100644 --- a/drivers/usb/gadget/function/f_rndis.c +++ b/drivers/usb/gadget/function/f_rndis.c @@ -115,9 +115,9 @@ static struct usb_interface_descriptor rndis_control_intf = { @@ -1622004,7 +1622065,7 @@ diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/ old mode 100644 new mode 100755 diff --git a/drivers/usb/gadget/function/f_uac1_legacy.c b/drivers/usb/gadget/function/f_uac1_legacy.c -index e2d7f69128a0..1519ac654803 100644 +index e2d7f6912..1519ac654 100644 --- a/drivers/usb/gadget/function/f_uac1_legacy.c +++ b/drivers/usb/gadget/function/f_uac1_legacy.c @@ -670,6 +670,11 @@ static int f_audio_get_alt(struct usb_function *f, unsigned intf) @@ -1622030,7 +1622091,7 @@ index e2d7f69128a0..1519ac654803 100644 diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c old mode 100644 new mode 100755 -index 11cc6056b590..f1ba000ac3f7 +index 11cc6056b..f1ba000ac --- a/drivers/usb/gadget/function/f_uac2.c +++ b/drivers/usb/gadget/function/f_uac2.c @@ -44,6 +44,7 @@ @@ -1622586,7 +1622647,7 @@ index 11cc6056b590..f1ba000ac3f7 } diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c -index 5d39aff263f0..ea8e0a34a6e0 100644 +index 5d39aff26..ea8e0a34a 100644 --- a/drivers/usb/gadget/function/f_uvc.c +++ b/drivers/usb/gadget/function/f_uvc.c @@ -124,6 +124,18 @@ static struct usb_interface_descriptor uvc_streaming_intf_alt0 = { @@ -1623311,7 +1623372,7 @@ index 5d39aff263f0..ea8e0a34a6e0 100644 diff --git a/drivers/usb/gadget/function/u_audio.c b/drivers/usb/gadget/function/u_audio.c old mode 100644 new mode 100755 -index 6c8b8f5b7e0f..3482a26a61a5 +index 6c8b8f5b7..3482a26a6 --- a/drivers/usb/gadget/function/u_audio.c +++ b/drivers/usb/gadget/function/u_audio.c @@ -16,6 +16,7 @@ @@ -1623924,7 +1623985,7 @@ index 6c8b8f5b7e0f..3482a26a61a5 diff --git a/drivers/usb/gadget/function/u_audio.h b/drivers/usb/gadget/function/u_audio.h old mode 100644 new mode 100755 -index 5ea6b86f1fda..a218cdf771fe +index 5ea6b86f1..a218cdf77 --- a/drivers/usb/gadget/function/u_audio.h +++ b/drivers/usb/gadget/function/u_audio.h @@ -11,6 +11,14 @@ @@ -1623964,7 +1624025,7 @@ index 5ea6b86f1fda..a218cdf771fe diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c old mode 100644 new mode 100755 -index 5e5f699a434f..b47f498a7daf +index 5e5f699a4..b47f498a7 --- a/drivers/usb/gadget/function/u_ether.c +++ b/drivers/usb/gadget/function/u_ether.c @@ -81,6 +81,7 @@ struct eth_dev { @@ -1624025,7 +1624086,7 @@ index 5e5f699a434f..b47f498a7daf diff --git a/drivers/usb/gadget/function/u_ether.h b/drivers/usb/gadget/function/u_ether.h old mode 100644 new mode 100755 -index 10dd640684e2..40144546d1b0 +index 10dd64068..40144546d --- a/drivers/usb/gadget/function/u_ether.h +++ b/drivers/usb/gadget/function/u_ether.h @@ -244,6 +244,18 @@ unsigned gether_get_qmult(struct net_device *net); @@ -1624050,7 +1624111,7 @@ index 10dd640684e2..40144546d1b0 diff --git a/drivers/usb/gadget/function/u_ether_configfs.h b/drivers/usb/gadget/function/u_ether_configfs.h old mode 100644 new mode 100755 -index f982e18a5a78..f558c3139ebe +index f982e18a5..f558c3139 --- a/drivers/usb/gadget/function/u_ether_configfs.h +++ b/drivers/usb/gadget/function/u_ether_configfs.h @@ -148,7 +148,20 @@ out: \ @@ -1624078,7 +1624139,7 @@ index f982e18a5a78..f558c3139ebe diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c old mode 100644 new mode 100755 -index 7b54e814aefb..948eabf3cebd +index 4fd21772a..946dfa977 --- a/drivers/usb/gadget/function/u_serial.c +++ b/drivers/usb/gadget/function/u_serial.c @@ -261,9 +261,7 @@ __acquires(&port->port_lock) @@ -1624101,7 +1624162,7 @@ index 7b54e814aefb..948eabf3cebd * layer until it refuses to take any more data (or is throttled back). * Then it issues reads for any further data. * -@@ -712,7 +710,7 @@ static void gs_close(struct tty_struct *tty, struct file *file) +@@ -715,7 +713,7 @@ static void gs_close(struct tty_struct *tty, struct file *file) /* Iff we're disconnected, there can be no I/O in flight so it's * ok to free the circular buffer; else just scrub it. And don't @@ -1624112,7 +1624173,7 @@ index 7b54e814aefb..948eabf3cebd kfifo_free(&port->port_write_buf); diff --git a/drivers/usb/gadget/function/u_uac.h b/drivers/usb/gadget/function/u_uac.h new file mode 100755 -index 000000000000..224ddc397c70 +index 000000000..224ddc397 --- /dev/null +++ b/drivers/usb/gadget/function/u_uac.h @@ -0,0 +1,194 @@ @@ -1624314,7 +1624375,7 @@ diff --git a/drivers/usb/gadget/function/u_uac1.h b/drivers/usb/gadget/function/ old mode 100644 new mode 100755 diff --git a/drivers/usb/gadget/function/u_uac1_legacy.c b/drivers/usb/gadget/function/u_uac1_legacy.c -index 60ae8b2d3f6a..2f149853a91b 100644 +index 60ae8b2d3..2f149853a 100644 --- a/drivers/usb/gadget/function/u_uac1_legacy.c +++ b/drivers/usb/gadget/function/u_uac1_legacy.c @@ -119,6 +119,10 @@ static int playback_default_hw_params(struct gaudio_snd_dev *snd) @@ -1624331,7 +1624392,7 @@ index 60ae8b2d3f6a..2f149853a91b 100644 diff --git a/drivers/usb/gadget/function/u_uac2.h b/drivers/usb/gadget/function/u_uac2.h old mode 100644 new mode 100755 -index b5035711172d..179d3ef6a195 +index b50357111..179d3ef6a --- a/drivers/usb/gadget/function/u_uac2.h +++ b/drivers/usb/gadget/function/u_uac2.h @@ -21,7 +21,9 @@ @@ -1624355,7 +1624416,7 @@ index b5035711172d..179d3ef6a195 struct mutex lock; diff --git a/drivers/usb/gadget/function/u_uvc.h b/drivers/usb/gadget/function/u_uvc.h -index 9a01a7d4f17f..3e92a28d8d78 100644 +index 9a01a7d4f..3e92a28d8 100644 --- a/drivers/usb/gadget/function/u_uvc.h +++ b/drivers/usb/gadget/function/u_uvc.h @@ -18,15 +18,18 @@ @@ -1624405,7 +1624466,7 @@ index 9a01a7d4f17f..3e92a28d8d78 100644 #endif /* U_UVC_H */ diff --git a/drivers/usb/gadget/function/uvc.h b/drivers/usb/gadget/function/uvc.h -index 6c4fc4913f4f..499a5f8de73c 100644 +index 6c4fc4913..499a5f8de 100644 --- a/drivers/usb/gadget/function/uvc.h +++ b/drivers/usb/gadget/function/uvc.h @@ -15,6 +15,7 @@ @@ -1624453,7 +1624514,7 @@ index 6c4fc4913f4f..499a5f8de73c 100644 static inline struct uvc_device *to_uvc(struct usb_function *f) diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c -index 2db01170d096..8a65f590fab1 100644 +index 2db01170d..8a65f590f 100644 --- a/drivers/usb/gadget/function/uvc_configfs.c +++ b/drivers/usb/gadget/function/uvc_configfs.c @@ -12,6 +12,7 @@ @@ -1624967,7 +1625028,7 @@ index 2db01170d096..8a65f590fab1 100644 }; diff --git a/drivers/usb/gadget/function/uvc_queue.c b/drivers/usb/gadget/function/uvc_queue.c -index cab1e30462c2..0f5e6fb93d27 100644 +index cab1e3046..0f5e6fb93 100644 --- a/drivers/usb/gadget/function/uvc_queue.c +++ b/drivers/usb/gadget/function/uvc_queue.c @@ -124,6 +124,14 @@ int uvcg_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type, @@ -1624986,7 +1625047,7 @@ index cab1e30462c2..0f5e6fb93d27 100644 if (ret) return ret; diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c -index 65abd55ce234..4216c9147477 100644 +index 65abd55ce..4216c9147 100644 --- a/drivers/usb/gadget/function/uvc_v4l2.c +++ b/drivers/usb/gadget/function/uvc_v4l2.c @@ -41,6 +41,7 @@ uvc_send_response(struct uvc_device *uvc, struct uvc_request_data *data) @@ -1625043,7 +1625104,7 @@ index 65abd55ce234..4216c9147477 100644 .poll = uvc_v4l2_poll, #ifndef CONFIG_MMU diff --git a/drivers/usb/gadget/function/uvc_video.c b/drivers/usb/gadget/function/uvc_video.c -index 5ce548c2359d..cae5c2b6283d 100644 +index 5ce548c23..cae5c2b62 100644 --- a/drivers/usb/gadget/function/uvc_video.c +++ b/drivers/usb/gadget/function/uvc_video.c @@ -12,12 +12,14 @@ @@ -1625162,7 +1625223,7 @@ diff --git a/drivers/usb/gadget/legacy/audio.c b/drivers/usb/gadget/legacy/audio old mode 100644 new mode 100755 diff --git a/drivers/usb/gadget/legacy/webcam.c b/drivers/usb/gadget/legacy/webcam.c -index ff970a943347..059deaed133b 100644 +index ff970a943..059deaed1 100644 --- a/drivers/usb/gadget/legacy/webcam.c +++ b/drivers/usb/gadget/legacy/webcam.c @@ -386,6 +386,8 @@ webcam_bind(struct usb_composite_dev *cdev) @@ -1625177,7 +1625238,7 @@ index ff970a943347..059deaed133b 100644 diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c old mode 100644 new mode 100755 -index 3a3b5a03dda7..a0c281293530 +index e80aa717c..c6fe4a79c --- a/drivers/usb/gadget/udc/core.c +++ b/drivers/usb/gadget/udc/core.c @@ -29,6 +29,7 @@ @@ -1625214,7 +1625275,7 @@ index 3a3b5a03dda7..a0c281293530 * * returns zero, or a negative error code. */ -@@ -755,7 +757,7 @@ int usb_gadget_deactivate(struct usb_gadget *gadget) +@@ -757,7 +759,7 @@ int usb_gadget_deactivate(struct usb_gadget *gadget) { int ret = 0; @@ -1625223,7 +1625284,7 @@ index 3a3b5a03dda7..a0c281293530 goto out; if (gadget->connected) { -@@ -1104,7 +1106,18 @@ EXPORT_SYMBOL_GPL(usb_gadget_udc_reset); +@@ -1106,7 +1108,18 @@ EXPORT_SYMBOL_GPL(usb_gadget_udc_reset); */ static inline int usb_gadget_udc_start(struct usb_udc *udc) { @@ -1625243,7 +1625304,7 @@ index 3a3b5a03dda7..a0c281293530 } /** -@@ -1120,7 +1133,13 @@ static inline int usb_gadget_udc_start(struct usb_udc *udc) +@@ -1122,7 +1135,13 @@ static inline int usb_gadget_udc_start(struct usb_udc *udc) */ static inline void usb_gadget_udc_stop(struct usb_udc *udc) { @@ -1625257,7 +1625318,7 @@ index 3a3b5a03dda7..a0c281293530 } /** -@@ -1136,12 +1155,65 @@ static inline void usb_gadget_udc_stop(struct usb_udc *udc) +@@ -1138,12 +1157,65 @@ static inline void usb_gadget_udc_stop(struct usb_udc *udc) static inline void usb_gadget_udc_set_speed(struct usb_udc *udc, enum usb_device_speed speed) { @@ -1625328,7 +1625389,7 @@ index 3a3b5a03dda7..a0c281293530 } /** -@@ -1244,6 +1316,8 @@ int usb_add_gadget(struct usb_gadget *gadget) +@@ -1246,6 +1318,8 @@ int usb_add_gadget(struct usb_gadget *gadget) udc->gadget = gadget; gadget->udc = udc; @@ -1625338,14 +1625399,14 @@ index 3a3b5a03dda7..a0c281293530 list_add_tail(&udc->list, &udc_list); @@ -1356,6 +1430,7 @@ static void usb_gadget_remove_driver(struct usb_udc *udc) - kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); + udc->driver->function); usb_gadget_disconnect(udc->gadget); + usb_gadget_disable_async_callbacks(udc); if (udc->gadget->irq) synchronize_irq(udc->gadget->irq); udc->driver->unbind(udc->gadget); -@@ -1435,6 +1510,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri +@@ -1437,6 +1512,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri driver->unbind(udc->gadget); goto err1; } @@ -1625356,7 +1625417,7 @@ index 3a3b5a03dda7..a0c281293530 diff --git a/drivers/usb/gadget/udc/snps_udc_core.c b/drivers/usb/gadget/udc/snps_udc_core.c old mode 100644 new mode 100755 -index 6c726d2e1788..d046c09fa566 +index 6c726d2e1..d046c09fa --- a/drivers/usb/gadget/udc/snps_udc_core.c +++ b/drivers/usb/gadget/udc/snps_udc_core.c @@ -36,7 +36,6 @@ @@ -1625437,7 +1625498,7 @@ index 6c726d2e1788..d046c09fa566 diff --git a/drivers/usb/gadget/udc/trace.c b/drivers/usb/gadget/udc/trace.c old mode 100644 new mode 100755 -index 7430624c0bd7..e0e617280b12 +index 7430624c0..e0e617280 --- a/drivers/usb/gadget/udc/trace.c +++ b/drivers/usb/gadget/udc/trace.c @@ -8,3 +8,6 @@ @@ -1625450,10 +1625511,10 @@ index 7430624c0bd7..e0e617280b12 diff --git a/drivers/usb/gadget/udc/udc-xilinx.c b/drivers/usb/gadget/udc/udc-xilinx.c old mode 100644 new mode 100755 -index 096f56a09e6a..78561630a9d7 +index 47486f0f2..59cda488b --- a/drivers/usb/gadget/udc/udc-xilinx.c +++ b/drivers/usb/gadget/udc/udc-xilinx.c -@@ -1960,7 +1960,7 @@ static void xudc_nonctrl_ep_handler(struct xusb_udc *udc, u8 epnum, +@@ -1964,7 +1964,7 @@ static void xudc_nonctrl_ep_handler(struct xusb_udc *udc, u8 epnum, if (intrstatus & (XUSB_STATUS_EP0_BUFF1_COMP_MASK << epnum)) ep->buffer0ready = 0; if (intrstatus & (XUSB_STATUS_EP0_BUFF2_COMP_MASK << epnum)) @@ -1625465,7 +1625526,7 @@ index 096f56a09e6a..78561630a9d7 diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile old mode 100644 new mode 100755 -index bc731332fed9..2c7155fae179 +index bc731332f..2c7155fae --- a/drivers/usb/host/Makefile +++ b/drivers/usb/host/Makefile @@ -19,9 +19,7 @@ ifneq ($(CONFIG_USB_XHCI_DBGCAP), ) @@ -1625491,7 +1625552,7 @@ index bc731332fed9..2c7155fae179 diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c old mode 100644 new mode 100755 -index 2dcfc67f2ba8..3e48737f893f +index 2dcfc67f2..3e48737f8 --- a/drivers/usb/host/ehci-platform.c +++ b/drivers/usb/host/ehci-platform.c @@ -28,6 +28,7 @@ @@ -1625595,7 +1625656,7 @@ index 2dcfc67f2ba8..3e48737f893f diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c old mode 100644 new mode 100755 -index 4a8456f12a73..4923536780ee +index 4a8456f12..492353678 --- a/drivers/usb/host/ohci-platform.c +++ b/drivers/usb/host/ohci-platform.c @@ -32,7 +32,7 @@ @@ -1625619,7 +1625680,7 @@ index 4a8456f12a73..4923536780ee diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c old mode 100644 new mode 100755 -index 7bb306741807..ecc65c6b011e +index e92f92025..462730b48 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -449,8 +449,13 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend) @@ -1625655,7 +1625716,7 @@ index 7bb306741807..ecc65c6b011e diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c old mode 100644 new mode 100755 -index a8a9addb4d25..10c5eae5c8f3 +index 006e1b15f..3e230d9dd --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -65,7 +65,7 @@ static struct xhci_segment *xhci_segment_alloc(struct xhci_hcd *xhci, @@ -1625990,7 +1626051,7 @@ index a8a9addb4d25..10c5eae5c8f3 static void xhci_set_hc_event_deq(struct xhci_hcd *xhci) { -@@ -2455,15 +2547,21 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) +@@ -2475,15 +2567,21 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) * xHCI section 5.4.6 - doorbell array must be * "physically contiguous and 64-byte (cache line) aligned". */ @@ -1626021,7 +1626082,7 @@ index a8a9addb4d25..10c5eae5c8f3 diff --git a/drivers/usb/host/xhci-mtk-sch.c b/drivers/usb/host/xhci-mtk-sch.c old mode 100644 new mode 100755 -index 86c4bc9df3b8..7f0461750146 +index 86c4bc9df..7f0461750 --- a/drivers/usb/host/xhci-mtk-sch.c +++ b/drivers/usb/host/xhci-mtk-sch.c @@ -32,6 +32,15 @@ @@ -1626500,7 +1626561,7 @@ index 86c4bc9df3b8..7f0461750146 diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c old mode 100644 new mode 100755 -index 1c331577fca9..09f2ddbfe8b9 +index 122777b21..d47bc552f --- a/drivers/usb/host/xhci-mtk.c +++ b/drivers/usb/host/xhci-mtk.c @@ -344,15 +344,6 @@ static void usb_wakeup_set(struct xhci_hcd_mtk *mtk, bool enable) @@ -1626539,7 +1626600,7 @@ index 1c331577fca9..09f2ddbfe8b9 diff --git a/drivers/usb/host/xhci-mtk.h b/drivers/usb/host/xhci-mtk.h old mode 100644 new mode 100755 -index 3e2c607b5d64..607dbe474d91 +index 3e2c607b5..607dbe474 --- a/drivers/usb/host/xhci-mtk.h +++ b/drivers/usb/host/xhci-mtk.h @@ -22,14 +22,10 @@ @@ -1626611,7 +1626672,7 @@ index 3e2c607b5d64..607dbe474d91 - #endif /* _XHCI_MTK_H_ */ diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c -index aff65cefead2..8b6ae499c3a5 100644 +index 53f832787..f069a96fa 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -288,10 +288,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) @@ -1626629,7 +1626690,7 @@ index aff65cefead2..8b6ae499c3a5 100644 diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c old mode 100644 new mode 100755 -index 972a44b2a7f1..045383d38470 +index e56a1fb97..0b72b5774 --- a/drivers/usb/host/xhci-plat.c +++ b/drivers/usb/host/xhci-plat.c @@ -184,6 +184,41 @@ static const struct of_device_id usb_xhci_of_match[] = { @@ -1626700,7 +1626761,7 @@ index 972a44b2a7f1..045383d38470 diff --git a/drivers/usb/host/xhci-plat.h b/drivers/usb/host/xhci-plat.h old mode 100644 new mode 100755 -index 561d0b7bce09..e726a572321d +index 561d0b7bc..e726a5723 --- a/drivers/usb/host/xhci-plat.h +++ b/drivers/usb/host/xhci-plat.h @@ -13,6 +13,7 @@ @@ -1626726,7 +1626787,7 @@ index 561d0b7bce09..e726a572321d diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c old mode 100644 new mode 100755 -index b69b8c7e7966..78345e425264 +index 4fa387e44..4730627da --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -57,8 +57,10 @@ @@ -1627996,7 +1628057,7 @@ index b69b8c7e7966..78345e425264 diff --git a/drivers/usb/host/xhci-trace.c b/drivers/usb/host/xhci-trace.c old mode 100644 new mode 100755 -index d0070814d1ea..c4178357bd92 +index d0070814d..c4178357b --- a/drivers/usb/host/xhci-trace.c +++ b/drivers/usb/host/xhci-trace.c @@ -12,3 +12,6 @@ @@ -1628009,7 +1628070,7 @@ index d0070814d1ea..c4178357bd92 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c old mode 100644 new mode 100755 -index b069fe3f8ab0..3f9596d36366 +index b069fe3f8..3f9596d36 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -21,7 +21,6 @@ @@ -1628437,7 +1628498,7 @@ index b069fe3f8ab0..3f9596d36366 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h old mode 100644 new mode 100755 -index c7749f6e3474..06243f940bd4 +index 5a8443f6e..4fc2b82d6 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1422,7 +1422,7 @@ union xhci_trb { @@ -1628482,7 +1628543,7 @@ index c7749f6e3474..06243f940bd4 enum xhci_ring_type { TYPE_CTRL = 0, TYPE_ISOC, -@@ -1928,6 +1929,7 @@ struct xhci_hcd { +@@ -1927,6 +1928,7 @@ struct xhci_hcd { struct list_head regset_list; void *dbc; @@ -1628490,7 +1628551,7 @@ index c7749f6e3474..06243f940bd4 /* platform-specific data -- must come last */ unsigned long priv[] __aligned(sizeof(s64)); }; -@@ -1937,8 +1939,15 @@ struct xhci_driver_overrides { +@@ -1936,8 +1938,15 @@ struct xhci_driver_overrides { size_t extra_priv_size; int (*reset)(struct usb_hcd *hcd); int (*start)(struct usb_hcd *hcd); @@ -1628506,7 +1628567,7 @@ index c7749f6e3474..06243f940bd4 int (*update_hub_device)(struct usb_hcd *hcd, struct usb_device *hdev, struct usb_tt *tt, gfp_t mem_flags); }; -@@ -2067,10 +2076,6 @@ void xhci_free_device_endpoint_resources(struct xhci_hcd *xhci, +@@ -2066,10 +2075,6 @@ void xhci_free_device_endpoint_resources(struct xhci_hcd *xhci, struct xhci_ring *xhci_dma_to_transfer_ring( struct xhci_virt_ep *ep, u64 address); @@ -1628517,7 +1628578,7 @@ index c7749f6e3474..06243f940bd4 struct xhci_command *xhci_alloc_command(struct xhci_hcd *xhci, bool allocate_completion, gfp_t mem_flags); struct xhci_command *xhci_alloc_command_with_ctx(struct xhci_hcd *xhci, -@@ -2095,8 +2100,13 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks); +@@ -2094,8 +2099,13 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks); void xhci_shutdown(struct usb_hcd *hcd); void xhci_init_driver(struct hc_driver *drv, const struct xhci_driver_overrides *over); @@ -1628531,7 +1628592,7 @@ index c7749f6e3474..06243f940bd4 int xhci_update_hub_device(struct usb_hcd *hcd, struct usb_device *hdev, struct usb_tt *tt, gfp_t mem_flags); int xhci_disable_slot(struct xhci_hcd *xhci, u32 slot_id); -@@ -2146,13 +2156,6 @@ int xhci_queue_reset_ep(struct xhci_hcd *xhci, struct xhci_command *cmd, +@@ -2145,13 +2155,6 @@ int xhci_queue_reset_ep(struct xhci_hcd *xhci, struct xhci_command *cmd, enum xhci_ep_reset_type reset_type); int xhci_queue_reset_device(struct xhci_hcd *xhci, struct xhci_command *cmd, u32 slot_id); @@ -1628545,7 +1628606,7 @@ index c7749f6e3474..06243f940bd4 void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, unsigned int slot_id, unsigned int ep_index, unsigned int stream_id, struct xhci_td *td); -@@ -2213,6 +2216,53 @@ static inline struct xhci_ring *xhci_urb_to_transfer_ring(struct xhci_hcd *xhci, +@@ -2212,6 +2215,53 @@ static inline struct xhci_ring *xhci_urb_to_transfer_ring(struct xhci_hcd *xhci, urb->stream_id); } @@ -1628600,7 +1628661,7 @@ index c7749f6e3474..06243f940bd4 * TODO: As per spec Isochronous IDT transmissions are supported. We bypass * them anyways as we where unable to find a device that matches the diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c -index b8e1109f0e0d..9cffdd43cf01 100644 +index b8e1109f0..9cffdd43c 100644 --- a/drivers/usb/storage/scsiglue.c +++ b/drivers/usb/storage/scsiglue.c @@ -102,6 +102,10 @@ static int slave_configure(struct scsi_device *sdev) @@ -1628615,7 +1628676,7 @@ index b8e1109f0e0d..9cffdd43cf01 100644 max_sectors = PAGE_SIZE >> 9; if (queue_max_hw_sectors(sdev->request_queue) > max_sectors) diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h -index 20dcbccb290b..ede0d8c9b3d0 100644 +index 20dcbccb2..ede0d8c9b 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h @@ -927,6 +927,12 @@ UNUSUAL_DEV( 0x05e3, 0x0723, 0x9451, 0x9451, @@ -1628632,7 +1628693,7 @@ index 20dcbccb290b..ede0d8c9b3d0 100644 * Reported by Hanno Boeck * Taken from the Lycoris Kernel diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h -index 1f8c9b16a0fb..c22b026481f2 100644 +index 1f8c9b16a..c22b02648 100644 --- a/drivers/usb/storage/unusual_uas.h +++ b/drivers/usb/storage/unusual_uas.h @@ -76,6 +76,12 @@ UNUSUAL_DEV(0x0b05, 0x1932, 0x0000, 0x9999, @@ -1628677,7 +1628738,7 @@ index 1f8c9b16a0fb..c22b026481f2 100644 diff --git a/drivers/usb/typec/altmodes/displayport.c b/drivers/usb/typec/altmodes/displayport.c old mode 100644 new mode 100755 -index 0d4b1c0eeefb..5021ea91075e +index def903e9d..3b9e34c6a --- a/drivers/usb/typec/altmodes/displayport.c +++ b/drivers/usb/typec/altmodes/displayport.c @@ -17,8 +17,8 @@ @@ -1628816,7 +1628877,7 @@ index 0d4b1c0eeefb..5021ea91075e diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c old mode 100644 new mode 100755 -index 9d3a35b2046d..4fd17c662d15 +index 18b35e817..043102e24 --- a/drivers/usb/typec/class.c +++ b/drivers/usb/typec/class.c @@ -11,6 +11,7 @@ @@ -1629021,7 +1629082,7 @@ index 9d3a35b2046d..4fd17c662d15 .is_visible = typec_altmode_attr_is_visible, .attrs = typec_altmode_attrs, }; -@@ -484,6 +610,10 @@ typec_register_altmode(struct device *parent, +@@ -485,6 +611,10 @@ typec_register_altmode(struct device *parent, if (is_typec_partner(parent)) alt->adev.dev.bus = &typec_bus; @@ -1629032,7 +1629093,7 @@ index 9d3a35b2046d..4fd17c662d15 ret = device_register(&alt->adev.dev); if (ret) { dev_err(parent, "failed to register alternate mode (%d)\n", -@@ -534,12 +664,61 @@ static ssize_t supports_usb_power_delivery_show(struct device *dev, +@@ -535,12 +665,61 @@ static ssize_t supports_usb_power_delivery_show(struct device *dev, } static DEVICE_ATTR_RO(supports_usb_power_delivery); @@ -1629095,7 +1629156,7 @@ index 9d3a35b2046d..4fd17c662d15 static void typec_partner_release(struct device *dev) { -@@ -572,6 +751,61 @@ int typec_partner_set_identity(struct typec_partner *partner) +@@ -573,6 +752,61 @@ int typec_partner_set_identity(struct typec_partner *partner) } EXPORT_SYMBOL_GPL(typec_partner_set_identity); @@ -1629157,7 +1629218,7 @@ index 9d3a35b2046d..4fd17c662d15 /** * typec_partner_register_altmode - Register USB Type-C Partner Alternate Mode * @partner: USB Type-C Partner that supports the alternate mode -@@ -592,6 +826,20 @@ typec_partner_register_altmode(struct typec_partner *partner, +@@ -593,6 +827,20 @@ typec_partner_register_altmode(struct typec_partner *partner, } EXPORT_SYMBOL_GPL(typec_partner_register_altmode); @@ -1629178,7 +1629239,7 @@ index 9d3a35b2046d..4fd17c662d15 /** * typec_register_partner - Register a USB Type-C Partner * @port: The USB Type-C Port the partner is connected to -@@ -614,6 +862,9 @@ struct typec_partner *typec_register_partner(struct typec_port *port, +@@ -615,6 +863,9 @@ struct typec_partner *typec_register_partner(struct typec_port *port, ida_init(&partner->mode_ids); partner->usb_pd = desc->usb_pd; partner->accessory = desc->accessory; @@ -1629188,7 +1629249,7 @@ index 9d3a35b2046d..4fd17c662d15 if (desc->identity) { /* -@@ -664,11 +915,70 @@ static void typec_plug_release(struct device *dev) +@@ -665,11 +916,70 @@ static void typec_plug_release(struct device *dev) kfree(plug); } @@ -1629259,7 +1629320,7 @@ index 9d3a35b2046d..4fd17c662d15 /** * typec_plug_register_altmode - Register USB Type-C Cable Plug Alternate Mode * @plug: USB Type-C Cable Plug that supports the alternate mode -@@ -714,6 +1024,7 @@ struct typec_plug *typec_register_plug(struct typec_cable *cable, +@@ -715,6 +1025,7 @@ struct typec_plug *typec_register_plug(struct typec_cable *cable, sprintf(name, "plug%d", desc->index); ida_init(&plug->mode_ids); @@ -1629267,7 +1629328,7 @@ index 9d3a35b2046d..4fd17c662d15 plug->index = desc->index; plug->dev.class = typec_class; plug->dev.parent = &cable->dev; -@@ -746,15 +1057,6 @@ EXPORT_SYMBOL_GPL(typec_unregister_plug); +@@ -747,15 +1058,6 @@ EXPORT_SYMBOL_GPL(typec_unregister_plug); /* Type-C Cables */ @@ -1629283,7 +1629344,7 @@ index 9d3a35b2046d..4fd17c662d15 static const char * const typec_plug_types[] = { [USB_PLUG_NONE] = "unknown", [USB_PLUG_TYPE_A] = "type-a", -@@ -775,6 +1077,7 @@ static DEVICE_ATTR_RO(plug_type); +@@ -776,6 +1078,7 @@ static DEVICE_ATTR_RO(plug_type); static struct attribute *typec_cable_attrs[] = { &dev_attr_type.attr, &dev_attr_plug_type.attr, @@ -1629291,7 +1629352,7 @@ index 9d3a35b2046d..4fd17c662d15 NULL }; ATTRIBUTE_GROUPS(typec_cable); -@@ -877,6 +1180,7 @@ struct typec_cable *typec_register_cable(struct typec_port *port, +@@ -878,6 +1181,7 @@ struct typec_cable *typec_register_cable(struct typec_port *port, cable->type = desc->type; cable->active = desc->active; @@ -1629299,7 +1629360,7 @@ index 9d3a35b2046d..4fd17c662d15 if (desc->identity) { /* -@@ -1246,11 +1550,23 @@ static ssize_t usb_power_delivery_revision_show(struct device *dev, +@@ -1247,11 +1551,23 @@ static ssize_t usb_power_delivery_revision_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -1629326,7 +1629387,7 @@ index 9d3a35b2046d..4fd17c662d15 static ssize_t orientation_show(struct device *dev, struct device_attribute *attr, -@@ -1311,7 +1627,7 @@ static umode_t typec_attr_is_visible(struct kobject *kobj, +@@ -1312,7 +1628,7 @@ static umode_t typec_attr_is_visible(struct kobject *kobj, return attr->mode; } @@ -1629335,7 +1629396,7 @@ index 9d3a35b2046d..4fd17c662d15 .is_visible = typec_attr_is_visible, .attrs = typec_attrs, }; -@@ -1354,6 +1670,11 @@ const struct device_type typec_port_dev_type = { +@@ -1355,6 +1671,11 @@ const struct device_type typec_port_dev_type = { /* --------------------------------------- */ /* Driver callbacks to report role updates */ @@ -1629347,7 +1629408,7 @@ index 9d3a35b2046d..4fd17c662d15 /** * typec_set_data_role - Report data role change * @port: The USB Type-C Port where the role was changed -@@ -1363,12 +1684,23 @@ const struct device_type typec_port_dev_type = { +@@ -1364,12 +1685,23 @@ const struct device_type typec_port_dev_type = { */ void typec_set_data_role(struct typec_port *port, enum typec_data_role role) { @@ -1629371,7 +1629432,7 @@ index 9d3a35b2046d..4fd17c662d15 } EXPORT_SYMBOL_GPL(typec_set_data_role); -@@ -1409,11 +1741,6 @@ void typec_set_vconn_role(struct typec_port *port, enum typec_role role) +@@ -1410,11 +1742,6 @@ void typec_set_vconn_role(struct typec_port *port, enum typec_role role) } EXPORT_SYMBOL_GPL(typec_set_vconn_role); @@ -1629383,7 +1629444,7 @@ index 9d3a35b2046d..4fd17c662d15 /** * typec_set_pwr_opmode - Report changed power operation mode * @port: The USB Type-C Port where the mode was changed -@@ -1584,6 +1911,33 @@ EXPORT_SYMBOL_GPL(typec_set_mode); +@@ -1585,6 +1912,33 @@ EXPORT_SYMBOL_GPL(typec_set_mode); /* --------------------------------------- */ @@ -1629417,7 +1629478,7 @@ index 9d3a35b2046d..4fd17c662d15 /** * typec_get_drvdata - Return private driver data pointer * @port: USB Type-C port -@@ -1625,6 +1979,62 @@ typec_port_register_altmode(struct typec_port *port, +@@ -1626,6 +1980,62 @@ typec_port_register_altmode(struct typec_port *port, } EXPORT_SYMBOL_GPL(typec_port_register_altmode); @@ -1629483,7 +1629544,7 @@ index 9d3a35b2046d..4fd17c662d15 diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c b/drivers/usb/typec/mux/intel_pmc_mux.c old mode 100644 new mode 100755 -index 1276112edeff..271e2740992f +index 1276112ed..271e27409 --- a/drivers/usb/typec/mux/intel_pmc_mux.c +++ b/drivers/usb/typec/mux/intel_pmc_mux.c @@ -176,6 +176,7 @@ static int hsl_orientation(struct pmc_usb_port *port) @@ -1629542,7 +1629603,7 @@ index 1276112edeff..271e2740992f diff --git a/drivers/usb/typec/tcpm/Kconfig b/drivers/usb/typec/tcpm/Kconfig old mode 100644 new mode 100755 -index 073fd2ea5e0b..82a6cd2b2493 +index 073fd2ea5..82a6cd2b2 --- a/drivers/usb/typec/tcpm/Kconfig +++ b/drivers/usb/typec/tcpm/Kconfig @@ -20,6 +20,13 @@ config TYPEC_TCPCI @@ -1629562,7 +1629623,7 @@ index 073fd2ea5e0b..82a6cd2b2493 diff --git a/drivers/usb/typec/tcpm/Makefile b/drivers/usb/typec/tcpm/Makefile old mode 100644 new mode 100755 -index 7d499f3569fd..d2ca41aea970 +index 7d499f356..d2ca41aea --- a/drivers/usb/typec/tcpm/Makefile +++ b/drivers/usb/typec/tcpm/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_TYPEC_FUSB302) += fusb302.o @@ -1629576,7 +1629637,7 @@ index 7d499f3569fd..d2ca41aea970 diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c old mode 100644 new mode 100755 -index 700e38e92152..3b36e5353a94 +index 700e38e92..3b36e5353 --- a/drivers/usb/typec/tcpm/fusb302.c +++ b/drivers/usb/typec/tcpm/fusb302.c @@ -343,12 +343,11 @@ static int fusb302_sw_reset(struct fusb302_chip *chip) @@ -1629656,7 +1629717,7 @@ index 700e38e92152..3b36e5353a94 diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c old mode 100644 new mode 100755 -index 069affa5cb1e..fde55279da6d +index e34e46df8..5f1079932 --- a/drivers/usb/typec/tcpm/tcpci.c +++ b/drivers/usb/typec/tcpm/tcpci.c @@ -18,7 +18,20 @@ @@ -1629871,7 +1629932,7 @@ index 069affa5cb1e..fde55279da6d ret = regmap_write(tcpci->regmap, TCPC_TRANSMIT, reg); if (ret < 0) return ret; -@@ -506,12 +631,22 @@ static int tcpci_init(struct tcpc_dev *tcpc) +@@ -510,12 +635,22 @@ static int tcpci_init(struct tcpc_dev *tcpc) TCPC_ALERT_RX_HARD_RST | TCPC_ALERT_CC_STATUS; if (tcpci->controls_vbus) reg |= TCPC_ALERT_POWER_STATUS; @@ -1629894,7 +1629955,7 @@ index 069affa5cb1e..fde55279da6d tcpci_read16(tcpci, TCPC_ALERT, &status); -@@ -527,15 +662,12 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci) +@@ -531,15 +666,12 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci) tcpm_cc_change(tcpci->port); if (status & TCPC_ALERT_POWER_STATUS) { @@ -1629912,7 +1629973,7 @@ index 069affa5cb1e..fde55279da6d tcpm_tcpc_reset(tcpci->port); else tcpm_vbus_change(tcpci->port); -@@ -574,6 +706,12 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci) +@@ -578,6 +710,12 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci) tcpm_pd_receive(tcpci->port, &msg); } @@ -1629925,7 +1629986,7 @@ index 069affa5cb1e..fde55279da6d if (status & TCPC_ALERT_RX_HARD_RST) tcpm_pd_hard_reset(tcpci->port); -@@ -633,6 +771,7 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data) +@@ -637,6 +775,7 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data) tcpci->tcpc.get_vbus = tcpci_get_vbus; tcpci->tcpc.set_vbus = tcpci_set_vbus; tcpci->tcpc.set_cc = tcpci_set_cc; @@ -1629933,7 +1629994,7 @@ index 069affa5cb1e..fde55279da6d tcpci->tcpc.get_cc = tcpci_get_cc; tcpci->tcpc.set_polarity = tcpci_set_polarity; tcpci->tcpc.set_vconn = tcpci_set_vconn; -@@ -643,6 +782,19 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data) +@@ -647,6 +786,19 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data) tcpci->tcpc.pd_transmit = tcpci_pd_transmit; tcpci->tcpc.set_bist_data = tcpci_set_bist_data; tcpci->tcpc.enable_frs = tcpci_enable_frs; @@ -1629956,7 +1630017,7 @@ index 069affa5cb1e..fde55279da6d diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h old mode 100644 new mode 100755 -index 5ef07a56d67a..2be7a77d400e +index 95ce89139..fa9a07425 --- a/drivers/usb/typec/tcpm/tcpci.h +++ b/drivers/usb/typec/tcpm/tcpci.h @@ -8,6 +8,8 @@ @@ -1630012,8 +1630073,8 @@ index 5ef07a56d67a..2be7a77d400e +#define TCPC_POWER_STATUS_SINKING_VBUS BIT(0) #define TCPC_FAULT_STATUS 0x1f - -@@ -114,6 +131,10 @@ + #define TCPC_FAULT_STATUS_ALL_REG_RST_TO_DEFAULT BIT(7) +@@ -115,6 +132,10 @@ #define TCPC_RX_DETECT 0x2f #define TCPC_RX_DETECT_HARD_RESET BIT(5) #define TCPC_RX_DETECT_SOP BIT(0) @@ -1630024,7 +1630085,7 @@ index 5ef07a56d67a..2be7a77d400e #define TCPC_RX_BYTE_CNT 0x30 #define TCPC_RX_BUF_FRAME_TYPE 0x31 -@@ -132,7 +153,11 @@ +@@ -133,7 +154,11 @@ #define TCPC_TX_DATA 0x54 /* through 0x6f */ #define TCPC_VBUS_VOLTAGE 0x70 @@ -1630036,7 +1630097,7 @@ index 5ef07a56d67a..2be7a77d400e #define TCPC_VBUS_STOP_DISCHARGE_THRESH 0x74 #define TCPC_VBUS_VOLTAGE_ALARM_HI_CFG 0x76 #define TCPC_VBUS_VOLTAGE_ALARM_LO_CFG 0x78 -@@ -140,20 +165,38 @@ +@@ -141,20 +166,38 @@ /* I2C_WRITE_BYTE_COUNT + 1 when TX_BUF_BYTE_x is only accessible I2C_WRITE_BYTE_COUNT */ #define TCPC_TRANSMIT_BUFFER_MAX_LEN 31 @@ -1630079,7 +1630140,7 @@ index 5ef07a56d67a..2be7a77d400e struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data); diff --git a/drivers/usb/typec/tcpm/tcpci_husb311.c b/drivers/usb/typec/tcpm/tcpci_husb311.c new file mode 100755 -index 000000000000..72a524b5cc98 +index 000000000..72a524b5c --- /dev/null +++ b/drivers/usb/typec/tcpm/tcpci_husb311.c @@ -0,0 +1,298 @@ @@ -1630384,7 +1630445,7 @@ index 000000000000..72a524b5cc98 diff --git a/drivers/usb/typec/tcpm/tcpci_maxim.c b/drivers/usb/typec/tcpm/tcpci_maxim.c old mode 100644 new mode 100755 -index 723d7dd38f75..7b39cbd099c2 +index 723d7dd38..7b39cbd09 --- a/drivers/usb/typec/tcpm/tcpci_maxim.c +++ b/drivers/usb/typec/tcpm/tcpci_maxim.c @@ -22,6 +22,9 @@ @@ -1630526,7 +1630587,7 @@ index 723d7dd38f75..7b39cbd099c2 diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c old mode 100644 new mode 100755 -index cf0e6a80815a..e28c57d194a3 +index ac3953a0f..4eefc1e14 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -76,6 +76,8 @@ @@ -1631456,7 +1631517,7 @@ index cf0e6a80815a..e28c57d194a3 response[0] |= VDO_OPOS(adev->mode); rlen = 1; } -@@ -1411,19 +1883,26 @@ static void tcpm_handle_vdm_request(struct tcpm_port *port, +@@ -1412,19 +1884,26 @@ static void tcpm_handle_vdm_request(struct tcpm_port *port, if (rlen > 0) tcpm_queue_vdm(port, response[0], &response[1], rlen - 1); @@ -1631484,7 +1631545,7 @@ index cf0e6a80815a..e28c57d194a3 tcpm_queue_vdm(port, header, data, count); } -@@ -1456,7 +1935,8 @@ static unsigned int vdm_ready_timeout(u32 vdm_hdr) +@@ -1457,7 +1936,8 @@ static unsigned int vdm_ready_timeout(u32 vdm_hdr) static void vdm_run_state_machine(struct tcpm_port *port) { struct pd_message msg; @@ -1631494,7 +1631555,7 @@ index cf0e6a80815a..e28c57d194a3 switch (port->vdm_state) { case VDM_STATE_READY: -@@ -1470,37 +1950,68 @@ static void vdm_run_state_machine(struct tcpm_port *port) +@@ -1471,37 +1951,68 @@ static void vdm_run_state_machine(struct tcpm_port *port) * if there's traffic or we're not in PDO ready state don't send * a VDM. */ @@ -1631582,7 +1631643,7 @@ index cf0e6a80815a..e28c57d194a3 break; case VDM_STATE_ERR_SEND: /* -@@ -1513,6 +2024,32 @@ static void vdm_run_state_machine(struct tcpm_port *port) +@@ -1514,6 +2025,32 @@ static void vdm_run_state_machine(struct tcpm_port *port) tcpm_log(port, "VDM Tx error, retry"); port->vdm_retries++; port->vdm_state = VDM_STATE_READY; @@ -1631615,7 +1631676,7 @@ index cf0e6a80815a..e28c57d194a3 } break; default: -@@ -1535,7 +2072,11 @@ static void vdm_state_machine_work(struct kthread_work *work) +@@ -1536,7 +2073,11 @@ static void vdm_state_machine_work(struct kthread_work *work) prev_state = port->vdm_state; vdm_run_state_machine(port); } while (port->vdm_state != prev_state && @@ -1631628,7 +1631689,7 @@ index cf0e6a80815a..e28c57d194a3 mutex_unlock(&port->lock); } -@@ -1663,9 +2204,14 @@ static int tcpm_validate_caps(struct tcpm_port *port, const u32 *pdo, +@@ -1664,9 +2205,14 @@ static int tcpm_validate_caps(struct tcpm_port *port, const u32 *pdo, static int tcpm_altmode_enter(struct typec_altmode *altmode, u32 *vdo) { struct tcpm_port *port = typec_altmode_get_drvdata(altmode); @@ -1631644,7 +1631705,7 @@ index cf0e6a80815a..e28c57d194a3 header |= VDO_OPOS(altmode->mode); tcpm_queue_vdm_unlocked(port, header, vdo, vdo ? 1 : 0); -@@ -1675,9 +2221,14 @@ static int tcpm_altmode_enter(struct typec_altmode *altmode, u32 *vdo) +@@ -1676,9 +2222,14 @@ static int tcpm_altmode_enter(struct typec_altmode *altmode, u32 *vdo) static int tcpm_altmode_exit(struct typec_altmode *altmode) { struct tcpm_port *port = typec_altmode_get_drvdata(altmode); @@ -1631660,7 +1631721,7 @@ index cf0e6a80815a..e28c57d194a3 header |= VDO_OPOS(altmode->mode); tcpm_queue_vdm_unlocked(port, header, NULL, 0); -@@ -1722,20 +2273,108 @@ static void tcpm_handle_alert(struct tcpm_port *port, const __le32 *payload, +@@ -1723,20 +2274,108 @@ static void tcpm_handle_alert(struct tcpm_port *port, const __le32 *payload, if (!type) { tcpm_log(port, "Alert message received with no type"); @@ -1631776,7 +1631837,7 @@ index cf0e6a80815a..e28c57d194a3 } } -@@ -1746,15 +2385,18 @@ static void tcpm_pd_data_request(struct tcpm_port *port, +@@ -1747,15 +2386,18 @@ static void tcpm_pd_data_request(struct tcpm_port *port, unsigned int cnt = pd_header_cnt_le(msg->header); unsigned int rev = pd_header_rev_le(msg->header); unsigned int i; @@ -1631799,7 +1631860,7 @@ index cf0e6a80815a..e28c57d194a3 for (i = 0; i < cnt; i++) port->source_caps[i] = le32_to_cpu(msg->payload[i]); -@@ -1770,12 +2412,26 @@ static void tcpm_pd_data_request(struct tcpm_port *port, +@@ -1771,12 +2413,26 @@ static void tcpm_pd_data_request(struct tcpm_port *port, * to comply with 6.2.1.1.5 of the USB PD 3.0 spec. We don't * support Rev 1.0 so just do nothing in that scenario. */ @@ -1631827,7 +1631888,7 @@ index cf0e6a80815a..e28c57d194a3 /* * This message may be received even if VBUS is not * present. This is quite unexpected; see USB PD -@@ -1789,42 +2445,68 @@ static void tcpm_pd_data_request(struct tcpm_port *port, +@@ -1790,42 +2446,68 @@ static void tcpm_pd_data_request(struct tcpm_port *port, * but be prepared to keep waiting for VBUS after it was * handled. */ @@ -1631908,7 +1631969,7 @@ index cf0e6a80815a..e28c57d194a3 if (frs_enable) { ret = port->tcpc->enable_frs(port->tcpc, true); tcpm_log(port, "Enable FRS %s, ret:%d\n", ret ? "fail" : "success", ret); -@@ -1832,27 +2514,45 @@ static void tcpm_pd_data_request(struct tcpm_port *port, +@@ -1833,27 +2515,45 @@ static void tcpm_pd_data_request(struct tcpm_port *port, port->nr_sink_caps = cnt; port->sink_cap_done = true; @@ -1631962,7 +1632023,7 @@ index cf0e6a80815a..e28c57d194a3 break; } } -@@ -1872,31 +2572,25 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -1873,31 +2573,25 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, enum pd_ctrl_msg_type type = pd_header_type_le(msg->header); enum tcpm_state next_state; @@ -1632006,7 +1632067,7 @@ index cf0e6a80815a..e28c57d194a3 break; case PD_CTRL_GOTO_MIN: break; -@@ -1908,6 +2602,10 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -1909,6 +2603,10 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, port->req_current_limit, port->req_supply_voltage); port->explicit_contract = true; @@ -1632017,7 +1632078,7 @@ index cf0e6a80815a..e28c57d194a3 tcpm_set_state(port, SNK_READY, 0); } else { /* -@@ -1931,6 +2629,11 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -1932,6 +2630,11 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, tcpm_set_state(port, FR_SWAP_SNK_SRC_NEW_SINK_READY, 0); break; default: @@ -1632029,7 +1632090,7 @@ index cf0e6a80815a..e28c57d194a3 break; } break; -@@ -1944,6 +2647,11 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -1945,6 +2648,11 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, next_state = SNK_READY; else next_state = SNK_WAIT_CAPABILITIES; @@ -1632041,7 +1632102,7 @@ index cf0e6a80815a..e28c57d194a3 tcpm_set_state(port, next_state, 0); break; case SNK_NEGOTIATE_PPS_CAPABILITIES: -@@ -1952,6 +2660,12 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -1953,6 +2661,12 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, port->pps_data.req_op_curr = port->current_limit; port->pps_status = (type == PD_CTRL_WAIT ? -EAGAIN : -EOPNOTSUPP); @@ -1632054,7 +1632115,7 @@ index cf0e6a80815a..e28c57d194a3 tcpm_set_state(port, SNK_READY, 0); break; case DR_SWAP_SEND: -@@ -1976,7 +2690,22 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -1977,7 +2691,22 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, port->sink_cap_done = true; tcpm_set_state(port, ready_state(port), 0); break; @@ -1632077,7 +1632138,7 @@ index cf0e6a80815a..e28c57d194a3 break; } break; -@@ -1997,13 +2726,14 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -1998,13 +2727,14 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, tcpm_set_state(port, SNK_TRANSITION_SINK, 0); break; case SOFT_RESET_SEND: @@ -1632099,7 +1632160,7 @@ index cf0e6a80815a..e28c57d194a3 break; case DR_SWAP_SEND: tcpm_set_state(port, DR_SWAP_CHANGE_DR, 0); -@@ -2018,57 +2748,62 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -2019,57 +2749,62 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, tcpm_set_state(port, FR_SWAP_SNK_SRC_TRANSITION_TO_OFF, 0); break; default: @@ -1632191,7 +1632252,7 @@ index cf0e6a80815a..e28c57d194a3 break; case PD_CTRL_GET_SOURCE_CAP_EXT: case PD_CTRL_GET_STATUS: -@@ -2076,10 +2811,19 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, +@@ -2077,10 +2812,19 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, case PD_CTRL_GET_PPS_STATUS: case PD_CTRL_GET_COUNTRY_CODES: /* Currently not supported */ @@ -1632213,7 +1632274,7 @@ index cf0e6a80815a..e28c57d194a3 break; } } -@@ -2090,34 +2834,37 @@ static void tcpm_pd_ext_msg_request(struct tcpm_port *port, +@@ -2091,34 +2835,37 @@ static void tcpm_pd_ext_msg_request(struct tcpm_port *port, enum pd_ext_msg_type type = pd_header_type_le(msg->header); unsigned int data_size = pd_ext_header_data_size_le(msg->ext_msg.header); @@ -1632267,7 +1632328,7 @@ index cf0e6a80815a..e28c57d194a3 break; case PD_EXT_SOURCE_CAP_EXT: case PD_EXT_GET_BATT_CAP: -@@ -2131,10 +2878,11 @@ static void tcpm_pd_ext_msg_request(struct tcpm_port *port, +@@ -2132,10 +2879,11 @@ static void tcpm_pd_ext_msg_request(struct tcpm_port *port, case PD_EXT_FW_UPDATE_RESPONSE: case PD_EXT_COUNTRY_INFO: case PD_EXT_COUNTRY_CODES: @@ -1632281,7 +1632342,7 @@ index cf0e6a80815a..e28c57d194a3 break; } } -@@ -2179,7 +2927,7 @@ static void tcpm_pd_rx_handler(struct kthread_work *work) +@@ -2180,7 +2928,7 @@ static void tcpm_pd_rx_handler(struct kthread_work *work) "Data role mismatch, initiating error recovery"); tcpm_set_state(port, ERROR_RECOVERY, 0); } else { @@ -1632290,7 +1632351,7 @@ index cf0e6a80815a..e28c57d194a3 tcpm_pd_ext_msg_request(port, msg); else if (cnt) tcpm_pd_data_request(port, msg); -@@ -2230,6 +2978,7 @@ static int tcpm_pd_send_control(struct tcpm_port *port, +@@ -2231,6 +2979,7 @@ static int tcpm_pd_send_control(struct tcpm_port *port, static bool tcpm_send_queued_message(struct tcpm_port *port) { enum pd_msg_request queued_message; @@ -1632298,7 +1632359,7 @@ index cf0e6a80815a..e28c57d194a3 do { queued_message = port->queued_message; -@@ -2246,10 +2995,27 @@ static bool tcpm_send_queued_message(struct tcpm_port *port) +@@ -2247,10 +2996,27 @@ static bool tcpm_send_queued_message(struct tcpm_port *port) tcpm_pd_send_control(port, PD_CTRL_NOT_SUPP); break; case PD_MSG_DATA_SINK_CAP: @@ -1632328,7 +1632389,7 @@ index cf0e6a80815a..e28c57d194a3 break; default: break; -@@ -2615,6 +3381,12 @@ static int tcpm_pd_send_request(struct tcpm_port *port) +@@ -2616,6 +3382,12 @@ static int tcpm_pd_send_request(struct tcpm_port *port) if (ret < 0) return ret; @@ -1632341,7 +1632402,7 @@ index cf0e6a80815a..e28c57d194a3 memset(&msg, 0, sizeof(msg)); msg.header = PD_HEADER_LE(PD_DATA_REQUEST, port->pwr_role, -@@ -2712,6 +3484,9 @@ static int tcpm_pd_send_pps_request(struct tcpm_port *port) +@@ -2713,6 +3485,9 @@ static int tcpm_pd_send_pps_request(struct tcpm_port *port) if (ret < 0) return ret; @@ -1632351,7 +1632412,7 @@ index cf0e6a80815a..e28c57d194a3 memset(&msg, 0, sizeof(msg)); msg.header = PD_HEADER_LE(PD_DATA_REQUEST, port->pwr_role, -@@ -2771,13 +3546,6 @@ static bool tcpm_start_toggling(struct tcpm_port *port, enum typec_cc_status cc) +@@ -2772,13 +3547,6 @@ static bool tcpm_start_toggling(struct tcpm_port *port, enum typec_cc_status cc) return ret == 0; } @@ -1632365,7 +1632426,7 @@ index cf0e6a80815a..e28c57d194a3 static int tcpm_init_vbus(struct tcpm_port *port) { int ret; -@@ -2829,8 +3597,9 @@ static int tcpm_src_attach(struct tcpm_port *port) +@@ -2830,8 +3598,9 @@ static int tcpm_src_attach(struct tcpm_port *port) if (ret < 0) return ret; @@ -1632377,7 +1632438,7 @@ index cf0e6a80815a..e28c57d194a3 if (ret < 0) return ret; -@@ -2859,6 +3628,7 @@ static int tcpm_src_attach(struct tcpm_port *port) +@@ -2860,6 +3629,7 @@ static int tcpm_src_attach(struct tcpm_port *port) port->partner = NULL; port->attached = true; @@ -1632385,7 +1632446,7 @@ index cf0e6a80815a..e28c57d194a3 port->send_discover = true; return 0; -@@ -2895,13 +3665,26 @@ static void tcpm_unregister_altmodes(struct tcpm_port *port) +@@ -2896,13 +3666,26 @@ static void tcpm_unregister_altmodes(struct tcpm_port *port) memset(modep, 0, sizeof(*modep)); } @@ -1632412,7 +1632473,7 @@ index cf0e6a80815a..e28c57d194a3 /* * First Rx ID should be 0; set this to a sentinel of -1 so that -@@ -2960,8 +3743,9 @@ static int tcpm_snk_attach(struct tcpm_port *port) +@@ -2961,8 +3744,9 @@ static int tcpm_snk_attach(struct tcpm_port *port) if (ret < 0) return ret; @@ -1632424,7 +1632485,7 @@ index cf0e6a80815a..e28c57d194a3 if (ret < 0) return ret; -@@ -2970,6 +3754,7 @@ static int tcpm_snk_attach(struct tcpm_port *port) +@@ -2971,6 +3755,7 @@ static int tcpm_snk_attach(struct tcpm_port *port) port->partner = NULL; port->attached = true; @@ -1632432,7 +1632493,7 @@ index cf0e6a80815a..e28c57d194a3 port->send_discover = true; return 0; -@@ -2997,6 +3782,7 @@ static int tcpm_acc_attach(struct tcpm_port *port) +@@ -2998,6 +3783,7 @@ static int tcpm_acc_attach(struct tcpm_port *port) tcpm_typec_connect(port); port->attached = true; @@ -1632440,7 +1632501,7 @@ index cf0e6a80815a..e28c57d194a3 return 0; } -@@ -3033,14 +3819,15 @@ static inline enum tcpm_state unattached_state(struct tcpm_port *port) +@@ -3034,14 +3820,15 @@ static inline enum tcpm_state unattached_state(struct tcpm_port *port) return SNK_UNATTACHED; } @@ -1632462,7 +1632523,7 @@ index cf0e6a80815a..e28c57d194a3 static void tcpm_swap_complete(struct tcpm_port *port, int result) { -@@ -3069,7 +3856,11 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3070,7 +3857,11 @@ static void run_state_machine(struct tcpm_port *port) { int ret; enum typec_pwr_opmode opmode; @@ -1632475,7 +1632536,7 @@ index cf0e6a80815a..e28c57d194a3 port->enter_state = port->state; switch (port->state) { -@@ -3080,6 +3871,15 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3081,6 +3872,15 @@ static void run_state_machine(struct tcpm_port *port) if (!port->non_pd_role_swap) tcpm_swap_complete(port, -ENOTCONN); tcpm_src_detach(port); @@ -1632491,7 +1632552,7 @@ index cf0e6a80815a..e28c57d194a3 if (tcpm_start_toggling(port, tcpm_rp_cc(port))) { tcpm_set_state(port, TOGGLING, 0); break; -@@ -3103,6 +3903,7 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3104,6 +3904,7 @@ static void run_state_machine(struct tcpm_port *port) break; case SNK_TRY: @@ -1632499,7 +1632560,7 @@ index cf0e6a80815a..e28c57d194a3 port->try_snk_count++; /* * Requirements: -@@ -3125,15 +3926,13 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3126,15 +3927,13 @@ static void run_state_machine(struct tcpm_port *port) break; case SNK_TRY_WAIT_DEBOUNCE: tcpm_set_state(port, SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS, @@ -1632518,7 +1632579,7 @@ index cf0e6a80815a..e28c57d194a3 break; case SRC_TRYWAIT: tcpm_set_cc(port, tcpm_rp_cc(port)); -@@ -3172,7 +3971,12 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3173,7 +3972,12 @@ static void run_state_machine(struct tcpm_port *port) port->message_id = 0; port->rx_msgid = -1; port->explicit_contract = false; @@ -1632532,7 +1632593,7 @@ index cf0e6a80815a..e28c57d194a3 break; case SRC_SEND_CAPABILITIES: port->caps_count++; -@@ -3233,6 +4037,8 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3234,6 +4038,8 @@ static void run_state_machine(struct tcpm_port *port) } } else { tcpm_pd_send_control(port, PD_CTRL_ACCEPT); @@ -1632541,7 +1632602,7 @@ index cf0e6a80815a..e28c57d194a3 tcpm_set_state(port, SRC_TRANSITION_SUPPLY, PD_T_SRC_TRANSITION); } -@@ -3254,7 +4060,36 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3255,7 +4061,36 @@ static void run_state_machine(struct tcpm_port *port) tcpm_swap_complete(port, 0); tcpm_typec_connect(port); @@ -1632579,7 +1632640,7 @@ index cf0e6a80815a..e28c57d194a3 /* * 6.3.5 * Sending ping messages is not necessary if -@@ -3279,6 +4114,15 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3280,6 +4115,15 @@ static void run_state_machine(struct tcpm_port *port) tcpm_swap_complete(port, -ENOTCONN); tcpm_pps_complete(port, -ENOTCONN); tcpm_snk_detach(port); @@ -1632595,7 +1632656,7 @@ index cf0e6a80815a..e28c57d194a3 if (tcpm_start_toggling(port, TYPEC_CC_RD)) { tcpm_set_state(port, TOGGLING, 0); break; -@@ -3299,14 +4143,18 @@ static void run_state_machine(struct tcpm_port *port) +@@ -3300,14 +4144,18 @@ static void run_state_machine(struct tcpm_port *port) PD_T_PD_DEBOUNCE); break; case SNK_DEBOUNCED: @@ -1632619,7 +1632680,7 @@ index cf0e6a80815a..e28c57d194a3 diff --git a/drivers/usb/typec/tcpm/wcove.c b/drivers/usb/typec/tcpm/wcove.c old mode 100644 new mode 100755 -index 7e9c279bf49d..5d125339687a +index 7e9c279bf..5d1253396 --- a/drivers/usb/typec/tcpm/wcove.c +++ b/drivers/usb/typec/tcpm/wcove.c @@ -356,7 +356,8 @@ static int wcove_set_pd_rx(struct tcpc_dev *tcpc, bool on) @@ -1632635,7 +1632696,7 @@ index 7e9c279bf49d..5d125339687a diff --git a/drivers/usb/typec/ucsi/Kconfig b/drivers/usb/typec/ucsi/Kconfig old mode 100644 new mode 100755 -index 2192d7c4fec7..5e9b37b3f25e +index 2192d7c4f..5e9b37b3f --- a/drivers/usb/typec/ucsi/Kconfig +++ b/drivers/usb/typec/ucsi/Kconfig @@ -3,6 +3,7 @@ @@ -1632649,7 +1632710,7 @@ index 2192d7c4fec7..5e9b37b3f25e diff --git a/drivers/usb/typec/ucsi/displayport.c b/drivers/usb/typec/ucsi/displayport.c old mode 100644 new mode 100755 -index 261131c9e37c..73cd5bf35047 +index 261131c9e..73cd5bf35 --- a/drivers/usb/typec/ucsi/displayport.c +++ b/drivers/usb/typec/ucsi/displayport.c @@ -49,6 +49,7 @@ static int ucsi_displayport_enter(struct typec_altmode *alt, u32 *vdo) @@ -1632731,7 +1632792,7 @@ index 261131c9e37c..73cd5bf35047 diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c old mode 100644 new mode 100755 -index cd3689005c31..8ed0f49e6df8 +index cd3689005..8ed0f49e6 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -613,6 +613,7 @@ static void ucsi_unregister_partner(struct ucsi_connector *con) @@ -1632875,7 +1632936,7 @@ index cd3689005c31..8ed0f49e6df8 diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h old mode 100644 new mode 100755 -index fce23ad16c6d..b3450d87f324 +index fce23ad16..b3450d87f --- a/drivers/usb/typec/ucsi/ucsi.h +++ b/drivers/usb/typec/ucsi/ucsi.h @@ -9,6 +9,8 @@ @@ -1632897,7 +1632958,7 @@ index fce23ad16c6d..b3450d87f324 int ucsi_send_command(struct ucsi *ucsi, u64 command, diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig -index 427a993c7f57..e4c52ca82e88 100644 +index 427a993c7..e4c52ca82 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -18,6 +18,7 @@ source "drivers/gpu/host1x/Kconfig" @@ -1632920,7 +1632981,7 @@ index 427a993c7f57..e4c52ca82e88 100644 tristate default n diff --git a/drivers/video/Makefile b/drivers/video/Makefile -index df7650adede9..b355e2fcb423 100644 +index df7650ade..b355e2fcb 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -6,6 +6,7 @@ obj-$(CONFIG_VT) += console/ @@ -1632932,7 +1632993,7 @@ index df7650adede9..b355e2fcb423 100644 obj-y += fbdev/ diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c -index 1cf924f3aecc..cd3676b96fb0 100644 +index 1cf924f3a..cd3676b96 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c @@ -603,6 +603,8 @@ static int pwm_backlight_probe(struct platform_device *pdev) @@ -1632946,7 +1633007,7 @@ index 1cf924f3aecc..cd3676b96fb0 100644 diff --git a/drivers/video/rockchip/Kconfig b/drivers/video/rockchip/Kconfig new file mode 100755 -index 000000000000..6548dd38b534 +index 000000000..6548dd38b --- /dev/null +++ b/drivers/video/rockchip/Kconfig @@ -0,0 +1,11 @@ @@ -1632963,7 +1633024,7 @@ index 000000000000..6548dd38b534 +source "drivers/video/rockchip/vtunnel/Kconfig" diff --git a/drivers/video/rockchip/Makefile b/drivers/video/rockchip/Makefile new file mode 100755 -index 000000000000..867ac56fe5b7 +index 000000000..867ac56fe --- /dev/null +++ b/drivers/video/rockchip/Makefile @@ -0,0 +1,11 @@ @@ -1632980,7 +1633041,7 @@ index 000000000000..867ac56fe5b7 +obj-$(CONFIG_ROCKCHIP_VIDEO_TUNNEL) += vtunnel/ diff --git a/drivers/video/rockchip/dvbm/Kconfig b/drivers/video/rockchip/dvbm/Kconfig new file mode 100644 -index 000000000000..bfbd396b2706 +index 000000000..bfbd396b2 --- /dev/null +++ b/drivers/video/rockchip/dvbm/Kconfig @@ -0,0 +1,18 @@ @@ -1633004,7 +1633065,7 @@ index 000000000000..bfbd396b2706 +endif diff --git a/drivers/video/rockchip/dvbm/Makefile b/drivers/video/rockchip/dvbm/Makefile new file mode 100644 -index 000000000000..9096c34720ec +index 000000000..9096c3472 --- /dev/null +++ b/drivers/video/rockchip/dvbm/Makefile @@ -0,0 +1,5 @@ @@ -1633015,7 +1633076,7 @@ index 000000000000..9096c34720ec +obj-$(CONFIG_ROCKCHIP_DVBM) += rk_dvbm.o diff --git a/drivers/video/rockchip/dvbm/rockchip_dvbm.c b/drivers/video/rockchip/dvbm/rockchip_dvbm.c new file mode 100644 -index 000000000000..abff28da714e +index 000000000..abff28da7 --- /dev/null +++ b/drivers/video/rockchip/dvbm/rockchip_dvbm.c @@ -0,0 +1,752 @@ @@ -1633773,7 +1633834,7 @@ index 000000000000..abff28da714e +MODULE_DESCRIPTION("Rockchip dvbm driver"); diff --git a/drivers/video/rockchip/dvbm/rockchip_dvbm.h b/drivers/video/rockchip/dvbm/rockchip_dvbm.h new file mode 100644 -index 000000000000..9f298b7dd47d +index 000000000..9f298b7dd --- /dev/null +++ b/drivers/video/rockchip/dvbm/rockchip_dvbm.h @@ -0,0 +1,214 @@ @@ -1633993,7 +1634054,7 @@ index 000000000000..9f298b7dd47d +#endif diff --git a/drivers/video/rockchip/iep/Kconfig b/drivers/video/rockchip/iep/Kconfig new file mode 100755 -index 000000000000..cd8ba653f9ea +index 000000000..cd8ba653f --- /dev/null +++ b/drivers/video/rockchip/iep/Kconfig @@ -0,0 +1,10 @@ @@ -1634009,7 +1634070,7 @@ index 000000000000..cd8ba653f9ea +endmenu diff --git a/drivers/video/rockchip/iep/Makefile b/drivers/video/rockchip/iep/Makefile new file mode 100755 -index 000000000000..f4dba6e9379a +index 000000000..f4dba6e93 --- /dev/null +++ b/drivers/video/rockchip/iep/Makefile @@ -0,0 +1,4 @@ @@ -1634019,7 +1634080,7 @@ index 000000000000..f4dba6e9379a +obj-$(CONFIG_IEP) += iep.o diff --git a/drivers/video/rockchip/iep/hw_iep_config_addr.h b/drivers/video/rockchip/iep/hw_iep_config_addr.h new file mode 100755 -index 000000000000..1f4a0706233f +index 000000000..1f4a07062 --- /dev/null +++ b/drivers/video/rockchip/iep/hw_iep_config_addr.h @@ -0,0 +1,99 @@ @@ -1634124,7 +1634185,7 @@ index 000000000000..1f4a0706233f +#endif diff --git a/drivers/video/rockchip/iep/hw_iep_reg.c b/drivers/video/rockchip/iep/hw_iep_reg.c new file mode 100755 -index 000000000000..331a50865045 +index 000000000..331a50865 --- /dev/null +++ b/drivers/video/rockchip/iep/hw_iep_reg.c @@ -0,0 +1,1530 @@ @@ -1635660,7 +1635721,7 @@ index 000000000000..331a50865045 + diff --git a/drivers/video/rockchip/iep/hw_iep_reg.h b/drivers/video/rockchip/iep/hw_iep_reg.h new file mode 100755 -index 000000000000..03d9fe92ca23 +index 000000000..03d9fe92c --- /dev/null +++ b/drivers/video/rockchip/iep/hw_iep_reg.h @@ -0,0 +1,525 @@ @@ -1636191,7 +1636252,7 @@ index 000000000000..03d9fe92ca23 +#endif diff --git a/drivers/video/rockchip/iep/iep.h b/drivers/video/rockchip/iep/iep.h new file mode 100755 -index 000000000000..94e372e6a471 +index 000000000..94e372e6a --- /dev/null +++ b/drivers/video/rockchip/iep/iep.h @@ -0,0 +1,276 @@ @@ -1636473,7 +1636534,7 @@ index 000000000000..94e372e6a471 +#endif diff --git a/drivers/video/rockchip/iep/iep_drv.c b/drivers/video/rockchip/iep/iep_drv.c new file mode 100755 -index 000000000000..f0cfc7164e39 +index 000000000..f0cfc7164 --- /dev/null +++ b/drivers/video/rockchip/iep/iep_drv.c @@ -0,0 +1,1320 @@ @@ -1637799,7 +1637860,7 @@ index 000000000000..f0cfc7164e39 +#endif diff --git a/drivers/video/rockchip/iep/iep_drv.h b/drivers/video/rockchip/iep/iep_drv.h new file mode 100755 -index 000000000000..19160c6ffccd +index 000000000..19160c6ff --- /dev/null +++ b/drivers/video/rockchip/iep/iep_drv.h @@ -0,0 +1,159 @@ @@ -1637964,7 +1638025,7 @@ index 000000000000..19160c6ffccd + diff --git a/drivers/video/rockchip/iep/iep_iommu_drm.c b/drivers/video/rockchip/iep/iep_iommu_drm.c new file mode 100755 -index 000000000000..411f567a6e4e +index 000000000..411f567a6 --- /dev/null +++ b/drivers/video/rockchip/iep/iep_iommu_drm.c @@ -0,0 +1,465 @@ @@ -1638435,7 +1638496,7 @@ index 000000000000..411f567a6e4e +} diff --git a/drivers/video/rockchip/iep/iep_iommu_ops.c b/drivers/video/rockchip/iep/iep_iommu_ops.c new file mode 100755 -index 000000000000..e84772237b89 +index 000000000..e84772237 --- /dev/null +++ b/drivers/video/rockchip/iep/iep_iommu_ops.c @@ -0,0 +1,244 @@ @@ -1638685,7 +1638746,7 @@ index 000000000000..e84772237b89 +} diff --git a/drivers/video/rockchip/iep/iep_iommu_ops.h b/drivers/video/rockchip/iep/iep_iommu_ops.h new file mode 100755 -index 000000000000..9b71d53a51eb +index 000000000..9b71d53a5 --- /dev/null +++ b/drivers/video/rockchip/iep/iep_iommu_ops.h @@ -0,0 +1,121 @@ @@ -1638812,7 +1638873,7 @@ index 000000000000..9b71d53a51eb +#endif diff --git a/drivers/video/rockchip/mpp/Kconfig b/drivers/video/rockchip/mpp/Kconfig new file mode 100755 -index 000000000000..53342703a6ee +index 000000000..53342703a --- /dev/null +++ b/drivers/video/rockchip/mpp/Kconfig @@ -0,0 +1,78 @@ @@ -1638896,7 +1638957,7 @@ index 000000000000..53342703a6ee +endif diff --git a/drivers/video/rockchip/mpp/Makefile b/drivers/video/rockchip/mpp/Makefile new file mode 100755 -index 000000000000..42ec696bc9d7 +index 000000000..42ec696bc --- /dev/null +++ b/drivers/video/rockchip/mpp/Makefile @@ -0,0 +1,30 @@ @@ -1638932,7 +1638993,7 @@ index 000000000000..42ec696bc9d7 +obj-$(CONFIG_ROCKCHIP_MPP_SERVICE) += rk_vcodec.o diff --git a/drivers/video/rockchip/mpp/hack/mpp_hack_px30.c b/drivers/video/rockchip/mpp/hack/mpp_hack_px30.c new file mode 100755 -index 000000000000..07912bcc3436 +index 000000000..07912bcc3 --- /dev/null +++ b/drivers/video/rockchip/mpp/hack/mpp_hack_px30.c @@ -0,0 +1,241 @@ @@ -1639179,7 +1639240,7 @@ index 000000000000..07912bcc3436 +} diff --git a/drivers/video/rockchip/mpp/hack/mpp_hack_px30.h b/drivers/video/rockchip/mpp/hack/mpp_hack_px30.h new file mode 100755 -index 000000000000..c8402e30d810 +index 000000000..c8402e30d --- /dev/null +++ b/drivers/video/rockchip/mpp/hack/mpp_hack_px30.h @@ -0,0 +1,27 @@ @@ -1639212,7 +1639273,7 @@ index 000000000000..c8402e30d810 +#endif diff --git a/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_hack_rk3568.c b/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_hack_rk3568.c new file mode 100755 -index 000000000000..c2bb2687fc3d +index 000000000..c2bb2687f --- /dev/null +++ b/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_hack_rk3568.c @@ -0,0 +1,732 @@ @@ -1639950,7 +1640011,7 @@ index 000000000000..c2bb2687fc3d +} diff --git a/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_link_hack_rk3568.c b/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_link_hack_rk3568.c new file mode 100755 -index 000000000000..900b63a57673 +index 000000000..900b63a57 --- /dev/null +++ b/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_link_hack_rk3568.c @@ -0,0 +1,213 @@ @@ -1640169,7 +1640230,7 @@ index 000000000000..900b63a57673 +} diff --git a/drivers/video/rockchip/mpp/mpp_av1dec.c b/drivers/video/rockchip/mpp/mpp_av1dec.c new file mode 100644 -index 000000000000..33e118ae6450 +index 000000000..33e118ae6 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_av1dec.c @@ -0,0 +1,1343 @@ @@ -1641518,7 +1641579,7 @@ index 000000000000..33e118ae6450 +}; diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c new file mode 100755 -index 000000000000..d43ebf450ed2 +index 000000000..d43ebf450 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -0,0 +1,2610 @@ @@ -1644134,7 +1644195,7 @@ index 000000000000..d43ebf450ed2 +#endif diff --git a/drivers/video/rockchip/mpp/mpp_common.h b/drivers/video/rockchip/mpp/mpp_common.h new file mode 100755 -index 000000000000..8daeb0838170 +index 000000000..8daeb0838 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_common.h @@ -0,0 +1,853 @@ @@ -1644993,7 +1645054,7 @@ index 000000000000..8daeb0838170 +#endif diff --git a/drivers/video/rockchip/mpp/mpp_debug.h b/drivers/video/rockchip/mpp/mpp_debug.h new file mode 100755 -index 000000000000..4108c69da894 +index 000000000..4108c69da --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_debug.h @@ -0,0 +1,138 @@ @@ -1645137,7 +1645198,7 @@ index 000000000000..4108c69da894 +#endif diff --git a/drivers/video/rockchip/mpp/mpp_iep2.c b/drivers/video/rockchip/mpp/mpp_iep2.c new file mode 100755 -index 000000000000..8d1926957f69 +index 000000000..8d1926957 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_iep2.c @@ -0,0 +1,1038 @@ @@ -1646181,7 +1646242,7 @@ index 000000000000..8d1926957f69 + diff --git a/drivers/video/rockchip/mpp/mpp_iommu.c b/drivers/video/rockchip/mpp/mpp_iommu.c new file mode 100755 -index 000000000000..1abbfb74f4e2 +index 000000000..1abbfb74f --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_iommu.c @@ -0,0 +1,645 @@ @@ -1646832,7 +1646893,7 @@ index 000000000000..1abbfb74f4e2 +} diff --git a/drivers/video/rockchip/mpp/mpp_iommu.h b/drivers/video/rockchip/mpp/mpp_iommu.h new file mode 100755 -index 000000000000..87d1b5c612d2 +index 000000000..87d1b5c61 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_iommu.h @@ -0,0 +1,170 @@ @@ -1647008,7 +1647069,7 @@ index 000000000000..87d1b5c612d2 +#endif diff --git a/drivers/video/rockchip/mpp/mpp_iommu_av1d.c b/drivers/video/rockchip/mpp/mpp_iommu_av1d.c new file mode 100644 -index 000000000000..39ff16c21ee9 +index 000000000..39ff16c21 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_iommu_av1d.c @@ -0,0 +1,997 @@ @@ -1648011,7 +1648072,7 @@ index 000000000000..39ff16c21ee9 +}; diff --git a/drivers/video/rockchip/mpp/mpp_jpgdec.c b/drivers/video/rockchip/mpp/mpp_jpgdec.c new file mode 100755 -index 000000000000..753b061f22ea +index 000000000..753b061f2 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_jpgdec.c @@ -0,0 +1,643 @@ @@ -1648660,7 +1648721,7 @@ index 000000000000..753b061f22ea +EXPORT_SYMBOL(rockchip_jpgdec_driver); diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec.c b/drivers/video/rockchip/mpp/mpp_rkvdec.c new file mode 100755 -index 000000000000..4310a09a5ce0 +index 000000000..4310a09a5 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_rkvdec.c @@ -0,0 +1,2039 @@ @@ -1650705,7 +1650766,7 @@ index 000000000000..4310a09a5ce0 +EXPORT_SYMBOL(rockchip_rkvdec_driver); diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c new file mode 100755 -index 000000000000..a463fc2eeccc +index 000000000..a463fc2ee --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -0,0 +1,1800 @@ @@ -1652511,7 +1652572,7 @@ index 000000000000..a463fc2eeccc +EXPORT_SYMBOL(rockchip_rkvdec2_driver); diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.h b/drivers/video/rockchip/mpp/mpp_rkvdec2.h new file mode 100755 -index 000000000000..3eabdace77f4 +index 000000000..3eabdace7 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.h @@ -0,0 +1,242 @@ @@ -1652759,7 +1652820,7 @@ index 000000000000..3eabdace77f4 +#endif diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2_link.c b/drivers/video/rockchip/mpp/mpp_rkvdec2_link.c new file mode 100755 -index 000000000000..7c5a58df1865 +index 000000000..7c5a58df1 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2_link.c @@ -0,0 +1,2511 @@ @@ -1655276,7 +1655337,7 @@ index 000000000000..7c5a58df1865 +} diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2_link.h b/drivers/video/rockchip/mpp/mpp_rkvdec2_link.h new file mode 100755 -index 000000000000..518927e9481e +index 000000000..518927e94 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2_link.h @@ -0,0 +1,238 @@ @@ -1655520,7 +1655581,7 @@ index 000000000000..518927e9481e +#endif diff --git a/drivers/video/rockchip/mpp/mpp_rkvenc.c b/drivers/video/rockchip/mpp/mpp_rkvenc.c new file mode 100755 -index 000000000000..c71c03fb91eb +index 000000000..c71c03fb9 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_rkvenc.c @@ -0,0 +1,1506 @@ @@ -1657032,7 +1657093,7 @@ index 000000000000..c71c03fb91eb +}; diff --git a/drivers/video/rockchip/mpp/mpp_rkvenc2.c b/drivers/video/rockchip/mpp/mpp_rkvenc2.c new file mode 100755 -index 000000000000..111c106ae65c +index 000000000..111c106ae --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_rkvenc2.c @@ -0,0 +1,2693 @@ @@ -1659731,7 +1659792,7 @@ index 000000000000..111c106ae65c +}; diff --git a/drivers/video/rockchip/mpp/mpp_service.c b/drivers/video/rockchip/mpp/mpp_service.c new file mode 100755 -index 000000000000..c04d6fbf553b +index 000000000..c04d6fbf5 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_service.c @@ -0,0 +1,499 @@ @@ -1660236,7 +1660297,7 @@ index 000000000000..c04d6fbf553b +MODULE_DESCRIPTION("Rockchip mpp service driver"); diff --git a/drivers/video/rockchip/mpp/mpp_vdpp.c b/drivers/video/rockchip/mpp/mpp_vdpp.c new file mode 100644 -index 000000000000..c0dc382a1872 +index 000000000..c0dc382a1 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_vdpp.c @@ -0,0 +1,784 @@ @@ -1661026,7 +1661087,7 @@ index 000000000000..c0dc382a1872 +EXPORT_SYMBOL(rockchip_vdpp_driver); diff --git a/drivers/video/rockchip/mpp/mpp_vdpu1.c b/drivers/video/rockchip/mpp/mpp_vdpu1.c new file mode 100755 -index 000000000000..6ddf5dae73f3 +index 000000000..6ddf5dae7 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_vdpu1.c @@ -0,0 +1,972 @@ @@ -1662004,7 +1662065,7 @@ index 000000000000..6ddf5dae73f3 +EXPORT_SYMBOL(rockchip_vdpu1_driver); diff --git a/drivers/video/rockchip/mpp/mpp_vdpu2.c b/drivers/video/rockchip/mpp/mpp_vdpu2.c new file mode 100755 -index 000000000000..d5a6a3017208 +index 000000000..d5a6a3017 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_vdpu2.c @@ -0,0 +1,808 @@ @@ -1662818,7 +1662879,7 @@ index 000000000000..d5a6a3017208 +EXPORT_SYMBOL(rockchip_vdpu2_driver); diff --git a/drivers/video/rockchip/mpp/mpp_vepu1.c b/drivers/video/rockchip/mpp/mpp_vepu1.c new file mode 100755 -index 000000000000..18f685a2e948 +index 000000000..18f685a2e --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_vepu1.c @@ -0,0 +1,795 @@ @@ -1663619,7 +1663680,7 @@ index 000000000000..18f685a2e948 +EXPORT_SYMBOL(rockchip_vepu1_driver); diff --git a/drivers/video/rockchip/mpp/mpp_vepu2.c b/drivers/video/rockchip/mpp/mpp_vepu2.c new file mode 100755 -index 000000000000..fb5f5e5c28e3 +index 000000000..fb5f5e5c2 --- /dev/null +++ b/drivers/video/rockchip/mpp/mpp_vepu2.c @@ -0,0 +1,1278 @@ @@ -1664903,7 +1664964,7 @@ index 000000000000..fb5f5e5c28e3 +EXPORT_SYMBOL(rockchip_vepu2_driver); diff --git a/drivers/video/rockchip/mpp/rockchip_iep2_regs.h b/drivers/video/rockchip/mpp/rockchip_iep2_regs.h new file mode 100755 -index 000000000000..d85a30dfb84f +index 000000000..d85a30dfb --- /dev/null +++ b/drivers/video/rockchip/mpp/rockchip_iep2_regs.h @@ -0,0 +1,183 @@ @@ -1665092,7 +1665153,7 @@ index 000000000000..d85a30dfb84f + diff --git a/drivers/video/rockchip/mpp_osal/Kconfig b/drivers/video/rockchip/mpp_osal/Kconfig new file mode 100644 -index 000000000000..75cd7028615f +index 000000000..75cd70286 --- /dev/null +++ b/drivers/video/rockchip/mpp_osal/Kconfig @@ -0,0 +1,8 @@ @@ -1665106,7 +1665167,7 @@ index 000000000000..75cd7028615f + rockchip mpp osal adapt for kmpp diff --git a/drivers/video/rockchip/mpp_osal/Makefile b/drivers/video/rockchip/mpp_osal/Makefile new file mode 100644 -index 000000000000..f4ca9643fff2 +index 000000000..f4ca9643f --- /dev/null +++ b/drivers/video/rockchip/mpp_osal/Makefile @@ -0,0 +1,2 @@ @@ -1665114,7 +1665175,7 @@ index 000000000000..f4ca9643fff2 +obj-$(CONFIG_ROCKCHIP_MPP_OSAL) += mpp_osal.o diff --git a/drivers/video/rockchip/mpp_osal/mpp_osal.c b/drivers/video/rockchip/mpp_osal/mpp_osal.c new file mode 100644 -index 000000000000..a778b1904044 +index 000000000..a778b1904 --- /dev/null +++ b/drivers/video/rockchip/mpp_osal/mpp_osal.c @@ -0,0 +1,30 @@ @@ -1665150,7 +1665211,7 @@ index 000000000000..a778b1904044 +EXPORT_SYMBOL(mpp_device_init_wakeup); diff --git a/drivers/video/rockchip/mpp_osal/mpp_osal.h b/drivers/video/rockchip/mpp_osal/mpp_osal.h new file mode 100644 -index 000000000000..d798dfd0c293 +index 000000000..d798dfd0c --- /dev/null +++ b/drivers/video/rockchip/mpp_osal/mpp_osal.h @@ -0,0 +1,18 @@ @@ -1665174,7 +1665235,7 @@ index 000000000000..d798dfd0c293 +#endif diff --git a/drivers/video/rockchip/rga/Kconfig b/drivers/video/rockchip/rga/Kconfig new file mode 100755 -index 000000000000..6023b2eb23a7 +index 000000000..6023b2eb2 --- /dev/null +++ b/drivers/video/rockchip/rga/Kconfig @@ -0,0 +1,10 @@ @@ -1665190,7 +1665251,7 @@ index 000000000000..6023b2eb23a7 +endmenu diff --git a/drivers/video/rockchip/rga/Makefile b/drivers/video/rockchip/rga/Makefile new file mode 100755 -index 000000000000..58dd4c6a3e42 +index 000000000..58dd4c6a3 --- /dev/null +++ b/drivers/video/rockchip/rga/Makefile @@ -0,0 +1,4 @@ @@ -1665200,228 +1665261,228 @@ index 000000000000..58dd4c6a3e42 +obj-$(CONFIG_ROCKCHIP_RGA) += rga.o diff --git a/drivers/video/rockchip/rga/RGA_API.c b/drivers/video/rockchip/rga/RGA_API.c new file mode 100755 -index 000000000000..947a9b925f60 +index 000000000..4359a6d50 --- /dev/null +++ b/drivers/video/rockchip/rga/RGA_API.c @@ -0,0 +1,201 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+ -+#include -+#include "RGA_API.h" -+#include "rga.h" -+//#include "rga_angle.h" -+ -+#define IS_YUV_420(format) \ -+ ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \ -+ (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP)) -+ -+#define IS_YUV_422(format) \ -+ ((format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \ -+ (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP)) -+ -+#define IS_YUV(format) \ -+ ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \ -+ (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP) | \ -+ (format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \ -+ (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP)) -+ -+ -+extern rga_service_info rga_service; -+ -+ -+void -+matrix_cal(const struct rga_req *msg, TILE_INFO *tile) -+{ -+ uint64_t x_time, y_time; -+ uint64_t sina, cosa; -+ -+ int s_act_w, s_act_h, d_act_w, d_act_h; -+ -+ s_act_w = msg->src.act_w; -+ s_act_h = msg->src.act_h; -+ d_act_w = msg->dst.act_w; -+ d_act_h = msg->dst.act_h; -+ -+ if (s_act_w == 1) s_act_w += 1; -+ if (s_act_h == 1) s_act_h += 1; -+ if (d_act_h == 1) d_act_h += 1; -+ if (d_act_w == 1) d_act_w += 1; -+ -+ x_time = ((s_act_w - 1)<<16) / (d_act_w - 1); -+ y_time = ((s_act_h - 1)<<16) / (d_act_h - 1); -+ -+ sina = msg->sina; -+ cosa = msg->cosa; -+ -+ switch(msg->rotate_mode) -+ { -+ /* 16.16 x 16.16 */ -+ /* matrix[] is 64 bit wide */ -+ case 1 : -+ tile->matrix[0] = cosa*x_time; -+ tile->matrix[1] = -sina*y_time; -+ tile->matrix[2] = sina*x_time; -+ tile->matrix[3] = cosa*y_time; -+ break; -+ case 2 : -+ tile->matrix[0] = -(x_time<<16); -+ tile->matrix[1] = 0; -+ tile->matrix[2] = 0; -+ tile->matrix[3] = (y_time<<16); -+ break; -+ case 3 : -+ tile->matrix[0] = (x_time<<16); -+ tile->matrix[1] = 0; -+ tile->matrix[2] = 0; -+ tile->matrix[3] = -(y_time<<16); -+ break; -+ default : -+ tile->matrix[0] = (uint64_t)1<<32; -+ tile->matrix[1] = 0; -+ tile->matrix[2] = 0; -+ tile->matrix[3] = (uint64_t)1<<32; -+ break; -+ } -+} -+ -+ -+int32_t RGA_gen_two_pro(struct rga_req *msg, struct rga_req *msg1) -+{ -+ -+ struct rga_req *mp; -+ uint32_t w_ratio, h_ratio; -+ uint32_t stride; -+ -+ uint32_t daw, dah; -+ uint32_t pl; -+ -+ daw = dah = 0; -+ -+ mp = msg1; -+ -+ if(msg->dst.act_w == 0) -+ { -+ printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__); -+ return -EINVAL; -+ } -+ -+ if (msg->dst.act_h == 0) -+ { -+ printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__); -+ return -EINVAL; -+ } -+ w_ratio = (msg->src.act_w << 16) / msg->dst.act_w; -+ h_ratio = (msg->src.act_h << 16) / msg->dst.act_h; -+ -+ memcpy(msg1, msg, sizeof(struct rga_req)); -+ -+ msg->dst.format = msg->src.format; -+ -+ /*pre_scale_w cal*/ -+ if ((w_ratio >= (2<<16)) && (w_ratio < (4<<16))) { -+ daw = (msg->src.act_w + 1) >> 1; -+ if((IS_YUV_420(msg->dst.format)) && (daw & 1)) { -+ daw -= 1; -+ msg->src.act_w = daw << 1; -+ } -+ } -+ else if ((w_ratio >= (4<<16)) && (w_ratio < (8<<16))) { -+ daw = (msg->src.act_w + 3) >> 2; -+ if((IS_YUV_420(msg->dst.format)) && (daw & 1)) { -+ daw -= 1; -+ msg->src.act_w = daw << 2; -+ } -+ } -+ else if ((w_ratio >= (8<<16)) && (w_ratio < (16<<16))) { -+ daw = (msg->src.act_w + 7) >> 3; -+ if((IS_YUV_420(msg->dst.format)) && (daw & 1)) { -+ daw -= 1; -+ msg->src.act_w = daw << 3; -+ } -+ } -+ else -+ { -+ daw = msg->src.act_w; -+ } -+ -+ pl = (RGA_pixel_width_init(msg->src.format)); -+ stride = (pl * daw + 3) & (~3); -+ msg->dst.act_w = daw; -+ msg->dst.vir_w = stride / pl; -+ -+ /*pre_scale_h cal*/ -+ if ((h_ratio >= (2<<16)) && (h_ratio < (4<<16))) { -+ dah = (msg->src.act_h + 1) >> 1; -+ if((IS_YUV(msg->dst.format)) && (dah & 1)) { -+ dah -= 1; -+ msg->src.act_h = dah << 1; -+ } -+ } -+ else if ((h_ratio >= (4<<16)) && (h_ratio < (8<<16))) { -+ dah = (msg->src.act_h + 3) >> 2; -+ if((IS_YUV(msg->dst.format)) && (dah & 1)) { -+ dah -= 1; -+ msg->src.act_h = dah << 2; -+ -+ } -+ } -+ else if ((h_ratio >= (8<<16)) && (h_ratio < (16<<16))) { -+ dah = (msg->src.act_h + 7) >> 3; -+ if((IS_YUV(msg->dst.format)) && (dah & 1)) { -+ dah -= 1; -+ msg->src.act_h = dah << 3; -+ } -+ } -+ else -+ { -+ dah = msg->src.act_h; -+ } -+ -+ msg->dst.act_h = dah; -+ msg->dst.vir_h = dah; -+ -+ msg->dst.x_offset = 0; -+ msg->dst.y_offset = 0; -+ -+ msg->dst.yrgb_addr = (unsigned long)rga_service.pre_scale_buf; -+ msg->dst.uv_addr = msg->dst.yrgb_addr + stride * dah; -+ msg->dst.v_addr = msg->dst.uv_addr + ((stride * dah) >> 1); -+ -+ msg->render_mode = pre_scaling_mode; -+ -+ msg1->src.yrgb_addr = msg->dst.yrgb_addr; -+ msg1->src.uv_addr = msg->dst.uv_addr; -+ msg1->src.v_addr = msg->dst.v_addr; -+ -+ msg1->src.act_w = msg->dst.act_w; -+ msg1->src.act_h = msg->dst.act_h; -+ msg1->src.vir_w = msg->dst.vir_w; -+ msg1->src.vir_h = msg->dst.vir_h; -+ -+ msg1->src.x_offset = 0; -+ msg1->src.y_offset = 0; -+ -+ return 0; -+} -+ -+ ++ ++#include ++#include "RGA_API.h" ++#include "rga.h" ++//#include "rga_angle.h" ++ ++#define IS_YUV_420(format) \ ++ ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \ ++ (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP)) ++ ++#define IS_YUV_422(format) \ ++ ((format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \ ++ (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP)) ++ ++#define IS_YUV(format) \ ++ ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \ ++ (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP) | \ ++ (format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \ ++ (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP)) ++ ++ ++extern rga_service_info rga_service; ++ ++ ++void ++matrix_cal(const struct rga_req *msg, TILE_INFO *tile) ++{ ++ uint64_t x_time, y_time; ++ uint64_t sina, cosa; ++ ++ int s_act_w, s_act_h, d_act_w, d_act_h; ++ ++ s_act_w = msg->src.act_w; ++ s_act_h = msg->src.act_h; ++ d_act_w = msg->dst.act_w; ++ d_act_h = msg->dst.act_h; ++ ++ if (s_act_w == 1) s_act_w += 1; ++ if (s_act_h == 1) s_act_h += 1; ++ if (d_act_h == 1) d_act_h += 1; ++ if (d_act_w == 1) d_act_w += 1; ++ ++ x_time = ((s_act_w - 1)<<16) / (d_act_w - 1); ++ y_time = ((s_act_h - 1)<<16) / (d_act_h - 1); ++ ++ sina = msg->sina; ++ cosa = msg->cosa; ++ ++ switch(msg->rotate_mode) ++ { ++ /* 16.16 x 16.16 */ ++ /* matrix[] is 64 bit wide */ ++ case 1 : ++ tile->matrix[0] = cosa*x_time; ++ tile->matrix[1] = -sina*y_time; ++ tile->matrix[2] = sina*x_time; ++ tile->matrix[3] = cosa*y_time; ++ break; ++ case 2 : ++ tile->matrix[0] = -(x_time<<16); ++ tile->matrix[1] = 0; ++ tile->matrix[2] = 0; ++ tile->matrix[3] = (y_time<<16); ++ break; ++ case 3 : ++ tile->matrix[0] = (x_time<<16); ++ tile->matrix[1] = 0; ++ tile->matrix[2] = 0; ++ tile->matrix[3] = -(y_time<<16); ++ break; ++ default : ++ tile->matrix[0] = (uint64_t)1<<32; ++ tile->matrix[1] = 0; ++ tile->matrix[2] = 0; ++ tile->matrix[3] = (uint64_t)1<<32; ++ break; ++ } ++} ++ ++ ++int32_t RGA_gen_two_pro(struct rga_req *msg, struct rga_req *msg1) ++{ ++ ++ struct rga_req *mp; ++ uint32_t w_ratio, h_ratio; ++ uint32_t stride; ++ ++ uint32_t daw, dah; ++ uint32_t pl; ++ ++ daw = dah = 0; ++ ++ mp = msg1; ++ ++ if(msg->dst.act_w == 0) ++ { ++ printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__); ++ return -EINVAL; ++ } ++ ++ if (msg->dst.act_h == 0) ++ { ++ printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__); ++ return -EINVAL; ++ } ++ w_ratio = (msg->src.act_w << 16) / msg->dst.act_w; ++ h_ratio = (msg->src.act_h << 16) / msg->dst.act_h; ++ ++ memcpy(msg1, msg, sizeof(struct rga_req)); ++ ++ msg->dst.format = msg->src.format; ++ ++ /*pre_scale_w cal*/ ++ if ((w_ratio >= (2<<16)) && (w_ratio < (4<<16))) { ++ daw = (msg->src.act_w + 1) >> 1; ++ if((IS_YUV_420(msg->dst.format)) && (daw & 1)) { ++ daw -= 1; ++ msg->src.act_w = daw << 1; ++ } ++ } ++ else if ((w_ratio >= (4<<16)) && (w_ratio < (8<<16))) { ++ daw = (msg->src.act_w + 3) >> 2; ++ if((IS_YUV_420(msg->dst.format)) && (daw & 1)) { ++ daw -= 1; ++ msg->src.act_w = daw << 2; ++ } ++ } ++ else if ((w_ratio >= (8<<16)) && (w_ratio < (16<<16))) { ++ daw = (msg->src.act_w + 7) >> 3; ++ if((IS_YUV_420(msg->dst.format)) && (daw & 1)) { ++ daw -= 1; ++ msg->src.act_w = daw << 3; ++ } ++ } ++ else ++ { ++ daw = msg->src.act_w; ++ } ++ ++ pl = (RGA_pixel_width_init(msg->src.format)); ++ stride = (pl * daw + 3) & (~3); ++ msg->dst.act_w = daw; ++ msg->dst.vir_w = stride / pl; ++ ++ /*pre_scale_h cal*/ ++ if ((h_ratio >= (2<<16)) && (h_ratio < (4<<16))) { ++ dah = (msg->src.act_h + 1) >> 1; ++ if((IS_YUV(msg->dst.format)) && (dah & 1)) { ++ dah -= 1; ++ msg->src.act_h = dah << 1; ++ } ++ } ++ else if ((h_ratio >= (4<<16)) && (h_ratio < (8<<16))) { ++ dah = (msg->src.act_h + 3) >> 2; ++ if((IS_YUV(msg->dst.format)) && (dah & 1)) { ++ dah -= 1; ++ msg->src.act_h = dah << 2; ++ ++ } ++ } ++ else if ((h_ratio >= (8<<16)) && (h_ratio < (16<<16))) { ++ dah = (msg->src.act_h + 7) >> 3; ++ if((IS_YUV(msg->dst.format)) && (dah & 1)) { ++ dah -= 1; ++ msg->src.act_h = dah << 3; ++ } ++ } ++ else ++ { ++ dah = msg->src.act_h; ++ } ++ ++ msg->dst.act_h = dah; ++ msg->dst.vir_h = dah; ++ ++ msg->dst.x_offset = 0; ++ msg->dst.y_offset = 0; ++ ++ msg->dst.yrgb_addr = (unsigned long)rga_service.pre_scale_buf; ++ msg->dst.uv_addr = msg->dst.yrgb_addr + stride * dah; ++ msg->dst.v_addr = msg->dst.uv_addr + ((stride * dah) >> 1); ++ ++ msg->render_mode = pre_scaling_mode; ++ ++ msg1->src.yrgb_addr = msg->dst.yrgb_addr; ++ msg1->src.uv_addr = msg->dst.uv_addr; ++ msg1->src.v_addr = msg->dst.v_addr; ++ ++ msg1->src.act_w = msg->dst.act_w; ++ msg1->src.act_h = msg->dst.act_h; ++ msg1->src.vir_w = msg->dst.vir_w; ++ msg1->src.vir_h = msg->dst.vir_h; ++ ++ msg1->src.x_offset = 0; ++ msg1->src.y_offset = 0; ++ ++ return 0; ++} ++ ++ diff --git a/drivers/video/rockchip/rga/RGA_API.h b/drivers/video/rockchip/rga/RGA_API.h new file mode 100755 -index 000000000000..ade17d03e85c +index 000000000..96ca5240a --- /dev/null +++ b/drivers/video/rockchip/rga/RGA_API.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef __RGA_API_H__ -+#define __RGA_API_H__ ++#ifndef __RGA_API_H__ ++#define __RGA_API_H__ + +#include +#include -+ -+#include "rga_reg_info.h" -+#include "rga.h" -+ -+#define ENABLE 1 ++ ++#include "rga_reg_info.h" ++#include "rga.h" ++ ++#define ENABLE 1 +#define DISABLE 0 + +struct rga_drvdata { @@ -1665444,577 +1665505,577 @@ index 000000000000..ade17d03e85c + char *version; +}; + -+int32_t RGA_gen_two_pro(struct rga_req *msg, struct rga_req *msg1); -+ -+ -+ -+ -+ -+#endif ++int32_t RGA_gen_two_pro(struct rga_req *msg, struct rga_req *msg1); ++ ++ ++ ++ ++ ++#endif diff --git a/drivers/video/rockchip/rga/rga.h b/drivers/video/rockchip/rga/rga.h new file mode 100755 -index 000000000000..e54a6efba39f +index 000000000..9e39dc2aa --- /dev/null +++ b/drivers/video/rockchip/rga/rga.h @@ -0,0 +1,508 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef _RGA_DRIVER_H_ -+#define _RGA_DRIVER_H_ -+ -+#include -+#include -+ -+ -+#define RGA_BLIT_SYNC 0x5017 -+#define RGA_BLIT_ASYNC 0x5018 -+#define RGA_FLUSH 0x5019 -+#define RGA_GET_RESULT 0x501a -+#define RGA_GET_VERSION 0x501b -+ -+ -+#define RGA_REG_CTRL_LEN 0x8 /* 8 */ -+#define RGA_REG_CMD_LEN 0x20 /* 32 */ -+#define RGA_CMD_BUF_SIZE 0x700 /* 16*28*4 */ -+ -+#define RGA_OUT_OF_RESOURCES -10 -+#define RGA_MALLOC_ERROR -11 -+ ++#ifndef _RGA_DRIVER_H_ ++#define _RGA_DRIVER_H_ ++ ++#include ++#include ++ ++ ++#define RGA_BLIT_SYNC 0x5017 ++#define RGA_BLIT_ASYNC 0x5018 ++#define RGA_FLUSH 0x5019 ++#define RGA_GET_RESULT 0x501a ++#define RGA_GET_VERSION 0x501b ++ ++ ++#define RGA_REG_CTRL_LEN 0x8 /* 8 */ ++#define RGA_REG_CMD_LEN 0x20 /* 32 */ ++#define RGA_CMD_BUF_SIZE 0x700 /* 16*28*4 */ ++ ++#define RGA_OUT_OF_RESOURCES -10 ++#define RGA_MALLOC_ERROR -11 ++ +#define RGA_BUF_GEM_TYPE_MASK 0xC0 -+ -+#define rgaIS_ERROR(status) (status < 0) -+#define rgaNO_ERROR(status) (status >= 0) -+#define rgaIS_SUCCESS(status) (status == 0) -+ ++ ++#define rgaIS_ERROR(status) (status < 0) ++#define rgaNO_ERROR(status) (status >= 0) ++#define rgaIS_SUCCESS(status) (status == 0) ++ +#define RGA_DEBUGFS 1 -+ -+/* RGA process mode enum */ -+enum -+{ -+ bitblt_mode = 0x0, -+ color_palette_mode = 0x1, -+ color_fill_mode = 0x2, -+ line_point_drawing_mode = 0x3, -+ blur_sharp_filter_mode = 0x4, -+ pre_scaling_mode = 0x5, -+ update_palette_table_mode = 0x6, -+ update_patten_buff_mode = 0x7, -+}; -+ -+ -+enum -+{ -+ rop_enable_mask = 0x2, -+ dither_enable_mask = 0x8, -+ fading_enable_mask = 0x10, -+ PD_enbale_mask = 0x20, -+}; -+ -+enum -+{ -+ yuv2rgb_mode0 = 0x0, /* BT.601 MPEG */ -+ yuv2rgb_mode1 = 0x1, /* BT.601 JPEG */ -+ yuv2rgb_mode2 = 0x2, /* BT.709 */ -+}; -+ -+ -+/* RGA rotate mode */ -+enum -+{ -+ rotate_mode0 = 0x0, /* no rotate */ -+ rotate_mode1 = 0x1, /* rotate */ -+ rotate_mode2 = 0x2, /* x_mirror */ -+ rotate_mode3 = 0x3, /* y_mirror */ -+}; -+ -+enum -+{ -+ color_palette_mode0 = 0x0, /* 1K */ -+ color_palette_mode1 = 0x1, /* 2K */ -+ color_palette_mode2 = 0x2, /* 4K */ -+ color_palette_mode3 = 0x3, /* 8K */ -+}; -+ -+ -+ -+/* -+// Alpha Red Green Blue -+{ 4, 32, {{32,24, 8, 0, 16, 8, 24,16 }}, GGL_RGBA }, // RK_FORMAT_RGBA_8888 -+{ 4, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGBX_8888 -+{ 3, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGB_888 -+{ 4, 32, {{32,24, 24,16, 16, 8, 8, 0 }}, GGL_BGRA }, // RK_FORMAT_BGRA_8888 -+{ 2, 16, {{ 0, 0, 16,11, 11, 5, 5, 0 }}, GGL_RGB }, // RK_FORMAT_RGB_565 -+{ 2, 16, {{ 1, 0, 16,11, 11, 6, 6, 1 }}, GGL_RGBA }, // RK_FORMAT_RGBA_5551 -+{ 2, 16, {{ 4, 0, 16,12, 12, 8, 8, 4 }}, GGL_RGBA }, // RK_FORMAT_RGBA_4444 -+{ 3, 24, {{ 0, 0, 24,16, 16, 8, 8, 0 }}, GGL_BGR }, // RK_FORMAT_BGB_888 -+ -+*/ -+enum -+{ -+ RK_FORMAT_RGBA_8888 = 0x0, -+ RK_FORMAT_RGBX_8888 = 0x1, -+ RK_FORMAT_RGB_888 = 0x2, -+ RK_FORMAT_BGRA_8888 = 0x3, -+ RK_FORMAT_RGB_565 = 0x4, -+ RK_FORMAT_RGBA_5551 = 0x5, -+ RK_FORMAT_RGBA_4444 = 0x6, -+ RK_FORMAT_BGR_888 = 0x7, -+ -+ RK_FORMAT_YCbCr_422_SP = 0x8, -+ RK_FORMAT_YCbCr_422_P = 0x9, -+ RK_FORMAT_YCbCr_420_SP = 0xa, -+ RK_FORMAT_YCbCr_420_P = 0xb, -+ -+ RK_FORMAT_YCrCb_422_SP = 0xc, -+ RK_FORMAT_YCrCb_422_P = 0xd, -+ RK_FORMAT_YCrCb_420_SP = 0xe, -+ RK_FORMAT_YCrCb_420_P = 0xf, -+ -+ RK_FORMAT_BPP1 = 0x10, -+ RK_FORMAT_BPP2 = 0x11, -+ RK_FORMAT_BPP4 = 0x12, -+ RK_FORMAT_BPP8 = 0x13, -+ RK_FORMAT_YCbCr_420_SP_10B = 0x20, -+ RK_FORMAT_YCrCb_420_SP_10B = 0x21, -+}; -+ -+ -+typedef struct rga_img_info_t -+{ -+ unsigned long yrgb_addr; /* yrgb mem addr */ -+ unsigned long uv_addr; /* cb/cr mem addr */ -+ unsigned long v_addr; /* cr mem addr */ -+ unsigned int format; //definition by RK_FORMAT -+ -+ unsigned short act_w; -+ unsigned short act_h; -+ unsigned short x_offset; -+ unsigned short y_offset; -+ -+ unsigned short vir_w; -+ unsigned short vir_h; -+ -+ unsigned short endian_mode; //for BPP -+ unsigned short alpha_swap; -+} -+rga_img_info_t; -+ -+ -+typedef struct mdp_img_act -+{ -+ unsigned short w; // width -+ unsigned short h; // height -+ short x_off; // x offset for the vir -+ short y_off; // y offset for the vir -+} -+mdp_img_act; -+ -+ -+ -+typedef struct RANGE -+{ -+ unsigned short min; -+ unsigned short max; -+} -+RANGE; -+ -+typedef struct POINT -+{ -+ unsigned short x; -+ unsigned short y; -+} -+POINT; -+ -+typedef struct RECT -+{ -+ unsigned short xmin; -+ unsigned short xmax; // width - 1 -+ unsigned short ymin; -+ unsigned short ymax; // height - 1 -+} RECT; -+ -+typedef struct RGB -+{ -+ unsigned char r; -+ unsigned char g; -+ unsigned char b; -+ unsigned char res; -+}RGB; -+ -+ -+typedef struct MMU -+{ -+ unsigned char mmu_en; -+ unsigned long base_addr; ++ ++/* RGA process mode enum */ ++enum ++{ ++ bitblt_mode = 0x0, ++ color_palette_mode = 0x1, ++ color_fill_mode = 0x2, ++ line_point_drawing_mode = 0x3, ++ blur_sharp_filter_mode = 0x4, ++ pre_scaling_mode = 0x5, ++ update_palette_table_mode = 0x6, ++ update_patten_buff_mode = 0x7, ++}; ++ ++ ++enum ++{ ++ rop_enable_mask = 0x2, ++ dither_enable_mask = 0x8, ++ fading_enable_mask = 0x10, ++ PD_enbale_mask = 0x20, ++}; ++ ++enum ++{ ++ yuv2rgb_mode0 = 0x0, /* BT.601 MPEG */ ++ yuv2rgb_mode1 = 0x1, /* BT.601 JPEG */ ++ yuv2rgb_mode2 = 0x2, /* BT.709 */ ++}; ++ ++ ++/* RGA rotate mode */ ++enum ++{ ++ rotate_mode0 = 0x0, /* no rotate */ ++ rotate_mode1 = 0x1, /* rotate */ ++ rotate_mode2 = 0x2, /* x_mirror */ ++ rotate_mode3 = 0x3, /* y_mirror */ ++}; ++ ++enum ++{ ++ color_palette_mode0 = 0x0, /* 1K */ ++ color_palette_mode1 = 0x1, /* 2K */ ++ color_palette_mode2 = 0x2, /* 4K */ ++ color_palette_mode3 = 0x3, /* 8K */ ++}; ++ ++ ++ ++/* ++// Alpha Red Green Blue ++{ 4, 32, {{32,24, 8, 0, 16, 8, 24,16 }}, GGL_RGBA }, // RK_FORMAT_RGBA_8888 ++{ 4, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGBX_8888 ++{ 3, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGB_888 ++{ 4, 32, {{32,24, 24,16, 16, 8, 8, 0 }}, GGL_BGRA }, // RK_FORMAT_BGRA_8888 ++{ 2, 16, {{ 0, 0, 16,11, 11, 5, 5, 0 }}, GGL_RGB }, // RK_FORMAT_RGB_565 ++{ 2, 16, {{ 1, 0, 16,11, 11, 6, 6, 1 }}, GGL_RGBA }, // RK_FORMAT_RGBA_5551 ++{ 2, 16, {{ 4, 0, 16,12, 12, 8, 8, 4 }}, GGL_RGBA }, // RK_FORMAT_RGBA_4444 ++{ 3, 24, {{ 0, 0, 24,16, 16, 8, 8, 0 }}, GGL_BGR }, // RK_FORMAT_BGB_888 ++ ++*/ ++enum ++{ ++ RK_FORMAT_RGBA_8888 = 0x0, ++ RK_FORMAT_RGBX_8888 = 0x1, ++ RK_FORMAT_RGB_888 = 0x2, ++ RK_FORMAT_BGRA_8888 = 0x3, ++ RK_FORMAT_RGB_565 = 0x4, ++ RK_FORMAT_RGBA_5551 = 0x5, ++ RK_FORMAT_RGBA_4444 = 0x6, ++ RK_FORMAT_BGR_888 = 0x7, ++ ++ RK_FORMAT_YCbCr_422_SP = 0x8, ++ RK_FORMAT_YCbCr_422_P = 0x9, ++ RK_FORMAT_YCbCr_420_SP = 0xa, ++ RK_FORMAT_YCbCr_420_P = 0xb, ++ ++ RK_FORMAT_YCrCb_422_SP = 0xc, ++ RK_FORMAT_YCrCb_422_P = 0xd, ++ RK_FORMAT_YCrCb_420_SP = 0xe, ++ RK_FORMAT_YCrCb_420_P = 0xf, ++ ++ RK_FORMAT_BPP1 = 0x10, ++ RK_FORMAT_BPP2 = 0x11, ++ RK_FORMAT_BPP4 = 0x12, ++ RK_FORMAT_BPP8 = 0x13, ++ RK_FORMAT_YCbCr_420_SP_10B = 0x20, ++ RK_FORMAT_YCrCb_420_SP_10B = 0x21, ++}; ++ ++ ++typedef struct rga_img_info_t ++{ ++ unsigned long yrgb_addr; /* yrgb mem addr */ ++ unsigned long uv_addr; /* cb/cr mem addr */ ++ unsigned long v_addr; /* cr mem addr */ ++ unsigned int format; //definition by RK_FORMAT ++ ++ unsigned short act_w; ++ unsigned short act_h; ++ unsigned short x_offset; ++ unsigned short y_offset; ++ ++ unsigned short vir_w; ++ unsigned short vir_h; ++ ++ unsigned short endian_mode; //for BPP ++ unsigned short alpha_swap; ++} ++rga_img_info_t; ++ ++ ++typedef struct mdp_img_act ++{ ++ unsigned short w; // width ++ unsigned short h; // height ++ short x_off; // x offset for the vir ++ short y_off; // y offset for the vir ++} ++mdp_img_act; ++ ++ ++ ++typedef struct RANGE ++{ ++ unsigned short min; ++ unsigned short max; ++} ++RANGE; ++ ++typedef struct POINT ++{ ++ unsigned short x; ++ unsigned short y; ++} ++POINT; ++ ++typedef struct RECT ++{ ++ unsigned short xmin; ++ unsigned short xmax; // width - 1 ++ unsigned short ymin; ++ unsigned short ymax; // height - 1 ++} RECT; ++ ++typedef struct RGB ++{ ++ unsigned char r; ++ unsigned char g; ++ unsigned char b; ++ unsigned char res; ++}RGB; ++ ++ ++typedef struct MMU ++{ ++ unsigned char mmu_en; ++ unsigned long base_addr; + uint32_t mmu_flag; -+} MMU; -+ -+ -+ -+ -+typedef struct COLOR_FILL -+{ -+ short gr_x_a; -+ short gr_y_a; -+ short gr_x_b; -+ short gr_y_b; -+ short gr_x_g; -+ short gr_y_g; -+ short gr_x_r; -+ short gr_y_r; -+ -+ //u8 cp_gr_saturation; -+} -+COLOR_FILL; -+ -+typedef struct FADING -+{ -+ uint8_t b; -+ uint8_t g; -+ uint8_t r; -+ uint8_t res; -+} -+FADING; -+ -+ -+typedef struct line_draw_t -+{ -+ POINT start_point; /* LineDraw_start_point */ -+ POINT end_point; /* LineDraw_end_point */ -+ uint32_t color; /* LineDraw_color */ -+ uint32_t flag; /* (enum) LineDrawing mode sel */ -+ uint32_t line_width; /* range 1~16 */ -+} -+line_draw_t; -+ -+ -+ -+struct rga_req { -+ uint8_t render_mode; /* (enum) process mode sel */ -+ -+ rga_img_info_t src; /* src image info */ -+ rga_img_info_t dst; /* dst image info */ -+ rga_img_info_t pat; /* patten image info */ -+ -+ unsigned long rop_mask_addr; /* rop4 mask addr */ -+ unsigned long LUT_addr; /* LUT addr */ -+ -+ RECT clip; /* dst clip window default value is dst_vir */ -+ /* value from [0, w-1] / [0, h-1]*/ -+ -+ int32_t sina; /* dst angle default value 0 16.16 scan from table */ -+ int32_t cosa; /* dst angle default value 0 16.16 scan from table */ -+ -+ uint16_t alpha_rop_flag; /* alpha rop process flag */ -+ /* ([0] = 1 alpha_rop_enable) */ -+ /* ([1] = 1 rop enable) */ -+ /* ([2] = 1 fading_enable) */ -+ /* ([3] = 1 PD_enable) */ -+ /* ([4] = 1 alpha cal_mode_sel) */ -+ /* ([5] = 1 dither_enable) */ -+ /* ([6] = 1 gradient fill mode sel) */ -+ /* ([7] = 1 AA_enable) */ -+ -+ uint8_t scale_mode; /* 0 nearst / 1 bilnear / 2 bicubic */ -+ -+ uint32_t color_key_max; /* color key max */ -+ uint32_t color_key_min; /* color key min */ -+ -+ uint32_t fg_color; /* foreground color */ -+ uint32_t bg_color; /* background color */ -+ -+ COLOR_FILL gr_color; /* color fill use gradient */ -+ -+ line_draw_t line_draw_info; -+ -+ FADING fading; -+ -+ uint8_t PD_mode; /* porter duff alpha mode sel */ -+ -+ uint8_t alpha_global_value; /* global alpha value */ -+ -+ uint16_t rop_code; /* rop2/3/4 code scan from rop code table*/ -+ -+ uint8_t bsfilter_flag; /* [2] 0 blur 1 sharp / [1:0] filter_type*/ -+ -+ uint8_t palette_mode; /* (enum) color palatte 0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/ -+ -+ uint8_t yuv2rgb_mode; /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709 */ -+ -+ uint8_t endian_mode; /* 0/big endian 1/little endian*/ -+ -+ uint8_t rotate_mode; /* (enum) rotate mode */ -+ /* 0x0, no rotate */ -+ /* 0x1, rotate */ -+ /* 0x2, x_mirror */ -+ /* 0x3, y_mirror */ -+ -+ uint8_t color_fill_mode; /* 0 solid color / 1 patten color */ -+ -+ MMU mmu_info; /* mmu information */ -+ -+ uint8_t alpha_rop_mode; /* ([0~1] alpha mode) */ -+ /* ([2~3] rop mode) */ -+ /* ([4] zero mode en) */ -+ /* ([5] dst alpha mode) */ -+ -+ uint8_t src_trans_mode; -+ -+ struct sg_table *sg_src; ++} MMU; ++ ++ ++ ++ ++typedef struct COLOR_FILL ++{ ++ short gr_x_a; ++ short gr_y_a; ++ short gr_x_b; ++ short gr_y_b; ++ short gr_x_g; ++ short gr_y_g; ++ short gr_x_r; ++ short gr_y_r; ++ ++ //u8 cp_gr_saturation; ++} ++COLOR_FILL; ++ ++typedef struct FADING ++{ ++ uint8_t b; ++ uint8_t g; ++ uint8_t r; ++ uint8_t res; ++} ++FADING; ++ ++ ++typedef struct line_draw_t ++{ ++ POINT start_point; /* LineDraw_start_point */ ++ POINT end_point; /* LineDraw_end_point */ ++ uint32_t color; /* LineDraw_color */ ++ uint32_t flag; /* (enum) LineDrawing mode sel */ ++ uint32_t line_width; /* range 1~16 */ ++} ++line_draw_t; ++ ++ ++ ++struct rga_req { ++ uint8_t render_mode; /* (enum) process mode sel */ ++ ++ rga_img_info_t src; /* src image info */ ++ rga_img_info_t dst; /* dst image info */ ++ rga_img_info_t pat; /* patten image info */ ++ ++ unsigned long rop_mask_addr; /* rop4 mask addr */ ++ unsigned long LUT_addr; /* LUT addr */ ++ ++ RECT clip; /* dst clip window default value is dst_vir */ ++ /* value from [0, w-1] / [0, h-1]*/ ++ ++ int32_t sina; /* dst angle default value 0 16.16 scan from table */ ++ int32_t cosa; /* dst angle default value 0 16.16 scan from table */ ++ ++ uint16_t alpha_rop_flag; /* alpha rop process flag */ ++ /* ([0] = 1 alpha_rop_enable) */ ++ /* ([1] = 1 rop enable) */ ++ /* ([2] = 1 fading_enable) */ ++ /* ([3] = 1 PD_enable) */ ++ /* ([4] = 1 alpha cal_mode_sel) */ ++ /* ([5] = 1 dither_enable) */ ++ /* ([6] = 1 gradient fill mode sel) */ ++ /* ([7] = 1 AA_enable) */ ++ ++ uint8_t scale_mode; /* 0 nearst / 1 bilnear / 2 bicubic */ ++ ++ uint32_t color_key_max; /* color key max */ ++ uint32_t color_key_min; /* color key min */ ++ ++ uint32_t fg_color; /* foreground color */ ++ uint32_t bg_color; /* background color */ ++ ++ COLOR_FILL gr_color; /* color fill use gradient */ ++ ++ line_draw_t line_draw_info; ++ ++ FADING fading; ++ ++ uint8_t PD_mode; /* porter duff alpha mode sel */ ++ ++ uint8_t alpha_global_value; /* global alpha value */ ++ ++ uint16_t rop_code; /* rop2/3/4 code scan from rop code table*/ ++ ++ uint8_t bsfilter_flag; /* [2] 0 blur 1 sharp / [1:0] filter_type*/ ++ ++ uint8_t palette_mode; /* (enum) color palatte 0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/ ++ ++ uint8_t yuv2rgb_mode; /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709 */ ++ ++ uint8_t endian_mode; /* 0/big endian 1/little endian*/ ++ ++ uint8_t rotate_mode; /* (enum) rotate mode */ ++ /* 0x0, no rotate */ ++ /* 0x1, rotate */ ++ /* 0x2, x_mirror */ ++ /* 0x3, y_mirror */ ++ ++ uint8_t color_fill_mode; /* 0 solid color / 1 patten color */ ++ ++ MMU mmu_info; /* mmu information */ ++ ++ uint8_t alpha_rop_mode; /* ([0~1] alpha mode) */ ++ /* ([2~3] rop mode) */ ++ /* ([4] zero mode en) */ ++ /* ([5] dst alpha mode) */ ++ ++ uint8_t src_trans_mode; ++ ++ struct sg_table *sg_src; + struct sg_table *sg_dst; + struct dma_buf_attachment *attach_src; + struct dma_buf_attachment *attach_dst; -+}; -+ -+ -+typedef struct TILE_INFO -+{ -+ int64_t matrix[4]; -+ -+ uint16_t tile_x_num; /* x axis tile num / tile size is 8x8 pixel */ -+ uint16_t tile_y_num; /* y axis tile num */ -+ -+ int16_t dst_x_tmp; /* dst pos x = (xstart - xoff) default value 0 */ -+ int16_t dst_y_tmp; /* dst pos y = (ystart - yoff) default value 0 */ -+ -+ uint16_t tile_w; -+ uint16_t tile_h; -+ int16_t tile_start_x_coor; -+ int16_t tile_start_y_coor; -+ int32_t tile_xoff; -+ int32_t tile_yoff; -+ -+ int32_t tile_temp_xstart; -+ int32_t tile_temp_ystart; -+ -+ /* src tile incr */ -+ int32_t x_dx; -+ int32_t x_dy; -+ int32_t y_dx; -+ int32_t y_dy; -+ -+ mdp_img_act dst_ctrl; -+ -+} -+TILE_INFO; -+ -+struct rga_mmu_buf_t { -+ int32_t front; -+ int32_t back; -+ int32_t size; -+ int32_t curr; -+ unsigned int *buf; -+ unsigned int *buf_virtual; -+ -+ struct page **pages; -+}; -+ -+/** -+ * struct for process session which connect to rga -+ * -+ * @author ZhangShengqin (2012-2-15) -+ */ -+typedef struct rga_session { -+ /* a linked list of data so we can access them for debugging */ -+ struct list_head list_session; -+ /* a linked list of register data waiting for process */ -+ struct list_head waiting; -+ /* a linked list of register data in processing */ -+ struct list_head running; -+ /* all coommand this thread done */ -+ atomic_t done; -+ wait_queue_head_t wait; -+ pid_t pid; -+ atomic_t task_running; -+ atomic_t num_done; -+} rga_session; -+ -+struct rga_reg { -+ rga_session *session; -+ struct list_head session_link; /* link to rga service session */ -+ struct list_head status_link; /* link to register set list */ -+ uint32_t sys_reg[RGA_REG_CTRL_LEN]; -+ uint32_t cmd_reg[RGA_REG_CMD_LEN]; -+ -+ uint32_t *MMU_base; -+ uint32_t MMU_len; -+ //atomic_t int_enable; -+ -+ //struct rga_req req; ++}; ++ ++ ++typedef struct TILE_INFO ++{ ++ int64_t matrix[4]; ++ ++ uint16_t tile_x_num; /* x axis tile num / tile size is 8x8 pixel */ ++ uint16_t tile_y_num; /* y axis tile num */ ++ ++ int16_t dst_x_tmp; /* dst pos x = (xstart - xoff) default value 0 */ ++ int16_t dst_y_tmp; /* dst pos y = (ystart - yoff) default value 0 */ ++ ++ uint16_t tile_w; ++ uint16_t tile_h; ++ int16_t tile_start_x_coor; ++ int16_t tile_start_y_coor; ++ int32_t tile_xoff; ++ int32_t tile_yoff; ++ ++ int32_t tile_temp_xstart; ++ int32_t tile_temp_ystart; ++ ++ /* src tile incr */ ++ int32_t x_dx; ++ int32_t x_dy; ++ int32_t y_dx; ++ int32_t y_dy; ++ ++ mdp_img_act dst_ctrl; ++ ++} ++TILE_INFO; ++ ++struct rga_mmu_buf_t { ++ int32_t front; ++ int32_t back; ++ int32_t size; ++ int32_t curr; ++ unsigned int *buf; ++ unsigned int *buf_virtual; ++ ++ struct page **pages; ++}; ++ ++/** ++ * struct for process session which connect to rga ++ * ++ * @author ZhangShengqin (2012-2-15) ++ */ ++typedef struct rga_session { ++ /* a linked list of data so we can access them for debugging */ ++ struct list_head list_session; ++ /* a linked list of register data waiting for process */ ++ struct list_head waiting; ++ /* a linked list of register data in processing */ ++ struct list_head running; ++ /* all coommand this thread done */ ++ atomic_t done; ++ wait_queue_head_t wait; ++ pid_t pid; ++ atomic_t task_running; ++ atomic_t num_done; ++} rga_session; ++ ++struct rga_reg { ++ rga_session *session; ++ struct list_head session_link; /* link to rga service session */ ++ struct list_head status_link; /* link to register set list */ ++ uint32_t sys_reg[RGA_REG_CTRL_LEN]; ++ uint32_t cmd_reg[RGA_REG_CMD_LEN]; ++ ++ uint32_t *MMU_base; ++ uint32_t MMU_len; ++ //atomic_t int_enable; ++ ++ //struct rga_req req; + + struct sg_table *sg_src; + struct sg_table *sg_dst; + + struct dma_buf_attachment *attach_src; + struct dma_buf_attachment *attach_dst; -+}; -+ -+ -+ -+typedef struct rga_service_info { -+ struct mutex lock; -+ struct timer_list timer; /* timer for power off */ -+ struct list_head waiting; /* link to link_reg in struct vpu_reg */ -+ struct list_head running; /* link to link_reg in struct vpu_reg */ -+ struct list_head done; /* link to link_reg in struct vpu_reg */ -+ struct list_head session; /* link to list_session in struct vpu_session */ -+ atomic_t total_running; -+ -+ struct rga_reg *reg; -+ -+ uint32_t cmd_buff[28*8];/* cmd_buff for rga */ -+ uint32_t *pre_scale_buf; -+ unsigned long *pre_scale_buf_virtual; ++}; ++ ++ ++ ++typedef struct rga_service_info { ++ struct mutex lock; ++ struct timer_list timer; /* timer for power off */ ++ struct list_head waiting; /* link to link_reg in struct vpu_reg */ ++ struct list_head running; /* link to link_reg in struct vpu_reg */ ++ struct list_head done; /* link to link_reg in struct vpu_reg */ ++ struct list_head session; /* link to list_session in struct vpu_session */ ++ atomic_t total_running; ++ ++ struct rga_reg *reg; ++ ++ uint32_t cmd_buff[28*8];/* cmd_buff for rga */ ++ uint32_t *pre_scale_buf; ++ unsigned long *pre_scale_buf_virtual; + atomic_t int_disable; /* 0 int enable 1 int disable */ -+ atomic_t cmd_num; ++ atomic_t cmd_num; + atomic_t src_format_swt; + int last_prc_src_format; + atomic_t rga_working; -+ bool enable; ++ bool enable; + u32 dev_mode; -+ -+ //struct rga_req req[10]; -+ -+ struct mutex mutex; // mutex -+} rga_service_info; -+ -+ -+ -+#if defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3026) || defined(CONFIG_ARCH_RK312x) -+#define RGA_BASE 0x1010c000 -+#elif defined(CONFIG_ARCH_RK30) -+#define RGA_BASE 0x10114000 -+#endif -+ -+//General Registers -+#define RGA_SYS_CTRL 0x000 -+#define RGA_CMD_CTRL 0x004 -+#define RGA_CMD_ADDR 0x008 -+#define RGA_STATUS 0x00c -+#define RGA_INT 0x010 -+#define RGA_AXI_ID 0x014 -+#define RGA_MMU_STA_CTRL 0x018 -+#define RGA_MMU_STA 0x01c ++ ++ //struct rga_req req[10]; ++ ++ struct mutex mutex; // mutex ++} rga_service_info; ++ ++ ++ ++#if defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3026) || defined(CONFIG_ARCH_RK312x) ++#define RGA_BASE 0x1010c000 ++#elif defined(CONFIG_ARCH_RK30) ++#define RGA_BASE 0x10114000 ++#endif ++ ++//General Registers ++#define RGA_SYS_CTRL 0x000 ++#define RGA_CMD_CTRL 0x004 ++#define RGA_CMD_ADDR 0x008 ++#define RGA_STATUS 0x00c ++#define RGA_INT 0x010 ++#define RGA_AXI_ID 0x014 ++#define RGA_MMU_STA_CTRL 0x018 ++#define RGA_MMU_STA 0x01c +#define RGA_VERSION 0x028 -+ -+//Command code start -+#define RGA_MODE_CTRL 0x100 -+ -+//Source Image Registers -+#define RGA_SRC_Y_MST 0x104 -+#define RGA_SRC_CB_MST 0x108 -+#define RGA_MASK_READ_MST 0x108 //repeat -+#define RGA_SRC_CR_MST 0x10c -+#define RGA_SRC_VIR_INFO 0x110 -+#define RGA_SRC_ACT_INFO 0x114 -+#define RGA_SRC_X_PARA 0x118 -+#define RGA_SRC_Y_PARA 0x11c -+#define RGA_SRC_TILE_XINFO 0x120 -+#define RGA_SRC_TILE_YINFO 0x124 -+#define RGA_SRC_TILE_H_INCR 0x128 -+#define RGA_SRC_TILE_V_INCR 0x12c -+#define RGA_SRC_TILE_OFFSETX 0x130 -+#define RGA_SRC_TILE_OFFSETY 0x134 -+#define RGA_SRC_BG_COLOR 0x138 -+#define RGA_SRC_FG_COLOR 0x13c -+#define RGA_LINE_DRAWING_COLOR 0x13c //repeat -+#define RGA_SRC_TR_COLOR0 0x140 -+#define RGA_CP_GR_A 0x140 //repeat -+#define RGA_SRC_TR_COLOR1 0x144 -+#define RGA_CP_GR_B 0x144 //repeat -+ -+#define RGA_LINE_DRAW 0x148 -+#define RGA_PAT_START_POINT 0x148 //repeat -+ -+//Destination Image Registers -+#define RGA_DST_MST 0x14c -+#define RGA_LUT_MST 0x14c //repeat -+#define RGA_PAT_MST 0x14c //repeat -+#define RGA_LINE_DRAWING_MST 0x14c //repeat -+ -+#define RGA_DST_VIR_INFO 0x150 -+ -+#define RGA_DST_CTR_INFO 0x154 -+#define RGA_LINE_DRAW_XY_INFO 0x154 //repeat -+ -+//Alpha/ROP Registers -+#define RGA_ALPHA_CON 0x158 -+ -+#define RGA_PAT_CON 0x15c -+#define RGA_DST_VIR_WIDTH_PIX 0x15c //repeat -+ -+#define RGA_ROP_CON0 0x160 -+#define RGA_CP_GR_G 0x160 //repeat -+#define RGA_PRESCL_CB_MST 0x160 //repeat -+ -+#define RGA_ROP_CON1 0x164 -+#define RGA_CP_GR_R 0x164 //repeat -+#define RGA_PRESCL_CR_MST 0x164 //repeat -+ -+//MMU Register -+#define RGA_FADING_CON 0x168 -+#define RGA_MMU_CTRL 0x168 //repeat -+ -+#define RGA_MMU_TBL 0x16c //repeat -+ -+#define RGA_YUV_OUT_CFG 0x170 -+#define RGA_DST_UV_MST 0x174 -+ -+ -+#define RGA_BLIT_COMPLETE_EVENT 1 -+ -+long rga_ioctl_kernel(struct rga_req *req); -+ -+#endif /*_RK29_IPP_DRIVER_H_*/ ++ ++//Command code start ++#define RGA_MODE_CTRL 0x100 ++ ++//Source Image Registers ++#define RGA_SRC_Y_MST 0x104 ++#define RGA_SRC_CB_MST 0x108 ++#define RGA_MASK_READ_MST 0x108 //repeat ++#define RGA_SRC_CR_MST 0x10c ++#define RGA_SRC_VIR_INFO 0x110 ++#define RGA_SRC_ACT_INFO 0x114 ++#define RGA_SRC_X_PARA 0x118 ++#define RGA_SRC_Y_PARA 0x11c ++#define RGA_SRC_TILE_XINFO 0x120 ++#define RGA_SRC_TILE_YINFO 0x124 ++#define RGA_SRC_TILE_H_INCR 0x128 ++#define RGA_SRC_TILE_V_INCR 0x12c ++#define RGA_SRC_TILE_OFFSETX 0x130 ++#define RGA_SRC_TILE_OFFSETY 0x134 ++#define RGA_SRC_BG_COLOR 0x138 ++#define RGA_SRC_FG_COLOR 0x13c ++#define RGA_LINE_DRAWING_COLOR 0x13c //repeat ++#define RGA_SRC_TR_COLOR0 0x140 ++#define RGA_CP_GR_A 0x140 //repeat ++#define RGA_SRC_TR_COLOR1 0x144 ++#define RGA_CP_GR_B 0x144 //repeat ++ ++#define RGA_LINE_DRAW 0x148 ++#define RGA_PAT_START_POINT 0x148 //repeat ++ ++//Destination Image Registers ++#define RGA_DST_MST 0x14c ++#define RGA_LUT_MST 0x14c //repeat ++#define RGA_PAT_MST 0x14c //repeat ++#define RGA_LINE_DRAWING_MST 0x14c //repeat ++ ++#define RGA_DST_VIR_INFO 0x150 ++ ++#define RGA_DST_CTR_INFO 0x154 ++#define RGA_LINE_DRAW_XY_INFO 0x154 //repeat ++ ++//Alpha/ROP Registers ++#define RGA_ALPHA_CON 0x158 ++ ++#define RGA_PAT_CON 0x15c ++#define RGA_DST_VIR_WIDTH_PIX 0x15c //repeat ++ ++#define RGA_ROP_CON0 0x160 ++#define RGA_CP_GR_G 0x160 //repeat ++#define RGA_PRESCL_CB_MST 0x160 //repeat ++ ++#define RGA_ROP_CON1 0x164 ++#define RGA_CP_GR_R 0x164 //repeat ++#define RGA_PRESCL_CR_MST 0x164 //repeat ++ ++//MMU Register ++#define RGA_FADING_CON 0x168 ++#define RGA_MMU_CTRL 0x168 //repeat ++ ++#define RGA_MMU_TBL 0x16c //repeat ++ ++#define RGA_YUV_OUT_CFG 0x170 ++#define RGA_DST_UV_MST 0x174 ++ ++ ++#define RGA_BLIT_COMPLETE_EVENT 1 ++ ++long rga_ioctl_kernel(struct rga_req *req); ++ ++#endif /*_RK29_IPP_DRIVER_H_*/ diff --git a/drivers/video/rockchip/rga/rga_drv.c b/drivers/video/rockchip/rga/rga_drv.c new file mode 100755 -index 000000000000..2498023d4a4a +index 000000000..2b995f3ff --- /dev/null +++ b/drivers/video/rockchip/rga/rga_drv.c @@ -0,0 +1,2549 @@ -+/* -+ * Copyright (C) 2012 ROCKCHIP, Inc. -+ * -+ * This software is licensed under the terms of the GNU General Public -+ * License version 2, as published by the Free Software Foundation, and -+ * may be copied, distributed, and modified under those terms. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+ -+#define pr_fmt(fmt) "rga: " fmt -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+//#include -+//#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include ++/* ++ * Copyright (C) 2012 ROCKCHIP, Inc. ++ * ++ * This software is licensed under the terms of the GNU General Public ++ * License version 2, as published by the Free Software Foundation, and ++ * may be copied, distributed, and modified under those terms. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ */ ++ ++#define pr_fmt(fmt) "rga: " fmt ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++//#include ++//#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include +#include +#include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) @@ -1666026,41 +1666087,41 @@ index 000000000000..2498023d4a4a +#include +#endif + -+#include "rga.h" -+#include "rga_reg_info.h" -+#include "rga_mmu_info.h" -+#include "RGA_API.h" -+ -+#define RGA_TEST_CASE 0 -+ -+#define RGA_TEST_FLUSH_TIME 0 -+#define RGA_INFO_BUS_ERROR 1 -+ -+#define PRE_SCALE_BUF_SIZE 2048*1024*4 -+ -+#define RGA_POWER_OFF_DELAY 4*HZ /* 4s */ -+#define RGA_TIMEOUT_DELAY 2*HZ /* 2s */ -+ -+#define RGA_MAJOR 255 -+ -+#if defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3026) -+#define RK30_RGA_PHYS RK2928_RGA_PHYS -+#define RK30_RGA_SIZE RK2928_RGA_SIZE -+#endif -+#define RGA_RESET_TIMEOUT 1000 -+ -+/* Driver information */ -+#define DRIVER_DESC "RGA Device Driver" -+#define DRIVER_NAME "rga" -+ -+ -+ktime_t rga_start; -+ktime_t rga_end; -+ -+rga_session rga_session_global; -+ -+long (*rga_ioctl_kernel_p)(struct rga_req *); -+ ++#include "rga.h" ++#include "rga_reg_info.h" ++#include "rga_mmu_info.h" ++#include "RGA_API.h" ++ ++#define RGA_TEST_CASE 0 ++ ++#define RGA_TEST_FLUSH_TIME 0 ++#define RGA_INFO_BUS_ERROR 1 ++ ++#define PRE_SCALE_BUF_SIZE 2048*1024*4 ++ ++#define RGA_POWER_OFF_DELAY 4*HZ /* 4s */ ++#define RGA_TIMEOUT_DELAY 2*HZ /* 2s */ ++ ++#define RGA_MAJOR 255 ++ ++#if defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3026) ++#define RK30_RGA_PHYS RK2928_RGA_PHYS ++#define RK30_RGA_SIZE RK2928_RGA_SIZE ++#endif ++#define RGA_RESET_TIMEOUT 1000 ++ ++/* Driver information */ ++#define DRIVER_DESC "RGA Device Driver" ++#define DRIVER_NAME "rga" ++ ++ ++ktime_t rga_start; ++ktime_t rga_end; ++ ++rga_session rga_session_global; ++ ++long (*rga_ioctl_kernel_p)(struct rga_req *); ++ +#if RGA_DEBUGFS +unsigned char RGA_TEST_REG; +unsigned char RGA_TEST_MSG; @@ -1666069,36 +1666130,36 @@ index 000000000000..2498023d4a4a +unsigned char RGA_NONUSE; +unsigned char RGA_INT_FLAG; +#endif -+ ++ +struct rga_drvdata *drvdata; -+rga_service_info rga_service; -+struct rga_mmu_buf_t rga_mmu_buf; -+ -+ -+#if defined(CONFIG_ION_ROCKCHIP) -+extern struct ion_client *rockchip_ion_client_create(const char * name); -+#endif -+ -+static int rga_blit_async(rga_session *session, struct rga_req *req); -+static void rga_del_running_list(void); -+static void rga_del_running_list_timeout(void); -+static void rga_try_set_reg(void); -+ -+ -+/* Logging */ -+#define RGA_DEBUG 1 -+#if RGA_DEBUG -+#define DBG(format, args...) printk(KERN_DEBUG "%s: " format, DRIVER_NAME, ## args) -+#define ERR(format, args...) printk(KERN_ERR "%s: " format, DRIVER_NAME, ## args) -+#define WARNING(format, args...) printk(KERN_WARN "%s: " format, DRIVER_NAME, ## args) -+#define INFO(format, args...) printk(KERN_INFO "%s: " format, DRIVER_NAME, ## args) -+#else -+#define DBG(format, args...) -+#define ERR(format, args...) -+#define WARNING(format, args...) -+#define INFO(format, args...) -+#endif -+ ++rga_service_info rga_service; ++struct rga_mmu_buf_t rga_mmu_buf; ++ ++ ++#if defined(CONFIG_ION_ROCKCHIP) ++extern struct ion_client *rockchip_ion_client_create(const char * name); ++#endif ++ ++static int rga_blit_async(rga_session *session, struct rga_req *req); ++static void rga_del_running_list(void); ++static void rga_del_running_list_timeout(void); ++static void rga_try_set_reg(void); ++ ++ ++/* Logging */ ++#define RGA_DEBUG 1 ++#if RGA_DEBUG ++#define DBG(format, args...) printk(KERN_DEBUG "%s: " format, DRIVER_NAME, ## args) ++#define ERR(format, args...) printk(KERN_ERR "%s: " format, DRIVER_NAME, ## args) ++#define WARNING(format, args...) printk(KERN_WARN "%s: " format, DRIVER_NAME, ## args) ++#define INFO(format, args...) printk(KERN_INFO "%s: " format, DRIVER_NAME, ## args) ++#else ++#define DBG(format, args...) ++#define ERR(format, args...) ++#define WARNING(format, args...) ++#define INFO(format, args...) ++#endif ++ +#if RGA_DEBUGFS +static const char *rga_get_cmd_mode_str(u32 cmd) +{ @@ -1666381,127 +1666442,127 @@ index 000000000000..2498023d4a4a +} +#endif + -+static inline void rga_write(u32 b, u32 r) -+{ -+ __raw_writel(b, drvdata->rga_base + r); -+} -+ -+static inline u32 rga_read(u32 r) -+{ -+ return __raw_readl(drvdata->rga_base + r); -+} -+ -+static void rga_soft_reset(void) -+{ -+ u32 i; -+ u32 reg; -+ -+ rga_write(1, RGA_SYS_CTRL); //RGA_SYS_CTRL -+ -+ for(i = 0; i < RGA_RESET_TIMEOUT; i++) -+ { -+ reg = rga_read(RGA_SYS_CTRL) & 1; //RGA_SYS_CTRL -+ -+ if(reg == 0) -+ break; -+ -+ udelay(1); -+ } -+ -+ if(i == RGA_RESET_TIMEOUT) -+ ERR("soft reset timeout.\n"); -+} -+ -+static void rga_dump(void) -+{ -+ int running; -+ struct rga_reg *reg, *reg_tmp; -+ rga_session *session, *session_tmp; -+ -+ running = atomic_read(&rga_service.total_running); -+ printk("rga total_running %d\n", running); -+ -+ #if 0 -+ -+ /* Dump waiting list info */ -+ if (!list_empty(&rga_service.waiting)) -+ { -+ list_head *next; -+ -+ next = &rga_service.waiting; -+ -+ printk("rga_service dump waiting list\n"); -+ -+ do -+ { -+ reg = list_entry(next->next, struct rga_reg, status_link); -+ running = atomic_read(®->session->task_running); -+ num_done = atomic_read(®->session->num_done); -+ printk("rga session pid %d, done %d, running %d\n", reg->session->pid, num_done, running); -+ next = next->next; -+ } -+ while(!list_empty(next)); -+ } -+ -+ /* Dump running list info */ -+ if (!list_empty(&rga_service.running)) -+ { -+ printk("rga_service dump running list\n"); -+ -+ list_head *next; -+ -+ next = &rga_service.running; -+ do -+ { -+ reg = list_entry(next->next, struct rga_reg, status_link); -+ running = atomic_read(®->session->task_running); -+ num_done = atomic_read(®->session->num_done); -+ printk("rga session pid %d, done %d, running %d:\n", reg->session->pid, num_done, running); -+ next = next->next; -+ } -+ while(!list_empty(next)); -+ } -+ #endif -+ -+ list_for_each_entry_safe(session, session_tmp, &rga_service.session, list_session) -+ { -+ printk("session pid %d:\n", session->pid); -+ running = atomic_read(&session->task_running); -+ printk("task_running %d\n", running); -+ list_for_each_entry_safe(reg, reg_tmp, &session->waiting, session_link) -+ { ++static inline void rga_write(u32 b, u32 r) ++{ ++ __raw_writel(b, drvdata->rga_base + r); ++} ++ ++static inline u32 rga_read(u32 r) ++{ ++ return __raw_readl(drvdata->rga_base + r); ++} ++ ++static void rga_soft_reset(void) ++{ ++ u32 i; ++ u32 reg; ++ ++ rga_write(1, RGA_SYS_CTRL); //RGA_SYS_CTRL ++ ++ for(i = 0; i < RGA_RESET_TIMEOUT; i++) ++ { ++ reg = rga_read(RGA_SYS_CTRL) & 1; //RGA_SYS_CTRL ++ ++ if(reg == 0) ++ break; ++ ++ udelay(1); ++ } ++ ++ if(i == RGA_RESET_TIMEOUT) ++ ERR("soft reset timeout.\n"); ++} ++ ++static void rga_dump(void) ++{ ++ int running; ++ struct rga_reg *reg, *reg_tmp; ++ rga_session *session, *session_tmp; ++ ++ running = atomic_read(&rga_service.total_running); ++ printk("rga total_running %d\n", running); ++ ++ #if 0 ++ ++ /* Dump waiting list info */ ++ if (!list_empty(&rga_service.waiting)) ++ { ++ list_head *next; ++ ++ next = &rga_service.waiting; ++ ++ printk("rga_service dump waiting list\n"); ++ ++ do ++ { ++ reg = list_entry(next->next, struct rga_reg, status_link); ++ running = atomic_read(®->session->task_running); ++ num_done = atomic_read(®->session->num_done); ++ printk("rga session pid %d, done %d, running %d\n", reg->session->pid, num_done, running); ++ next = next->next; ++ } ++ while(!list_empty(next)); ++ } ++ ++ /* Dump running list info */ ++ if (!list_empty(&rga_service.running)) ++ { ++ printk("rga_service dump running list\n"); ++ ++ list_head *next; ++ ++ next = &rga_service.running; ++ do ++ { ++ reg = list_entry(next->next, struct rga_reg, status_link); ++ running = atomic_read(®->session->task_running); ++ num_done = atomic_read(®->session->num_done); ++ printk("rga session pid %d, done %d, running %d:\n", reg->session->pid, num_done, running); ++ next = next->next; ++ } ++ while(!list_empty(next)); ++ } ++ #endif ++ ++ list_for_each_entry_safe(session, session_tmp, &rga_service.session, list_session) ++ { ++ printk("session pid %d:\n", session->pid); ++ running = atomic_read(&session->task_running); ++ printk("task_running %d\n", running); ++ list_for_each_entry_safe(reg, reg_tmp, &session->waiting, session_link) ++ { + printk("waiting register set 0x %.lu\n", (unsigned long)reg); -+ } -+ list_for_each_entry_safe(reg, reg_tmp, &session->running, session_link) -+ { ++ } ++ list_for_each_entry_safe(reg, reg_tmp, &session->running, session_link) ++ { + printk("running register set 0x %.lu\n", (unsigned long)reg); -+ } -+ } -+} -+ -+static inline void rga_queue_power_off_work(void) -+{ ++ } ++ } ++} ++ ++static inline void rga_queue_power_off_work(void) ++{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) -+ queue_delayed_work(system_wq, &drvdata->power_off_work, RGA_POWER_OFF_DELAY); ++ queue_delayed_work(system_wq, &drvdata->power_off_work, RGA_POWER_OFF_DELAY); +#else + queue_delayed_work(system_nrt_wq, &drvdata->power_off_work, RGA_POWER_OFF_DELAY); +#endif -+} -+ -+/* Caller must hold rga_service.lock */ -+static void rga_power_on(void) -+{ -+ static ktime_t last; -+ ktime_t now = ktime_get(); -+ -+ if (ktime_to_ns(ktime_sub(now, last)) > NSEC_PER_SEC) { -+ cancel_delayed_work_sync(&drvdata->power_off_work); -+ rga_queue_power_off_work(); -+ last = now; -+ } -+ if (rga_service.enable) -+ return; -+ ++} ++ ++/* Caller must hold rga_service.lock */ ++static void rga_power_on(void) ++{ ++ static ktime_t last; ++ ktime_t now = ktime_get(); ++ ++ if (ktime_to_ns(ktime_sub(now, last)) > NSEC_PER_SEC) { ++ cancel_delayed_work_sync(&drvdata->power_off_work); ++ rga_queue_power_off_work(); ++ last = now; ++ } ++ if (rga_service.enable) ++ return; ++ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) + clk_prepare_enable(drvdata->aclk_rga); + clk_prepare_enable(drvdata->hclk_rga); @@ -1666513,27 +1666574,27 @@ index 000000000000..2498023d4a4a + clk_prepare_enable(drvdata->pd_rga); +#endif + -+ wake_lock(&drvdata->wake_lock); -+ rga_service.enable = true; -+} -+ -+/* Caller must hold rga_service.lock */ -+static void rga_power_off(void) -+{ -+ int total_running; -+ -+ if (!rga_service.enable) { -+ return; -+ } -+ -+ total_running = atomic_read(&rga_service.total_running); -+ if (total_running) { -+ pr_err("power off when %d task running!!\n", total_running); -+ mdelay(50); -+ pr_err("delay 50 ms for running task\n"); -+ rga_dump(); -+ } -+ ++ wake_lock(&drvdata->wake_lock); ++ rga_service.enable = true; ++} ++ ++/* Caller must hold rga_service.lock */ ++static void rga_power_off(void) ++{ ++ int total_running; ++ ++ if (!rga_service.enable) { ++ return; ++ } ++ ++ total_running = atomic_read(&rga_service.total_running); ++ if (total_running) { ++ pr_err("power off when %d task running!!\n", total_running); ++ mdelay(50); ++ pr_err("delay 50 ms for running task\n"); ++ rga_dump(); ++ } ++ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) + pm_runtime_put(drvdata->dev); + clk_disable_unprepare(drvdata->aclk_rga); @@ -1666544,17 +1666605,17 @@ index 000000000000..2498023d4a4a + clk_disable_unprepare(drvdata->aclk_rga); + clk_disable_unprepare(drvdata->hclk_rga); +#endif -+ wake_unlock(&drvdata->wake_lock); -+ rga_service.enable = false; -+} -+ -+static void rga_power_off_work(struct work_struct *work) -+{ -+ if (mutex_trylock(&rga_service.lock)) { -+ rga_power_off(); -+ mutex_unlock(&rga_service.lock); -+ } else { -+ /* Come back later if the device is busy... */ ++ wake_unlock(&drvdata->wake_lock); ++ rga_service.enable = false; ++} ++ ++static void rga_power_off_work(struct work_struct *work) ++{ ++ if (mutex_trylock(&rga_service.lock)) { ++ rga_power_off(); ++ mutex_unlock(&rga_service.lock); ++ } else { ++ /* Come back later if the device is busy... */ + + rga_queue_power_off_work(); + } @@ -1666688,7 +1666749,7 @@ index 000000000000..2498023d4a4a + cmd_buf = (uint32_t *)rga_service.cmd_buff + offset*32; + reg_p = (uint32_t *)reg->cmd_reg; + -+ for(i=0; i<32; i++) ++ for(i=0; i<32; i++) + cmd_buf[i] = reg_p[i]; +} + @@ -1668244,543 +1668305,543 @@ index 000000000000..2498023d4a4a +} +#endif +#endif -+ -+void rga_test_0(void); -+void rga_test_1(void); -+ -+static int __init rga_init(void) -+{ -+ int ret; -+ uint32_t *mmu_buf; -+ unsigned long *mmu_buf_virtual; -+ uint32_t i; -+ uint32_t *buf_p; ++ ++void rga_test_0(void); ++void rga_test_1(void); ++ ++static int __init rga_init(void) ++{ ++ int ret; ++ uint32_t *mmu_buf; ++ unsigned long *mmu_buf_virtual; ++ uint32_t i; ++ uint32_t *buf_p; + uint32_t *buf; + -+ /* malloc pre scale mid buf mmu table */ -+ mmu_buf = kzalloc(1024*8, GFP_KERNEL); -+ mmu_buf_virtual = kzalloc(1024*2*sizeof(unsigned long), GFP_KERNEL); -+ if(mmu_buf == NULL) { -+ printk(KERN_ERR "RGA get Pre Scale buff failed. \n"); -+ return -1; -+ } -+ if (mmu_buf_virtual == NULL) { -+ return -1; -+ } -+ -+ /* malloc 4 M buf */ -+ for(i=0; i<1024; i++) { -+ buf_p = (uint32_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); -+ if(buf_p == NULL) { -+ printk(KERN_ERR "RGA init pre scale buf falied\n"); -+ return -ENOMEM; -+ } -+ mmu_buf[i] = virt_to_phys((void *)((unsigned long)buf_p)); -+ mmu_buf_virtual[i] = (unsigned long)buf_p; -+ } -+ -+ rga_service.pre_scale_buf = (uint32_t *)mmu_buf; -+ rga_service.pre_scale_buf_virtual = (unsigned long *)mmu_buf_virtual; -+ -+ buf_p = kmalloc(1024*256, GFP_KERNEL); -+ rga_mmu_buf.buf_virtual = buf_p; ++ /* malloc pre scale mid buf mmu table */ ++ mmu_buf = kzalloc(1024*8, GFP_KERNEL); ++ mmu_buf_virtual = kzalloc(1024*2*sizeof(unsigned long), GFP_KERNEL); ++ if(mmu_buf == NULL) { ++ printk(KERN_ERR "RGA get Pre Scale buff failed. \n"); ++ return -1; ++ } ++ if (mmu_buf_virtual == NULL) { ++ return -1; ++ } ++ ++ /* malloc 4 M buf */ ++ for(i=0; i<1024; i++) { ++ buf_p = (uint32_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); ++ if(buf_p == NULL) { ++ printk(KERN_ERR "RGA init pre scale buf falied\n"); ++ return -ENOMEM; ++ } ++ mmu_buf[i] = virt_to_phys((void *)((unsigned long)buf_p)); ++ mmu_buf_virtual[i] = (unsigned long)buf_p; ++ } ++ ++ rga_service.pre_scale_buf = (uint32_t *)mmu_buf; ++ rga_service.pre_scale_buf_virtual = (unsigned long *)mmu_buf_virtual; ++ ++ buf_p = kmalloc(1024*256, GFP_KERNEL); ++ rga_mmu_buf.buf_virtual = buf_p; +#if (defined(CONFIG_ARM) && defined(CONFIG_ARM_LPAE)) + buf = (uint32_t *)(uint32_t)virt_to_phys((void *)((unsigned long)buf_p)); +#else + buf = (uint32_t *)virt_to_phys((void *)((unsigned long)buf_p)); +#endif + rga_mmu_buf.buf = buf; -+ rga_mmu_buf.front = 0; -+ rga_mmu_buf.back = 64*1024; -+ rga_mmu_buf.size = 64*1024; -+ -+ rga_mmu_buf.pages = kmalloc((32768)* sizeof(struct page *), GFP_KERNEL); -+ -+ if ((ret = platform_driver_register(&rga_driver)) != 0) -+ { -+ printk(KERN_ERR "Platform device register failed (%d).\n", ret); -+ return ret; -+ } -+ -+ { -+ rga_session_global.pid = 0x0000ffff; -+ INIT_LIST_HEAD(&rga_session_global.waiting); -+ INIT_LIST_HEAD(&rga_session_global.running); -+ INIT_LIST_HEAD(&rga_session_global.list_session); -+ -+ INIT_LIST_HEAD(&rga_service.waiting); -+ INIT_LIST_HEAD(&rga_service.running); -+ INIT_LIST_HEAD(&rga_service.done); -+ INIT_LIST_HEAD(&rga_service.session); -+ -+ init_waitqueue_head(&rga_session_global.wait); -+ //mutex_lock(&rga_service.lock); -+ list_add_tail(&rga_session_global.list_session, &rga_service.session); -+ //mutex_unlock(&rga_service.lock); -+ atomic_set(&rga_session_global.task_running, 0); -+ atomic_set(&rga_session_global.num_done, 0); -+ } -+ ++ rga_mmu_buf.front = 0; ++ rga_mmu_buf.back = 64*1024; ++ rga_mmu_buf.size = 64*1024; ++ ++ rga_mmu_buf.pages = kmalloc((32768)* sizeof(struct page *), GFP_KERNEL); ++ ++ if ((ret = platform_driver_register(&rga_driver)) != 0) ++ { ++ printk(KERN_ERR "Platform device register failed (%d).\n", ret); ++ return ret; ++ } ++ ++ { ++ rga_session_global.pid = 0x0000ffff; ++ INIT_LIST_HEAD(&rga_session_global.waiting); ++ INIT_LIST_HEAD(&rga_session_global.running); ++ INIT_LIST_HEAD(&rga_session_global.list_session); ++ ++ INIT_LIST_HEAD(&rga_service.waiting); ++ INIT_LIST_HEAD(&rga_service.running); ++ INIT_LIST_HEAD(&rga_service.done); ++ INIT_LIST_HEAD(&rga_service.session); ++ ++ init_waitqueue_head(&rga_session_global.wait); ++ //mutex_lock(&rga_service.lock); ++ list_add_tail(&rga_session_global.list_session, &rga_service.session); ++ //mutex_unlock(&rga_service.lock); ++ atomic_set(&rga_session_global.task_running, 0); ++ atomic_set(&rga_session_global.num_done, 0); ++ } ++ + #if RGA_TEST_CASE + rga_test_0(); +#endif +#if RGA_DEBUGFS + rga_debugfs_add(); +#endif -+ -+ INFO("Module initialized.\n"); -+ -+ return 0; -+} -+ -+static void __exit rga_exit(void) -+{ -+ uint32_t i; -+ -+ rga_power_off(); -+ -+ for(i=0; i<1024; i++) -+ { -+ if((unsigned long)rga_service.pre_scale_buf_virtual[i]) -+ { -+ __free_page((void *)rga_service.pre_scale_buf_virtual[i]); -+ } -+ } -+ -+ if(rga_service.pre_scale_buf != NULL) { -+ kfree((uint8_t *)rga_service.pre_scale_buf); -+ } -+ ++ ++ INFO("Module initialized.\n"); ++ ++ return 0; ++} ++ ++static void __exit rga_exit(void) ++{ ++ uint32_t i; ++ ++ rga_power_off(); ++ ++ for(i=0; i<1024; i++) ++ { ++ if((unsigned long)rga_service.pre_scale_buf_virtual[i]) ++ { ++ __free_page((void *)rga_service.pre_scale_buf_virtual[i]); ++ } ++ } ++ ++ if(rga_service.pre_scale_buf != NULL) { ++ kfree((uint8_t *)rga_service.pre_scale_buf); ++ } ++ + kfree(rga_mmu_buf.buf_virtual); + + kfree(rga_mmu_buf.pages); + -+ platform_driver_unregister(&rga_driver); -+} ++ platform_driver_unregister(&rga_driver); ++} + +#if RGA_TEST_CASE + -+extern struct fb_info * rk_get_fb(int fb_id); -+EXPORT_SYMBOL(rk_get_fb); -+ -+extern void rk_direct_fb_show(struct fb_info * fbi); -+EXPORT_SYMBOL(rk_direct_fb_show); -+ -+unsigned int src_buf[1920*1080]; -+unsigned int dst_buf[1920*1080]; -+//unsigned int tmp_buf[1920*1080 * 2]; -+ -+void rga_test_0(void) -+{ -+ struct rga_req req; -+ rga_session session; -+ unsigned int *src, *dst; -+ uint32_t i, j; -+ uint8_t *p; -+ uint8_t t; -+ uint32_t *dst0, *dst1, *dst2; -+ -+ struct fb_info *fb; -+ -+ session.pid = current->pid; -+ INIT_LIST_HEAD(&session.waiting); -+ INIT_LIST_HEAD(&session.running); -+ INIT_LIST_HEAD(&session.list_session); -+ init_waitqueue_head(&session.wait); -+ /* no need to protect */ -+ list_add_tail(&session.list_session, &rga_service.session); -+ atomic_set(&session.task_running, 0); -+ atomic_set(&session.num_done, 0); -+ //file->private_data = (void *)session; -+ -+ fb = rk_get_fb(0); -+ -+ memset(&req, 0, sizeof(struct rga_req)); -+ src = src_buf; -+ dst = dst_buf; -+ -+ memset(src_buf, 0x80, 1024*600*4); -+ -+ dmac_flush_range(&src_buf[0], &src_buf[1024*600]); -+ outer_flush_range(virt_to_phys(&src_buf[0]),virt_to_phys(&src_buf[1024*600])); -+ -+ -+ #if 0 -+ memset(src_buf, 0x80, 800*480*4); -+ memset(dst_buf, 0xcc, 800*480*4); -+ -+ dmac_flush_range(&dst_buf[0], &dst_buf[800*480]); -+ outer_flush_range(virt_to_phys(&dst_buf[0]),virt_to_phys(&dst_buf[800*480])); -+ #endif -+ -+ dst0 = &dst_buf[0]; -+ //dst1 = &dst_buf[1280*800*4]; -+ //dst2 = &dst_buf[1280*800*4*2]; -+ -+ i = j = 0; -+ -+ printk("\n********************************\n"); -+ printk("************ RGA_TEST ************\n"); -+ printk("********************************\n\n"); -+ -+ req.src.act_w = 1024; -+ req.src.act_h = 600; -+ -+ req.src.vir_w = 1024; -+ req.src.vir_h = 600; -+ req.src.yrgb_addr = (uint32_t)virt_to_phys(src); -+ req.src.uv_addr = (uint32_t)(req.src.yrgb_addr + 1080*1920); -+ req.src.v_addr = (uint32_t)virt_to_phys(src); -+ req.src.format = RK_FORMAT_RGBA_8888; -+ -+ req.dst.act_w = 600; -+ req.dst.act_h = 352; -+ -+ req.dst.vir_w = 1280; -+ req.dst.vir_h = 800; -+ req.dst.x_offset = 600; -+ req.dst.y_offset = 0; -+ -+ dst = dst0; -+ -+ req.dst.yrgb_addr = ((uint32_t)virt_to_phys(dst)); -+ -+ //req.dst.format = RK_FORMAT_RGB_565; -+ -+ req.clip.xmin = 0; -+ req.clip.xmax = 1279; -+ req.clip.ymin = 0; -+ req.clip.ymax = 799; -+ -+ //req.render_mode = color_fill_mode; -+ //req.fg_color = 0x80ffffff; -+ -+ req.rotate_mode = 1; -+ //req.scale_mode = 2; -+ -+ //req.alpha_rop_flag = 0; -+ //req.alpha_rop_mode = 0x19; -+ //req.PD_mode = 3; -+ -+ req.sina = 65536; -+ req.cosa = 0; -+ -+ //req.mmu_info.mmu_flag = 0x21; -+ //req.mmu_info.mmu_en = 1; -+ -+ //printk("src = %.8x\n", req.src.yrgb_addr); -+ //printk("src = %.8x\n", req.src.uv_addr); -+ //printk("dst = %.8x\n", req.dst.yrgb_addr); -+ -+ -+ rga_blit_sync(&session, &req); -+ -+ #if 1 -+ fb->var.bits_per_pixel = 32; -+ -+ fb->var.xres = 1280; -+ fb->var.yres = 800; -+ -+ fb->var.red.length = 8; -+ fb->var.red.offset = 0; -+ fb->var.red.msb_right = 0; -+ -+ fb->var.green.length = 8; -+ fb->var.green.offset = 8; -+ fb->var.green.msb_right = 0; -+ -+ fb->var.blue.length = 8; -+ -+ fb->var.blue.offset = 16; -+ fb->var.blue.msb_right = 0; -+ -+ fb->var.transp.length = 8; -+ fb->var.transp.offset = 24; -+ fb->var.transp.msb_right = 0; -+ -+ fb->var.nonstd &= (~0xff); -+ fb->var.nonstd |= 1; -+ -+ fb->fix.smem_start = virt_to_phys(dst); -+ -+ rk_direct_fb_show(fb); -+ #endif -+ -+} -+ -+#endif ++extern struct fb_info * rk_get_fb(int fb_id); ++EXPORT_SYMBOL(rk_get_fb); ++ ++extern void rk_direct_fb_show(struct fb_info * fbi); ++EXPORT_SYMBOL(rk_direct_fb_show); ++ ++unsigned int src_buf[1920*1080]; ++unsigned int dst_buf[1920*1080]; ++//unsigned int tmp_buf[1920*1080 * 2]; ++ ++void rga_test_0(void) ++{ ++ struct rga_req req; ++ rga_session session; ++ unsigned int *src, *dst; ++ uint32_t i, j; ++ uint8_t *p; ++ uint8_t t; ++ uint32_t *dst0, *dst1, *dst2; ++ ++ struct fb_info *fb; ++ ++ session.pid = current->pid; ++ INIT_LIST_HEAD(&session.waiting); ++ INIT_LIST_HEAD(&session.running); ++ INIT_LIST_HEAD(&session.list_session); ++ init_waitqueue_head(&session.wait); ++ /* no need to protect */ ++ list_add_tail(&session.list_session, &rga_service.session); ++ atomic_set(&session.task_running, 0); ++ atomic_set(&session.num_done, 0); ++ //file->private_data = (void *)session; ++ ++ fb = rk_get_fb(0); ++ ++ memset(&req, 0, sizeof(struct rga_req)); ++ src = src_buf; ++ dst = dst_buf; ++ ++ memset(src_buf, 0x80, 1024*600*4); ++ ++ dmac_flush_range(&src_buf[0], &src_buf[1024*600]); ++ outer_flush_range(virt_to_phys(&src_buf[0]),virt_to_phys(&src_buf[1024*600])); ++ ++ ++ #if 0 ++ memset(src_buf, 0x80, 800*480*4); ++ memset(dst_buf, 0xcc, 800*480*4); ++ ++ dmac_flush_range(&dst_buf[0], &dst_buf[800*480]); ++ outer_flush_range(virt_to_phys(&dst_buf[0]),virt_to_phys(&dst_buf[800*480])); ++ #endif ++ ++ dst0 = &dst_buf[0]; ++ //dst1 = &dst_buf[1280*800*4]; ++ //dst2 = &dst_buf[1280*800*4*2]; ++ ++ i = j = 0; ++ ++ printk("\n********************************\n"); ++ printk("************ RGA_TEST ************\n"); ++ printk("********************************\n\n"); ++ ++ req.src.act_w = 1024; ++ req.src.act_h = 600; ++ ++ req.src.vir_w = 1024; ++ req.src.vir_h = 600; ++ req.src.yrgb_addr = (uint32_t)virt_to_phys(src); ++ req.src.uv_addr = (uint32_t)(req.src.yrgb_addr + 1080*1920); ++ req.src.v_addr = (uint32_t)virt_to_phys(src); ++ req.src.format = RK_FORMAT_RGBA_8888; ++ ++ req.dst.act_w = 600; ++ req.dst.act_h = 352; ++ ++ req.dst.vir_w = 1280; ++ req.dst.vir_h = 800; ++ req.dst.x_offset = 600; ++ req.dst.y_offset = 0; ++ ++ dst = dst0; ++ ++ req.dst.yrgb_addr = ((uint32_t)virt_to_phys(dst)); ++ ++ //req.dst.format = RK_FORMAT_RGB_565; ++ ++ req.clip.xmin = 0; ++ req.clip.xmax = 1279; ++ req.clip.ymin = 0; ++ req.clip.ymax = 799; ++ ++ //req.render_mode = color_fill_mode; ++ //req.fg_color = 0x80ffffff; ++ ++ req.rotate_mode = 1; ++ //req.scale_mode = 2; ++ ++ //req.alpha_rop_flag = 0; ++ //req.alpha_rop_mode = 0x19; ++ //req.PD_mode = 3; ++ ++ req.sina = 65536; ++ req.cosa = 0; ++ ++ //req.mmu_info.mmu_flag = 0x21; ++ //req.mmu_info.mmu_en = 1; ++ ++ //printk("src = %.8x\n", req.src.yrgb_addr); ++ //printk("src = %.8x\n", req.src.uv_addr); ++ //printk("dst = %.8x\n", req.dst.yrgb_addr); ++ ++ ++ rga_blit_sync(&session, &req); ++ ++ #if 1 ++ fb->var.bits_per_pixel = 32; ++ ++ fb->var.xres = 1280; ++ fb->var.yres = 800; ++ ++ fb->var.red.length = 8; ++ fb->var.red.offset = 0; ++ fb->var.red.msb_right = 0; ++ ++ fb->var.green.length = 8; ++ fb->var.green.offset = 8; ++ fb->var.green.msb_right = 0; ++ ++ fb->var.blue.length = 8; ++ ++ fb->var.blue.offset = 16; ++ fb->var.blue.msb_right = 0; ++ ++ fb->var.transp.length = 8; ++ fb->var.transp.offset = 24; ++ fb->var.transp.msb_right = 0; ++ ++ fb->var.nonstd &= (~0xff); ++ fb->var.nonstd |= 1; ++ ++ fb->fix.smem_start = virt_to_phys(dst); ++ ++ rk_direct_fb_show(fb); ++ #endif ++ ++} ++ ++#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)) +fs_initcall(rga_init); +#else +module_init(rga_init); +#endif -+module_exit(rga_exit); -+ -+/* Module information */ -+MODULE_AUTHOR("zsq@rock-chips.com"); -+MODULE_DESCRIPTION("Driver for rga device"); -+MODULE_LICENSE("GPL"); ++module_exit(rga_exit); ++ ++/* Module information */ ++MODULE_AUTHOR("zsq@rock-chips.com"); ++MODULE_DESCRIPTION("Driver for rga device"); ++MODULE_LICENSE("GPL"); diff --git a/drivers/video/rockchip/rga/rga_mmu_info.c b/drivers/video/rockchip/rga/rga_mmu_info.c new file mode 100755 -index 000000000000..8825183d92fc +index 000000000..cdd1fcd7b --- /dev/null +++ b/drivers/video/rockchip/rga/rga_mmu_info.c @@ -0,0 +1,1315 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "rga_mmu_info.h" -+#include -+ -+extern rga_service_info rga_service; -+extern struct rga_mmu_buf_t rga_mmu_buf; ++ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "rga_mmu_info.h" ++#include ++ ++extern rga_service_info rga_service; ++extern struct rga_mmu_buf_t rga_mmu_buf; + +#if RGA_DEBUGFS +extern int RGA_CHECK_MODE; +#endif -+ ++ +#define KERNEL_SPACE_VALID 0xc0000000 + +void rga_dma_flush_range(void *pstart, void *pend) +{ + dma_sync_single_for_device(drvdata->dev, virt_to_phys(pstart), pend - pstart, DMA_TO_DEVICE); +} -+ -+static int rga_mmu_buf_get(struct rga_mmu_buf_t *t, uint32_t size) -+{ -+ mutex_lock(&rga_service.lock); -+ t->front += size; -+ mutex_unlock(&rga_service.lock); -+ -+ return 0; -+} -+ -+static int rga_mmu_buf_get_try(struct rga_mmu_buf_t *t, uint32_t size) -+{ -+ int ret = 0; -+ -+ mutex_lock(&rga_service.lock); -+ if ((t->back - t->front) > t->size) { -+ if(t->front + size > t->back - t->size) { -+ ret = -ENOMEM; -+ goto out; -+ } -+ } else { -+ if ((t->front + size) > t->back) { -+ ret = -ENOMEM; -+ goto out; -+ } -+ if (t->front + size > t->size) { -+ if (size > (t->back - t->size)) { -+ ret = -ENOMEM; -+ goto out; -+ } -+ t->front = 0; -+ } -+ } -+ -+out: -+ mutex_unlock(&rga_service.lock); -+ return ret; -+} -+ -+static int rga_mem_size_cal(unsigned long Mem, uint32_t MemSize, unsigned long *StartAddr) -+{ -+ unsigned long start, end; -+ uint32_t pageCount; -+ -+ end = (Mem + (MemSize + PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ start = Mem >> PAGE_SHIFT; -+ pageCount = end - start; -+ *StartAddr = start; -+ return pageCount; -+} -+ -+static int rga_buf_size_cal(unsigned long yrgb_addr, unsigned long uv_addr, unsigned long v_addr, -+ int format, uint32_t w, uint32_t h, unsigned long *StartAddr ) -+{ -+ uint32_t size_yrgb = 0; -+ uint32_t size_uv = 0; -+ uint32_t size_v = 0; -+ uint32_t stride = 0; -+ unsigned long start, end; -+ uint32_t pageCount; -+ -+ switch(format) -+ { -+ case RK_FORMAT_RGBA_8888 : -+ stride = (w * 4 + 3) & (~3); -+ size_yrgb = stride*h; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ case RK_FORMAT_RGBX_8888 : -+ stride = (w * 4 + 3) & (~3); -+ size_yrgb = stride*h; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ case RK_FORMAT_RGB_888 : -+ stride = (w * 3 + 3) & (~3); -+ size_yrgb = stride*h; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ case RK_FORMAT_BGRA_8888 : -+ size_yrgb = w*h*4; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ case RK_FORMAT_RGB_565 : -+ stride = (w*2 + 3) & (~3); -+ size_yrgb = stride * h; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ case RK_FORMAT_RGBA_5551 : -+ stride = (w*2 + 3) & (~3); -+ size_yrgb = stride * h; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ case RK_FORMAT_RGBA_4444 : -+ stride = (w*2 + 3) & (~3); -+ size_yrgb = stride * h; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ case RK_FORMAT_BGR_888 : -+ stride = (w*3 + 3) & (~3); -+ size_yrgb = stride * h; -+ start = yrgb_addr >> PAGE_SHIFT; -+ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; -+ break; -+ -+ /* YUV FORMAT */ -+ case RK_FORMAT_YCbCr_422_SP : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = stride * h; -+ start = MIN(yrgb_addr, uv_addr); -+ -+ start >>= PAGE_SHIFT; -+ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ case RK_FORMAT_YCbCr_422_P : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = ((stride >> 1) * h); -+ size_v = ((stride >> 1) * h); -+ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); -+ start = start >> PAGE_SHIFT; -+ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ case RK_FORMAT_YCbCr_420_SP : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = (stride * (h >> 1)); -+ start = MIN(yrgb_addr, uv_addr); -+ start >>= PAGE_SHIFT; -+ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ case RK_FORMAT_YCbCr_420_P : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = ((stride >> 1) * (h >> 1)); -+ size_v = ((stride >> 1) * (h >> 1)); -+ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); -+ start >>= PAGE_SHIFT; -+ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ -+ case RK_FORMAT_YCrCb_422_SP : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = stride * h; -+ start = MIN(yrgb_addr, uv_addr); -+ start >>= PAGE_SHIFT; -+ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ case RK_FORMAT_YCrCb_422_P : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = ((stride >> 1) * h); -+ size_v = ((stride >> 1) * h); -+ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); -+ start >>= PAGE_SHIFT; -+ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ -+ case RK_FORMAT_YCrCb_420_SP : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = (stride * (h >> 1)); -+ start = MIN(yrgb_addr, uv_addr); -+ start >>= PAGE_SHIFT; -+ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ case RK_FORMAT_YCrCb_420_P : -+ stride = (w + 3) & (~3); -+ size_yrgb = stride * h; -+ size_uv = ((stride >> 1) * (h >> 1)); -+ size_v = ((stride >> 1) * (h >> 1)); -+ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); -+ start >>= PAGE_SHIFT; -+ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); -+ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; -+ pageCount = end - start; -+ break; -+ #if 0 -+ case RK_FORMAT_BPP1 : -+ break; -+ case RK_FORMAT_BPP2 : -+ break; -+ case RK_FORMAT_BPP4 : -+ break; -+ case RK_FORMAT_BPP8 : -+ break; -+ #endif -+ default : -+ pageCount = 0; -+ start = 0; -+ break; -+ } -+ -+ *StartAddr = start; -+ return pageCount; -+} -+ ++ ++static int rga_mmu_buf_get(struct rga_mmu_buf_t *t, uint32_t size) ++{ ++ mutex_lock(&rga_service.lock); ++ t->front += size; ++ mutex_unlock(&rga_service.lock); ++ ++ return 0; ++} ++ ++static int rga_mmu_buf_get_try(struct rga_mmu_buf_t *t, uint32_t size) ++{ ++ int ret = 0; ++ ++ mutex_lock(&rga_service.lock); ++ if ((t->back - t->front) > t->size) { ++ if(t->front + size > t->back - t->size) { ++ ret = -ENOMEM; ++ goto out; ++ } ++ } else { ++ if ((t->front + size) > t->back) { ++ ret = -ENOMEM; ++ goto out; ++ } ++ if (t->front + size > t->size) { ++ if (size > (t->back - t->size)) { ++ ret = -ENOMEM; ++ goto out; ++ } ++ t->front = 0; ++ } ++ } ++ ++out: ++ mutex_unlock(&rga_service.lock); ++ return ret; ++} ++ ++static int rga_mem_size_cal(unsigned long Mem, uint32_t MemSize, unsigned long *StartAddr) ++{ ++ unsigned long start, end; ++ uint32_t pageCount; ++ ++ end = (Mem + (MemSize + PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ start = Mem >> PAGE_SHIFT; ++ pageCount = end - start; ++ *StartAddr = start; ++ return pageCount; ++} ++ ++static int rga_buf_size_cal(unsigned long yrgb_addr, unsigned long uv_addr, unsigned long v_addr, ++ int format, uint32_t w, uint32_t h, unsigned long *StartAddr ) ++{ ++ uint32_t size_yrgb = 0; ++ uint32_t size_uv = 0; ++ uint32_t size_v = 0; ++ uint32_t stride = 0; ++ unsigned long start, end; ++ uint32_t pageCount; ++ ++ switch(format) ++ { ++ case RK_FORMAT_RGBA_8888 : ++ stride = (w * 4 + 3) & (~3); ++ size_yrgb = stride*h; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ case RK_FORMAT_RGBX_8888 : ++ stride = (w * 4 + 3) & (~3); ++ size_yrgb = stride*h; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ case RK_FORMAT_RGB_888 : ++ stride = (w * 3 + 3) & (~3); ++ size_yrgb = stride*h; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ case RK_FORMAT_BGRA_8888 : ++ size_yrgb = w*h*4; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ case RK_FORMAT_RGB_565 : ++ stride = (w*2 + 3) & (~3); ++ size_yrgb = stride * h; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ case RK_FORMAT_RGBA_5551 : ++ stride = (w*2 + 3) & (~3); ++ size_yrgb = stride * h; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ case RK_FORMAT_RGBA_4444 : ++ stride = (w*2 + 3) & (~3); ++ size_yrgb = stride * h; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ case RK_FORMAT_BGR_888 : ++ stride = (w*3 + 3) & (~3); ++ size_yrgb = stride * h; ++ start = yrgb_addr >> PAGE_SHIFT; ++ pageCount = (size_yrgb + PAGE_SIZE - 1) >> PAGE_SHIFT; ++ break; ++ ++ /* YUV FORMAT */ ++ case RK_FORMAT_YCbCr_422_SP : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = stride * h; ++ start = MIN(yrgb_addr, uv_addr); ++ ++ start >>= PAGE_SHIFT; ++ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ case RK_FORMAT_YCbCr_422_P : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = ((stride >> 1) * h); ++ size_v = ((stride >> 1) * h); ++ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); ++ start = start >> PAGE_SHIFT; ++ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ case RK_FORMAT_YCbCr_420_SP : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = (stride * (h >> 1)); ++ start = MIN(yrgb_addr, uv_addr); ++ start >>= PAGE_SHIFT; ++ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ case RK_FORMAT_YCbCr_420_P : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = ((stride >> 1) * (h >> 1)); ++ size_v = ((stride >> 1) * (h >> 1)); ++ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); ++ start >>= PAGE_SHIFT; ++ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ ++ case RK_FORMAT_YCrCb_422_SP : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = stride * h; ++ start = MIN(yrgb_addr, uv_addr); ++ start >>= PAGE_SHIFT; ++ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ case RK_FORMAT_YCrCb_422_P : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = ((stride >> 1) * h); ++ size_v = ((stride >> 1) * h); ++ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); ++ start >>= PAGE_SHIFT; ++ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ ++ case RK_FORMAT_YCrCb_420_SP : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = (stride * (h >> 1)); ++ start = MIN(yrgb_addr, uv_addr); ++ start >>= PAGE_SHIFT; ++ end = MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ case RK_FORMAT_YCrCb_420_P : ++ stride = (w + 3) & (~3); ++ size_yrgb = stride * h; ++ size_uv = ((stride >> 1) * (h >> 1)); ++ size_v = ((stride >> 1) * (h >> 1)); ++ start = MIN(MIN(yrgb_addr, uv_addr), v_addr); ++ start >>= PAGE_SHIFT; ++ end = MAX(MAX((yrgb_addr + size_yrgb), (uv_addr + size_uv)), (v_addr + size_v)); ++ end = (end + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pageCount = end - start; ++ break; ++ #if 0 ++ case RK_FORMAT_BPP1 : ++ break; ++ case RK_FORMAT_BPP2 : ++ break; ++ case RK_FORMAT_BPP4 : ++ break; ++ case RK_FORMAT_BPP8 : ++ break; ++ #endif ++ default : ++ pageCount = 0; ++ start = 0; ++ break; ++ } ++ ++ *StartAddr = start; ++ return pageCount; ++} ++ +#if RGA_DEBUGFS +static int rga_usermemory_cheeck(struct page **pages, u32 w, u32 h, u32 format, int flag) +{ @@ -1668847,20 +1668908,20 @@ index 000000000000..8825183d92fc +} +#endif + -+static int rga_MapUserMemory(struct page **pages, -+ uint32_t *pageTable, -+ unsigned long Memory, -+ uint32_t pageCount) -+{ -+ int32_t result; -+ uint32_t i; -+ uint32_t status; -+ unsigned long Address; -+ -+ status = 0; -+ Address = 0; -+ -+ do { ++static int rga_MapUserMemory(struct page **pages, ++ uint32_t *pageTable, ++ unsigned long Memory, ++ uint32_t pageCount) ++{ ++ int32_t result; ++ uint32_t i; ++ uint32_t status; ++ unsigned long Address; ++ ++ status = 0; ++ Address = 0; ++ ++ do { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) + mmap_read_lock(current->mm); +#else @@ -1668884,72 +1668945,72 @@ index 000000000000..8825183d92fc +#else + up_read(¤t->mm->mmap_sem); +#endif -+ -+ #if 0 -+ if(result <= 0 || result < pageCount) -+ { -+ status = 0; -+ -+ for(i=0; i0) { ++ ++ #if 0 ++ if(result <= 0 || result < pageCount) ++ { ++ status = 0; ++ ++ for(i=0; i0) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) + mmap_read_lock(current->mm); +#else + down_read(¤t->mm->mmap_sem); +#endif -+ for (i = 0; i < result; i++) -+ put_page(pages[i]); ++ for (i = 0; i < result; i++) ++ put_page(pages[i]); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) + mmap_read_unlock(current->mm); +#else + up_read(¤t->mm->mmap_sem); +#endif -+ } -+ -+ for(i=0; imm, (Memory + i) << PAGE_SHIFT); -+ -+ if (vma)//&& (vma->vm_flags & VM_PFNMAP) ) -+ { -+ do -+ { -+ pte_t * pte; -+ spinlock_t * ptl; -+ unsigned long pfn; ++ } ++ ++ for(i=0; imm, (Memory + i) << PAGE_SHIFT); ++ ++ if (vma)//&& (vma->vm_flags & VM_PFNMAP) ) ++ { ++ do ++ { ++ pte_t * pte; ++ spinlock_t * ptl; ++ unsigned long pfn; + pgd_t * pgd; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) + p4d_t * p4d; +#endif -+ pud_t * pud; -+ -+ pgd = pgd_offset(current->mm, (Memory + i) << PAGE_SHIFT); -+ -+ if(pgd_val(*pgd) == 0) -+ { -+ //printk("rga pgd value is zero \n"); -+ break; -+ } -+ ++ pud_t * pud; ++ ++ pgd = pgd_offset(current->mm, (Memory + i) << PAGE_SHIFT); ++ ++ if(pgd_val(*pgd) == 0) ++ { ++ //printk("rga pgd value is zero \n"); ++ break; ++ } ++ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) + /* In the four-level page table, it will do nothing and return pgd. */ + p4d = p4d_offset(pgd, (Memory + i) << PAGE_SHIFT); @@ -1668964,217 +1669025,217 @@ index 000000000000..8825183d92fc +#else + pud = pud_offset(pgd, (Memory + i) << PAGE_SHIFT); +#endif -+ if (pud) -+ { -+ pmd_t * pmd = pmd_offset(pud, (Memory + i) << PAGE_SHIFT); -+ if (pmd) -+ { -+ pte = pte_offset_map_lock(current->mm, pmd, (Memory + i) << PAGE_SHIFT, &ptl); -+ if (!pte) -+ { -+ pte_unmap_unlock(pte, ptl); -+ break; -+ } -+ } -+ else -+ { -+ break; -+ } -+ } -+ else -+ { -+ break; -+ } -+ -+ pfn = pte_pfn(*pte); -+ Address = ((pfn << PAGE_SHIFT) | (((unsigned long)((Memory + i) << PAGE_SHIFT)) & ~PAGE_MASK)); -+ pte_unmap_unlock(pte, ptl); -+ } -+ while (0); -+ -+ pageTable[i] = Address; -+ } -+ else -+ { -+ status = RGA_OUT_OF_RESOURCES; -+ break; -+ } -+ } -+ -+ return status; -+ } -+ #endif -+ -+ /* Fill the page table. */ -+ for(i=0; imm, pmd, (Memory + i) << PAGE_SHIFT, &ptl); ++ if (!pte) ++ { ++ pte_unmap_unlock(pte, ptl); ++ break; ++ } ++ } ++ else ++ { ++ break; ++ } ++ } ++ else ++ { ++ break; ++ } ++ ++ pfn = pte_pfn(*pte); ++ Address = ((pfn << PAGE_SHIFT) | (((unsigned long)((Memory + i) << PAGE_SHIFT)) & ~PAGE_MASK)); ++ pte_unmap_unlock(pte, ptl); ++ } ++ while (0); ++ ++ pageTable[i] = Address; ++ } ++ else ++ { ++ status = RGA_OUT_OF_RESOURCES; ++ break; ++ } ++ } ++ ++ return status; ++ } ++ #endif ++ ++ /* Fill the page table. */ ++ for(i=0; i= KERNEL_VERSION(5, 10, 0) + mmap_read_lock(current->mm); +#else + down_read(¤t->mm->mmap_sem); +#endif -+ for (i = 0; i < result; i++) -+ put_page(pages[i]); ++ for (i = 0; i < result; i++) ++ put_page(pages[i]); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) + mmap_read_unlock(current->mm); +#else + up_read(¤t->mm->mmap_sem); +#endif -+ -+ return 0; -+ } -+ while(0); -+ -+ return status; -+} -+ -+static int rga_MapION(struct sg_table *sg, -+ uint32_t *Memory, -+ int32_t pageCount, -+ uint32_t offset) -+{ -+ uint32_t i; -+ uint32_t status; -+ unsigned long Address; -+ uint32_t mapped_size = 0; -+ uint32_t len = 0; -+ struct scatterlist *sgl = sg->sgl; -+ uint32_t sg_num = 0; -+ -+ status = 0; -+ Address = 0; -+ offset = offset >> PAGE_SHIFT; -+ if (offset != 0) { -+ do { -+ len += (sg_dma_len(sgl) >> PAGE_SHIFT); -+ if (len == offset) { -+ sg_num += 1; -+ break; -+ } -+ else { -+ if (len > offset) -+ break; -+ } -+ sg_num += 1; -+ } -+ while((sgl = sg_next(sgl)) && (mapped_size < pageCount) && (sg_num < sg->nents)); -+ -+ sgl = sg->sgl; -+ len = 0; -+ do { -+ len += (sg_dma_len(sgl) >> PAGE_SHIFT); -+ sgl = sg_next(sgl); -+ } -+ while(--sg_num); -+ -+ offset -= len; -+ -+ len = sg_dma_len(sgl) >> PAGE_SHIFT; -+ Address = sg_phys(sgl); -+ Address += offset; -+ -+ for(i=offset; i> PAGE_SHIFT; -+ Address = sg_phys(sgl); -+ -+ for(i=0; inents)); -+ } -+ else { -+ do { -+ len = sg_dma_len(sgl) >> PAGE_SHIFT; -+ Address = sg_phys(sgl); -+ for(i=0; inents)); -+ } -+ return 0; -+} -+ -+ -+static int rga_mmu_info_BitBlt_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ int SrcMemSize, DstMemSize; -+ unsigned long SrcStart, DstStart; -+ uint32_t i; -+ uint32_t AllSize; -+ uint32_t *MMU_Base, *MMU_p, *MMU_Base_phys; -+ int ret; -+ int status; -+ uint32_t uv_size, v_size; -+ -+ struct page **pages = NULL; -+ -+ MMU_Base = NULL; -+ -+ SrcMemSize = 0; -+ DstMemSize = 0; -+ -+ do { -+ /* cal src buf mmu info */ -+ SrcMemSize = rga_buf_size_cal(req->src.yrgb_addr, req->src.uv_addr, req->src.v_addr, -+ req->src.format, req->src.vir_w, req->src.act_h + req->src.y_offset, -+ &SrcStart); -+ if(SrcMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ /* cal dst buf mmu info */ -+ -+ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, -+ req->dst.format, req->dst.vir_w, req->dst.vir_h, -+ &DstStart); -+ if(DstMemSize == 0) -+ return -EINVAL; -+ -+ /* Cal out the needed mem size */ -+ SrcMemSize = (SrcMemSize + 15) & (~15); -+ DstMemSize = (DstMemSize + 15) & (~15); -+ AllSize = SrcMemSize + DstMemSize; -+ -+ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { -+ pr_err("RGA Get MMU mem failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ mutex_lock(&rga_service.lock); -+ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ mutex_unlock(&rga_service.lock); -+ -+ pages = rga_mmu_buf.pages; -+ -+ if((req->mmu_info.mmu_flag >> 8) & 1) { -+ if (req->sg_src) { -+ ret = rga_MapION(req->sg_src, &MMU_Base[0], SrcMemSize, req->line_draw_info.flag); -+ } -+ else { -+ ret = rga_MapUserMemory(&pages[0], &MMU_Base[0], SrcStart, SrcMemSize); -+ if (ret < 0) { -+ pr_err("rga map src memory failed\n"); -+ status = ret; -+ break; ++ ++ return 0; ++ } ++ while(0); ++ ++ return status; ++} ++ ++static int rga_MapION(struct sg_table *sg, ++ uint32_t *Memory, ++ int32_t pageCount, ++ uint32_t offset) ++{ ++ uint32_t i; ++ uint32_t status; ++ unsigned long Address; ++ uint32_t mapped_size = 0; ++ uint32_t len = 0; ++ struct scatterlist *sgl = sg->sgl; ++ uint32_t sg_num = 0; ++ ++ status = 0; ++ Address = 0; ++ offset = offset >> PAGE_SHIFT; ++ if (offset != 0) { ++ do { ++ len += (sg_dma_len(sgl) >> PAGE_SHIFT); ++ if (len == offset) { ++ sg_num += 1; ++ break; ++ } ++ else { ++ if (len > offset) ++ break; ++ } ++ sg_num += 1; ++ } ++ while((sgl = sg_next(sgl)) && (mapped_size < pageCount) && (sg_num < sg->nents)); ++ ++ sgl = sg->sgl; ++ len = 0; ++ do { ++ len += (sg_dma_len(sgl) >> PAGE_SHIFT); ++ sgl = sg_next(sgl); ++ } ++ while(--sg_num); ++ ++ offset -= len; ++ ++ len = sg_dma_len(sgl) >> PAGE_SHIFT; ++ Address = sg_phys(sgl); ++ Address += offset; ++ ++ for(i=offset; i> PAGE_SHIFT; ++ Address = sg_phys(sgl); ++ ++ for(i=0; inents)); ++ } ++ else { ++ do { ++ len = sg_dma_len(sgl) >> PAGE_SHIFT; ++ Address = sg_phys(sgl); ++ for(i=0; inents)); ++ } ++ return 0; ++} ++ ++ ++static int rga_mmu_info_BitBlt_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ int SrcMemSize, DstMemSize; ++ unsigned long SrcStart, DstStart; ++ uint32_t i; ++ uint32_t AllSize; ++ uint32_t *MMU_Base, *MMU_p, *MMU_Base_phys; ++ int ret; ++ int status; ++ uint32_t uv_size, v_size; ++ ++ struct page **pages = NULL; ++ ++ MMU_Base = NULL; ++ ++ SrcMemSize = 0; ++ DstMemSize = 0; ++ ++ do { ++ /* cal src buf mmu info */ ++ SrcMemSize = rga_buf_size_cal(req->src.yrgb_addr, req->src.uv_addr, req->src.v_addr, ++ req->src.format, req->src.vir_w, req->src.act_h + req->src.y_offset, ++ &SrcStart); ++ if(SrcMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ /* cal dst buf mmu info */ ++ ++ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, ++ req->dst.format, req->dst.vir_w, req->dst.vir_h, ++ &DstStart); ++ if(DstMemSize == 0) ++ return -EINVAL; ++ ++ /* Cal out the needed mem size */ ++ SrcMemSize = (SrcMemSize + 15) & (~15); ++ DstMemSize = (DstMemSize + 15) & (~15); ++ AllSize = SrcMemSize + DstMemSize; ++ ++ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { ++ pr_err("RGA Get MMU mem failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ mutex_lock(&rga_service.lock); ++ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ mutex_unlock(&rga_service.lock); ++ ++ pages = rga_mmu_buf.pages; ++ ++ if((req->mmu_info.mmu_flag >> 8) & 1) { ++ if (req->sg_src) { ++ ret = rga_MapION(req->sg_src, &MMU_Base[0], SrcMemSize, req->line_draw_info.flag); ++ } ++ else { ++ ret = rga_MapUserMemory(&pages[0], &MMU_Base[0], SrcStart, SrcMemSize); ++ if (ret < 0) { ++ pr_err("rga map src memory failed\n"); ++ status = ret; ++ break; + } + +#if RGA_DEBUGFS @@ -1669182,1406 +1669243,1406 @@ index 000000000000..8825183d92fc + rga_usermemory_cheeck(&pages[0], req->src.vir_w, + req->src.vir_h, req->src.format, 1); +#endif -+ } -+ } -+ else { -+ MMU_p = MMU_Base; -+ -+ if(req->src.yrgb_addr == (unsigned long)rga_service.pre_scale_buf) { -+ for(i=0; immu_info.mmu_flag >> 10) & 1) { -+ if (req->sg_dst) { -+ ret = rga_MapION(req->sg_dst, &MMU_Base[SrcMemSize], DstMemSize, req->line_draw_info.line_width); -+ } -+ else { -+ ret = rga_MapUserMemory(&pages[SrcMemSize], &MMU_Base[SrcMemSize], DstStart, DstMemSize); -+ if (ret < 0) { -+ pr_err("rga map dst memory failed\n"); -+ status = ret; -+ break; -+ } ++ } ++ } ++ else { ++ MMU_p = MMU_Base; ++ ++ if(req->src.yrgb_addr == (unsigned long)rga_service.pre_scale_buf) { ++ for(i=0; immu_info.mmu_flag >> 10) & 1) { ++ if (req->sg_dst) { ++ ret = rga_MapION(req->sg_dst, &MMU_Base[SrcMemSize], DstMemSize, req->line_draw_info.line_width); ++ } ++ else { ++ ret = rga_MapUserMemory(&pages[SrcMemSize], &MMU_Base[SrcMemSize], DstStart, DstMemSize); ++ if (ret < 0) { ++ pr_err("rga map dst memory failed\n"); ++ status = ret; ++ break; ++ } + +#if RGA_DEBUGFS + if (RGA_CHECK_MODE) + rga_usermemory_cheeck(&pages[0], req->src.vir_w, + req->src.vir_h, req->src.format, 2); +#endif -+ } -+ } -+ else { -+ MMU_p = MMU_Base + SrcMemSize; -+ for(i=0; immu_info.base_addr = (unsigned long)MMU_Base_phys >> 2; -+ -+ uv_size = (req->src.uv_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; -+ v_size = (req->src.v_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; -+ -+ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)); -+ req->src.uv_addr = (req->src.uv_addr & (~PAGE_MASK)) | (uv_size << PAGE_SHIFT); -+ req->src.v_addr = (req->src.v_addr & (~PAGE_MASK)) | (v_size << PAGE_SHIFT); -+ -+ uv_size = (req->dst.uv_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT; -+ -+ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | (SrcMemSize << PAGE_SHIFT); -+ req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((SrcMemSize + uv_size) << PAGE_SHIFT); -+ -+ /* flush data to DDR */ ++ } ++ } ++ else { ++ MMU_p = MMU_Base + SrcMemSize; ++ for(i=0; immu_info.base_addr = (unsigned long)MMU_Base_phys >> 2; ++ ++ uv_size = (req->src.uv_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; ++ v_size = (req->src.v_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; ++ ++ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)); ++ req->src.uv_addr = (req->src.uv_addr & (~PAGE_MASK)) | (uv_size << PAGE_SHIFT); ++ req->src.v_addr = (req->src.v_addr & (~PAGE_MASK)) | (v_size << PAGE_SHIFT); ++ ++ uv_size = (req->dst.uv_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT; ++ ++ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | (SrcMemSize << PAGE_SHIFT); ++ req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((SrcMemSize + uv_size) << PAGE_SHIFT); ++ ++ /* flush data to DDR */ + rga_dma_flush_range(MMU_Base, (MMU_Base + AllSize + 1)); -+ -+ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); -+ reg->MMU_len = AllSize + 16; -+ -+ status = 0; -+ -+ return status; -+ } -+ while(0); -+ -+ return status; -+} -+ -+static int rga_mmu_info_color_palette_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ int SrcMemSize, DstMemSize, CMDMemSize; -+ unsigned long SrcStart, DstStart, CMDStart; -+ struct page **pages = NULL; -+ uint32_t i; -+ uint32_t AllSize; -+ uint32_t *MMU_Base = NULL, *MMU_Base_phys = NULL; -+ uint32_t *MMU_p; ++ ++ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); ++ reg->MMU_len = AllSize + 16; ++ ++ status = 0; ++ ++ return status; ++ } ++ while(0); ++ ++ return status; ++} ++ ++static int rga_mmu_info_color_palette_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ int SrcMemSize, DstMemSize, CMDMemSize; ++ unsigned long SrcStart, DstStart, CMDStart; ++ struct page **pages = NULL; ++ uint32_t i; ++ uint32_t AllSize; ++ uint32_t *MMU_Base = NULL, *MMU_Base_phys = NULL; ++ uint32_t *MMU_p; + int ret, status = 0; -+ uint32_t stride; -+ -+ uint8_t shift; -+ uint16_t sw, byte_num; -+ -+ shift = 3 - (req->palette_mode & 3); -+ sw = req->src.vir_w; -+ byte_num = sw >> shift; -+ stride = (byte_num + 3) & (~3); -+ -+ do { -+ SrcMemSize = rga_mem_size_cal(req->src.yrgb_addr, stride, &SrcStart); -+ if(SrcMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, -+ req->dst.format, req->dst.vir_w, req->dst.vir_h, -+ &DstStart); -+ if(DstMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ CMDMemSize = rga_mem_size_cal((unsigned long)rga_service.cmd_buff, RGA_CMD_BUF_SIZE, &CMDStart); -+ if(CMDMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ SrcMemSize = (SrcMemSize + 15) & (~15); -+ DstMemSize = (DstMemSize + 15) & (~15); -+ CMDMemSize = (CMDMemSize + 15) & (~15); -+ -+ AllSize = SrcMemSize + DstMemSize + CMDMemSize; -+ -+ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { -+ pr_err("RGA Get MMU mem failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ mutex_lock(&rga_service.lock); -+ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ mutex_unlock(&rga_service.lock); -+ -+ pages = rga_mmu_buf.pages; -+ -+ /* map CMD addr */ -+ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) { -+ ret = rga_MapUserMemory(&pages[CMDMemSize], &MMU_Base[CMDMemSize], SrcStart, SrcMemSize); -+ if (ret < 0) { -+ pr_err("rga map src memory failed\n"); -+ status = ret; -+ break; -+ } -+ } -+ else { -+ MMU_p = MMU_Base + CMDMemSize; -+ -+ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) { -+ ret = rga_MapUserMemory(&pages[CMDMemSize + SrcMemSize], &MMU_Base[CMDMemSize + SrcMemSize], DstStart, DstMemSize); -+ if (ret < 0) { -+ pr_err("rga map dst memory failed\n"); -+ status = ret; -+ break; -+ } -+ } -+ else { -+ MMU_p = MMU_Base + CMDMemSize + SrcMemSize; -+ for(i=0; immu_info.base_addr = (virt_to_phys(MMU_Base)>>2); -+ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (CMDMemSize << PAGE_SHIFT); -+ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | ((CMDMemSize + SrcMemSize) << PAGE_SHIFT); -+ -+ /*record the malloc buf for the cmd end to release*/ -+ reg->MMU_base = MMU_Base; -+ -+ /* flush data to DDR */ ++ uint32_t stride; ++ ++ uint8_t shift; ++ uint16_t sw, byte_num; ++ ++ shift = 3 - (req->palette_mode & 3); ++ sw = req->src.vir_w; ++ byte_num = sw >> shift; ++ stride = (byte_num + 3) & (~3); ++ ++ do { ++ SrcMemSize = rga_mem_size_cal(req->src.yrgb_addr, stride, &SrcStart); ++ if(SrcMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, ++ req->dst.format, req->dst.vir_w, req->dst.vir_h, ++ &DstStart); ++ if(DstMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ CMDMemSize = rga_mem_size_cal((unsigned long)rga_service.cmd_buff, RGA_CMD_BUF_SIZE, &CMDStart); ++ if(CMDMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ SrcMemSize = (SrcMemSize + 15) & (~15); ++ DstMemSize = (DstMemSize + 15) & (~15); ++ CMDMemSize = (CMDMemSize + 15) & (~15); ++ ++ AllSize = SrcMemSize + DstMemSize + CMDMemSize; ++ ++ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { ++ pr_err("RGA Get MMU mem failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ mutex_lock(&rga_service.lock); ++ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ mutex_unlock(&rga_service.lock); ++ ++ pages = rga_mmu_buf.pages; ++ ++ /* map CMD addr */ ++ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) { ++ ret = rga_MapUserMemory(&pages[CMDMemSize], &MMU_Base[CMDMemSize], SrcStart, SrcMemSize); ++ if (ret < 0) { ++ pr_err("rga map src memory failed\n"); ++ status = ret; ++ break; ++ } ++ } ++ else { ++ MMU_p = MMU_Base + CMDMemSize; ++ ++ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) { ++ ret = rga_MapUserMemory(&pages[CMDMemSize + SrcMemSize], &MMU_Base[CMDMemSize + SrcMemSize], DstStart, DstMemSize); ++ if (ret < 0) { ++ pr_err("rga map dst memory failed\n"); ++ status = ret; ++ break; ++ } ++ } ++ else { ++ MMU_p = MMU_Base + CMDMemSize + SrcMemSize; ++ for(i=0; immu_info.base_addr = (virt_to_phys(MMU_Base)>>2); ++ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (CMDMemSize << PAGE_SHIFT); ++ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | ((CMDMemSize + SrcMemSize) << PAGE_SHIFT); ++ ++ /*record the malloc buf for the cmd end to release*/ ++ reg->MMU_base = MMU_Base; ++ ++ /* flush data to DDR */ + rga_dma_flush_range(MMU_Base, (MMU_Base + AllSize + 1)); -+ -+ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); -+ reg->MMU_len = AllSize + 16; -+ ++ ++ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); ++ reg->MMU_len = AllSize + 16; ++ + return status; -+ -+ } -+ while(0); -+ -+ return 0; -+} -+ -+static int rga_mmu_info_color_fill_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ int DstMemSize; -+ unsigned long DstStart; -+ struct page **pages = NULL; -+ uint32_t i; -+ uint32_t AllSize; -+ uint32_t *MMU_Base, *MMU_p, *MMU_Base_phys; -+ int ret; -+ int status; -+ -+ MMU_Base = NULL; -+ -+ do { -+ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, -+ req->dst.format, req->dst.vir_w, req->dst.vir_h, -+ &DstStart); -+ if(DstMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ AllSize = (DstMemSize + 15) & (~15); -+ -+ pages = rga_mmu_buf.pages; -+ -+ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { -+ pr_err("RGA Get MMU mem failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ mutex_lock(&rga_service.lock); -+ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ mutex_unlock(&rga_service.lock); -+ -+ if (req->dst.yrgb_addr < KERNEL_SPACE_VALID) { -+ if (req->sg_dst) { -+ ret = rga_MapION(req->sg_dst, &MMU_Base[0], DstMemSize, req->line_draw_info.line_width); -+ } -+ else { -+ ret = rga_MapUserMemory(&pages[0], &MMU_Base[0], DstStart, DstMemSize); -+ if (ret < 0) { -+ pr_err("rga map dst memory failed\n"); -+ status = ret; -+ break; -+ } -+ } -+ } -+ else { -+ MMU_p = MMU_Base; -+ for(i=0; immu_info.base_addr = ((unsigned long)(MMU_Base_phys)>>2); -+ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)); -+ -+ /*record the malloc buf for the cmd end to release*/ -+ reg->MMU_base = MMU_Base; -+ -+ /* flush data to DDR */ ++ ++ } ++ while(0); ++ ++ return 0; ++} ++ ++static int rga_mmu_info_color_fill_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ int DstMemSize; ++ unsigned long DstStart; ++ struct page **pages = NULL; ++ uint32_t i; ++ uint32_t AllSize; ++ uint32_t *MMU_Base, *MMU_p, *MMU_Base_phys; ++ int ret; ++ int status; ++ ++ MMU_Base = NULL; ++ ++ do { ++ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, ++ req->dst.format, req->dst.vir_w, req->dst.vir_h, ++ &DstStart); ++ if(DstMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ AllSize = (DstMemSize + 15) & (~15); ++ ++ pages = rga_mmu_buf.pages; ++ ++ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { ++ pr_err("RGA Get MMU mem failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ mutex_lock(&rga_service.lock); ++ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ mutex_unlock(&rga_service.lock); ++ ++ if (req->dst.yrgb_addr < KERNEL_SPACE_VALID) { ++ if (req->sg_dst) { ++ ret = rga_MapION(req->sg_dst, &MMU_Base[0], DstMemSize, req->line_draw_info.line_width); ++ } ++ else { ++ ret = rga_MapUserMemory(&pages[0], &MMU_Base[0], DstStart, DstMemSize); ++ if (ret < 0) { ++ pr_err("rga map dst memory failed\n"); ++ status = ret; ++ break; ++ } ++ } ++ } ++ else { ++ MMU_p = MMU_Base; ++ for(i=0; immu_info.base_addr = ((unsigned long)(MMU_Base_phys)>>2); ++ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)); ++ ++ /*record the malloc buf for the cmd end to release*/ ++ reg->MMU_base = MMU_Base; ++ ++ /* flush data to DDR */ + rga_dma_flush_range(MMU_Base, (MMU_Base + AllSize + 1)); -+ -+ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); -+ reg->MMU_len = AllSize + 16; -+ -+ return 0; -+ } -+ while(0); -+ -+ return status; -+} -+ -+ -+static int rga_mmu_info_line_point_drawing_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ return 0; -+} -+ -+static int rga_mmu_info_blur_sharp_filter_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ return 0; -+} -+ -+ -+ -+static int rga_mmu_info_pre_scale_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ int SrcMemSize, DstMemSize; -+ unsigned long SrcStart, DstStart; -+ struct page **pages = NULL; -+ uint32_t i; -+ uint32_t AllSize; -+ uint32_t *MMU_Base, *MMU_p, *MMU_Base_phys; -+ int ret; -+ int status; -+ uint32_t uv_size, v_size; -+ -+ MMU_Base = NULL; -+ -+ do { -+ /* cal src buf mmu info */ -+ SrcMemSize = rga_buf_size_cal(req->src.yrgb_addr, req->src.uv_addr, req->src.v_addr, -+ req->src.format, req->src.vir_w, req->src.vir_h, -+ &SrcStart); -+ if(SrcMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ /* cal dst buf mmu info */ -+ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, -+ req->dst.format, req->dst.vir_w, req->dst.vir_h, -+ &DstStart); -+ if(DstMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ SrcMemSize = (SrcMemSize + 15) & (~15); -+ DstMemSize = (DstMemSize + 15) & (~15); -+ -+ AllSize = SrcMemSize + DstMemSize; -+ -+ pages = rga_mmu_buf.pages; -+ -+ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { -+ pr_err("RGA Get MMU mem failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ mutex_lock(&rga_service.lock); -+ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); -+ mutex_unlock(&rga_service.lock); -+ -+ /* map src pages */ -+ if ((req->mmu_info.mmu_flag >> 8) & 1) { -+ if (req->sg_src) { -+ ret = rga_MapION(req->sg_src, &MMU_Base[0], SrcMemSize,req->line_draw_info.flag); -+ } -+ else { -+ ret = rga_MapUserMemory(&pages[0], &MMU_Base[0], SrcStart, SrcMemSize); -+ if (ret < 0) { -+ pr_err("rga map src memory failed\n"); -+ status = ret; -+ break; -+ } -+ } -+ } -+ else { -+ MMU_p = MMU_Base; -+ -+ for(i=0; immu_info.mmu_flag >> 10) & 1) { -+ if (req->sg_dst) { -+ ret = rga_MapION(req->sg_dst, &MMU_Base[SrcMemSize], DstMemSize, req->line_draw_info.line_width); -+ } -+ else { -+ ret = rga_MapUserMemory(&pages[SrcMemSize], &MMU_Base[SrcMemSize], DstStart, DstMemSize); -+ if (ret < 0) { -+ pr_err("rga map dst memory failed\n"); -+ status = ret; -+ break; -+ } -+ } -+ } -+ else -+ { -+ /* kernel space */ -+ MMU_p = MMU_Base + SrcMemSize; -+ -+ if(req->dst.yrgb_addr == (unsigned long)rga_service.pre_scale_buf) { -+ for(i=0; immu_info.base_addr = ((unsigned long)(MMU_Base_phys)>>2); -+ -+ uv_size = (req->src.uv_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; -+ v_size = (req->src.v_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; -+ -+ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)); -+ req->src.uv_addr = (req->src.uv_addr & (~PAGE_MASK)) | (uv_size << PAGE_SHIFT); -+ req->src.v_addr = (req->src.v_addr & (~PAGE_MASK)) | (v_size << PAGE_SHIFT); -+ -+ uv_size = (req->dst.uv_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT; -+ v_size = (req->dst.v_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT; -+ -+ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | ((SrcMemSize) << PAGE_SHIFT); -+ req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((SrcMemSize + uv_size) << PAGE_SHIFT); -+ req->dst.v_addr = (req->dst.v_addr & (~PAGE_MASK)) | ((SrcMemSize + v_size) << PAGE_SHIFT); -+ -+ /*record the malloc buf for the cmd end to release*/ -+ reg->MMU_base = MMU_Base; -+ -+ /* flush data to DDR */ ++ ++ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); ++ reg->MMU_len = AllSize + 16; ++ ++ return 0; ++ } ++ while(0); ++ ++ return status; ++} ++ ++ ++static int rga_mmu_info_line_point_drawing_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ return 0; ++} ++ ++static int rga_mmu_info_blur_sharp_filter_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ return 0; ++} ++ ++ ++ ++static int rga_mmu_info_pre_scale_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ int SrcMemSize, DstMemSize; ++ unsigned long SrcStart, DstStart; ++ struct page **pages = NULL; ++ uint32_t i; ++ uint32_t AllSize; ++ uint32_t *MMU_Base, *MMU_p, *MMU_Base_phys; ++ int ret; ++ int status; ++ uint32_t uv_size, v_size; ++ ++ MMU_Base = NULL; ++ ++ do { ++ /* cal src buf mmu info */ ++ SrcMemSize = rga_buf_size_cal(req->src.yrgb_addr, req->src.uv_addr, req->src.v_addr, ++ req->src.format, req->src.vir_w, req->src.vir_h, ++ &SrcStart); ++ if(SrcMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ /* cal dst buf mmu info */ ++ DstMemSize = rga_buf_size_cal(req->dst.yrgb_addr, req->dst.uv_addr, req->dst.v_addr, ++ req->dst.format, req->dst.vir_w, req->dst.vir_h, ++ &DstStart); ++ if(DstMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ SrcMemSize = (SrcMemSize + 15) & (~15); ++ DstMemSize = (DstMemSize + 15) & (~15); ++ ++ AllSize = SrcMemSize + DstMemSize; ++ ++ pages = rga_mmu_buf.pages; ++ ++ if (rga_mmu_buf_get_try(&rga_mmu_buf, AllSize + 16)) { ++ pr_err("RGA Get MMU mem failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ mutex_lock(&rga_service.lock); ++ MMU_Base = rga_mmu_buf.buf_virtual + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ MMU_Base_phys = rga_mmu_buf.buf + (rga_mmu_buf.front & (rga_mmu_buf.size - 1)); ++ mutex_unlock(&rga_service.lock); ++ ++ /* map src pages */ ++ if ((req->mmu_info.mmu_flag >> 8) & 1) { ++ if (req->sg_src) { ++ ret = rga_MapION(req->sg_src, &MMU_Base[0], SrcMemSize,req->line_draw_info.flag); ++ } ++ else { ++ ret = rga_MapUserMemory(&pages[0], &MMU_Base[0], SrcStart, SrcMemSize); ++ if (ret < 0) { ++ pr_err("rga map src memory failed\n"); ++ status = ret; ++ break; ++ } ++ } ++ } ++ else { ++ MMU_p = MMU_Base; ++ ++ for(i=0; immu_info.mmu_flag >> 10) & 1) { ++ if (req->sg_dst) { ++ ret = rga_MapION(req->sg_dst, &MMU_Base[SrcMemSize], DstMemSize, req->line_draw_info.line_width); ++ } ++ else { ++ ret = rga_MapUserMemory(&pages[SrcMemSize], &MMU_Base[SrcMemSize], DstStart, DstMemSize); ++ if (ret < 0) { ++ pr_err("rga map dst memory failed\n"); ++ status = ret; ++ break; ++ } ++ } ++ } ++ else ++ { ++ /* kernel space */ ++ MMU_p = MMU_Base + SrcMemSize; ++ ++ if(req->dst.yrgb_addr == (unsigned long)rga_service.pre_scale_buf) { ++ for(i=0; immu_info.base_addr = ((unsigned long)(MMU_Base_phys)>>2); ++ ++ uv_size = (req->src.uv_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; ++ v_size = (req->src.v_addr - (SrcStart << PAGE_SHIFT)) >> PAGE_SHIFT; ++ ++ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)); ++ req->src.uv_addr = (req->src.uv_addr & (~PAGE_MASK)) | (uv_size << PAGE_SHIFT); ++ req->src.v_addr = (req->src.v_addr & (~PAGE_MASK)) | (v_size << PAGE_SHIFT); ++ ++ uv_size = (req->dst.uv_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT; ++ v_size = (req->dst.v_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT; ++ ++ req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | ((SrcMemSize) << PAGE_SHIFT); ++ req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((SrcMemSize + uv_size) << PAGE_SHIFT); ++ req->dst.v_addr = (req->dst.v_addr & (~PAGE_MASK)) | ((SrcMemSize + v_size) << PAGE_SHIFT); ++ ++ /*record the malloc buf for the cmd end to release*/ ++ reg->MMU_base = MMU_Base; ++ ++ /* flush data to DDR */ + rga_dma_flush_range(MMU_Base, (MMU_Base + AllSize + 1)); -+ -+ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); -+ reg->MMU_len = AllSize + 16; -+ -+ return 0; -+ } -+ while(0); -+ -+ return status; -+} -+ -+ -+static int rga_mmu_info_update_palette_table_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ int SrcMemSize, CMDMemSize; -+ unsigned long SrcStart, CMDStart; -+ struct page **pages = NULL; -+ uint32_t i; -+ uint32_t AllSize; -+ uint32_t *MMU_Base, *MMU_p; -+ int ret, status; -+ -+ MMU_Base = NULL; -+ -+ do { -+ /* cal src buf mmu info */ -+ SrcMemSize = rga_mem_size_cal(req->src.yrgb_addr, req->src.vir_w * req->src.vir_h, &SrcStart); -+ if(SrcMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ /* cal cmd buf mmu info */ -+ CMDMemSize = rga_mem_size_cal((unsigned long)rga_service.cmd_buff, RGA_CMD_BUF_SIZE, &CMDStart); -+ if(CMDMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ AllSize = SrcMemSize + CMDMemSize; -+ -+ pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL); -+ if(pages == NULL) { -+ pr_err("RGA MMU malloc pages mem failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ MMU_Base = kzalloc((AllSize + 1)* sizeof(uint32_t), GFP_KERNEL); -+ if(pages == NULL) { -+ pr_err("RGA MMU malloc MMU_Base point failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) -+ { -+ ret = rga_MapUserMemory(&pages[CMDMemSize], &MMU_Base[CMDMemSize], SrcStart, SrcMemSize); -+ if (ret < 0) { -+ pr_err("rga map src memory failed\n"); -+ return -EINVAL; -+ } -+ } -+ else -+ { -+ MMU_p = MMU_Base + CMDMemSize; -+ -+ for(i=0; immu_info.base_addr = (virt_to_phys(MMU_Base) >> 2); -+ -+ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (CMDMemSize << PAGE_SHIFT); -+ -+ /*record the malloc buf for the cmd end to release*/ -+ reg->MMU_base = MMU_Base; -+ -+ /* flush data to DDR */ ++ ++ rga_mmu_buf_get(&rga_mmu_buf, AllSize + 16); ++ reg->MMU_len = AllSize + 16; ++ ++ return 0; ++ } ++ while(0); ++ ++ return status; ++} ++ ++ ++static int rga_mmu_info_update_palette_table_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ int SrcMemSize, CMDMemSize; ++ unsigned long SrcStart, CMDStart; ++ struct page **pages = NULL; ++ uint32_t i; ++ uint32_t AllSize; ++ uint32_t *MMU_Base, *MMU_p; ++ int ret, status; ++ ++ MMU_Base = NULL; ++ ++ do { ++ /* cal src buf mmu info */ ++ SrcMemSize = rga_mem_size_cal(req->src.yrgb_addr, req->src.vir_w * req->src.vir_h, &SrcStart); ++ if(SrcMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ /* cal cmd buf mmu info */ ++ CMDMemSize = rga_mem_size_cal((unsigned long)rga_service.cmd_buff, RGA_CMD_BUF_SIZE, &CMDStart); ++ if(CMDMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ AllSize = SrcMemSize + CMDMemSize; ++ ++ pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL); ++ if(pages == NULL) { ++ pr_err("RGA MMU malloc pages mem failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ MMU_Base = kzalloc((AllSize + 1)* sizeof(uint32_t), GFP_KERNEL); ++ if(pages == NULL) { ++ pr_err("RGA MMU malloc MMU_Base point failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) ++ { ++ ret = rga_MapUserMemory(&pages[CMDMemSize], &MMU_Base[CMDMemSize], SrcStart, SrcMemSize); ++ if (ret < 0) { ++ pr_err("rga map src memory failed\n"); ++ return -EINVAL; ++ } ++ } ++ else ++ { ++ MMU_p = MMU_Base + CMDMemSize; ++ ++ for(i=0; immu_info.base_addr = (virt_to_phys(MMU_Base) >> 2); ++ ++ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (CMDMemSize << PAGE_SHIFT); ++ ++ /*record the malloc buf for the cmd end to release*/ ++ reg->MMU_base = MMU_Base; ++ ++ /* flush data to DDR */ + rga_dma_flush_range(MMU_Base, (MMU_Base + AllSize)); -+ -+ -+ if (pages != NULL) { -+ /* Free the page table */ -+ kfree(pages); -+ } -+ -+ return 0; -+ } -+ while(0); -+ -+ if (pages != NULL) -+ kfree(pages); -+ -+ if (MMU_Base != NULL) -+ kfree(MMU_Base); -+ -+ return status; -+} -+ -+static int rga_mmu_info_update_patten_buff_mode(struct rga_reg *reg, struct rga_req *req) -+{ -+ int SrcMemSize, CMDMemSize; -+ unsigned long SrcStart, CMDStart; -+ struct page **pages = NULL; -+ uint32_t i; -+ uint32_t AllSize; -+ uint32_t *MMU_Base, *MMU_p; -+ int ret, status; -+ -+ MMU_Base = MMU_p = 0; -+ -+ do -+ { -+ -+ /* cal src buf mmu info */ -+ SrcMemSize = rga_mem_size_cal(req->pat.yrgb_addr, req->pat.vir_w * req->pat.vir_h * 4, &SrcStart); -+ if(SrcMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ /* cal cmd buf mmu info */ -+ CMDMemSize = rga_mem_size_cal((unsigned long)rga_service.cmd_buff, RGA_CMD_BUF_SIZE, &CMDStart); -+ if(CMDMemSize == 0) { -+ return -EINVAL; -+ } -+ -+ AllSize = SrcMemSize + CMDMemSize; -+ -+ pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL); -+ if(pages == NULL) { -+ pr_err("RGA MMU malloc pages mem failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ MMU_Base = kzalloc(AllSize * sizeof(uint32_t), GFP_KERNEL); -+ if(MMU_Base == NULL) { -+ pr_err("RGA MMU malloc MMU_Base point failed\n"); -+ status = RGA_MALLOC_ERROR; -+ break; -+ } -+ -+ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) -+ { -+ ret = rga_MapUserMemory(&pages[CMDMemSize], &MMU_Base[CMDMemSize], SrcStart, SrcMemSize); -+ if (ret < 0) { -+ pr_err("rga map src memory failed\n"); -+ status = ret; -+ break; -+ } -+ } -+ else -+ { -+ MMU_p = MMU_Base + CMDMemSize; -+ -+ for(i=0; immu_info.base_addr = (virt_to_phys(MMU_Base) >> 2); -+ -+ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (CMDMemSize << PAGE_SHIFT); -+ -+ /*record the malloc buf for the cmd end to release*/ -+ reg->MMU_base = MMU_Base; -+ -+ /* flush data to DDR */ ++ ++ ++ if (pages != NULL) { ++ /* Free the page table */ ++ kfree(pages); ++ } ++ ++ return 0; ++ } ++ while(0); ++ ++ if (pages != NULL) ++ kfree(pages); ++ ++ if (MMU_Base != NULL) ++ kfree(MMU_Base); ++ ++ return status; ++} ++ ++static int rga_mmu_info_update_patten_buff_mode(struct rga_reg *reg, struct rga_req *req) ++{ ++ int SrcMemSize, CMDMemSize; ++ unsigned long SrcStart, CMDStart; ++ struct page **pages = NULL; ++ uint32_t i; ++ uint32_t AllSize; ++ uint32_t *MMU_Base, *MMU_p; ++ int ret, status; ++ ++ MMU_Base = MMU_p = 0; ++ ++ do ++ { ++ ++ /* cal src buf mmu info */ ++ SrcMemSize = rga_mem_size_cal(req->pat.yrgb_addr, req->pat.vir_w * req->pat.vir_h * 4, &SrcStart); ++ if(SrcMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ /* cal cmd buf mmu info */ ++ CMDMemSize = rga_mem_size_cal((unsigned long)rga_service.cmd_buff, RGA_CMD_BUF_SIZE, &CMDStart); ++ if(CMDMemSize == 0) { ++ return -EINVAL; ++ } ++ ++ AllSize = SrcMemSize + CMDMemSize; ++ ++ pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL); ++ if(pages == NULL) { ++ pr_err("RGA MMU malloc pages mem failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ MMU_Base = kzalloc(AllSize * sizeof(uint32_t), GFP_KERNEL); ++ if(MMU_Base == NULL) { ++ pr_err("RGA MMU malloc MMU_Base point failed\n"); ++ status = RGA_MALLOC_ERROR; ++ break; ++ } ++ ++ for(i=0; isrc.yrgb_addr < KERNEL_SPACE_VALID) ++ { ++ ret = rga_MapUserMemory(&pages[CMDMemSize], &MMU_Base[CMDMemSize], SrcStart, SrcMemSize); ++ if (ret < 0) { ++ pr_err("rga map src memory failed\n"); ++ status = ret; ++ break; ++ } ++ } ++ else ++ { ++ MMU_p = MMU_Base + CMDMemSize; ++ ++ for(i=0; immu_info.base_addr = (virt_to_phys(MMU_Base) >> 2); ++ ++ req->src.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (CMDMemSize << PAGE_SHIFT); ++ ++ /*record the malloc buf for the cmd end to release*/ ++ reg->MMU_base = MMU_Base; ++ ++ /* flush data to DDR */ + rga_dma_flush_range(MMU_Base, (MMU_Base + AllSize)); -+ -+ if (pages != NULL) { -+ /* Free the page table */ -+ kfree(pages); -+ } -+ -+ return 0; -+ -+ } -+ while(0); -+ -+ if (pages != NULL) -+ kfree(pages); -+ -+ if (MMU_Base != NULL) -+ kfree(MMU_Base); -+ -+ return status; -+} -+ -+int rga_set_mmu_info(struct rga_reg *reg, struct rga_req *req) -+{ -+ int ret; -+ -+ switch (req->render_mode) { -+ case bitblt_mode : -+ ret = rga_mmu_info_BitBlt_mode(reg, req); -+ break; -+ case color_palette_mode : -+ ret = rga_mmu_info_color_palette_mode(reg, req); -+ break; -+ case color_fill_mode : -+ ret = rga_mmu_info_color_fill_mode(reg, req); -+ break; -+ case line_point_drawing_mode : -+ ret = rga_mmu_info_line_point_drawing_mode(reg, req); -+ break; -+ case blur_sharp_filter_mode : -+ ret = rga_mmu_info_blur_sharp_filter_mode(reg, req); -+ break; -+ case pre_scaling_mode : -+ ret = rga_mmu_info_pre_scale_mode(reg, req); -+ break; -+ case update_palette_table_mode : -+ ret = rga_mmu_info_update_palette_table_mode(reg, req); -+ break; -+ case update_patten_buff_mode : -+ ret = rga_mmu_info_update_patten_buff_mode(reg, req); -+ break; -+ default : -+ ret = -1; -+ break; -+ } -+ -+ return ret; -+} -+ ++ ++ if (pages != NULL) { ++ /* Free the page table */ ++ kfree(pages); ++ } ++ ++ return 0; ++ ++ } ++ while(0); ++ ++ if (pages != NULL) ++ kfree(pages); ++ ++ if (MMU_Base != NULL) ++ kfree(MMU_Base); ++ ++ return status; ++} ++ ++int rga_set_mmu_info(struct rga_reg *reg, struct rga_req *req) ++{ ++ int ret; ++ ++ switch (req->render_mode) { ++ case bitblt_mode : ++ ret = rga_mmu_info_BitBlt_mode(reg, req); ++ break; ++ case color_palette_mode : ++ ret = rga_mmu_info_color_palette_mode(reg, req); ++ break; ++ case color_fill_mode : ++ ret = rga_mmu_info_color_fill_mode(reg, req); ++ break; ++ case line_point_drawing_mode : ++ ret = rga_mmu_info_line_point_drawing_mode(reg, req); ++ break; ++ case blur_sharp_filter_mode : ++ ret = rga_mmu_info_blur_sharp_filter_mode(reg, req); ++ break; ++ case pre_scaling_mode : ++ ret = rga_mmu_info_pre_scale_mode(reg, req); ++ break; ++ case update_palette_table_mode : ++ ret = rga_mmu_info_update_palette_table_mode(reg, req); ++ break; ++ case update_patten_buff_mode : ++ ret = rga_mmu_info_update_patten_buff_mode(reg, req); ++ break; ++ default : ++ ret = -1; ++ break; ++ } ++ ++ return ret; ++} ++ diff --git a/drivers/video/rockchip/rga/rga_mmu_info.h b/drivers/video/rockchip/rga/rga_mmu_info.h new file mode 100755 -index 000000000000..3e70894c7ee7 +index 000000000..ff57089b9 --- /dev/null +++ b/drivers/video/rockchip/rga/rga_mmu_info.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef __RGA_MMU_INFO_H__ -+#define __RGA_MMU_INFO_H__ -+ ++#ifndef __RGA_MMU_INFO_H__ ++#define __RGA_MMU_INFO_H__ ++ +#include "rga.h" +#include "RGA_API.h" -+ -+#ifndef MIN -+#define MIN(X, Y) ((X)<(Y)?(X):(Y)) -+#endif -+ -+#ifndef MAX -+#define MAX(X, Y) ((X)>(Y)?(X):(Y)) -+#endif ++ ++#ifndef MIN ++#define MIN(X, Y) ((X)<(Y)?(X):(Y)) ++#endif ++ ++#ifndef MAX ++#define MAX(X, Y) ((X)>(Y)?(X):(Y)) ++#endif + +extern struct rga_drvdata *drvdata; + +void rga_dma_flush_range(void *pstart, void *pend); -+int rga_set_mmu_info(struct rga_reg *reg, struct rga_req *req); -+ -+ -+#endif -+ -+ ++int rga_set_mmu_info(struct rga_reg *reg, struct rga_req *req); ++ ++ ++#endif ++ ++ diff --git a/drivers/video/rockchip/rga/rga_reg_info.c b/drivers/video/rockchip/rga/rga_reg_info.c new file mode 100755 -index 000000000000..94a6305b870b +index 000000000..563eaab7b --- /dev/null +++ b/drivers/video/rockchip/rga/rga_reg_info.c @@ -0,0 +1,1587 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+ -+//#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+//#include -+//#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include ++ ++//#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++//#include ++//#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include +#include -+ -+#include "rga_reg_info.h" -+#include "rga_rop.h" -+#include "rga.h" -+ -+ -+/************************************************************* -+Func: -+ RGA_pixel_width_init -+Description: -+ select pixel_width form data format -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ -+unsigned char -+RGA_pixel_width_init(unsigned int format) -+{ -+ unsigned char pixel_width; -+ -+ pixel_width = 0; -+ -+ switch(format) -+ { -+ /* RGB FORMAT */ -+ case RK_FORMAT_RGBA_8888 : pixel_width = 4; break; -+ case RK_FORMAT_RGBX_8888 : pixel_width = 4; break; -+ case RK_FORMAT_RGB_888 : pixel_width = 3; break; -+ case RK_FORMAT_BGRA_8888 : pixel_width = 4; break; -+ case RK_FORMAT_RGB_565 : pixel_width = 2; break; -+ case RK_FORMAT_RGBA_5551 : pixel_width = 2; break; -+ case RK_FORMAT_RGBA_4444 : pixel_width = 2; break; -+ case RK_FORMAT_BGR_888 : pixel_width = 3; break; -+ -+ /* YUV FORMAT */ -+ case RK_FORMAT_YCbCr_422_SP : pixel_width = 1; break; -+ case RK_FORMAT_YCbCr_422_P : pixel_width = 1; break; -+ case RK_FORMAT_YCbCr_420_SP : pixel_width = 1; break; -+ case RK_FORMAT_YCbCr_420_P : pixel_width = 1; break; -+ case RK_FORMAT_YCrCb_422_SP : pixel_width = 1; break; -+ case RK_FORMAT_YCrCb_422_P : pixel_width = 1; break; -+ case RK_FORMAT_YCrCb_420_SP : pixel_width = 1; break; -+ case RK_FORMAT_YCrCb_420_P : pixel_width = 1; break; -+ //case default : pixel_width = 0; break; -+ } -+ -+ return pixel_width; -+} -+ -+/************************************************************* -+Func: -+ dst_ctrl_cal -+Description: -+ calculate dst act window position / width / height -+ and set the tile struct -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++ ++#include "rga_reg_info.h" ++#include "rga_rop.h" ++#include "rga.h" ++ ++ ++/************************************************************* ++Func: ++ RGA_pixel_width_init ++Description: ++ select pixel_width form data format ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ ++unsigned char ++RGA_pixel_width_init(unsigned int format) ++{ ++ unsigned char pixel_width; ++ ++ pixel_width = 0; ++ ++ switch(format) ++ { ++ /* RGB FORMAT */ ++ case RK_FORMAT_RGBA_8888 : pixel_width = 4; break; ++ case RK_FORMAT_RGBX_8888 : pixel_width = 4; break; ++ case RK_FORMAT_RGB_888 : pixel_width = 3; break; ++ case RK_FORMAT_BGRA_8888 : pixel_width = 4; break; ++ case RK_FORMAT_RGB_565 : pixel_width = 2; break; ++ case RK_FORMAT_RGBA_5551 : pixel_width = 2; break; ++ case RK_FORMAT_RGBA_4444 : pixel_width = 2; break; ++ case RK_FORMAT_BGR_888 : pixel_width = 3; break; ++ ++ /* YUV FORMAT */ ++ case RK_FORMAT_YCbCr_422_SP : pixel_width = 1; break; ++ case RK_FORMAT_YCbCr_422_P : pixel_width = 1; break; ++ case RK_FORMAT_YCbCr_420_SP : pixel_width = 1; break; ++ case RK_FORMAT_YCbCr_420_P : pixel_width = 1; break; ++ case RK_FORMAT_YCrCb_422_SP : pixel_width = 1; break; ++ case RK_FORMAT_YCrCb_422_P : pixel_width = 1; break; ++ case RK_FORMAT_YCrCb_420_SP : pixel_width = 1; break; ++ case RK_FORMAT_YCrCb_420_P : pixel_width = 1; break; ++ //case default : pixel_width = 0; break; ++ } ++ ++ return pixel_width; ++} ++ ++/************************************************************* ++Func: ++ dst_ctrl_cal ++Description: ++ calculate dst act window position / width / height ++ and set the tile struct ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ +static void -+dst_ctrl_cal(const struct rga_req *msg, TILE_INFO *tile) -+{ -+ u32 width = msg->dst.act_w; -+ u32 height = msg->dst.act_h; -+ s32 xoff = msg->dst.x_offset; -+ s32 yoff = msg->dst.y_offset; -+ -+ s32 x0, y0, x1, y1, x2, y2; -+ s32 x00,y00,x10,y10,x20,y20; -+ s32 xx, xy, yx, yy; -+ s32 pos[8]; -+ -+ s32 xmax, xmin, ymax, ymin; -+ -+ s32 sina = msg->sina; /* 16.16 */ -+ s32 cosa = msg->cosa; /* 16.16 */ -+ -+ xmax = xmin = ymax = ymin = 0; -+ -+ if((msg->rotate_mode == 0)||(msg->rotate_mode == 2)||(msg->rotate_mode == 3)) -+ { -+ pos[0] = xoff; -+ pos[1] = yoff; -+ -+ pos[2] = xoff; -+ pos[3] = yoff + height - 1; -+ -+ pos[4] = xoff + width - 1; -+ pos[5] = yoff + height - 1; -+ -+ pos[6] = xoff + width - 1; -+ pos[7] = yoff; -+ -+ xmax = MIN(MAX(MAX(MAX(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmax); -+ xmin = MAX(MIN(MIN(MIN(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmin); -+ -+ ymax = MIN(MAX(MAX(MAX(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymax); -+ ymin = MAX(MIN(MIN(MIN(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymin); -+ -+ //printk("xmax = %d, xmin = %d, ymin = %d, ymax = %d\n", xmax, xmin, ymin, ymax); -+ } -+ else if(msg->rotate_mode == 1) -+ { -+ if((sina == 0) || (cosa == 0)) -+ { -+ if((sina == 0) && (cosa == -65536)) -+ { -+ /* 180 */ -+ pos[0] = xoff - width + 1; -+ pos[1] = yoff - height + 1; -+ -+ pos[2] = xoff - width + 1; -+ pos[3] = yoff; -+ -+ pos[4] = xoff; -+ pos[5] = yoff; -+ -+ pos[6] = xoff; -+ pos[7] = yoff - height + 1; -+ } -+ else if((cosa == 0)&&(sina == 65536)) -+ { -+ /* 90 */ -+ pos[0] = xoff - height + 1; -+ pos[1] = yoff; -+ -+ pos[2] = xoff - height + 1; -+ pos[3] = yoff + width - 1; -+ -+ pos[4] = xoff; -+ pos[5] = yoff + width - 1; -+ -+ pos[6] = xoff; -+ pos[7] = yoff; -+ } -+ else if((cosa == 0)&&(sina == -65536)) -+ { -+ /* 270 */ -+ pos[0] = xoff; -+ pos[1] = yoff - width + 1; -+ -+ pos[2] = xoff; -+ pos[3] = yoff; -+ -+ pos[4] = xoff + height - 1; -+ pos[5] = yoff; -+ -+ pos[6] = xoff + height - 1; -+ pos[7] = yoff - width + 1; -+ } -+ else -+ { -+ /* 0 */ -+ pos[0] = xoff; -+ pos[1] = yoff; -+ -+ pos[2] = xoff; -+ pos[3] = yoff + height - 1; -+ -+ pos[4] = xoff + width - 1; -+ pos[5] = yoff + height - 1; -+ -+ pos[6] = xoff + width - 1; -+ pos[7] = yoff; -+ } -+ -+ xmax = MIN(MAX(MAX(MAX(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmax); -+ xmin = MAX(MIN(MIN(MIN(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmin); -+ -+ ymax = MIN(MAX(MAX(MAX(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymax); -+ ymin = MAX(MIN(MIN(MIN(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymin); -+ } -+ else -+ { -+ xx = msg->cosa; -+ xy = msg->sina; -+ yx = xy; -+ yy = xx; -+ -+ x0 = width + xoff; -+ y0 = yoff; -+ -+ x1 = xoff; -+ y1 = height + yoff; -+ -+ x2 = width + xoff; -+ y2 = height + yoff; -+ -+ pos[0] = xoff; -+ pos[1] = yoff; -+ -+ pos[2] = x00 = (((x0 - xoff)*xx - (y0 - yoff)*xy)>>16) + xoff; -+ pos[3] = y00 = (((x0 - xoff)*yx + (y0 - yoff)*yy)>>16) + yoff; -+ -+ pos[4] = x10 = (((x1 - xoff)*xx - (y1 - yoff)*xy)>>16) + xoff; -+ pos[5] = y10 = (((x1 - xoff)*yx + (y1 - yoff)*yy)>>16) + yoff; -+ -+ pos[6] = x20 = (((x2 - xoff)*xx - (y2 - yoff)*xy)>>16) + xoff; -+ pos[7] = y20 = (((x2 - xoff)*yx + (y2 - yoff)*yy)>>16) + yoff; -+ -+ xmax = MAX(MAX(MAX(x00, xoff), x10), x20) + 2; -+ xmin = MIN(MIN(MIN(x00, xoff), x10), x20) - 1; -+ -+ ymax = MAX(MAX(MAX(y00, yoff), y10), y20) + 2; -+ ymin = MIN(MIN(MIN(y00, yoff), y10), y20) - 1; -+ -+ xmax = MIN(xmax, msg->clip.xmax); -+ xmin = MAX(xmin, msg->clip.xmin); -+ -+ ymax = MIN(ymax, msg->clip.ymax); -+ ymin = MAX(ymin, msg->clip.ymin); -+ -+ //printk("xmin = %d, xmax = %d, ymin = %d, ymax = %d\n", xmin, xmax, ymin, ymax); -+ } -+ } -+ -+ if ((xmax < xmin) || (ymax < ymin)) { -+ xmin = xmax; -+ ymin = ymax; -+ } -+ -+ if ((xmin >= msg->dst.vir_w)||(xmax < 0)||(ymin >= msg->dst.vir_h)||(ymax < 0)) { -+ xmin = xmax = ymin = ymax = 0; -+ } -+ -+ //printk("xmin = %d, xmax = %d, ymin = %d, ymax = %d\n", xmin, xmax, ymin, ymax); -+ -+ tile->dst_ctrl.w = (xmax - xmin); -+ tile->dst_ctrl.h = (ymax - ymin); -+ tile->dst_ctrl.x_off = xmin; -+ tile->dst_ctrl.y_off = ymin; -+ -+ //printk("tile->dst_ctrl.w = %x, tile->dst_ctrl.h = %x\n", tile->dst_ctrl.w, tile->dst_ctrl.h); -+ -+ tile->tile_x_num = (xmax - xmin + 1 + 7)>>3; -+ tile->tile_y_num = (ymax - ymin + 1 + 7)>>3; -+ -+ tile->dst_x_tmp = xmin - msg->dst.x_offset; -+ tile->dst_y_tmp = ymin - msg->dst.y_offset; -+} -+ -+/************************************************************* -+Func: -+ src_tile_info_cal -+Description: -+ calculate src remap window position / width / height -+ and set the tile struct -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ -+ ++dst_ctrl_cal(const struct rga_req *msg, TILE_INFO *tile) ++{ ++ u32 width = msg->dst.act_w; ++ u32 height = msg->dst.act_h; ++ s32 xoff = msg->dst.x_offset; ++ s32 yoff = msg->dst.y_offset; ++ ++ s32 x0, y0, x1, y1, x2, y2; ++ s32 x00,y00,x10,y10,x20,y20; ++ s32 xx, xy, yx, yy; ++ s32 pos[8]; ++ ++ s32 xmax, xmin, ymax, ymin; ++ ++ s32 sina = msg->sina; /* 16.16 */ ++ s32 cosa = msg->cosa; /* 16.16 */ ++ ++ xmax = xmin = ymax = ymin = 0; ++ ++ if((msg->rotate_mode == 0)||(msg->rotate_mode == 2)||(msg->rotate_mode == 3)) ++ { ++ pos[0] = xoff; ++ pos[1] = yoff; ++ ++ pos[2] = xoff; ++ pos[3] = yoff + height - 1; ++ ++ pos[4] = xoff + width - 1; ++ pos[5] = yoff + height - 1; ++ ++ pos[6] = xoff + width - 1; ++ pos[7] = yoff; ++ ++ xmax = MIN(MAX(MAX(MAX(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmax); ++ xmin = MAX(MIN(MIN(MIN(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmin); ++ ++ ymax = MIN(MAX(MAX(MAX(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymax); ++ ymin = MAX(MIN(MIN(MIN(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymin); ++ ++ //printk("xmax = %d, xmin = %d, ymin = %d, ymax = %d\n", xmax, xmin, ymin, ymax); ++ } ++ else if(msg->rotate_mode == 1) ++ { ++ if((sina == 0) || (cosa == 0)) ++ { ++ if((sina == 0) && (cosa == -65536)) ++ { ++ /* 180 */ ++ pos[0] = xoff - width + 1; ++ pos[1] = yoff - height + 1; ++ ++ pos[2] = xoff - width + 1; ++ pos[3] = yoff; ++ ++ pos[4] = xoff; ++ pos[5] = yoff; ++ ++ pos[6] = xoff; ++ pos[7] = yoff - height + 1; ++ } ++ else if((cosa == 0)&&(sina == 65536)) ++ { ++ /* 90 */ ++ pos[0] = xoff - height + 1; ++ pos[1] = yoff; ++ ++ pos[2] = xoff - height + 1; ++ pos[3] = yoff + width - 1; ++ ++ pos[4] = xoff; ++ pos[5] = yoff + width - 1; ++ ++ pos[6] = xoff; ++ pos[7] = yoff; ++ } ++ else if((cosa == 0)&&(sina == -65536)) ++ { ++ /* 270 */ ++ pos[0] = xoff; ++ pos[1] = yoff - width + 1; ++ ++ pos[2] = xoff; ++ pos[3] = yoff; ++ ++ pos[4] = xoff + height - 1; ++ pos[5] = yoff; ++ ++ pos[6] = xoff + height - 1; ++ pos[7] = yoff - width + 1; ++ } ++ else ++ { ++ /* 0 */ ++ pos[0] = xoff; ++ pos[1] = yoff; ++ ++ pos[2] = xoff; ++ pos[3] = yoff + height - 1; ++ ++ pos[4] = xoff + width - 1; ++ pos[5] = yoff + height - 1; ++ ++ pos[6] = xoff + width - 1; ++ pos[7] = yoff; ++ } ++ ++ xmax = MIN(MAX(MAX(MAX(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmax); ++ xmin = MAX(MIN(MIN(MIN(pos[0], pos[2]), pos[4]), pos[6]), msg->clip.xmin); ++ ++ ymax = MIN(MAX(MAX(MAX(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymax); ++ ymin = MAX(MIN(MIN(MIN(pos[1], pos[3]), pos[5]), pos[7]), msg->clip.ymin); ++ } ++ else ++ { ++ xx = msg->cosa; ++ xy = msg->sina; ++ yx = xy; ++ yy = xx; ++ ++ x0 = width + xoff; ++ y0 = yoff; ++ ++ x1 = xoff; ++ y1 = height + yoff; ++ ++ x2 = width + xoff; ++ y2 = height + yoff; ++ ++ pos[0] = xoff; ++ pos[1] = yoff; ++ ++ pos[2] = x00 = (((x0 - xoff)*xx - (y0 - yoff)*xy)>>16) + xoff; ++ pos[3] = y00 = (((x0 - xoff)*yx + (y0 - yoff)*yy)>>16) + yoff; ++ ++ pos[4] = x10 = (((x1 - xoff)*xx - (y1 - yoff)*xy)>>16) + xoff; ++ pos[5] = y10 = (((x1 - xoff)*yx + (y1 - yoff)*yy)>>16) + yoff; ++ ++ pos[6] = x20 = (((x2 - xoff)*xx - (y2 - yoff)*xy)>>16) + xoff; ++ pos[7] = y20 = (((x2 - xoff)*yx + (y2 - yoff)*yy)>>16) + yoff; ++ ++ xmax = MAX(MAX(MAX(x00, xoff), x10), x20) + 2; ++ xmin = MIN(MIN(MIN(x00, xoff), x10), x20) - 1; ++ ++ ymax = MAX(MAX(MAX(y00, yoff), y10), y20) + 2; ++ ymin = MIN(MIN(MIN(y00, yoff), y10), y20) - 1; ++ ++ xmax = MIN(xmax, msg->clip.xmax); ++ xmin = MAX(xmin, msg->clip.xmin); ++ ++ ymax = MIN(ymax, msg->clip.ymax); ++ ymin = MAX(ymin, msg->clip.ymin); ++ ++ //printk("xmin = %d, xmax = %d, ymin = %d, ymax = %d\n", xmin, xmax, ymin, ymax); ++ } ++ } ++ ++ if ((xmax < xmin) || (ymax < ymin)) { ++ xmin = xmax; ++ ymin = ymax; ++ } ++ ++ if ((xmin >= msg->dst.vir_w)||(xmax < 0)||(ymin >= msg->dst.vir_h)||(ymax < 0)) { ++ xmin = xmax = ymin = ymax = 0; ++ } ++ ++ //printk("xmin = %d, xmax = %d, ymin = %d, ymax = %d\n", xmin, xmax, ymin, ymax); ++ ++ tile->dst_ctrl.w = (xmax - xmin); ++ tile->dst_ctrl.h = (ymax - ymin); ++ tile->dst_ctrl.x_off = xmin; ++ tile->dst_ctrl.y_off = ymin; ++ ++ //printk("tile->dst_ctrl.w = %x, tile->dst_ctrl.h = %x\n", tile->dst_ctrl.w, tile->dst_ctrl.h); ++ ++ tile->tile_x_num = (xmax - xmin + 1 + 7)>>3; ++ tile->tile_y_num = (ymax - ymin + 1 + 7)>>3; ++ ++ tile->dst_x_tmp = xmin - msg->dst.x_offset; ++ tile->dst_y_tmp = ymin - msg->dst.y_offset; ++} ++ ++/************************************************************* ++Func: ++ src_tile_info_cal ++Description: ++ calculate src remap window position / width / height ++ and set the tile struct ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ ++ +static void -+src_tile_info_cal(const struct rga_req *msg, TILE_INFO *tile) -+{ -+ s32 x0, x1, x2, x3, y0, y1, y2, y3; -+ -+ int64_t xx, xy, yx, yy; -+ -+ int64_t pos[8]; -+ int64_t epos[8]; -+ -+ int64_t x_dx, x_dy, y_dx, y_dy; -+ int64_t x_temp_start, y_temp_start; -+ int64_t xmax, xmin, ymax, ymin; -+ -+ int64_t t_xoff, t_yoff; -+ -+ xx = tile->matrix[0]; /* 32.32 */ -+ xy = tile->matrix[1]; /* 32.32 */ -+ yx = tile->matrix[2]; /* 32.32 */ -+ yy = tile->matrix[3]; /* 32.32 */ -+ -+ if(msg->rotate_mode == 1) -+ { -+ x0 = tile->dst_x_tmp; -+ y0 = tile->dst_y_tmp; -+ -+ x1 = x0; -+ y1 = y0 + 8; -+ -+ x2 = x0 + 8; -+ y2 = y0 + 8; -+ -+ x3 = x0 + 8; -+ y3 = y0; -+ -+ pos[0] = (x0*xx + y0*yx); -+ pos[1] = (x0*xy + y0*yy); -+ -+ pos[2] = (x1*xx + y1*yx); -+ pos[3] = (x1*xy + y1*yy); -+ -+ pos[4] = (x2*xx + y2*yx); -+ pos[5] = (x2*xy + y2*yy); -+ -+ pos[6] = (x3*xx + y3*yx); -+ pos[7] = (x3*xy + y3*yy); -+ -+ y1 = y0 + 7; -+ x2 = x0 + 7; -+ y2 = y0 + 7; -+ x3 = x0 + 7; -+ -+ epos[0] = pos[0]; -+ epos[1] = pos[1]; -+ -+ epos[2] = (x1*xx + y1*yx); -+ epos[3] = (x1*xy + y1*yy); -+ -+ epos[4] = (x2*xx + y2*yx); -+ epos[5] = (x2*xy + y2*yy); -+ -+ epos[6] = (x3*xx + y3*yx); -+ epos[7] = (x3*xy + y3*yy); -+ -+ x_dx = pos[6] - pos[0]; -+ x_dy = pos[7] - pos[1]; -+ -+ y_dx = pos[2] - pos[0]; -+ y_dy = pos[3] - pos[1]; -+ -+ tile->x_dx = (s32)(x_dx >> 22 ); -+ tile->x_dy = (s32)(x_dy >> 22 ); -+ tile->y_dx = (s32)(y_dx >> 22 ); -+ tile->y_dy = (s32)(y_dy >> 22 ); -+ -+ x_temp_start = x0*xx + y0*yx; -+ y_temp_start = x0*xy + y0*yy; -+ -+ xmax = (MAX(MAX(MAX(epos[0], epos[2]), epos[4]), epos[6])); -+ xmin = (MIN(MIN(MIN(epos[0], epos[2]), epos[4]), epos[6])); -+ -+ ymax = (MAX(MAX(MAX(epos[1], epos[3]), epos[5]), epos[7])); -+ ymin = (MIN(MIN(MIN(epos[1], epos[3]), epos[5]), epos[7])); -+ -+ t_xoff = (x_temp_start - xmin)>>18; -+ t_yoff = (y_temp_start - ymin)>>18; -+ -+ tile->tile_xoff = (s32)t_xoff; -+ tile->tile_yoff = (s32)t_yoff; -+ -+ tile->tile_w = (u16)((xmax - xmin)>>21); //.11 -+ tile->tile_h = (u16)((ymax - ymin)>>21); //.11 -+ -+ tile->tile_start_x_coor = (s16)(xmin>>29); //.3 -+ tile->tile_start_y_coor = (s16)(ymin>>29); //.3 -+ } -+ else if (msg->rotate_mode == 2) -+ { -+ tile->x_dx = (s32)((8*xx)>>22); -+ tile->x_dy = 0; -+ tile->y_dx = 0; -+ tile->y_dy = (s32)((8*yy)>>22); -+ -+ tile->tile_w = ABS((s32)((7*xx)>>21)); -+ tile->tile_h = ABS((s32)((7*yy)>>21)); -+ -+ tile->tile_xoff = ABS((s32)((7*xx)>>18)); -+ tile->tile_yoff = 0; -+ -+ tile->tile_start_x_coor = (((msg->src.act_w - 1)<<11) - (tile->tile_w))>>8; -+ tile->tile_start_y_coor = 0; -+ } -+ else if (msg->rotate_mode == 3) -+ { -+ tile->x_dx = (s32)((8*xx)>>22); -+ tile->x_dy = 0; -+ tile->y_dx = 0; -+ tile->y_dy = (s32)((8*yy)>>22); -+ -+ tile->tile_w = ABS((s32)((7*xx)>>21)); -+ tile->tile_h = ABS((s32)((7*yy)>>21)); -+ -+ tile->tile_xoff = 0; -+ tile->tile_yoff = ABS((s32)((7*yy)>>18)); -+ -+ tile->tile_start_x_coor = 0; -+ tile->tile_start_y_coor = (((msg->src.act_h - 1)<<11) - (tile->tile_h))>>8; -+ } -+ -+ if ((msg->scale_mode == 2)||(msg->alpha_rop_flag >> 7)) -+ { -+ tile->tile_start_x_coor -= (1<<3); -+ tile->tile_start_y_coor -= (1<<3); -+ tile->tile_w += (2 << 11); -+ tile->tile_h += (2 << 11); -+ tile->tile_xoff += (1<<14); -+ tile->tile_yoff += (1<<14); -+ } -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_mode_ctrl -+Description: -+ fill mode ctrl reg info -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ -+ ++src_tile_info_cal(const struct rga_req *msg, TILE_INFO *tile) ++{ ++ s32 x0, x1, x2, x3, y0, y1, y2, y3; ++ ++ int64_t xx, xy, yx, yy; ++ ++ int64_t pos[8]; ++ int64_t epos[8]; ++ ++ int64_t x_dx, x_dy, y_dx, y_dy; ++ int64_t x_temp_start, y_temp_start; ++ int64_t xmax, xmin, ymax, ymin; ++ ++ int64_t t_xoff, t_yoff; ++ ++ xx = tile->matrix[0]; /* 32.32 */ ++ xy = tile->matrix[1]; /* 32.32 */ ++ yx = tile->matrix[2]; /* 32.32 */ ++ yy = tile->matrix[3]; /* 32.32 */ ++ ++ if(msg->rotate_mode == 1) ++ { ++ x0 = tile->dst_x_tmp; ++ y0 = tile->dst_y_tmp; ++ ++ x1 = x0; ++ y1 = y0 + 8; ++ ++ x2 = x0 + 8; ++ y2 = y0 + 8; ++ ++ x3 = x0 + 8; ++ y3 = y0; ++ ++ pos[0] = (x0*xx + y0*yx); ++ pos[1] = (x0*xy + y0*yy); ++ ++ pos[2] = (x1*xx + y1*yx); ++ pos[3] = (x1*xy + y1*yy); ++ ++ pos[4] = (x2*xx + y2*yx); ++ pos[5] = (x2*xy + y2*yy); ++ ++ pos[6] = (x3*xx + y3*yx); ++ pos[7] = (x3*xy + y3*yy); ++ ++ y1 = y0 + 7; ++ x2 = x0 + 7; ++ y2 = y0 + 7; ++ x3 = x0 + 7; ++ ++ epos[0] = pos[0]; ++ epos[1] = pos[1]; ++ ++ epos[2] = (x1*xx + y1*yx); ++ epos[3] = (x1*xy + y1*yy); ++ ++ epos[4] = (x2*xx + y2*yx); ++ epos[5] = (x2*xy + y2*yy); ++ ++ epos[6] = (x3*xx + y3*yx); ++ epos[7] = (x3*xy + y3*yy); ++ ++ x_dx = pos[6] - pos[0]; ++ x_dy = pos[7] - pos[1]; ++ ++ y_dx = pos[2] - pos[0]; ++ y_dy = pos[3] - pos[1]; ++ ++ tile->x_dx = (s32)(x_dx >> 22 ); ++ tile->x_dy = (s32)(x_dy >> 22 ); ++ tile->y_dx = (s32)(y_dx >> 22 ); ++ tile->y_dy = (s32)(y_dy >> 22 ); ++ ++ x_temp_start = x0*xx + y0*yx; ++ y_temp_start = x0*xy + y0*yy; ++ ++ xmax = (MAX(MAX(MAX(epos[0], epos[2]), epos[4]), epos[6])); ++ xmin = (MIN(MIN(MIN(epos[0], epos[2]), epos[4]), epos[6])); ++ ++ ymax = (MAX(MAX(MAX(epos[1], epos[3]), epos[5]), epos[7])); ++ ymin = (MIN(MIN(MIN(epos[1], epos[3]), epos[5]), epos[7])); ++ ++ t_xoff = (x_temp_start - xmin)>>18; ++ t_yoff = (y_temp_start - ymin)>>18; ++ ++ tile->tile_xoff = (s32)t_xoff; ++ tile->tile_yoff = (s32)t_yoff; ++ ++ tile->tile_w = (u16)((xmax - xmin)>>21); //.11 ++ tile->tile_h = (u16)((ymax - ymin)>>21); //.11 ++ ++ tile->tile_start_x_coor = (s16)(xmin>>29); //.3 ++ tile->tile_start_y_coor = (s16)(ymin>>29); //.3 ++ } ++ else if (msg->rotate_mode == 2) ++ { ++ tile->x_dx = (s32)((8*xx)>>22); ++ tile->x_dy = 0; ++ tile->y_dx = 0; ++ tile->y_dy = (s32)((8*yy)>>22); ++ ++ tile->tile_w = ABS((s32)((7*xx)>>21)); ++ tile->tile_h = ABS((s32)((7*yy)>>21)); ++ ++ tile->tile_xoff = ABS((s32)((7*xx)>>18)); ++ tile->tile_yoff = 0; ++ ++ tile->tile_start_x_coor = (((msg->src.act_w - 1)<<11) - (tile->tile_w))>>8; ++ tile->tile_start_y_coor = 0; ++ } ++ else if (msg->rotate_mode == 3) ++ { ++ tile->x_dx = (s32)((8*xx)>>22); ++ tile->x_dy = 0; ++ tile->y_dx = 0; ++ tile->y_dy = (s32)((8*yy)>>22); ++ ++ tile->tile_w = ABS((s32)((7*xx)>>21)); ++ tile->tile_h = ABS((s32)((7*yy)>>21)); ++ ++ tile->tile_xoff = 0; ++ tile->tile_yoff = ABS((s32)((7*yy)>>18)); ++ ++ tile->tile_start_x_coor = 0; ++ tile->tile_start_y_coor = (((msg->src.act_h - 1)<<11) - (tile->tile_h))>>8; ++ } ++ ++ if ((msg->scale_mode == 2)||(msg->alpha_rop_flag >> 7)) ++ { ++ tile->tile_start_x_coor -= (1<<3); ++ tile->tile_start_y_coor -= (1<<3); ++ tile->tile_w += (2 << 11); ++ tile->tile_h += (2 << 11); ++ tile->tile_xoff += (1<<14); ++ tile->tile_yoff += (1<<14); ++ } ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_mode_ctrl ++Description: ++ fill mode ctrl reg info ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ ++ +static void -+RGA_set_mode_ctrl(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_MODE_CTL; -+ u32 reg = 0; -+ -+ u8 src_rgb_pack = 0; -+ u8 src_format = 0; -+ u8 src_rb_swp = 0; -+ u8 src_a_swp = 0; -+ u8 src_cbcr_swp = 0; -+ -+ u8 dst_rgb_pack = 0; -+ u8 dst_format = 0; -+ u8 dst_rb_swp = 0; -+ u8 dst_a_swp = 0; -+ -+ bRGA_MODE_CTL = (u32 *)(base + RGA_MODE_CTRL_OFFSET); -+ -+ reg = ((reg & (~m_RGA_MODE_CTRL_2D_RENDER_MODE)) | (s_RGA_MODE_CTRL_2D_RENDER_MODE(msg->render_mode))); -+ -+ /* src info set */ -+ -+ if (msg->render_mode == color_palette_mode || msg->render_mode == update_palette_table_mode) -+ { -+ src_format = 0x10 | (msg->palette_mode & 3); -+ } -+ else -+ { -+ switch (msg->src.format) -+ { -+ case RK_FORMAT_RGBA_8888 : src_format = 0x0; break; -+ case RK_FORMAT_RGBA_4444 : src_format = 0x3; break; -+ case RK_FORMAT_RGBA_5551 : src_format = 0x2; break; -+ case RK_FORMAT_BGRA_8888 : src_format = 0x0; src_rb_swp = 0x1; break; -+ case RK_FORMAT_RGBX_8888 : src_format = 0x0; break; -+ case RK_FORMAT_RGB_565 : src_format = 0x1; break; -+ case RK_FORMAT_RGB_888 : src_format = 0x0; src_rgb_pack = 1; break; -+ case RK_FORMAT_BGR_888 : src_format = 0x0; src_rgb_pack = 1; src_rb_swp = 1; break; -+ -+ case RK_FORMAT_YCbCr_422_SP : src_format = 0x4; break; -+ case RK_FORMAT_YCbCr_422_P : src_format = 0x5; break; -+ case RK_FORMAT_YCbCr_420_SP : src_format = 0x6; break; -+ case RK_FORMAT_YCbCr_420_P : src_format = 0x7; break; -+ -+ case RK_FORMAT_YCrCb_422_SP : src_format = 0x4; src_cbcr_swp = 1; break; -+ case RK_FORMAT_YCrCb_422_P : src_format = 0x5; src_cbcr_swp = 1; break; -+ case RK_FORMAT_YCrCb_420_SP : src_format = 0x6; src_cbcr_swp = 1; break; -+ case RK_FORMAT_YCrCb_420_P : src_format = 0x7; src_cbcr_swp = 1; break; -+ } -+ } -+ -+ src_a_swp = msg->src.alpha_swap & 1; -+ -+ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_RGB_PACK)) | (s_RGA_MODE_CTRL_SRC_RGB_PACK(src_rgb_pack))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_FORMAT)) | (s_RGA_MODE_CTRL_SRC_FORMAT(src_format))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_RB_SWAP)) | (s_RGA_MODE_CTRL_SRC_RB_SWAP(src_rb_swp))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_ALPHA_SWAP)) | (s_RGA_MODE_CTRL_SRC_ALPHA_SWAP(src_a_swp))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_UV_SWAP_MODE )) | (s_RGA_MODE_CTRL_SRC_UV_SWAP_MODE (src_cbcr_swp))); -+ -+ -+ /* YUV2RGB MODE */ -+ reg = ((reg & (~m_RGA_MODE_CTRL_YUV2RGB_CON_MODE)) | (s_RGA_MODE_CTRL_YUV2RGB_CON_MODE(msg->yuv2rgb_mode))); -+ -+ /* ROTATE MODE */ -+ reg = ((reg & (~m_RGA_MODE_CTRL_ROTATE_MODE)) | (s_RGA_MODE_CTRL_ROTATE_MODE(msg->rotate_mode))); -+ -+ /* SCALE MODE */ -+ reg = ((reg & (~m_RGA_MODE_CTRL_SCALE_MODE)) | (s_RGA_MODE_CTRL_SCALE_MODE(msg->scale_mode))); -+ -+ /* COLOR FILL MODE */ -+ reg = ((reg & (~m_RGA_MODE_CTRL_PAT_SEL)) | (s_RGA_MODE_CTRL_PAT_SEL(msg->color_fill_mode))); -+ -+ -+ if ((msg->render_mode == update_palette_table_mode)||(msg->render_mode == update_patten_buff_mode)) -+ { -+ dst_format = msg->pat.format; -+ } -+ else -+ { -+ dst_format = (u8)msg->dst.format; -+ } -+ -+ /* dst info set */ -+ switch (dst_format) -+ { -+ case RK_FORMAT_BGRA_8888 : dst_format = 0x0; dst_rb_swp = 0x1; break; -+ case RK_FORMAT_RGBA_4444 : dst_format = 0x3; break; -+ case RK_FORMAT_RGBA_5551 : dst_format = 0x2; break; -+ case RK_FORMAT_RGBA_8888 : dst_format = 0x0; break; -+ case RK_FORMAT_RGB_565 : dst_format = 0x1; break; -+ case RK_FORMAT_RGB_888 : dst_format = 0x0; dst_rgb_pack = 0x1; break; -+ case RK_FORMAT_BGR_888 : dst_format = 0x0; dst_rgb_pack = 0x1; dst_rb_swp = 1; break; -+ case RK_FORMAT_RGBX_8888 : dst_format = 0x0; break; -+ } -+ -+ dst_a_swp = msg->dst.alpha_swap & 1; -+ -+ reg = ((reg & (~m_RGA_MODE_CTRL_DST_FORMAT)) | (s_RGA_MODE_CTRL_DST_FORMAT(dst_format))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_DST_RGB_PACK)) | (s_RGA_MODE_CTRL_DST_RGB_PACK(dst_rgb_pack))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_DST_RB_SWAP)) | (s_RGA_MODE_CTRL_DST_RB_SWAP(dst_rb_swp))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_DST_ALPHA_SWAP)) | (s_RGA_MODE_CTRL_DST_ALPHA_SWAP(dst_a_swp))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_LUT_ENDIAN_MODE)) | (s_RGA_MODE_CTRL_LUT_ENDIAN_MODE(msg->endian_mode & 1))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_TRANS_MODE)) | (s_RGA_MODE_CTRL_SRC_TRANS_MODE(msg->src_trans_mode))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_ZERO_MODE_ENABLE)) | (s_RGA_MODE_CTRL_ZERO_MODE_ENABLE(msg->alpha_rop_mode >> 4))); -+ reg = ((reg & (~m_RGA_MODE_CTRL_DST_ALPHA_ENABLE)) | (s_RGA_MODE_CTRL_DST_ALPHA_ENABLE(msg->alpha_rop_mode >> 5))); -+ -+ *bRGA_MODE_CTL = reg; -+ -+} -+ -+ -+ -+/************************************************************* -+Func: -+ RGA_set_src -+Description: -+ fill src relate reg info -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ -+ ++RGA_set_mode_ctrl(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_MODE_CTL; ++ u32 reg = 0; ++ ++ u8 src_rgb_pack = 0; ++ u8 src_format = 0; ++ u8 src_rb_swp = 0; ++ u8 src_a_swp = 0; ++ u8 src_cbcr_swp = 0; ++ ++ u8 dst_rgb_pack = 0; ++ u8 dst_format = 0; ++ u8 dst_rb_swp = 0; ++ u8 dst_a_swp = 0; ++ ++ bRGA_MODE_CTL = (u32 *)(base + RGA_MODE_CTRL_OFFSET); ++ ++ reg = ((reg & (~m_RGA_MODE_CTRL_2D_RENDER_MODE)) | (s_RGA_MODE_CTRL_2D_RENDER_MODE(msg->render_mode))); ++ ++ /* src info set */ ++ ++ if (msg->render_mode == color_palette_mode || msg->render_mode == update_palette_table_mode) ++ { ++ src_format = 0x10 | (msg->palette_mode & 3); ++ } ++ else ++ { ++ switch (msg->src.format) ++ { ++ case RK_FORMAT_RGBA_8888 : src_format = 0x0; break; ++ case RK_FORMAT_RGBA_4444 : src_format = 0x3; break; ++ case RK_FORMAT_RGBA_5551 : src_format = 0x2; break; ++ case RK_FORMAT_BGRA_8888 : src_format = 0x0; src_rb_swp = 0x1; break; ++ case RK_FORMAT_RGBX_8888 : src_format = 0x0; break; ++ case RK_FORMAT_RGB_565 : src_format = 0x1; break; ++ case RK_FORMAT_RGB_888 : src_format = 0x0; src_rgb_pack = 1; break; ++ case RK_FORMAT_BGR_888 : src_format = 0x0; src_rgb_pack = 1; src_rb_swp = 1; break; ++ ++ case RK_FORMAT_YCbCr_422_SP : src_format = 0x4; break; ++ case RK_FORMAT_YCbCr_422_P : src_format = 0x5; break; ++ case RK_FORMAT_YCbCr_420_SP : src_format = 0x6; break; ++ case RK_FORMAT_YCbCr_420_P : src_format = 0x7; break; ++ ++ case RK_FORMAT_YCrCb_422_SP : src_format = 0x4; src_cbcr_swp = 1; break; ++ case RK_FORMAT_YCrCb_422_P : src_format = 0x5; src_cbcr_swp = 1; break; ++ case RK_FORMAT_YCrCb_420_SP : src_format = 0x6; src_cbcr_swp = 1; break; ++ case RK_FORMAT_YCrCb_420_P : src_format = 0x7; src_cbcr_swp = 1; break; ++ } ++ } ++ ++ src_a_swp = msg->src.alpha_swap & 1; ++ ++ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_RGB_PACK)) | (s_RGA_MODE_CTRL_SRC_RGB_PACK(src_rgb_pack))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_FORMAT)) | (s_RGA_MODE_CTRL_SRC_FORMAT(src_format))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_RB_SWAP)) | (s_RGA_MODE_CTRL_SRC_RB_SWAP(src_rb_swp))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_ALPHA_SWAP)) | (s_RGA_MODE_CTRL_SRC_ALPHA_SWAP(src_a_swp))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_UV_SWAP_MODE )) | (s_RGA_MODE_CTRL_SRC_UV_SWAP_MODE (src_cbcr_swp))); ++ ++ ++ /* YUV2RGB MODE */ ++ reg = ((reg & (~m_RGA_MODE_CTRL_YUV2RGB_CON_MODE)) | (s_RGA_MODE_CTRL_YUV2RGB_CON_MODE(msg->yuv2rgb_mode))); ++ ++ /* ROTATE MODE */ ++ reg = ((reg & (~m_RGA_MODE_CTRL_ROTATE_MODE)) | (s_RGA_MODE_CTRL_ROTATE_MODE(msg->rotate_mode))); ++ ++ /* SCALE MODE */ ++ reg = ((reg & (~m_RGA_MODE_CTRL_SCALE_MODE)) | (s_RGA_MODE_CTRL_SCALE_MODE(msg->scale_mode))); ++ ++ /* COLOR FILL MODE */ ++ reg = ((reg & (~m_RGA_MODE_CTRL_PAT_SEL)) | (s_RGA_MODE_CTRL_PAT_SEL(msg->color_fill_mode))); ++ ++ ++ if ((msg->render_mode == update_palette_table_mode)||(msg->render_mode == update_patten_buff_mode)) ++ { ++ dst_format = msg->pat.format; ++ } ++ else ++ { ++ dst_format = (u8)msg->dst.format; ++ } ++ ++ /* dst info set */ ++ switch (dst_format) ++ { ++ case RK_FORMAT_BGRA_8888 : dst_format = 0x0; dst_rb_swp = 0x1; break; ++ case RK_FORMAT_RGBA_4444 : dst_format = 0x3; break; ++ case RK_FORMAT_RGBA_5551 : dst_format = 0x2; break; ++ case RK_FORMAT_RGBA_8888 : dst_format = 0x0; break; ++ case RK_FORMAT_RGB_565 : dst_format = 0x1; break; ++ case RK_FORMAT_RGB_888 : dst_format = 0x0; dst_rgb_pack = 0x1; break; ++ case RK_FORMAT_BGR_888 : dst_format = 0x0; dst_rgb_pack = 0x1; dst_rb_swp = 1; break; ++ case RK_FORMAT_RGBX_8888 : dst_format = 0x0; break; ++ } ++ ++ dst_a_swp = msg->dst.alpha_swap & 1; ++ ++ reg = ((reg & (~m_RGA_MODE_CTRL_DST_FORMAT)) | (s_RGA_MODE_CTRL_DST_FORMAT(dst_format))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_DST_RGB_PACK)) | (s_RGA_MODE_CTRL_DST_RGB_PACK(dst_rgb_pack))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_DST_RB_SWAP)) | (s_RGA_MODE_CTRL_DST_RB_SWAP(dst_rb_swp))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_DST_ALPHA_SWAP)) | (s_RGA_MODE_CTRL_DST_ALPHA_SWAP(dst_a_swp))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_LUT_ENDIAN_MODE)) | (s_RGA_MODE_CTRL_LUT_ENDIAN_MODE(msg->endian_mode & 1))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_SRC_TRANS_MODE)) | (s_RGA_MODE_CTRL_SRC_TRANS_MODE(msg->src_trans_mode))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_ZERO_MODE_ENABLE)) | (s_RGA_MODE_CTRL_ZERO_MODE_ENABLE(msg->alpha_rop_mode >> 4))); ++ reg = ((reg & (~m_RGA_MODE_CTRL_DST_ALPHA_ENABLE)) | (s_RGA_MODE_CTRL_DST_ALPHA_ENABLE(msg->alpha_rop_mode >> 5))); ++ ++ *bRGA_MODE_CTL = reg; ++ ++} ++ ++ ++ ++/************************************************************* ++Func: ++ RGA_set_src ++Description: ++ fill src relate reg info ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ ++ +static void -+RGA_set_src(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_SRC_VIR_INFO; -+ u32 *bRGA_SRC_ACT_INFO; -+ u32 *bRGA_SRC_Y_MST; -+ u32 *bRGA_SRC_CB_MST; -+ u32 *bRGA_SRC_CR_MST; -+ -+ s16 x_off, y_off, stride; -+ s16 uv_x_off, uv_y_off, uv_stride; -+ u32 pixel_width; -+ -+ uv_x_off = uv_y_off = uv_stride = 0; -+ -+ bRGA_SRC_Y_MST = (u32 *)(base + RGA_SRC_Y_MST_OFFSET); -+ bRGA_SRC_CB_MST = (u32 *)(base + RGA_SRC_CB_MST_OFFSET); -+ bRGA_SRC_CR_MST = (u32 *)(base + RGA_SRC_CR_MST_OFFSET); -+ bRGA_SRC_VIR_INFO = (u32 *)(base + RGA_SRC_VIR_INFO_OFFSET); -+ bRGA_SRC_ACT_INFO = (u32 *)(base + RGA_SRC_ACT_INFO_OFFSET); -+ -+ x_off = msg->src.x_offset; -+ y_off = msg->src.y_offset; -+ -+ pixel_width = RGA_pixel_width_init(msg->src.format); -+ -+ stride = ((msg->src.vir_w * pixel_width) + 3) & (~3); -+ -+ switch(msg->src.format) -+ { -+ case RK_FORMAT_YCbCr_422_SP : -+ uv_stride = stride; -+ uv_x_off = x_off; -+ uv_y_off = y_off; -+ break; -+ case RK_FORMAT_YCbCr_422_P : -+ uv_stride = stride >> 1; -+ uv_x_off = x_off >> 1; -+ uv_y_off = y_off; -+ break; -+ case RK_FORMAT_YCbCr_420_SP : -+ uv_stride = stride; -+ uv_x_off = x_off; -+ uv_y_off = y_off >> 1; -+ break; -+ case RK_FORMAT_YCbCr_420_P : -+ uv_stride = stride >> 1; -+ uv_x_off = x_off >> 1; -+ uv_y_off = y_off >> 1; -+ break; -+ case RK_FORMAT_YCrCb_422_SP : -+ uv_stride = stride; -+ uv_x_off = x_off; -+ uv_y_off = y_off; -+ break; -+ case RK_FORMAT_YCrCb_422_P : -+ uv_stride = stride >> 1; -+ uv_x_off = x_off >> 1; -+ uv_y_off = y_off; -+ break; -+ case RK_FORMAT_YCrCb_420_SP : -+ uv_stride = stride; -+ uv_x_off = x_off; -+ uv_y_off = y_off >> 1; -+ break; -+ case RK_FORMAT_YCrCb_420_P : -+ uv_stride = stride >> 1; -+ uv_x_off = x_off >> 1; -+ uv_y_off = y_off >> 1; -+ break; -+ } -+ -+ -+ /* src addr set */ -+ *bRGA_SRC_Y_MST = msg->src.yrgb_addr + (y_off * stride) + (x_off * pixel_width); -+ *bRGA_SRC_CB_MST = msg->src.uv_addr + uv_y_off * uv_stride + uv_x_off; -+ *bRGA_SRC_CR_MST = msg->src.v_addr + uv_y_off * uv_stride + uv_x_off; -+ -+ if((msg->alpha_rop_flag >> 1) & 1) -+ *bRGA_SRC_CB_MST = (u32)msg->rop_mask_addr; -+ -+ if (msg->render_mode == color_palette_mode) -+ { -+ u8 shift; -+ u16 sw, byte_num; -+ shift = 3 - (msg->palette_mode & 3); -+ sw = msg->src.vir_w; -+ -+ byte_num = sw >> shift; -+ stride = (byte_num + 3) & (~3); -+ } -+ -+ /* src act window / vir window set */ -+ *bRGA_SRC_VIR_INFO = ((stride >> 2) | (msg->src.vir_h)<<16); -+ *bRGA_SRC_ACT_INFO = ((msg->src.act_w-1) | (msg->src.act_h-1)<<16); -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_dst -+Description: -+ fill dst relate reg info -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_src(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_SRC_VIR_INFO; ++ u32 *bRGA_SRC_ACT_INFO; ++ u32 *bRGA_SRC_Y_MST; ++ u32 *bRGA_SRC_CB_MST; ++ u32 *bRGA_SRC_CR_MST; ++ ++ s16 x_off, y_off, stride; ++ s16 uv_x_off, uv_y_off, uv_stride; ++ u32 pixel_width; ++ ++ uv_x_off = uv_y_off = uv_stride = 0; ++ ++ bRGA_SRC_Y_MST = (u32 *)(base + RGA_SRC_Y_MST_OFFSET); ++ bRGA_SRC_CB_MST = (u32 *)(base + RGA_SRC_CB_MST_OFFSET); ++ bRGA_SRC_CR_MST = (u32 *)(base + RGA_SRC_CR_MST_OFFSET); ++ bRGA_SRC_VIR_INFO = (u32 *)(base + RGA_SRC_VIR_INFO_OFFSET); ++ bRGA_SRC_ACT_INFO = (u32 *)(base + RGA_SRC_ACT_INFO_OFFSET); ++ ++ x_off = msg->src.x_offset; ++ y_off = msg->src.y_offset; ++ ++ pixel_width = RGA_pixel_width_init(msg->src.format); ++ ++ stride = ((msg->src.vir_w * pixel_width) + 3) & (~3); ++ ++ switch(msg->src.format) ++ { ++ case RK_FORMAT_YCbCr_422_SP : ++ uv_stride = stride; ++ uv_x_off = x_off; ++ uv_y_off = y_off; ++ break; ++ case RK_FORMAT_YCbCr_422_P : ++ uv_stride = stride >> 1; ++ uv_x_off = x_off >> 1; ++ uv_y_off = y_off; ++ break; ++ case RK_FORMAT_YCbCr_420_SP : ++ uv_stride = stride; ++ uv_x_off = x_off; ++ uv_y_off = y_off >> 1; ++ break; ++ case RK_FORMAT_YCbCr_420_P : ++ uv_stride = stride >> 1; ++ uv_x_off = x_off >> 1; ++ uv_y_off = y_off >> 1; ++ break; ++ case RK_FORMAT_YCrCb_422_SP : ++ uv_stride = stride; ++ uv_x_off = x_off; ++ uv_y_off = y_off; ++ break; ++ case RK_FORMAT_YCrCb_422_P : ++ uv_stride = stride >> 1; ++ uv_x_off = x_off >> 1; ++ uv_y_off = y_off; ++ break; ++ case RK_FORMAT_YCrCb_420_SP : ++ uv_stride = stride; ++ uv_x_off = x_off; ++ uv_y_off = y_off >> 1; ++ break; ++ case RK_FORMAT_YCrCb_420_P : ++ uv_stride = stride >> 1; ++ uv_x_off = x_off >> 1; ++ uv_y_off = y_off >> 1; ++ break; ++ } ++ ++ ++ /* src addr set */ ++ *bRGA_SRC_Y_MST = msg->src.yrgb_addr + (y_off * stride) + (x_off * pixel_width); ++ *bRGA_SRC_CB_MST = msg->src.uv_addr + uv_y_off * uv_stride + uv_x_off; ++ *bRGA_SRC_CR_MST = msg->src.v_addr + uv_y_off * uv_stride + uv_x_off; ++ ++ if((msg->alpha_rop_flag >> 1) & 1) ++ *bRGA_SRC_CB_MST = (u32)msg->rop_mask_addr; ++ ++ if (msg->render_mode == color_palette_mode) ++ { ++ u8 shift; ++ u16 sw, byte_num; ++ shift = 3 - (msg->palette_mode & 3); ++ sw = msg->src.vir_w; ++ ++ byte_num = sw >> shift; ++ stride = (byte_num + 3) & (~3); ++ } ++ ++ /* src act window / vir window set */ ++ *bRGA_SRC_VIR_INFO = ((stride >> 2) | (msg->src.vir_h)<<16); ++ *bRGA_SRC_ACT_INFO = ((msg->src.act_w-1) | (msg->src.act_h-1)<<16); ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_dst ++Description: ++ fill dst relate reg info ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static s32 RGA_set_dst(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_DST_MST; -+ u32 *bRGA_DST_UV_MST; -+ u32 *bRGA_DST_VIR_INFO; -+ u32 *bRGA_DST_CTR_INFO; -+ u32 *bRGA_PRESCL_CB_MST; -+ u32 *bRGA_PRESCL_CR_MST; -+ u32 *bRGA_YUV_OUT_CFG; -+ -+ u32 reg = 0; -+ -+ u8 pw; -+ s16 x_off = msg->dst.x_offset; -+ s16 y_off = msg->dst.y_offset; -+ u16 stride, rop_mask_stride; -+ -+ bRGA_DST_MST = (u32 *)(base + RGA_DST_MST_OFFSET); -+ bRGA_DST_UV_MST = (u32 *)(base + RGA_DST_UV_MST_OFFSET); -+ bRGA_DST_VIR_INFO = (u32 *)(base + RGA_DST_VIR_INFO_OFFSET); -+ bRGA_DST_CTR_INFO = (u32 *)(base + RGA_DST_CTR_INFO_OFFSET); -+ bRGA_PRESCL_CB_MST = (u32 *)(base + RGA_PRESCL_CB_MST_OFFSET); -+ bRGA_PRESCL_CR_MST = (u32 *)(base + RGA_PRESCL_CR_MST_OFFSET); -+ bRGA_YUV_OUT_CFG = (u32 *)(base + RGA_YUV_OUT_CFG_OFFSET); -+ -+ pw = RGA_pixel_width_init(msg->dst.format); -+ -+ stride = (msg->dst.vir_w * pw + 3) & (~3); -+ -+ *bRGA_DST_MST = (u32)msg->dst.yrgb_addr + (y_off * stride) + (x_off * pw); -+ ++{ ++ u32 *bRGA_DST_MST; ++ u32 *bRGA_DST_UV_MST; ++ u32 *bRGA_DST_VIR_INFO; ++ u32 *bRGA_DST_CTR_INFO; ++ u32 *bRGA_PRESCL_CB_MST; ++ u32 *bRGA_PRESCL_CR_MST; ++ u32 *bRGA_YUV_OUT_CFG; ++ ++ u32 reg = 0; ++ ++ u8 pw; ++ s16 x_off = msg->dst.x_offset; ++ s16 y_off = msg->dst.y_offset; ++ u16 stride, rop_mask_stride; ++ ++ bRGA_DST_MST = (u32 *)(base + RGA_DST_MST_OFFSET); ++ bRGA_DST_UV_MST = (u32 *)(base + RGA_DST_UV_MST_OFFSET); ++ bRGA_DST_VIR_INFO = (u32 *)(base + RGA_DST_VIR_INFO_OFFSET); ++ bRGA_DST_CTR_INFO = (u32 *)(base + RGA_DST_CTR_INFO_OFFSET); ++ bRGA_PRESCL_CB_MST = (u32 *)(base + RGA_PRESCL_CB_MST_OFFSET); ++ bRGA_PRESCL_CR_MST = (u32 *)(base + RGA_PRESCL_CR_MST_OFFSET); ++ bRGA_YUV_OUT_CFG = (u32 *)(base + RGA_YUV_OUT_CFG_OFFSET); ++ ++ pw = RGA_pixel_width_init(msg->dst.format); ++ ++ stride = (msg->dst.vir_w * pw + 3) & (~3); ++ ++ *bRGA_DST_MST = (u32)msg->dst.yrgb_addr + (y_off * stride) + (x_off * pw); ++ + *bRGA_DST_UV_MST = 0; + *bRGA_YUV_OUT_CFG = 0; + if (msg->rotate_mode == 1) { @@ -1670598,1465 +1670659,1465 @@ index 000000000000..94a6305b870b + } + } + -+ switch(msg->dst.format) -+ { -+ case RK_FORMAT_YCbCr_422_SP : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off) * pw); ++ switch(msg->dst.format) ++ { ++ case RK_FORMAT_YCbCr_422_SP : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off) * pw); + *bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + (y_off * stride) + x_off; + *bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 2) & 3) << 4) | (0 << 3) | (0 << 1) | 1; -+ break; -+ case RK_FORMAT_YCbCr_422_P : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off>>1) * pw); -+ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off) * stride) + ((x_off>>1) * pw); -+ break; -+ case RK_FORMAT_YCbCr_420_SP : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off) * pw); ++ break; ++ case RK_FORMAT_YCbCr_422_P : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off>>1) * pw); ++ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off) * stride) + ((x_off>>1) * pw); ++ break; ++ case RK_FORMAT_YCbCr_420_SP : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off) * pw); + *bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + x_off; + *bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 2) & 3) << 4) | (0 << 3) | (1 << 1) | 1; -+ break; -+ case RK_FORMAT_YCbCr_420_P : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); -+ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); -+ break; -+ case RK_FORMAT_YCrCb_422_SP : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off) * pw); ++ break; ++ case RK_FORMAT_YCbCr_420_P : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); ++ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); ++ break; ++ case RK_FORMAT_YCrCb_422_SP : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off) * pw); + *bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + (y_off * stride) + x_off; + *bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 2) & 3) << 4) | (1 << 3) | (0 << 1) | 1; -+ break; -+ case RK_FORMAT_YCrCb_422_P : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off>>1) * pw); -+ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off) * stride) + ((x_off>>1) * pw); -+ break; -+ case RK_FORMAT_YCrCb_420_SP : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off) * pw); ++ break; ++ case RK_FORMAT_YCrCb_422_P : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off) * stride) + ((x_off>>1) * pw); ++ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off) * stride) + ((x_off>>1) * pw); ++ break; ++ case RK_FORMAT_YCrCb_420_SP : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off) * pw); + *bRGA_DST_UV_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + x_off; + *bRGA_YUV_OUT_CFG |= (((msg->yuv2rgb_mode >> 2) & 3) << 4) | (1 << 3) | (1 << 1) | 1; -+ break; -+ case RK_FORMAT_YCrCb_420_P : -+ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); -+ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); -+ break; -+ } -+ -+ rop_mask_stride = (((msg->src.vir_w + 7)>>3) + 3) & (~3);//not dst_vir.w,hxx,2011.7.21 -+ -+ reg = (stride >> 2) & 0xffff; -+ reg = reg | ((rop_mask_stride>>2) << 16); -+ -+ #if defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3188) -+ //reg = reg | ((msg->alpha_rop_mode & 3) << 28); -+ reg = reg | (1 << 28); -+ #endif -+ -+ if (msg->render_mode == line_point_drawing_mode) -+ { -+ reg &= 0xffff; -+ reg = reg | (msg->dst.vir_h << 16); -+ } -+ -+ *bRGA_DST_VIR_INFO = reg; -+ *bRGA_DST_CTR_INFO = (msg->dst.act_w - 1) | ((msg->dst.act_h - 1) << 16); ++ break; ++ case RK_FORMAT_YCrCb_420_P : ++ *bRGA_PRESCL_CB_MST = (u32)msg->dst.uv_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); ++ *bRGA_PRESCL_CR_MST = (u32)msg->dst.v_addr + ((y_off>>1) * stride) + ((x_off>>1) * pw); ++ break; ++ } ++ ++ rop_mask_stride = (((msg->src.vir_w + 7)>>3) + 3) & (~3);//not dst_vir.w,hxx,2011.7.21 ++ ++ reg = (stride >> 2) & 0xffff; ++ reg = reg | ((rop_mask_stride>>2) << 16); ++ ++ #if defined(CONFIG_ARCH_RK2928) || defined(CONFIG_ARCH_RK3188) ++ //reg = reg | ((msg->alpha_rop_mode & 3) << 28); ++ reg = reg | (1 << 28); ++ #endif ++ ++ if (msg->render_mode == line_point_drawing_mode) ++ { ++ reg &= 0xffff; ++ reg = reg | (msg->dst.vir_h << 16); ++ } ++ ++ *bRGA_DST_VIR_INFO = reg; ++ *bRGA_DST_CTR_INFO = (msg->dst.act_w - 1) | ((msg->dst.act_h - 1) << 16); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)) -+ if (msg->render_mode == pre_scaling_mode) { -+ *bRGA_YUV_OUT_CFG &= 0xfffffffe; -+ } -+#endif -+ return 0; -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_alpha_rop -+Description: -+ fill alpha rop some relate reg bit -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++ if (msg->render_mode == pre_scaling_mode) { ++ *bRGA_YUV_OUT_CFG &= 0xfffffffe; ++ } ++#endif ++ return 0; ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_alpha_rop ++Description: ++ fill alpha rop some relate reg bit ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ +static void -+RGA_set_alpha_rop(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_ALPHA_CON; -+ u32 *bRGA_ROP_CON0; -+ u32 *bRGA_ROP_CON1; -+ u32 reg = 0; -+ u32 rop_con0, rop_con1; -+ -+ u8 rop_mode = (msg->alpha_rop_mode) & 3; -+ u8 alpha_mode = msg->alpha_rop_mode & 3; -+ -+ rop_con0 = rop_con1 = 0; -+ -+ bRGA_ALPHA_CON = (u32 *)(base + RGA_ALPHA_CON_OFFSET); -+ -+ reg = ((reg & (~m_RGA_ALPHA_CON_ENABLE) )| (s_RGA_ALPHA_CON_ENABLE(msg->alpha_rop_flag & 1))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_A_OR_R_SEL)) | (s_RGA_ALPHA_CON_A_OR_R_SEL((msg->alpha_rop_flag >> 1) & 1))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_ALPHA_MODE)) | (s_RGA_ALPHA_CON_ALPHA_MODE(alpha_mode))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_PD_MODE)) | (s_RGA_ALPHA_CON_PD_MODE(msg->PD_mode))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_SET_CONSTANT_VALUE)) | (s_RGA_ALPHA_CON_SET_CONSTANT_VALUE(msg->alpha_global_value))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_PD_M_SEL)) | (s_RGA_ALPHA_CON_PD_M_SEL(msg->alpha_rop_flag >> 3))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_FADING_ENABLE)) | (s_RGA_ALPHA_CON_FADING_ENABLE(msg->alpha_rop_flag >> 2))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_ROP_MODE_SEL)) | (s_RGA_ALPHA_CON_ROP_MODE_SEL(rop_mode))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_CAL_MODE_SEL)) | (s_RGA_ALPHA_CON_CAL_MODE_SEL(msg->alpha_rop_flag >> 4))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_DITHER_ENABLE)) | (s_RGA_ALPHA_CON_DITHER_ENABLE(msg->alpha_rop_flag >> 5))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_GRADIENT_CAL_MODE)) | (s_RGA_ALPHA_CON_GRADIENT_CAL_MODE(msg->alpha_rop_flag >> 6))); -+ reg = ((reg & (~m_RGA_ALPHA_CON_AA_SEL)) | (s_RGA_ALPHA_CON_AA_SEL(msg->alpha_rop_flag >> 7))); -+ -+ *bRGA_ALPHA_CON = reg; -+ -+ if(rop_mode == 0) { -+ rop_con0 = ROP3_code[(msg->rop_code & 0xff)]; -+ } -+ else if(rop_mode == 1) { -+ rop_con0 = ROP3_code[(msg->rop_code & 0xff)]; -+ } -+ else if(rop_mode == 2) { -+ rop_con0 = ROP3_code[(msg->rop_code & 0xff)]; -+ rop_con1 = ROP3_code[(msg->rop_code & 0xff00)>>8]; -+ } -+ -+ bRGA_ROP_CON0 = (u32 *)(base + RGA_ROP_CON0_OFFSET); -+ bRGA_ROP_CON1 = (u32 *)(base + RGA_ROP_CON1_OFFSET); -+ -+ *bRGA_ROP_CON0 = (u32)rop_con0; -+ *bRGA_ROP_CON1 = (u32)rop_con1; -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_color -+Description: -+ fill color some relate reg bit -+ bg_color/fg_color -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_alpha_rop(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_ALPHA_CON; ++ u32 *bRGA_ROP_CON0; ++ u32 *bRGA_ROP_CON1; ++ u32 reg = 0; ++ u32 rop_con0, rop_con1; ++ ++ u8 rop_mode = (msg->alpha_rop_mode) & 3; ++ u8 alpha_mode = msg->alpha_rop_mode & 3; ++ ++ rop_con0 = rop_con1 = 0; ++ ++ bRGA_ALPHA_CON = (u32 *)(base + RGA_ALPHA_CON_OFFSET); ++ ++ reg = ((reg & (~m_RGA_ALPHA_CON_ENABLE) )| (s_RGA_ALPHA_CON_ENABLE(msg->alpha_rop_flag & 1))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_A_OR_R_SEL)) | (s_RGA_ALPHA_CON_A_OR_R_SEL((msg->alpha_rop_flag >> 1) & 1))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_ALPHA_MODE)) | (s_RGA_ALPHA_CON_ALPHA_MODE(alpha_mode))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_PD_MODE)) | (s_RGA_ALPHA_CON_PD_MODE(msg->PD_mode))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_SET_CONSTANT_VALUE)) | (s_RGA_ALPHA_CON_SET_CONSTANT_VALUE(msg->alpha_global_value))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_PD_M_SEL)) | (s_RGA_ALPHA_CON_PD_M_SEL(msg->alpha_rop_flag >> 3))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_FADING_ENABLE)) | (s_RGA_ALPHA_CON_FADING_ENABLE(msg->alpha_rop_flag >> 2))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_ROP_MODE_SEL)) | (s_RGA_ALPHA_CON_ROP_MODE_SEL(rop_mode))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_CAL_MODE_SEL)) | (s_RGA_ALPHA_CON_CAL_MODE_SEL(msg->alpha_rop_flag >> 4))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_DITHER_ENABLE)) | (s_RGA_ALPHA_CON_DITHER_ENABLE(msg->alpha_rop_flag >> 5))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_GRADIENT_CAL_MODE)) | (s_RGA_ALPHA_CON_GRADIENT_CAL_MODE(msg->alpha_rop_flag >> 6))); ++ reg = ((reg & (~m_RGA_ALPHA_CON_AA_SEL)) | (s_RGA_ALPHA_CON_AA_SEL(msg->alpha_rop_flag >> 7))); ++ ++ *bRGA_ALPHA_CON = reg; ++ ++ if(rop_mode == 0) { ++ rop_con0 = ROP3_code[(msg->rop_code & 0xff)]; ++ } ++ else if(rop_mode == 1) { ++ rop_con0 = ROP3_code[(msg->rop_code & 0xff)]; ++ } ++ else if(rop_mode == 2) { ++ rop_con0 = ROP3_code[(msg->rop_code & 0xff)]; ++ rop_con1 = ROP3_code[(msg->rop_code & 0xff00)>>8]; ++ } ++ ++ bRGA_ROP_CON0 = (u32 *)(base + RGA_ROP_CON0_OFFSET); ++ bRGA_ROP_CON1 = (u32 *)(base + RGA_ROP_CON1_OFFSET); ++ ++ *bRGA_ROP_CON0 = (u32)rop_con0; ++ *bRGA_ROP_CON1 = (u32)rop_con1; ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_color ++Description: ++ fill color some relate reg bit ++ bg_color/fg_color ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static void -+RGA_set_color(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_SRC_TR_COLOR0; -+ u32 *bRGA_SRC_TR_COLOR1; -+ u32 *bRGA_SRC_BG_COLOR; -+ u32 *bRGA_SRC_FG_COLOR; -+ -+ -+ bRGA_SRC_BG_COLOR = (u32 *)(base + RGA_SRC_BG_COLOR_OFFSET); -+ bRGA_SRC_FG_COLOR = (u32 *)(base + RGA_SRC_FG_COLOR_OFFSET); -+ -+ *bRGA_SRC_BG_COLOR = msg->bg_color; /* 1bpp 0 */ -+ *bRGA_SRC_FG_COLOR = msg->fg_color; /* 1bpp 1 */ -+ -+ bRGA_SRC_TR_COLOR0 = (u32 *)(base + RGA_SRC_TR_COLOR0_OFFSET); -+ bRGA_SRC_TR_COLOR1 = (u32 *)(base + RGA_SRC_TR_COLOR1_OFFSET); -+ -+ *bRGA_SRC_TR_COLOR0 = msg->color_key_min; -+ *bRGA_SRC_TR_COLOR1 = msg->color_key_max; -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_fading -+Description: -+ fill fading some relate reg bit -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_color(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_SRC_TR_COLOR0; ++ u32 *bRGA_SRC_TR_COLOR1; ++ u32 *bRGA_SRC_BG_COLOR; ++ u32 *bRGA_SRC_FG_COLOR; ++ ++ ++ bRGA_SRC_BG_COLOR = (u32 *)(base + RGA_SRC_BG_COLOR_OFFSET); ++ bRGA_SRC_FG_COLOR = (u32 *)(base + RGA_SRC_FG_COLOR_OFFSET); ++ ++ *bRGA_SRC_BG_COLOR = msg->bg_color; /* 1bpp 0 */ ++ *bRGA_SRC_FG_COLOR = msg->fg_color; /* 1bpp 1 */ ++ ++ bRGA_SRC_TR_COLOR0 = (u32 *)(base + RGA_SRC_TR_COLOR0_OFFSET); ++ bRGA_SRC_TR_COLOR1 = (u32 *)(base + RGA_SRC_TR_COLOR1_OFFSET); ++ ++ *bRGA_SRC_TR_COLOR0 = msg->color_key_min; ++ *bRGA_SRC_TR_COLOR1 = msg->color_key_max; ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_fading ++Description: ++ fill fading some relate reg bit ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static s32 -+RGA_set_fading(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_FADING_CON; -+ u8 r, g, b; -+ u32 reg = 0; -+ -+ bRGA_FADING_CON = (u32 *)(base + RGA_FADING_CON_OFFSET); -+ -+ b = msg->fading.b; -+ g = msg->fading.g; -+ r = msg->fading.r; -+ -+ reg = (r<<8) | (g<<16) | (b<<24) | reg; -+ -+ *bRGA_FADING_CON = reg; -+ -+ return 0; -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_pat -+Description: -+ fill patten some relate reg bit -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_fading(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_FADING_CON; ++ u8 r, g, b; ++ u32 reg = 0; ++ ++ bRGA_FADING_CON = (u32 *)(base + RGA_FADING_CON_OFFSET); ++ ++ b = msg->fading.b; ++ g = msg->fading.g; ++ r = msg->fading.r; ++ ++ reg = (r<<8) | (g<<16) | (b<<24) | reg; ++ ++ *bRGA_FADING_CON = reg; ++ ++ return 0; ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_pat ++Description: ++ fill patten some relate reg bit ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static s32 -+RGA_set_pat(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_PAT_CON; -+ u32 *bRGA_PAT_START_POINT; -+ u32 reg = 0; -+ -+ bRGA_PAT_START_POINT = (u32 *)(base + RGA_PAT_START_POINT_OFFSET); -+ -+ bRGA_PAT_CON = (u32 *)(base + RGA_PAT_CON_OFFSET); -+ -+ *bRGA_PAT_START_POINT = (msg->pat.act_w * msg->pat.y_offset) + msg->pat.x_offset; -+ -+ reg = (msg->pat.act_w - 1) | ((msg->pat.act_h - 1) << 8) | (msg->pat.x_offset << 16) | (msg->pat.y_offset << 24); -+ *bRGA_PAT_CON = reg; -+ -+ return 0; -+} -+ -+ -+ -+ -+/************************************************************* -+Func: -+ RGA_set_bitblt_reg_info -+Description: -+ fill bitblt mode relate ren info -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_pat(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_PAT_CON; ++ u32 *bRGA_PAT_START_POINT; ++ u32 reg = 0; ++ ++ bRGA_PAT_START_POINT = (u32 *)(base + RGA_PAT_START_POINT_OFFSET); ++ ++ bRGA_PAT_CON = (u32 *)(base + RGA_PAT_CON_OFFSET); ++ ++ *bRGA_PAT_START_POINT = (msg->pat.act_w * msg->pat.y_offset) + msg->pat.x_offset; ++ ++ reg = (msg->pat.act_w - 1) | ((msg->pat.act_h - 1) << 8) | (msg->pat.x_offset << 16) | (msg->pat.y_offset << 24); ++ *bRGA_PAT_CON = reg; ++ ++ return 0; ++} ++ ++ ++ ++ ++/************************************************************* ++Func: ++ RGA_set_bitblt_reg_info ++Description: ++ fill bitblt mode relate ren info ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static void -+RGA_set_bitblt_reg_info(u8 *base, const struct rga_req * msg, TILE_INFO *tile) -+{ -+ u32 *bRGA_SRC_Y_MST; -+ u32 *bRGA_SRC_CB_MST; -+ u32 *bRGA_SRC_CR_MST; -+ u32 *bRGA_SRC_X_PARA; -+ u32 *bRGA_SRC_Y_PARA; -+ u32 *bRGA_SRC_TILE_XINFO; -+ u32 *bRGA_SRC_TILE_YINFO; -+ u32 *bRGA_SRC_TILE_H_INCR; -+ u32 *bRGA_SRC_TILE_V_INCR; -+ u32 *bRGA_SRC_TILE_OFFSETX; -+ u32 *bRGA_SRC_TILE_OFFSETY; -+ -+ u32 *bRGA_DST_MST; -+ u32 *bRGA_DST_CTR_INFO; -+ -+ s32 m0, m1, m2, m3; -+ s32 pos[8]; -+ //s32 x_dx, x_dy, y_dx, y_dy; -+ s32 xmin, xmax, ymin, ymax; -+ s32 xp, yp; -+ u32 y_addr, u_addr, v_addr; -+ u32 pixel_width, stride; -+ -+ u_addr = v_addr = 0; -+ -+ /* src info */ -+ -+ bRGA_SRC_Y_MST = (u32 *)(base + RGA_SRC_Y_MST_OFFSET); -+ bRGA_SRC_CB_MST = (u32 *)(base + RGA_SRC_CB_MST_OFFSET); -+ bRGA_SRC_CR_MST = (u32 *)(base + RGA_SRC_CR_MST_OFFSET); -+ -+ bRGA_SRC_X_PARA = (u32 *)(base + RGA_SRC_X_PARA_OFFSET); -+ bRGA_SRC_Y_PARA = (u32 *)(base + RGA_SRC_Y_PARA_OFFSET); -+ -+ bRGA_SRC_TILE_XINFO = (u32 *)(base + RGA_SRC_TILE_XINFO_OFFSET); -+ bRGA_SRC_TILE_YINFO = (u32 *)(base + RGA_SRC_TILE_YINFO_OFFSET); -+ bRGA_SRC_TILE_H_INCR = (u32 *)(base + RGA_SRC_TILE_H_INCR_OFFSET); -+ bRGA_SRC_TILE_V_INCR = (u32 *)(base + RGA_SRC_TILE_V_INCR_OFFSET); -+ bRGA_SRC_TILE_OFFSETX = (u32 *)(base + RGA_SRC_TILE_OFFSETX_OFFSET); -+ bRGA_SRC_TILE_OFFSETY = (u32 *)(base + RGA_SRC_TILE_OFFSETY_OFFSET); -+ -+ bRGA_DST_MST = (u32 *)(base + RGA_DST_MST_OFFSET); -+ bRGA_DST_CTR_INFO = (u32 *)(base + RGA_DST_CTR_INFO_OFFSET); -+ -+ /* Matrix reg fill */ -+ m0 = (s32)(tile->matrix[0] >> 18); -+ m1 = (s32)(tile->matrix[1] >> 18); -+ m2 = (s32)(tile->matrix[2] >> 18); -+ m3 = (s32)(tile->matrix[3] >> 18); -+ -+ *bRGA_SRC_X_PARA = (m0 & 0xffff) | (m2 << 16); -+ *bRGA_SRC_Y_PARA = (m1 & 0xffff) | (m3 << 16); -+ -+ /* src tile information setting */ -+ if(msg->rotate_mode != 0)//add by hxx,2011.7.12,for rtl0707,when line scanning ,do not calc src tile info -+ { -+ *bRGA_SRC_TILE_XINFO = (tile->tile_start_x_coor & 0xffff) | (tile->tile_w << 16); -+ *bRGA_SRC_TILE_YINFO = (tile->tile_start_y_coor & 0xffff) | (tile->tile_h << 16); -+ -+ *bRGA_SRC_TILE_H_INCR = ((tile->x_dx) & 0xffff) | ((tile->x_dy) << 16); -+ *bRGA_SRC_TILE_V_INCR = ((tile->y_dx) & 0xffff) | ((tile->y_dy) << 16); -+ -+ *bRGA_SRC_TILE_OFFSETX = tile->tile_xoff; -+ *bRGA_SRC_TILE_OFFSETY = tile->tile_yoff; -+ } -+ -+ pixel_width = RGA_pixel_width_init(msg->src.format); -+ -+ stride = ((msg->src.vir_w * pixel_width) + 3) & (~3); -+ -+ if ((msg->rotate_mode == 1)||(msg->rotate_mode == 2)||(msg->rotate_mode == 3)) -+ { -+ pos[0] = tile->tile_start_x_coor<<8; -+ pos[1] = tile->tile_start_y_coor<<8; -+ -+ pos[2] = pos[0]; -+ pos[3] = pos[1] + tile->tile_h; -+ -+ pos[4] = pos[0] + tile->tile_w; -+ pos[5] = pos[1] + tile->tile_h; -+ -+ pos[6] = pos[0] + tile->tile_w; -+ pos[7] = pos[1]; -+ -+ pos[0] >>= 11; -+ pos[1] >>= 11; -+ -+ pos[2] >>= 11; -+ pos[3] >>= 11; -+ -+ pos[4] >>= 11; -+ pos[5] >>= 11; -+ -+ pos[6] >>= 11; -+ pos[7] >>= 11; -+ -+ xmax = (MAX(MAX(MAX(pos[0], pos[2]), pos[4]), pos[6]) + 1); -+ xmin = (MIN(MIN(MIN(pos[0], pos[2]), pos[4]), pos[6])); -+ -+ ymax = (MAX(MAX(MAX(pos[1], pos[3]), pos[5]), pos[7]) + 1); -+ ymin = (MIN(MIN(MIN(pos[1], pos[3]), pos[5]), pos[7])); -+ -+ xp = xmin + msg->src.x_offset; -+ yp = ymin + msg->src.y_offset; -+ -+ if (!((xmax < 0)||(xmin > msg->src.act_w - 1)||(ymax < 0)||(ymin > msg->src.act_h - 1))) -+ { -+ xp = CLIP(xp, msg->src.x_offset, msg->src.x_offset + msg->src.act_w - 1); -+ yp = CLIP(yp, msg->src.y_offset, msg->src.y_offset + msg->src.act_h - 1); -+ } -+ -+ switch(msg->src.format) -+ { -+ case RK_FORMAT_YCbCr_420_P : -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + (yp>>1)*(stride>>1) + (xp>>1); -+ v_addr = msg->src.v_addr + (yp>>1)*(stride>>1) + (xp>>1); -+ break; -+ case RK_FORMAT_YCbCr_420_SP : -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + (yp>>1)*stride + ((xp>>1)<<1); -+ break; -+ case RK_FORMAT_YCbCr_422_P : -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + (yp)*(stride>>1) + (xp>>1); -+ v_addr = msg->src.v_addr + (yp)*(stride>>1) + (xp>>1); -+ break; -+ case RK_FORMAT_YCbCr_422_SP: -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + yp*stride + ((xp>>1)<<1); -+ break; -+ case RK_FORMAT_YCrCb_420_P : -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + (yp>>1)*(stride>>1) + (xp>>1); -+ v_addr = msg->src.v_addr + (yp>>1)*(stride>>1) + (xp>>1); -+ break; -+ case RK_FORMAT_YCrCb_420_SP : -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + (yp>>1)*stride + ((xp>>1)<<1); -+ break; -+ case RK_FORMAT_YCrCb_422_P : -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + (yp)*(stride>>1) + (xp>>1); -+ v_addr = msg->src.v_addr + (yp)*(stride>>1) + (xp>>1); -+ break; -+ case RK_FORMAT_YCrCb_422_SP: -+ y_addr = msg->src.yrgb_addr + yp*stride + xp; -+ u_addr = msg->src.uv_addr + yp*stride + ((xp>>1)<<1); -+ break; -+ default : -+ y_addr = msg->src.yrgb_addr + yp*stride + xp*pixel_width; -+ break; -+ } -+ -+ *bRGA_SRC_Y_MST = y_addr; -+ *bRGA_SRC_CB_MST = u_addr; -+ *bRGA_SRC_CR_MST = v_addr; -+ } -+ -+ /*dst info*/ -+ pixel_width = RGA_pixel_width_init(msg->dst.format); -+ stride = (msg->dst.vir_w * pixel_width + 3) & (~3); -+ *bRGA_DST_MST = (u32)msg->dst.yrgb_addr + (tile->dst_ctrl.y_off * stride) + (tile->dst_ctrl.x_off * pixel_width); -+ *bRGA_DST_CTR_INFO = (tile->dst_ctrl.w) | ((tile->dst_ctrl.h) << 16); -+ -+ *bRGA_DST_CTR_INFO |= ((1<<29) | (1<<28)); -+} -+ -+ -+ -+ -+/************************************************************* -+Func: -+ RGA_set_color_palette_reg_info -+Description: -+ fill color palette process some relate reg bit -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_bitblt_reg_info(u8 *base, const struct rga_req * msg, TILE_INFO *tile) ++{ ++ u32 *bRGA_SRC_Y_MST; ++ u32 *bRGA_SRC_CB_MST; ++ u32 *bRGA_SRC_CR_MST; ++ u32 *bRGA_SRC_X_PARA; ++ u32 *bRGA_SRC_Y_PARA; ++ u32 *bRGA_SRC_TILE_XINFO; ++ u32 *bRGA_SRC_TILE_YINFO; ++ u32 *bRGA_SRC_TILE_H_INCR; ++ u32 *bRGA_SRC_TILE_V_INCR; ++ u32 *bRGA_SRC_TILE_OFFSETX; ++ u32 *bRGA_SRC_TILE_OFFSETY; ++ ++ u32 *bRGA_DST_MST; ++ u32 *bRGA_DST_CTR_INFO; ++ ++ s32 m0, m1, m2, m3; ++ s32 pos[8]; ++ //s32 x_dx, x_dy, y_dx, y_dy; ++ s32 xmin, xmax, ymin, ymax; ++ s32 xp, yp; ++ u32 y_addr, u_addr, v_addr; ++ u32 pixel_width, stride; ++ ++ u_addr = v_addr = 0; ++ ++ /* src info */ ++ ++ bRGA_SRC_Y_MST = (u32 *)(base + RGA_SRC_Y_MST_OFFSET); ++ bRGA_SRC_CB_MST = (u32 *)(base + RGA_SRC_CB_MST_OFFSET); ++ bRGA_SRC_CR_MST = (u32 *)(base + RGA_SRC_CR_MST_OFFSET); ++ ++ bRGA_SRC_X_PARA = (u32 *)(base + RGA_SRC_X_PARA_OFFSET); ++ bRGA_SRC_Y_PARA = (u32 *)(base + RGA_SRC_Y_PARA_OFFSET); ++ ++ bRGA_SRC_TILE_XINFO = (u32 *)(base + RGA_SRC_TILE_XINFO_OFFSET); ++ bRGA_SRC_TILE_YINFO = (u32 *)(base + RGA_SRC_TILE_YINFO_OFFSET); ++ bRGA_SRC_TILE_H_INCR = (u32 *)(base + RGA_SRC_TILE_H_INCR_OFFSET); ++ bRGA_SRC_TILE_V_INCR = (u32 *)(base + RGA_SRC_TILE_V_INCR_OFFSET); ++ bRGA_SRC_TILE_OFFSETX = (u32 *)(base + RGA_SRC_TILE_OFFSETX_OFFSET); ++ bRGA_SRC_TILE_OFFSETY = (u32 *)(base + RGA_SRC_TILE_OFFSETY_OFFSET); ++ ++ bRGA_DST_MST = (u32 *)(base + RGA_DST_MST_OFFSET); ++ bRGA_DST_CTR_INFO = (u32 *)(base + RGA_DST_CTR_INFO_OFFSET); ++ ++ /* Matrix reg fill */ ++ m0 = (s32)(tile->matrix[0] >> 18); ++ m1 = (s32)(tile->matrix[1] >> 18); ++ m2 = (s32)(tile->matrix[2] >> 18); ++ m3 = (s32)(tile->matrix[3] >> 18); ++ ++ *bRGA_SRC_X_PARA = (m0 & 0xffff) | (m2 << 16); ++ *bRGA_SRC_Y_PARA = (m1 & 0xffff) | (m3 << 16); ++ ++ /* src tile information setting */ ++ if(msg->rotate_mode != 0)//add by hxx,2011.7.12,for rtl0707,when line scanning ,do not calc src tile info ++ { ++ *bRGA_SRC_TILE_XINFO = (tile->tile_start_x_coor & 0xffff) | (tile->tile_w << 16); ++ *bRGA_SRC_TILE_YINFO = (tile->tile_start_y_coor & 0xffff) | (tile->tile_h << 16); ++ ++ *bRGA_SRC_TILE_H_INCR = ((tile->x_dx) & 0xffff) | ((tile->x_dy) << 16); ++ *bRGA_SRC_TILE_V_INCR = ((tile->y_dx) & 0xffff) | ((tile->y_dy) << 16); ++ ++ *bRGA_SRC_TILE_OFFSETX = tile->tile_xoff; ++ *bRGA_SRC_TILE_OFFSETY = tile->tile_yoff; ++ } ++ ++ pixel_width = RGA_pixel_width_init(msg->src.format); ++ ++ stride = ((msg->src.vir_w * pixel_width) + 3) & (~3); ++ ++ if ((msg->rotate_mode == 1)||(msg->rotate_mode == 2)||(msg->rotate_mode == 3)) ++ { ++ pos[0] = tile->tile_start_x_coor<<8; ++ pos[1] = tile->tile_start_y_coor<<8; ++ ++ pos[2] = pos[0]; ++ pos[3] = pos[1] + tile->tile_h; ++ ++ pos[4] = pos[0] + tile->tile_w; ++ pos[5] = pos[1] + tile->tile_h; ++ ++ pos[6] = pos[0] + tile->tile_w; ++ pos[7] = pos[1]; ++ ++ pos[0] >>= 11; ++ pos[1] >>= 11; ++ ++ pos[2] >>= 11; ++ pos[3] >>= 11; ++ ++ pos[4] >>= 11; ++ pos[5] >>= 11; ++ ++ pos[6] >>= 11; ++ pos[7] >>= 11; ++ ++ xmax = (MAX(MAX(MAX(pos[0], pos[2]), pos[4]), pos[6]) + 1); ++ xmin = (MIN(MIN(MIN(pos[0], pos[2]), pos[4]), pos[6])); ++ ++ ymax = (MAX(MAX(MAX(pos[1], pos[3]), pos[5]), pos[7]) + 1); ++ ymin = (MIN(MIN(MIN(pos[1], pos[3]), pos[5]), pos[7])); ++ ++ xp = xmin + msg->src.x_offset; ++ yp = ymin + msg->src.y_offset; ++ ++ if (!((xmax < 0)||(xmin > msg->src.act_w - 1)||(ymax < 0)||(ymin > msg->src.act_h - 1))) ++ { ++ xp = CLIP(xp, msg->src.x_offset, msg->src.x_offset + msg->src.act_w - 1); ++ yp = CLIP(yp, msg->src.y_offset, msg->src.y_offset + msg->src.act_h - 1); ++ } ++ ++ switch(msg->src.format) ++ { ++ case RK_FORMAT_YCbCr_420_P : ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + (yp>>1)*(stride>>1) + (xp>>1); ++ v_addr = msg->src.v_addr + (yp>>1)*(stride>>1) + (xp>>1); ++ break; ++ case RK_FORMAT_YCbCr_420_SP : ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + (yp>>1)*stride + ((xp>>1)<<1); ++ break; ++ case RK_FORMAT_YCbCr_422_P : ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + (yp)*(stride>>1) + (xp>>1); ++ v_addr = msg->src.v_addr + (yp)*(stride>>1) + (xp>>1); ++ break; ++ case RK_FORMAT_YCbCr_422_SP: ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + yp*stride + ((xp>>1)<<1); ++ break; ++ case RK_FORMAT_YCrCb_420_P : ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + (yp>>1)*(stride>>1) + (xp>>1); ++ v_addr = msg->src.v_addr + (yp>>1)*(stride>>1) + (xp>>1); ++ break; ++ case RK_FORMAT_YCrCb_420_SP : ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + (yp>>1)*stride + ((xp>>1)<<1); ++ break; ++ case RK_FORMAT_YCrCb_422_P : ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + (yp)*(stride>>1) + (xp>>1); ++ v_addr = msg->src.v_addr + (yp)*(stride>>1) + (xp>>1); ++ break; ++ case RK_FORMAT_YCrCb_422_SP: ++ y_addr = msg->src.yrgb_addr + yp*stride + xp; ++ u_addr = msg->src.uv_addr + yp*stride + ((xp>>1)<<1); ++ break; ++ default : ++ y_addr = msg->src.yrgb_addr + yp*stride + xp*pixel_width; ++ break; ++ } ++ ++ *bRGA_SRC_Y_MST = y_addr; ++ *bRGA_SRC_CB_MST = u_addr; ++ *bRGA_SRC_CR_MST = v_addr; ++ } ++ ++ /*dst info*/ ++ pixel_width = RGA_pixel_width_init(msg->dst.format); ++ stride = (msg->dst.vir_w * pixel_width + 3) & (~3); ++ *bRGA_DST_MST = (u32)msg->dst.yrgb_addr + (tile->dst_ctrl.y_off * stride) + (tile->dst_ctrl.x_off * pixel_width); ++ *bRGA_DST_CTR_INFO = (tile->dst_ctrl.w) | ((tile->dst_ctrl.h) << 16); ++ ++ *bRGA_DST_CTR_INFO |= ((1<<29) | (1<<28)); ++} ++ ++ ++ ++ ++/************************************************************* ++Func: ++ RGA_set_color_palette_reg_info ++Description: ++ fill color palette process some relate reg bit ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static void -+RGA_set_color_palette_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_SRC_Y_MST; -+ u32 p; -+ s16 x_off, y_off; -+ u16 src_stride; -+ u8 shift; -+ u16 sw, byte_num; -+ -+ x_off = msg->src.x_offset; -+ y_off = msg->src.y_offset; -+ -+ sw = msg->src.vir_w; -+ shift = 3 - (msg->palette_mode & 3); -+ byte_num = sw >> shift; -+ src_stride = (byte_num + 3) & (~3); -+ -+ p = msg->src.yrgb_addr; -+ p = p + (x_off>>shift) + y_off*src_stride; -+ -+ bRGA_SRC_Y_MST = (u32 *)(base + RGA_SRC_Y_MST_OFFSET); -+ *bRGA_SRC_Y_MST = (u32)p; -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_color_fill_reg_info -+Description: -+ fill color fill process some relate reg bit -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_color_palette_reg_info(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_SRC_Y_MST; ++ u32 p; ++ s16 x_off, y_off; ++ u16 src_stride; ++ u8 shift; ++ u16 sw, byte_num; ++ ++ x_off = msg->src.x_offset; ++ y_off = msg->src.y_offset; ++ ++ sw = msg->src.vir_w; ++ shift = 3 - (msg->palette_mode & 3); ++ byte_num = sw >> shift; ++ src_stride = (byte_num + 3) & (~3); ++ ++ p = msg->src.yrgb_addr; ++ p = p + (x_off>>shift) + y_off*src_stride; ++ ++ bRGA_SRC_Y_MST = (u32 *)(base + RGA_SRC_Y_MST_OFFSET); ++ *bRGA_SRC_Y_MST = (u32)p; ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_color_fill_reg_info ++Description: ++ fill color fill process some relate reg bit ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ +static void -+RGA_set_color_fill_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ -+ u32 *bRGA_CP_GR_A; -+ u32 *bRGA_CP_GR_B; -+ u32 *bRGA_CP_GR_G; -+ u32 *bRGA_CP_GR_R; -+ -+ u32 *bRGA_PAT_CON; -+ -+ bRGA_CP_GR_A = (u32 *)(base + RGA_CP_GR_A_OFFSET); -+ bRGA_CP_GR_B = (u32 *)(base + RGA_CP_GR_B_OFFSET); -+ bRGA_CP_GR_G = (u32 *)(base + RGA_CP_GR_G_OFFSET); -+ bRGA_CP_GR_R = (u32 *)(base + RGA_CP_GR_R_OFFSET); -+ -+ bRGA_PAT_CON = (u32 *)(base + RGA_PAT_CON_OFFSET); -+ -+ *bRGA_CP_GR_A = (msg->gr_color.gr_x_a & 0xffff) | (msg->gr_color.gr_y_a << 16); -+ *bRGA_CP_GR_B = (msg->gr_color.gr_x_b & 0xffff) | (msg->gr_color.gr_y_b << 16); -+ *bRGA_CP_GR_G = (msg->gr_color.gr_x_g & 0xffff) | (msg->gr_color.gr_y_g << 16); -+ *bRGA_CP_GR_R = (msg->gr_color.gr_x_r & 0xffff) | (msg->gr_color.gr_y_r << 16); -+ -+ *bRGA_PAT_CON = (msg->pat.vir_w-1) | ((msg->pat.vir_h-1) << 8) | (msg->pat.x_offset << 16) | (msg->pat.y_offset << 24); -+ -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_line_drawing_reg_info -+Description: -+ fill line drawing process some relate reg bit -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_color_fill_reg_info(u8 *base, const struct rga_req *msg) ++{ ++ ++ u32 *bRGA_CP_GR_A; ++ u32 *bRGA_CP_GR_B; ++ u32 *bRGA_CP_GR_G; ++ u32 *bRGA_CP_GR_R; ++ ++ u32 *bRGA_PAT_CON; ++ ++ bRGA_CP_GR_A = (u32 *)(base + RGA_CP_GR_A_OFFSET); ++ bRGA_CP_GR_B = (u32 *)(base + RGA_CP_GR_B_OFFSET); ++ bRGA_CP_GR_G = (u32 *)(base + RGA_CP_GR_G_OFFSET); ++ bRGA_CP_GR_R = (u32 *)(base + RGA_CP_GR_R_OFFSET); ++ ++ bRGA_PAT_CON = (u32 *)(base + RGA_PAT_CON_OFFSET); ++ ++ *bRGA_CP_GR_A = (msg->gr_color.gr_x_a & 0xffff) | (msg->gr_color.gr_y_a << 16); ++ *bRGA_CP_GR_B = (msg->gr_color.gr_x_b & 0xffff) | (msg->gr_color.gr_y_b << 16); ++ *bRGA_CP_GR_G = (msg->gr_color.gr_x_g & 0xffff) | (msg->gr_color.gr_y_g << 16); ++ *bRGA_CP_GR_R = (msg->gr_color.gr_x_r & 0xffff) | (msg->gr_color.gr_y_r << 16); ++ ++ *bRGA_PAT_CON = (msg->pat.vir_w-1) | ((msg->pat.vir_h-1) << 8) | (msg->pat.x_offset << 16) | (msg->pat.y_offset << 24); ++ ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_line_drawing_reg_info ++Description: ++ fill line drawing process some relate reg bit ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static s32 RGA_set_line_drawing_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_LINE_DRAW; -+ u32 *bRGA_DST_VIR_INFO; -+ u32 *bRGA_LINE_DRAW_XY_INFO; -+ u32 *bRGA_LINE_DRAW_WIDTH; -+ u32 *bRGA_LINE_DRAWING_COLOR; -+ u32 *bRGA_LINE_DRAWING_MST; -+ -+ u32 reg = 0; -+ -+ s16 x_width, y_width; -+ u16 abs_x, abs_y, delta; -+ u16 stride; -+ u8 pw; -+ u32 start_addr; -+ u8 line_dir, dir_major, dir_semi_major; -+ u16 major_width; -+ -+ bRGA_LINE_DRAW = (u32 *)(base + RGA_LINE_DRAW_OFFSET); -+ bRGA_DST_VIR_INFO = (u32 *)(base + RGA_DST_VIR_INFO_OFFSET); -+ bRGA_LINE_DRAW_XY_INFO = (u32 *)(base + RGA_LINE_DRAW_XY_INFO_OFFSET); -+ bRGA_LINE_DRAW_WIDTH = (u32 *)(base + RGA_LINE_DRAWING_WIDTH_OFFSET); -+ bRGA_LINE_DRAWING_COLOR = (u32 *)(base + RGA_LINE_DRAWING_COLOR_OFFSET); -+ bRGA_LINE_DRAWING_MST = (u32 *)(base + RGA_LINE_DRAWING_MST_OFFSET); -+ -+ pw = RGA_pixel_width_init(msg->dst.format); -+ -+ stride = (msg->dst.vir_w * pw + 3) & (~3); -+ -+ start_addr = msg->dst.yrgb_addr -+ + (msg->line_draw_info.start_point.y * stride) -+ + (msg->line_draw_info.start_point.x * pw); -+ -+ x_width = msg->line_draw_info.start_point.x - msg->line_draw_info.end_point.x; -+ y_width = msg->line_draw_info.start_point.y - msg->line_draw_info.end_point.y; -+ -+ abs_x = abs(x_width); -+ abs_y = abs(y_width); -+ -+ if (abs_x >= abs_y) -+ { -+ if (y_width > 0) -+ dir_semi_major = 1; -+ else -+ dir_semi_major = 0; -+ -+ if (x_width > 0) -+ dir_major = 1; -+ else -+ dir_major = 0; -+ -+ if((abs_x == 0)||(abs_y == 0)) -+ delta = 0; -+ else -+ delta = (abs_y<<12)/abs_x; -+ -+ if (delta >> 12) -+ delta -= 1; -+ -+ major_width = abs_x; -+ line_dir = 0; -+ } -+ else -+ { -+ if (x_width > 0) -+ dir_semi_major = 1; -+ else -+ dir_semi_major = 0; -+ -+ if (y_width > 0) -+ dir_major = 1; -+ else -+ dir_major = 0; -+ -+ delta = (abs_x<<12)/abs_y; -+ major_width = abs_y; -+ line_dir = 1; -+ } -+ -+ reg = (reg & (~m_RGA_LINE_DRAW_MAJOR_WIDTH)) | (s_RGA_LINE_DRAW_MAJOR_WIDTH(major_width)); -+ reg = (reg & (~m_RGA_LINE_DRAW_LINE_DIRECTION)) | (s_RGA_LINE_DRAW_LINE_DIRECTION(line_dir)); -+ reg = (reg & (~m_RGA_LINE_DRAW_LINE_WIDTH)) | (s_RGA_LINE_DRAW_LINE_WIDTH(msg->line_draw_info.line_width - 1)); -+ reg = (reg & (~m_RGA_LINE_DRAW_INCR_VALUE)) | (s_RGA_LINE_DRAW_INCR_VALUE(delta)); -+ reg = (reg & (~m_RGA_LINE_DRAW_DIR_SEMI_MAJOR)) | (s_RGA_LINE_DRAW_DIR_SEMI_MAJOR(dir_semi_major)); -+ reg = (reg & (~m_RGA_LINE_DRAW_DIR_MAJOR)) | (s_RGA_LINE_DRAW_DIR_MAJOR(dir_major)); -+ reg = (reg & (~m_RGA_LINE_DRAW_LAST_POINT)) | (s_RGA_LINE_DRAW_LAST_POINT(msg->line_draw_info.flag >> 1)); -+ reg = (reg & (~m_RGA_LINE_DRAW_ANTI_ALISING)) | (s_RGA_LINE_DRAW_ANTI_ALISING(msg->line_draw_info.flag)); -+ -+ *bRGA_LINE_DRAW = reg; -+ -+ reg = (msg->line_draw_info.start_point.x & 0xfff) | ((msg->line_draw_info.start_point.y & 0xfff) << 16); -+ *bRGA_LINE_DRAW_XY_INFO = reg; -+ -+ *bRGA_LINE_DRAW_WIDTH = msg->dst.vir_w; -+ -+ *bRGA_LINE_DRAWING_COLOR = msg->line_draw_info.color; -+ -+ *bRGA_LINE_DRAWING_MST = (u32)start_addr; -+ -+ return 0; -+} -+ -+ ++{ ++ u32 *bRGA_LINE_DRAW; ++ u32 *bRGA_DST_VIR_INFO; ++ u32 *bRGA_LINE_DRAW_XY_INFO; ++ u32 *bRGA_LINE_DRAW_WIDTH; ++ u32 *bRGA_LINE_DRAWING_COLOR; ++ u32 *bRGA_LINE_DRAWING_MST; ++ ++ u32 reg = 0; ++ ++ s16 x_width, y_width; ++ u16 abs_x, abs_y, delta; ++ u16 stride; ++ u8 pw; ++ u32 start_addr; ++ u8 line_dir, dir_major, dir_semi_major; ++ u16 major_width; ++ ++ bRGA_LINE_DRAW = (u32 *)(base + RGA_LINE_DRAW_OFFSET); ++ bRGA_DST_VIR_INFO = (u32 *)(base + RGA_DST_VIR_INFO_OFFSET); ++ bRGA_LINE_DRAW_XY_INFO = (u32 *)(base + RGA_LINE_DRAW_XY_INFO_OFFSET); ++ bRGA_LINE_DRAW_WIDTH = (u32 *)(base + RGA_LINE_DRAWING_WIDTH_OFFSET); ++ bRGA_LINE_DRAWING_COLOR = (u32 *)(base + RGA_LINE_DRAWING_COLOR_OFFSET); ++ bRGA_LINE_DRAWING_MST = (u32 *)(base + RGA_LINE_DRAWING_MST_OFFSET); ++ ++ pw = RGA_pixel_width_init(msg->dst.format); ++ ++ stride = (msg->dst.vir_w * pw + 3) & (~3); ++ ++ start_addr = msg->dst.yrgb_addr ++ + (msg->line_draw_info.start_point.y * stride) ++ + (msg->line_draw_info.start_point.x * pw); ++ ++ x_width = msg->line_draw_info.start_point.x - msg->line_draw_info.end_point.x; ++ y_width = msg->line_draw_info.start_point.y - msg->line_draw_info.end_point.y; ++ ++ abs_x = abs(x_width); ++ abs_y = abs(y_width); ++ ++ if (abs_x >= abs_y) ++ { ++ if (y_width > 0) ++ dir_semi_major = 1; ++ else ++ dir_semi_major = 0; ++ ++ if (x_width > 0) ++ dir_major = 1; ++ else ++ dir_major = 0; ++ ++ if((abs_x == 0)||(abs_y == 0)) ++ delta = 0; ++ else ++ delta = (abs_y<<12)/abs_x; ++ ++ if (delta >> 12) ++ delta -= 1; ++ ++ major_width = abs_x; ++ line_dir = 0; ++ } ++ else ++ { ++ if (x_width > 0) ++ dir_semi_major = 1; ++ else ++ dir_semi_major = 0; ++ ++ if (y_width > 0) ++ dir_major = 1; ++ else ++ dir_major = 0; ++ ++ delta = (abs_x<<12)/abs_y; ++ major_width = abs_y; ++ line_dir = 1; ++ } ++ ++ reg = (reg & (~m_RGA_LINE_DRAW_MAJOR_WIDTH)) | (s_RGA_LINE_DRAW_MAJOR_WIDTH(major_width)); ++ reg = (reg & (~m_RGA_LINE_DRAW_LINE_DIRECTION)) | (s_RGA_LINE_DRAW_LINE_DIRECTION(line_dir)); ++ reg = (reg & (~m_RGA_LINE_DRAW_LINE_WIDTH)) | (s_RGA_LINE_DRAW_LINE_WIDTH(msg->line_draw_info.line_width - 1)); ++ reg = (reg & (~m_RGA_LINE_DRAW_INCR_VALUE)) | (s_RGA_LINE_DRAW_INCR_VALUE(delta)); ++ reg = (reg & (~m_RGA_LINE_DRAW_DIR_SEMI_MAJOR)) | (s_RGA_LINE_DRAW_DIR_SEMI_MAJOR(dir_semi_major)); ++ reg = (reg & (~m_RGA_LINE_DRAW_DIR_MAJOR)) | (s_RGA_LINE_DRAW_DIR_MAJOR(dir_major)); ++ reg = (reg & (~m_RGA_LINE_DRAW_LAST_POINT)) | (s_RGA_LINE_DRAW_LAST_POINT(msg->line_draw_info.flag >> 1)); ++ reg = (reg & (~m_RGA_LINE_DRAW_ANTI_ALISING)) | (s_RGA_LINE_DRAW_ANTI_ALISING(msg->line_draw_info.flag)); ++ ++ *bRGA_LINE_DRAW = reg; ++ ++ reg = (msg->line_draw_info.start_point.x & 0xfff) | ((msg->line_draw_info.start_point.y & 0xfff) << 16); ++ *bRGA_LINE_DRAW_XY_INFO = reg; ++ ++ *bRGA_LINE_DRAW_WIDTH = msg->dst.vir_w; ++ ++ *bRGA_LINE_DRAWING_COLOR = msg->line_draw_info.color; ++ ++ *bRGA_LINE_DRAWING_MST = (u32)start_addr; ++ ++ return 0; ++} ++ ++ +/*full*/ +static s32 +RGA_set_filter_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_BLUR_SHARP_INFO; -+ u32 reg = 0; -+ -+ bRGA_BLUR_SHARP_INFO = (u32 *)(base + RGA_ALPHA_CON_OFFSET); -+ -+ reg = *bRGA_BLUR_SHARP_INFO; -+ -+ reg = ((reg & (~m_RGA_BLUR_SHARP_FILTER_TYPE)) | (s_RGA_BLUR_SHARP_FILTER_TYPE(msg->bsfilter_flag & 3))); -+ reg = ((reg & (~m_RGA_BLUR_SHARP_FILTER_MODE)) | (s_RGA_BLUR_SHARP_FILTER_MODE(msg->bsfilter_flag >>2))); -+ -+ *bRGA_BLUR_SHARP_INFO = reg; -+ -+ return 0; -+} -+ -+ -+/*full*/ ++{ ++ u32 *bRGA_BLUR_SHARP_INFO; ++ u32 reg = 0; ++ ++ bRGA_BLUR_SHARP_INFO = (u32 *)(base + RGA_ALPHA_CON_OFFSET); ++ ++ reg = *bRGA_BLUR_SHARP_INFO; ++ ++ reg = ((reg & (~m_RGA_BLUR_SHARP_FILTER_TYPE)) | (s_RGA_BLUR_SHARP_FILTER_TYPE(msg->bsfilter_flag & 3))); ++ reg = ((reg & (~m_RGA_BLUR_SHARP_FILTER_MODE)) | (s_RGA_BLUR_SHARP_FILTER_MODE(msg->bsfilter_flag >>2))); ++ ++ *bRGA_BLUR_SHARP_INFO = reg; ++ ++ return 0; ++} ++ ++ ++/*full*/ +static s32 -+RGA_set_pre_scale_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_PRE_SCALE_INFO; -+ u32 reg = 0; -+ u32 h_ratio = 0; -+ u32 v_ratio = 0; -+ u32 ps_yuv_flag = 0; -+ u32 src_width, src_height; -+ u32 dst_width, dst_height; -+ -+ src_width = msg->src.act_w; -+ src_height = msg->src.act_h; -+ -+ dst_width = msg->dst.act_w; -+ dst_height = msg->dst.act_h; -+ -+ if((dst_width == 0) || (dst_height == 0)) -+ { -+ printk("pre scale reg info error ratio is divide zero\n"); -+ return -EINVAL; -+ } -+ -+ h_ratio = (src_width <<16) / dst_width; -+ v_ratio = (src_height<<16) / dst_height; -+ -+ if (h_ratio <= (1<<16)) -+ h_ratio = 0; -+ else if (h_ratio <= (2<<16)) -+ h_ratio = 1; -+ else if (h_ratio <= (4<<16)) -+ h_ratio = 2; -+ else if (h_ratio <= (8<<16)) -+ h_ratio = 3; -+ -+ if (v_ratio <= (1<<16)) -+ v_ratio = 0; -+ else if (v_ratio <= (2<<16)) -+ v_ratio = 1; -+ else if (v_ratio <= (4<<16)) -+ v_ratio = 2; -+ else if (v_ratio <= (8<<16)) -+ v_ratio = 3; -+ -+ if(msg->src.format == msg->dst.format) -+ ps_yuv_flag = 0; -+ else -+ ps_yuv_flag = 1; -+ -+ bRGA_PRE_SCALE_INFO = (u32 *)(base + RGA_ALPHA_CON_OFFSET); -+ -+ reg = *bRGA_PRE_SCALE_INFO; -+ reg = ((reg & (~m_RGA_PRE_SCALE_HOR_RATIO)) | (s_RGA_PRE_SCALE_HOR_RATIO((u8)h_ratio))); -+ reg = ((reg & (~m_RGA_PRE_SCALE_VER_RATIO)) | (s_RGA_PRE_SCALE_VER_RATIO((u8)v_ratio))); -+ reg = ((reg & (~m_RGA_PRE_SCALE_OUTPUT_FORMAT)) | (s_RGA_PRE_SCALE_OUTPUT_FORMAT(ps_yuv_flag))); -+ -+ *bRGA_PRE_SCALE_INFO = reg; -+ -+ return 0; -+} -+ -+ -+ ++RGA_set_pre_scale_reg_info(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_PRE_SCALE_INFO; ++ u32 reg = 0; ++ u32 h_ratio = 0; ++ u32 v_ratio = 0; ++ u32 ps_yuv_flag = 0; ++ u32 src_width, src_height; ++ u32 dst_width, dst_height; ++ ++ src_width = msg->src.act_w; ++ src_height = msg->src.act_h; ++ ++ dst_width = msg->dst.act_w; ++ dst_height = msg->dst.act_h; ++ ++ if((dst_width == 0) || (dst_height == 0)) ++ { ++ printk("pre scale reg info error ratio is divide zero\n"); ++ return -EINVAL; ++ } ++ ++ h_ratio = (src_width <<16) / dst_width; ++ v_ratio = (src_height<<16) / dst_height; ++ ++ if (h_ratio <= (1<<16)) ++ h_ratio = 0; ++ else if (h_ratio <= (2<<16)) ++ h_ratio = 1; ++ else if (h_ratio <= (4<<16)) ++ h_ratio = 2; ++ else if (h_ratio <= (8<<16)) ++ h_ratio = 3; ++ ++ if (v_ratio <= (1<<16)) ++ v_ratio = 0; ++ else if (v_ratio <= (2<<16)) ++ v_ratio = 1; ++ else if (v_ratio <= (4<<16)) ++ v_ratio = 2; ++ else if (v_ratio <= (8<<16)) ++ v_ratio = 3; ++ ++ if(msg->src.format == msg->dst.format) ++ ps_yuv_flag = 0; ++ else ++ ps_yuv_flag = 1; ++ ++ bRGA_PRE_SCALE_INFO = (u32 *)(base + RGA_ALPHA_CON_OFFSET); ++ ++ reg = *bRGA_PRE_SCALE_INFO; ++ reg = ((reg & (~m_RGA_PRE_SCALE_HOR_RATIO)) | (s_RGA_PRE_SCALE_HOR_RATIO((u8)h_ratio))); ++ reg = ((reg & (~m_RGA_PRE_SCALE_VER_RATIO)) | (s_RGA_PRE_SCALE_VER_RATIO((u8)v_ratio))); ++ reg = ((reg & (~m_RGA_PRE_SCALE_OUTPUT_FORMAT)) | (s_RGA_PRE_SCALE_OUTPUT_FORMAT(ps_yuv_flag))); ++ ++ *bRGA_PRE_SCALE_INFO = reg; ++ ++ return 0; ++} ++ ++ ++ +/*full*/ +static int -+RGA_set_update_palette_table_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_LUT_MST; -+ -+ if (!msg->LUT_addr) { -+ return -1; -+ } -+ -+ bRGA_LUT_MST = (u32 *)(base + RGA_LUT_MST_OFFSET); -+ -+ *bRGA_LUT_MST = (u32)msg->LUT_addr; -+ -+ return 0; -+} -+ -+ -+ ++RGA_set_update_palette_table_reg_info(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_LUT_MST; ++ ++ if (!msg->LUT_addr) { ++ return -1; ++ } ++ ++ bRGA_LUT_MST = (u32 *)(base + RGA_LUT_MST_OFFSET); ++ ++ *bRGA_LUT_MST = (u32)msg->LUT_addr; ++ ++ return 0; ++} ++ ++ ++ +/*full*/ +static int -+RGA_set_update_patten_buff_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ u32 *bRGA_PAT_MST; -+ u32 *bRGA_PAT_CON; -+ u32 *bRGA_PAT_START_POINT; -+ u32 reg = 0; -+ rga_img_info_t *pat; -+ -+ pat = (rga_img_info_t *)&msg->pat; -+ -+ bRGA_PAT_START_POINT = (u32 *)(base + RGA_PAT_START_POINT_OFFSET); -+ bRGA_PAT_MST = (u32 *)(base + RGA_PAT_MST_OFFSET); -+ bRGA_PAT_CON = (u32 *)(base + RGA_PAT_CON_OFFSET); -+ -+ if ( !pat->yrgb_addr ) { -+ return -1; -+ } -+ *bRGA_PAT_MST = (u32)pat->yrgb_addr; -+ -+ if ((pat->vir_w > 256)||(pat->x_offset > 256)||(pat->y_offset > 256)) { -+ return -1; -+ } -+ *bRGA_PAT_START_POINT = (pat->vir_w * pat->y_offset) + pat->x_offset; -+ -+ reg = (pat->vir_w-1) | ((pat->vir_h-1) << 8) | (pat->x_offset << 16) | (pat->y_offset << 24); -+ *bRGA_PAT_CON = reg; -+ -+ return 0; -+} -+ -+ -+/************************************************************* -+Func: -+ RGA_set_mmu_ctrl_reg_info -+Description: -+ fill mmu relate some reg info -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ ++RGA_set_update_patten_buff_reg_info(u8 *base, const struct rga_req *msg) ++{ ++ u32 *bRGA_PAT_MST; ++ u32 *bRGA_PAT_CON; ++ u32 *bRGA_PAT_START_POINT; ++ u32 reg = 0; ++ rga_img_info_t *pat; ++ ++ pat = (rga_img_info_t *)&msg->pat; ++ ++ bRGA_PAT_START_POINT = (u32 *)(base + RGA_PAT_START_POINT_OFFSET); ++ bRGA_PAT_MST = (u32 *)(base + RGA_PAT_MST_OFFSET); ++ bRGA_PAT_CON = (u32 *)(base + RGA_PAT_CON_OFFSET); ++ ++ if ( !pat->yrgb_addr ) { ++ return -1; ++ } ++ *bRGA_PAT_MST = (u32)pat->yrgb_addr; ++ ++ if ((pat->vir_w > 256)||(pat->x_offset > 256)||(pat->y_offset > 256)) { ++ return -1; ++ } ++ *bRGA_PAT_START_POINT = (pat->vir_w * pat->y_offset) + pat->x_offset; ++ ++ reg = (pat->vir_w-1) | ((pat->vir_h-1) << 8) | (pat->x_offset << 16) | (pat->y_offset << 24); ++ *bRGA_PAT_CON = reg; ++ ++ return 0; ++} ++ ++ ++/************************************************************* ++Func: ++ RGA_set_mmu_ctrl_reg_info ++Description: ++ fill mmu relate some reg info ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ + +static s32 -+RGA_set_mmu_ctrl_reg_info(u8 *base, const struct rga_req *msg) -+{ -+ u32 *RGA_MMU_TLB, *RGA_MMU_CTRL_ADDR; -+ u32 mmu_addr; -+ u8 TLB_size, mmu_enable, src_flag, dst_flag, CMD_flag; -+ u32 reg = 0; -+ -+ mmu_addr = (u32)msg->mmu_info.base_addr; -+ TLB_size = (msg->mmu_info.mmu_flag >> 4) & 0x3; -+ mmu_enable = msg->mmu_info.mmu_flag & 0x1; -+ -+ src_flag = (msg->mmu_info.mmu_flag >> 1) & 0x1; -+ dst_flag = (msg->mmu_info.mmu_flag >> 2) & 0x1; -+ CMD_flag = (msg->mmu_info.mmu_flag >> 3) & 0x1; -+ -+ RGA_MMU_TLB = (u32 *)(base + RGA_MMU_TLB_OFFSET); -+ RGA_MMU_CTRL_ADDR = (u32 *)(base + RGA_FADING_CON_OFFSET); -+ -+ reg = ((reg & (~m_RGA_MMU_CTRL_TLB_ADDR)) | s_RGA_MMU_CTRL_TLB_ADDR(mmu_addr)); -+ *RGA_MMU_TLB = reg; -+ -+ reg = *RGA_MMU_CTRL_ADDR; -+ reg = ((reg & (~m_RGA_MMU_CTRL_PAGE_TABLE_SIZE)) | s_RGA_MMU_CTRL_PAGE_TABLE_SIZE(TLB_size)); -+ reg = ((reg & (~m_RGA_MMU_CTRL_MMU_ENABLE)) | s_RGA_MMU_CTRL_MMU_ENABLE(mmu_enable)); -+ reg = ((reg & (~m_RGA_MMU_CTRL_SRC_FLUSH)) | s_RGA_MMU_CTRL_SRC_FLUSH(1)); -+ reg = ((reg & (~m_RGA_MMU_CTRL_DST_FLUSH)) | s_RGA_MMU_CTRL_DST_FLUSH(1)); -+ reg = ((reg & (~m_RGA_MMU_CTRL_CMD_CHAN_FLUSH)) | s_RGA_MMU_CTRL_CMD_CHAN_FLUSH(1)); -+ *RGA_MMU_CTRL_ADDR = reg; -+ -+ return 0; -+} -+ -+ -+ -+/************************************************************* -+Func: -+ RGA_gen_reg_info -+Description: -+ Generate RGA command reg list from rga_req struct. -+Author: -+ ZhangShengqin -+Date: -+ 20012-2-2 10:59:25 -+**************************************************************/ -+int -+RGA_gen_reg_info(const struct rga_req *msg, unsigned char *base) -+{ -+ TILE_INFO tile; -+ -+ memset(base, 0x0, 28*4); -+ RGA_set_mode_ctrl(base, msg); -+ -+ switch(msg->render_mode) -+ { -+ case bitblt_mode : -+ RGA_set_alpha_rop(base, msg); -+ RGA_set_src(base, msg); -+ RGA_set_dst(base, msg); -+ RGA_set_color(base, msg); -+ RGA_set_fading(base, msg); -+ RGA_set_pat(base, msg); -+ matrix_cal(msg, &tile); -+ dst_ctrl_cal(msg, &tile); -+ src_tile_info_cal(msg, &tile); -+ RGA_set_bitblt_reg_info(base, msg, &tile); -+ break; -+ case color_palette_mode : -+ RGA_set_src(base, msg); -+ RGA_set_dst(base, msg); -+ RGA_set_color(base, msg); -+ RGA_set_color_palette_reg_info(base, msg); -+ break; -+ case color_fill_mode : -+ RGA_set_alpha_rop(base, msg); -+ RGA_set_dst(base, msg); -+ RGA_set_color(base, msg); -+ RGA_set_pat(base, msg); -+ RGA_set_color_fill_reg_info(base, msg); -+ break; -+ case line_point_drawing_mode : -+ RGA_set_alpha_rop(base, msg); -+ RGA_set_dst(base, msg); -+ RGA_set_color(base, msg); -+ RGA_set_line_drawing_reg_info(base, msg); -+ break; -+ case blur_sharp_filter_mode : -+ RGA_set_src(base, msg); -+ RGA_set_dst(base, msg); -+ RGA_set_filter_reg_info(base, msg); -+ break; -+ case pre_scaling_mode : -+ RGA_set_src(base, msg); -+ RGA_set_dst(base, msg); -+ if(RGA_set_pre_scale_reg_info(base, msg) == -EINVAL) -+ return -1; -+ break; -+ case update_palette_table_mode : -+ if (RGA_set_update_palette_table_reg_info(base, msg)) { -+ return -1; -+ } -+ break; -+ case update_patten_buff_mode: -+ if (RGA_set_update_patten_buff_reg_info(base, msg)){ -+ return -1; -+ } -+ -+ break; -+ } -+ -+ RGA_set_mmu_ctrl_reg_info(base, msg); -+ -+ return 0; -+} -+ -+ -+ ++RGA_set_mmu_ctrl_reg_info(u8 *base, const struct rga_req *msg) ++{ ++ u32 *RGA_MMU_TLB, *RGA_MMU_CTRL_ADDR; ++ u32 mmu_addr; ++ u8 TLB_size, mmu_enable, src_flag, dst_flag, CMD_flag; ++ u32 reg = 0; ++ ++ mmu_addr = (u32)msg->mmu_info.base_addr; ++ TLB_size = (msg->mmu_info.mmu_flag >> 4) & 0x3; ++ mmu_enable = msg->mmu_info.mmu_flag & 0x1; ++ ++ src_flag = (msg->mmu_info.mmu_flag >> 1) & 0x1; ++ dst_flag = (msg->mmu_info.mmu_flag >> 2) & 0x1; ++ CMD_flag = (msg->mmu_info.mmu_flag >> 3) & 0x1; ++ ++ RGA_MMU_TLB = (u32 *)(base + RGA_MMU_TLB_OFFSET); ++ RGA_MMU_CTRL_ADDR = (u32 *)(base + RGA_FADING_CON_OFFSET); ++ ++ reg = ((reg & (~m_RGA_MMU_CTRL_TLB_ADDR)) | s_RGA_MMU_CTRL_TLB_ADDR(mmu_addr)); ++ *RGA_MMU_TLB = reg; ++ ++ reg = *RGA_MMU_CTRL_ADDR; ++ reg = ((reg & (~m_RGA_MMU_CTRL_PAGE_TABLE_SIZE)) | s_RGA_MMU_CTRL_PAGE_TABLE_SIZE(TLB_size)); ++ reg = ((reg & (~m_RGA_MMU_CTRL_MMU_ENABLE)) | s_RGA_MMU_CTRL_MMU_ENABLE(mmu_enable)); ++ reg = ((reg & (~m_RGA_MMU_CTRL_SRC_FLUSH)) | s_RGA_MMU_CTRL_SRC_FLUSH(1)); ++ reg = ((reg & (~m_RGA_MMU_CTRL_DST_FLUSH)) | s_RGA_MMU_CTRL_DST_FLUSH(1)); ++ reg = ((reg & (~m_RGA_MMU_CTRL_CMD_CHAN_FLUSH)) | s_RGA_MMU_CTRL_CMD_CHAN_FLUSH(1)); ++ *RGA_MMU_CTRL_ADDR = reg; ++ ++ return 0; ++} ++ ++ ++ ++/************************************************************* ++Func: ++ RGA_gen_reg_info ++Description: ++ Generate RGA command reg list from rga_req struct. ++Author: ++ ZhangShengqin ++Date: ++ 20012-2-2 10:59:25 ++**************************************************************/ ++int ++RGA_gen_reg_info(const struct rga_req *msg, unsigned char *base) ++{ ++ TILE_INFO tile; ++ ++ memset(base, 0x0, 28*4); ++ RGA_set_mode_ctrl(base, msg); ++ ++ switch(msg->render_mode) ++ { ++ case bitblt_mode : ++ RGA_set_alpha_rop(base, msg); ++ RGA_set_src(base, msg); ++ RGA_set_dst(base, msg); ++ RGA_set_color(base, msg); ++ RGA_set_fading(base, msg); ++ RGA_set_pat(base, msg); ++ matrix_cal(msg, &tile); ++ dst_ctrl_cal(msg, &tile); ++ src_tile_info_cal(msg, &tile); ++ RGA_set_bitblt_reg_info(base, msg, &tile); ++ break; ++ case color_palette_mode : ++ RGA_set_src(base, msg); ++ RGA_set_dst(base, msg); ++ RGA_set_color(base, msg); ++ RGA_set_color_palette_reg_info(base, msg); ++ break; ++ case color_fill_mode : ++ RGA_set_alpha_rop(base, msg); ++ RGA_set_dst(base, msg); ++ RGA_set_color(base, msg); ++ RGA_set_pat(base, msg); ++ RGA_set_color_fill_reg_info(base, msg); ++ break; ++ case line_point_drawing_mode : ++ RGA_set_alpha_rop(base, msg); ++ RGA_set_dst(base, msg); ++ RGA_set_color(base, msg); ++ RGA_set_line_drawing_reg_info(base, msg); ++ break; ++ case blur_sharp_filter_mode : ++ RGA_set_src(base, msg); ++ RGA_set_dst(base, msg); ++ RGA_set_filter_reg_info(base, msg); ++ break; ++ case pre_scaling_mode : ++ RGA_set_src(base, msg); ++ RGA_set_dst(base, msg); ++ if(RGA_set_pre_scale_reg_info(base, msg) == -EINVAL) ++ return -1; ++ break; ++ case update_palette_table_mode : ++ if (RGA_set_update_palette_table_reg_info(base, msg)) { ++ return -1; ++ } ++ break; ++ case update_patten_buff_mode: ++ if (RGA_set_update_patten_buff_reg_info(base, msg)){ ++ return -1; ++ } ++ ++ break; ++ } ++ ++ RGA_set_mmu_ctrl_reg_info(base, msg); ++ ++ return 0; ++} ++ ++ ++ diff --git a/drivers/video/rockchip/rga/rga_reg_info.h b/drivers/video/rockchip/rga/rga_reg_info.h new file mode 100755 -index 000000000000..565e8f72d7f0 +index 000000000..8edbd5c3d --- /dev/null +++ b/drivers/video/rockchip/rga/rga_reg_info.h @@ -0,0 +1,467 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef __REG_INFO_H__ -+#define __REG_INFO_H__ -+ -+ -+//#include "chip_register.h" -+ -+//#include "rga_struct.h" -+#include "rga.h" -+ -+#ifndef MIN -+#define MIN(X, Y) ((X)<(Y)?(X):(Y)) -+#endif -+ -+#ifndef MAX -+#define MAX(X, Y) ((X)>(Y)?(X):(Y)) -+#endif -+ -+#ifndef ABS -+#define ABS(X) (((X) < 0) ? (-(X)) : (X)) -+#endif -+ -+#ifndef CLIP -+#define CLIP(x, a, b) ((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x)) -+#endif -+ -+//RGA register map -+ -+//General Registers -+#define rRGA_SYS_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_SYS_CTRL)) -+#define rRGA_CMD_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_CMD_CTRL)) -+#define rRGA_CMD_ADDR (*(volatile uint32_t *)(RGA_BASE + RGA_CMD_ADDR)) -+#define rRGA_STATUS (*(volatile uint32_t *)(RGA_BASE + RGA_STATUS)) -+#define rRGA_INT (*(volatile uint32_t *)(RGA_BASE + RGA_INT)) -+#define rRGA_AXI_ID (*(volatile uint32_t *)(RGA_BASE + RGA_AXI_ID)) -+#define rRGA_MMU_STA_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_MMU_STA_CTRL)) -+#define rRGA_MMU_STA (*(volatile uint32_t *)(RGA_BASE + RGA_MMU_STA)) -+ -+//Command code start -+#define rRGA_MODE_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_MODE_CTRL)) -+ -+//Source Image Registers -+#define rRGA_SRC_Y_MST (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_Y_MST)) -+#define rRGA_SRC_CB_MST (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_CB_MST)) -+#define rRGA_MASK_READ_MST (*(volatile uint32_t *)(RGA_BASE + RGA_MASK_READ_MST)) //repeat -+#define rRGA_SRC_CR_MST (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_CR_MST)) -+#define rRGA_SRC_VIR_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_VIR_INFO)) -+#define rRGA_SRC_ACT_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_ACT_INFO)) -+#define rRGA_SRC_X_PARA (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_X_PARA)) -+#define rRGA_SRC_Y_PARA (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_Y_PARA)) -+#define rRGA_SRC_TILE_XINFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_XINFO)) -+#define rRGA_SRC_TILE_YINFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_YINFO)) -+#define rRGA_SRC_TILE_H_INCR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_H_INCR)) -+#define rRGA_SRC_TILE_V_INCR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_V_INCR)) -+#define rRGA_SRC_TILE_OFFSETX (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_OFFSETX)) -+#define rRGA_SRC_TILE_OFFSETY (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_OFFSETY)) -+#define rRGA_SRC_BG_COLOR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_BG_COLOR)) -+#define rRGA_SRC_FG_COLOR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_FG_COLOR)) -+#define rRGA_LINE_DRAWING_COLOR (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAWING_COLOR)) //repeat -+#define rRGA_SRC_TR_COLOR0 (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TR_COLOR0)) -+#define rRGA_CP_GR_A (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_A)) //repeat -+#define rRGA_SRC_TR_COLOR1 (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TR_COLOR1)) -+#define rRGA_CP_GR_B (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_B)) //repeat -+ -+#define rRGA_LINE_DRAW (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAW)) -+#define rRGA_PAT_START_POINT (*(volatile uint32_t *)(RGA_BASE + RGA_PAT_START_POINT)) //repeat -+ -+//Destination Image Registers -+#define rRGA_DST_MST (*(volatile uint32_t *)(RGA_BASE + RGA_DST_MST)) -+#define rRGA_LUT_MST (*(volatile uint32_t *)(RGA_BASE + RGA_LUT_MST)) //repeat -+#define rRGA_PAT_MST (*(volatile uint32_t *)(RGA_BASE + RGA_PAT_MST)) //repeat -+#define rRGA_LINE_DRAWING_MST (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAWING_MST)) //repeat -+ -+#define rRGA_DST_VIR_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_DST_VIR_INFO)) -+ -+#define rRGA_DST_CTR_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_DST_CTR_INFO)) -+#define rRGA_LINE_DRAW_XY_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAW_XY_INFO)) //repeat -+ -+//Alpha/ROP Registers -+#define rRGA_ALPHA_CON (*(volatile uint32_t *)(RGA_BASE + RGA_ALPHA_CON)) -+#define rRGA_FADING_CON (*(volatile uint32_t *)(RGA_BASE + RGA_FADING_CON)) -+ -+#define rRGA_PAT_CON (*(volatile uint32_t *)(RGA_BASE + RGA_PAT_CON)) -+#define rRGA_DST_VIR_WIDTH_PIX (*(volatile uint32_t *)(RGA_BASE + RGA_DST_VIR_WIDTH_PIX)) //repeat -+ -+#define rRGA_ROP_CON0 (*(volatile uint32_t *)(RGA_BASE + RGA_ROP_CON0)) -+#define rRGA_CP_GR_G (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_G)) //repeat -+#define rRGA_PRESCL_CB_MST (*(volatile uint32_t *)(RGA_BASE + RGA_PRESCL_CB_MST)) //repeat -+ -+#define rRGA_ROP_CON1 (*(volatile uint32_t *)(RGA_BASE + RGA_ROP_CON1)) -+#define rRGA_CP_GR_R (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_R)) //repeat -+#define rRGA_PRESCL_CR_MST (*(volatile uint32_t *)(RGA_BASE + RGA_PRESCL_CR_MST)) //repeat -+ -+//MMU Register -+#define rRGA_MMU_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_MMU_CTRL)) -+ -+ -+ -+ -+//----------------------------------------------------------------- -+//reg detail definition -+//----------------------------------------------------------------- -+/*RGA_SYS_CTRL*/ -+#define m_RGA_SYS_CTRL_CMD_MODE ( 1<<2 ) -+#define m_RGA_SYS_CTRL_OP_ST_SLV ( 1<<1 ) -+#define m_RGA_sys_CTRL_SOFT_RESET ( 1<<0 ) -+ -+#define s_RGA_SYS_CTRL_CMD_MODE(x) ( (x&0x1)<<2 ) -+#define s_RGA_SYS_CTRL_OP_ST_SLV(x) ( (x&0x1)<<1 ) -+#define s_RGA_sys_CTRL_SOFT_RESET(x) ( (x&0x1)<<0 ) -+ -+ -+/*RGA_CMD_CTRL*/ -+#define m_RGA_CMD_CTRL_CMD_INCR_NUM ( 0x3ff<<3 ) -+#define m_RGA_CMD_CTRL_CMD_STOP_MODE ( 1<<2 ) -+#define m_RGA_CMD_CTRL_CMD_INCR_VALID ( 1<<1 ) -+#define m_RGA_CMD_CTRL_CMD_LINE_FET_ST ( 1<<0 ) -+ -+#define s_RGA_CMD_CTRL_CMD_INCR_NUM(x) ( (x&0x3ff)<<3 ) -+#define s_RGA_CMD_CTRL_CMD_STOP_MODE(x) ( (x&0x1)<<2 ) -+#define s_RGA_CMD_CTRL_CMD_INCR_VALID(x) ( (x&0x1)<<1 ) -+#define s_RGA_CMD_CTRL_CMD_LINE_FET_ST(x) ( (x*0x1)<<0 ) -+ -+ -+/*RGA_STATUS*/ -+#define m_RGA_CMD_STATUS_CMD_TOTAL_NUM ( 0xfff<<20 ) -+#define m_RGA_CMD_STATUS_NOW_CMD_NUM ( 0xfff<<8 ) -+#define m_RGA_CMD_STATUS_ENGINE_STATUS ( 1<<0 ) -+ -+ -+/*RGA_INT*/ -+#define m_RGA_INT_ALL_CMD_DONE_INT_EN ( 1<<10 ) -+#define m_RGA_INT_MMU_INT_EN ( 1<<9 ) -+#define m_RGA_INT_ERROR_INT_EN ( 1<<8 ) -+#define m_RGA_INT_NOW_CMD_DONE_INT_CLEAR ( 1<<7 ) -+#define m_RGA_INT_ALL_CMD_DONE_INT_CLEAR ( 1<<6 ) -+#define m_RGA_INT_MMU_INT_CLEAR ( 1<<5 ) -+#define m_RGA_INT_ERROR_INT_CLEAR ( 1<<4 ) -+#define m_RGA_INT_NOW_CMD_DONE_INT_FLAG ( 1<<3 ) -+#define m_RGA_INT_ALL_CMD_DONE_INT_FLAG ( 1<<2 ) -+#define m_RGA_INT_MMU_INT_FLAG ( 1<<1 ) -+#define m_RGA_INT_ERROR_INT_FLAG ( 1<<0 ) -+ -+#define s_RGA_INT_ALL_CMD_DONE_INT_EN(x) ( (x&0x1)<<10 ) -+#define s_RGA_INT_MMU_INT_EN(x) ( (x&0x1)<<9 ) -+#define s_RGA_INT_ERROR_INT_EN(x) ( (x&0x1)<<8 ) -+#define s_RGA_INT_NOW_CMD_DONE_INT_CLEAR(x) ( (x&0x1)<<7 ) -+#define s_RGA_INT_ALL_CMD_DONE_INT_CLEAR(x) ( (x&0x1)<<6 ) -+#define s_RGA_INT_MMU_INT_CLEAR(x) ( (x&0x1)<<5 ) -+#define s_RGA_INT_ERROR_INT_CLEAR(x) ( (x&0x1)<<4 ) -+ -+ -+/*RGA_AXI_ID*/ -+#define m_RGA_AXI_ID_MMU_READ ( 3<<30 ) -+#define m_RGA_AXI_ID_MMU_WRITE ( 3<<28 ) -+#define m_RGA_AXI_ID_MASK_READ ( 0xf<<24 ) -+#define m_RGA_AXI_ID_CMD_FET ( 0xf<<20 ) -+#define m_RGA_AXI_ID_DST_WRITE ( 0xf<<16 ) -+#define m_RGA_AXI_ID_DST_READ ( 0xf<<12 ) -+#define m_RGA_AXI_ID_SRC_CR_READ ( 0xf<<8 ) -+#define m_RGA_AXI_ID_SRC_CB_READ ( 0xf<<4 ) -+#define m_RGA_AXI_ID_SRC_Y_READ ( 0xf<<0 ) -+ -+#define s_RGA_AXI_ID_MMU_READ(x) ( (x&0x3)<<30 ) -+#define s_RGA_AXI_ID_MMU_WRITE(x) ( (x&0x3)<<28 ) -+#define s_RGA_AXI_ID_MASK_READ(x) ( (x&0xf)<<24 ) -+#define s_RGA_AXI_ID_CMD_FET(x) ( (x&0xf)<<20 ) -+#define s_RGA_AXI_ID_DST_WRITE(x) ( (x&0xf)<<16 ) -+#define s_RGA_AXI_ID_DST_READ(x) ( (x&0xf)<<12 ) -+#define s_RGA_AXI_ID_SRC_CR_READ(x) ( (x&0xf)<<8 ) -+#define s_RGA_AXI_ID_SRC_CB_READ(x) ( (x&0xf)<<4 ) -+#define s_RGA_AXI_ID_SRC_Y_READ(x) ( (x&0xf)<<0 ) -+ -+ -+/*RGA_MMU_STA_CTRL*/ -+#define m_RGA_MMU_STA_CTRL_TLB_STA_CLEAR ( 1<<3 ) -+#define m_RGA_MMU_STA_CTRL_TLB_STA_RESUME ( 1<<2 ) -+#define m_RGA_MMU_STA_CTRL_TLB_STA_PAUSE ( 1<<1 ) -+#define m_RGA_MMU_STA_CTRL_TLB_STA_EN ( 1<<0 ) -+ -+#define s_RGA_MMU_STA_CTRL_TLB_STA_CLEAR(x) ( (x&0x1)<<3 ) -+#define s_RGA_MMU_STA_CTRL_TLB_STA_RESUME(x) ( (x&0x1)<<2 ) -+#define s_RGA_MMU_STA_CTRL_TLB_STA_PAUSE(x) ( (x&0x1)<<1 ) -+#define s_RGA_MMU_STA_CTRL_TLB_STA_EN(x) ( (x&0x1)<<0 ) -+ -+ -+ -+/* RGA_MODE_CTRL */ -+#define m_RGA_MODE_CTRL_2D_RENDER_MODE ( 7<<0 ) -+#define m_RGA_MODE_CTRL_SRC_RGB_PACK ( 1<<3 ) -+#define m_RGA_MODE_CTRL_SRC_FORMAT ( 15<<4 ) -+#define m_RGA_MODE_CTRL_SRC_RB_SWAP ( 1<<8 ) -+#define m_RGA_MODE_CTRL_SRC_ALPHA_SWAP ( 1<<9 ) -+#define m_RGA_MODE_CTRL_SRC_UV_SWAP_MODE ( 1<<10 ) -+#define m_RGA_MODE_CTRL_YUV2RGB_CON_MODE ( 3<<11 ) -+#define m_RGA_MODE_CTRL_SRC_TRANS_MODE (0x1f<<13 ) -+#define m_RGA_MODE_CTRL_SRC_TR_MODE ( 1<<13 ) -+#define m_RGA_MODE_CTRL_SRC_TR_R_EN ( 1<<14 ) -+#define m_RGA_MODE_CTRL_SRC_TR_G_EN ( 1<<15 ) -+#define m_RGA_MODE_CTRL_SRC_TR_B_EN ( 1<<16 ) -+#define m_RGA_MODE_CTRL_SRC_TR_A_EN ( 1<<17 ) -+#define m_RGA_MODE_CTRL_ROTATE_MODE ( 3<<18 ) -+#define m_RGA_MODE_CTRL_SCALE_MODE ( 3<<20 ) -+#define m_RGA_MODE_CTRL_PAT_SEL ( 1<<22 ) -+#define m_RGA_MODE_CTRL_DST_FORMAT ( 3<<23 ) -+#define m_RGA_MODE_CTRL_DST_RGB_PACK ( 1<<25 ) -+#define m_RGA_MODE_CTRL_DST_RB_SWAP ( 1<<26 ) -+#define m_RGA_MODE_CTRL_DST_ALPHA_SWAP ( 1<<27 ) -+#define m_RGA_MODE_CTRL_LUT_ENDIAN_MODE ( 1<<28 ) -+#define m_RGA_MODE_CTRL_CMD_INT_ENABLE ( 1<<29 ) -+#define m_RGA_MODE_CTRL_ZERO_MODE_ENABLE ( 1<<30 ) -+#define m_RGA_MODE_CTRL_DST_ALPHA_ENABLE ( 1<<30 ) -+ -+ -+ -+#define s_RGA_MODE_CTRL_2D_RENDER_MODE(x) ( (x&0x7)<<0 ) -+#define s_RGA_MODE_CTRL_SRC_RGB_PACK(x) ( (x&0x1)<<3 ) -+#define s_RGA_MODE_CTRL_SRC_FORMAT(x) ( (x&0xf)<<4 ) -+#define s_RGA_MODE_CTRL_SRC_RB_SWAP(x) ( (x&0x1)<<8 ) -+#define s_RGA_MODE_CTRL_SRC_ALPHA_SWAP(x) ( (x&0x1)<<9 ) -+#define s_RGA_MODE_CTRL_SRC_UV_SWAP_MODE(x) ( (x&0x1)<<10 ) -+#define s_RGA_MODE_CTRL_YUV2RGB_CON_MODE(x) ( (x&0x3)<<11 ) -+#define s_RGA_MODE_CTRL_SRC_TRANS_MODE(x) ( (x&0x1f)<<13 ) -+#define s_RGA_MODE_CTRL_SRC_TR_MODE(x) ( (x&0x1)<<13 ) -+#define s_RGA_MODE_CTRL_SRC_TR_R_EN(x) ( (x&0x1)<<14 ) -+#define s_RGA_MODE_CTRL_SRC_TR_G_EN(x) ( (x&0x1)<<15 ) -+#define s_RGA_MODE_CTRL_SRC_TR_B_EN(x) ( (x&0x1)<<16 ) -+#define s_RGA_MODE_CTRL_SRC_TR_A_EN(x) ( (x&0x1)<<17 ) -+#define s_RGA_MODE_CTRL_ROTATE_MODE(x) ( (x&0x3)<<18 ) -+#define s_RGA_MODE_CTRL_SCALE_MODE(x) ( (x&0x3)<<20 ) -+#define s_RGA_MODE_CTRL_PAT_SEL(x) ( (x&0x1)<<22 ) -+#define s_RGA_MODE_CTRL_DST_FORMAT(x) ( (x&0x3)<<23 ) -+#define s_RGA_MODE_CTRL_DST_RGB_PACK(x) ( (x&0x1)<<25 ) -+#define s_RGA_MODE_CTRL_DST_RB_SWAP(x) ( (x&0x1)<<26 ) -+#define s_RGA_MODE_CTRL_DST_ALPHA_SWAP(x) ( (x&0x1)<<27 ) -+#define s_RGA_MODE_CTRL_LUT_ENDIAN_MODE(x) ( (x&0x1)<<28 ) -+#define s_RGA_MODE_CTRL_CMD_INT_ENABLE(x) ( (x&0x1)<<29 ) -+#define s_RGA_MODE_CTRL_ZERO_MODE_ENABLE(x) ( (x&0x1)<<30 ) -+#define s_RGA_MODE_CTRL_DST_ALPHA_ENABLE(x) ( (x&0x1)<<31 ) -+ -+ -+ -+/* RGA_LINE_DRAW */ -+#define m_RGA_LINE_DRAW_MAJOR_WIDTH ( 0x7ff<<0 ) -+#define m_RGA_LINE_DRAW_LINE_DIRECTION ( 0x1<<11) -+#define m_RGA_LINE_DRAW_LINE_WIDTH ( 0xf<<12) -+#define m_RGA_LINE_DRAW_INCR_VALUE ( 0xfff<<16) -+#define m_RGA_LINE_DRAW_DIR_MAJOR ( 0x1<<28) -+#define m_RGA_LINE_DRAW_DIR_SEMI_MAJOR ( 0x1<<29) -+#define m_RGA_LINE_DRAW_LAST_POINT ( 0x1<<30) -+#define m_RGA_LINE_DRAW_ANTI_ALISING ( 0x1<<31) -+ -+#define s_RGA_LINE_DRAW_MAJOR_WIDTH(x) (((x)&0x7ff)<<0 ) -+#define s_RGA_LINE_DRAW_LINE_DIRECTION(x) ( ((x)&0x1)<<11) -+#define s_RGA_LINE_DRAW_LINE_WIDTH(x) ( ((x)&0xf)<<12) -+#define s_RGA_LINE_DRAW_INCR_VALUE(x) (((x)&0xfff)<<16) -+#define s_RGA_LINE_DRAW_DIR_MAJOR(x) ( ((x)&0x1)<<28) -+#define s_RGA_LINE_DRAW_DIR_SEMI_MAJOR(x) ( ((x)&0x1)<<29) -+#define s_RGA_LINE_DRAW_LAST_POINT(x) ( ((x)&0x1)<<30) -+#define s_RGA_LINE_DRAW_ANTI_ALISING(x) ( ((x)&0x1)<<31) -+ -+ -+/* RGA_ALPHA_CON */ -+#define m_RGA_ALPHA_CON_ENABLE ( 0x1<<0 ) -+#define m_RGA_ALPHA_CON_A_OR_R_SEL ( 0x1<<1 ) -+#define m_RGA_ALPHA_CON_ALPHA_MODE ( 0x3<<2 ) -+#define m_RGA_ALPHA_CON_PD_MODE ( 0xf<<4 ) -+#define m_RGA_ALPHA_CON_SET_CONSTANT_VALUE (0xff<<8 ) -+#define m_RGA_ALPHA_CON_PD_M_SEL ( 0x1<<16) -+#define m_RGA_ALPHA_CON_FADING_ENABLE ( 0x1<<17) -+#define m_RGA_ALPHA_CON_ROP_MODE_SEL ( 0x3<<18) -+#define m_RGA_ALPHA_CON_CAL_MODE_SEL ( 0x1<<28) -+#define m_RGA_ALPHA_CON_DITHER_ENABLE ( 0x1<<29) -+#define m_RGA_ALPHA_CON_GRADIENT_CAL_MODE ( 0x1<<30) -+#define m_RGA_ALPHA_CON_AA_SEL ( 0x1<<31) -+ -+#define s_RGA_ALPHA_CON_ENABLE(x) ( (x&0x1)<<0 ) -+#define s_RGA_ALPHA_CON_A_OR_R_SEL(x) ( (x&0x1)<<1 ) -+#define s_RGA_ALPHA_CON_ALPHA_MODE(x) ( (x&0x3)<<2 ) -+#define s_RGA_ALPHA_CON_PD_MODE(x) ( (x&0xf)<<4 ) -+#define s_RGA_ALPHA_CON_SET_CONSTANT_VALUE(x) ((x&0xff)<<8 ) -+#define s_RGA_ALPHA_CON_PD_M_SEL(x) ( (x&0x1)<<16) -+#define s_RGA_ALPHA_CON_FADING_ENABLE(x) ( (x&0x1)<<17) -+#define s_RGA_ALPHA_CON_ROP_MODE_SEL(x) ( (x&0x3)<<18) -+#define s_RGA_ALPHA_CON_CAL_MODE_SEL(x) ( (x&0x1)<<28) -+#define s_RGA_ALPHA_CON_DITHER_ENABLE(x) ( (x&0x1)<<29) -+#define s_RGA_ALPHA_CON_GRADIENT_CAL_MODE(x) ( (x&0x1)<<30) -+#define s_RGA_ALPHA_CON_AA_SEL(x) ( (x&0x1)<<31) -+ -+ -+/* blur sharp mode */ -+#define m_RGA_BLUR_SHARP_FILTER_MODE ( 0x1<<25 ) -+#define m_RGA_BLUR_SHARP_FILTER_TYPE ( 0x3<<26 ) -+ -+#define s_RGA_BLUR_SHARP_FILTER_MODE(x) ( (x&0x1)<<25 ) -+#define s_RGA_BLUR_SHARP_FILTER_TYPE(x) ( (x&0x3)<<26 ) -+ -+ -+/* pre scale mode */ -+#define m_RGA_PRE_SCALE_HOR_RATIO ( 0x3 <<20 ) -+#define m_RGA_PRE_SCALE_VER_RATIO ( 0x3 <<22 ) -+#define m_RGA_PRE_SCALE_OUTPUT_FORMAT ( 0x1 <<24 ) -+ -+#define s_RGA_PRE_SCALE_HOR_RATIO(x) ( (x&0x3) <<20 ) -+#define s_RGA_PRE_SCALE_VER_RATIO(x) ( (x&0x3) <<22 ) -+#define s_RGA_PRE_SCALE_OUTPUT_FORMAT(x) ( (x&0x1) <<24 ) -+ -+ -+ -+/* RGA_MMU_CTRL*/ -+#define m_RGA_MMU_CTRL_TLB_ADDR ( 0xffffffff<<0) -+#define m_RGA_MMU_CTRL_PAGE_TABLE_SIZE ( 0x3<<4 ) -+#define m_RGA_MMU_CTRL_MMU_ENABLE ( 0x1<<0 ) -+#define m_RGA_MMU_CTRL_SRC_FLUSH ( 0x1<<1 ) -+#define m_RGA_MMU_CTRL_DST_FLUSH ( 0x1<<2 ) -+#define m_RGA_MMU_CTRL_CMD_CHAN_FLUSH ( 0x1<<3 ) -+ -+#define s_RGA_MMU_CTRL_TLB_ADDR(x) ((x&0xffffffff)) -+#define s_RGA_MMU_CTRL_PAGE_TABLE_SIZE(x) ((x&0x3)<<4) -+#define s_RGA_MMU_CTRL_MMU_ENABLE(x) ((x&0x1)<<0) -+#define s_RGA_MMU_CTRL_SRC_FLUSH(x) ((x&0x1)<<1) -+#define s_RGA_MMU_CTRL_DST_FLUSH(x) ((x&0x1)<<2) -+#define s_RGA_MMU_CTRL_CMD_CHAN_FLUSH(x) ((x&0x1)<<3) -+ -+#endif -+ -+/* -+#define RGA_MODE_CTRL_OFFSET 0x0 -+#define RGA_SRC_Y_MST_OFFSET 0x4 -+#define RGA_SRC_CB_MST_OFFSET 0x8 -+#define RGA_SRC_CR_MST_OFFSET 0xc -+#define RGA_SRC_VIR_INFO_OFFSET 0x10 -+#define RGA_SRC_ACT_INFO_OFFSET 0x14 -+#define RGA_SRC_X_PARA_OFFSET 0x18 -+#define RGA_SRC_Y_PARA_OFFSET 0x1c -+#define RGA_SRC_TILE_XINFO_OFFSET 0x20 -+#define RGA_SRC_TILE_YINFO_OFFSET 0x24 -+#define RGA_SRC_TILE_H_INCR_OFFSET 0x28 -+#define RGA_SRC_TILE_V_INCR_OFFSET 0x2c -+#define RGA_SRC_TILE_OFFSETX_OFFSET 0x30 -+#define RGA_SRC_TILE_OFFSETY_OFFSET 0x34 -+#define RGA_SRC_BG_COLOR_OFFSET 0x38 -+ -+#define RGA_SRC_FG_COLOR_OFFSET 0x3c -+#define RGA_LINE_DRAWING_COLOR_OFFSET 0x3c -+ -+#define RGA_SRC_TR_COLOR0_OFFSET 0x40 -+#define RGA_CP_GR_A_OFFSET 0x40 //repeat -+ -+#define RGA_SRC_TR_COLOR1_OFFSET 0x44 -+#define RGA_CP_GR_B_OFFSET 0x44 //repeat -+ -+#define RGA_LINE_DRAW_OFFSET 0x48 -+#define RGA_PAT_START_POINT_OFFSET 0x48 //repeat -+ -+#define RGA_DST_MST_OFFSET 0x4c -+#define RGA_LUT_MST_OFFSET 0x4c //repeat -+#define RGA_PAT_MST_OFFSET 0x4c //repeat -+#define RGA_LINE_DRAWING_MST_OFFSET 0x4c //repeat -+ -+#define RGA_DST_VIR_INFO_OFFSET 0x50 -+ -+#define RGA_DST_CTR_INFO_OFFSET 0x54 -+#define RGA_LINE_DRAW_XY_INFO_OFFSET 0x54 //repeat -+ -+#define RGA_ALPHA_CON_OFFSET 0x58 -+#define RGA_FADING_CON_OFFSET 0x5c -+ -+#define RGA_PAT_CON_OFFSET 0x60 -+#define RGA_LINE_DRAWING_WIDTH_OFFSET 0x60 //repeat -+ -+#define RGA_ROP_CON0_OFFSET 0x64 -+#define RGA_CP_GR_G_OFFSET 0x64 //repeat -+#define RGA_PRESCL_CB_MST_OFFSET 0x64 //repeat -+ -+#define RGA_ROP_CON1_OFFSET 0x68 -+#define RGA_CP_GR_R_OFFSET 0x68 //repeat -+#define RGA_PRESCL_CR_MST_OFFSET 0x68 //repeat -+ -+#define RGA_MMU_CTRL_OFFSET 0x6c -+ -+ -+#define RGA_SYS_CTRL_OFFSET 0x000 -+#define RGA_CMD_CTRL_OFFSET 0x004 -+#define RGA_CMD_ADDR_OFFSET 0x008 -+#define RGA_STATUS_OFFSET 0x00c -+#define RGA_INT_OFFSET 0x010 -+#define RGA_AXI_ID_OFFSET 0x014 -+#define RGA_MMU_STA_CTRL_OFFSET 0x018 -+#define RGA_MMU_STA_OFFSET 0x01c -+*/ -+//hxx -+ -+#define RGA_SYS_CTRL_OFFSET (RGA_SYS_CTRL-0x100) -+#define RGA_CMD_CTRL_OFFSET (RGA_CMD_CTRL-0x100) -+#define RGA_CMD_ADDR_OFFSET (RGA_CMD_ADDR-0x100) -+#define RGA_STATUS_OFFSET (RGA_STATUS-0x100) -+#define RGA_INT_OFFSET (RGA_INT-0x100) -+#define RGA_AXI_ID_OFFSET (RGA_AXI_ID-0x100) -+#define RGA_MMU_STA_CTRL_OFFSET (RGA_MMU_STA_CTRL-0x100) -+#define RGA_MMU_STA_OFFSET (RGA_MMU_STA-0x100) -+ -+#define RGA_MODE_CTRL_OFFSET (RGA_MODE_CTRL-0x100) -+#define RGA_SRC_Y_MST_OFFSET (RGA_SRC_Y_MST-0x100) -+#define RGA_SRC_CB_MST_OFFSET (RGA_SRC_CB_MST-0x100) -+#define RGA_SRC_CR_MST_OFFSET (RGA_SRC_CR_MST-0x100) -+#define RGA_SRC_VIR_INFO_OFFSET (RGA_SRC_VIR_INFO-0x100) -+#define RGA_SRC_ACT_INFO_OFFSET (RGA_SRC_ACT_INFO-0x100) -+#define RGA_SRC_X_PARA_OFFSET (RGA_SRC_X_PARA-0x100) -+#define RGA_SRC_Y_PARA_OFFSET (RGA_SRC_Y_PARA-0x100) -+#define RGA_SRC_TILE_XINFO_OFFSET (RGA_SRC_TILE_XINFO-0x100) -+#define RGA_SRC_TILE_YINFO_OFFSET (RGA_SRC_TILE_YINFO-0x100) -+#define RGA_SRC_TILE_H_INCR_OFFSET (RGA_SRC_TILE_H_INCR-0x100) -+#define RGA_SRC_TILE_V_INCR_OFFSET (RGA_SRC_TILE_V_INCR-0x100) -+#define RGA_SRC_TILE_OFFSETX_OFFSET (RGA_SRC_TILE_OFFSETX-0x100) -+#define RGA_SRC_TILE_OFFSETY_OFFSET (RGA_SRC_TILE_OFFSETY-0x100) -+#define RGA_SRC_BG_COLOR_OFFSET (RGA_SRC_BG_COLOR-0x100) -+ -+#define RGA_SRC_FG_COLOR_OFFSET (RGA_SRC_FG_COLOR-0x100) -+#define RGA_LINE_DRAWING_COLOR_OFFSET (RGA_LINE_DRAWING_COLOR-0x100) -+ -+#define RGA_SRC_TR_COLOR0_OFFSET (RGA_SRC_TR_COLOR0-0x100) -+#define RGA_CP_GR_A_OFFSET (RGA_CP_GR_A-0x100) //repeat -+ -+#define RGA_SRC_TR_COLOR1_OFFSET (RGA_SRC_TR_COLOR1-0x100) -+#define RGA_CP_GR_B_OFFSET (RGA_CP_GR_B-0x100) //repeat -+ -+#define RGA_LINE_DRAW_OFFSET (RGA_LINE_DRAW-0x100) -+#define RGA_PAT_START_POINT_OFFSET (RGA_PAT_START_POINT-0x100) //repeat -+ -+#define RGA_DST_MST_OFFSET (RGA_DST_MST-0x100) -+#define RGA_LUT_MST_OFFSET (RGA_LUT_MST-0x100) //repeat -+#define RGA_PAT_MST_OFFSET (RGA_PAT_MST-0x100) //repeat -+#define RGA_LINE_DRAWING_MST_OFFSET (RGA_LINE_DRAWING_MST-0x100) //repeat -+ -+#define RGA_DST_VIR_INFO_OFFSET (RGA_DST_VIR_INFO-0x100) -+ -+#define RGA_DST_CTR_INFO_OFFSET (RGA_DST_CTR_INFO-0x100) -+#define RGA_LINE_DRAW_XY_INFO_OFFSET (RGA_LINE_DRAW_XY_INFO-0x100) //repeat -+ -+#define RGA_ALPHA_CON_OFFSET (RGA_ALPHA_CON-0x100) -+ -+#define RGA_PAT_CON_OFFSET (RGA_PAT_CON-0x100) -+#define RGA_LINE_DRAWING_WIDTH_OFFSET (RGA_DST_VIR_WIDTH_PIX-0x100) //repeat -+ -+#define RGA_ROP_CON0_OFFSET (RGA_ROP_CON0-0x100) -+#define RGA_CP_GR_G_OFFSET (RGA_CP_GR_G-0x100) //repeat -+#define RGA_PRESCL_CB_MST_OFFSET (RGA_PRESCL_CB_MST-0x100) //repeat -+ -+#define RGA_ROP_CON1_OFFSET (RGA_ROP_CON1-0x100) -+#define RGA_CP_GR_R_OFFSET (RGA_CP_GR_R-0x100) //repeat -+#define RGA_PRESCL_CR_MST_OFFSET (RGA_PRESCL_CR_MST-0x100) //repeat -+ -+#define RGA_FADING_CON_OFFSET (RGA_FADING_CON-0x100) -+#define RGA_MMU_TLB_OFFSET (RGA_MMU_TBL-0x100) -+ -+#define RGA_YUV_OUT_CFG_OFFSET (RGA_YUV_OUT_CFG-0x100) -+#define RGA_DST_UV_MST_OFFSET (RGA_DST_UV_MST-0x100) -+ -+ -+ -+void matrix_cal(const struct rga_req *msg, TILE_INFO *tile); -+ -+ -+int RGA_gen_reg_info(const struct rga_req *msg, unsigned char *base); -+uint8_t RGA_pixel_width_init(uint32_t format); -+ ++#ifndef __REG_INFO_H__ ++#define __REG_INFO_H__ ++ ++ ++//#include "chip_register.h" ++ ++//#include "rga_struct.h" ++#include "rga.h" ++ ++#ifndef MIN ++#define MIN(X, Y) ((X)<(Y)?(X):(Y)) ++#endif ++ ++#ifndef MAX ++#define MAX(X, Y) ((X)>(Y)?(X):(Y)) ++#endif ++ ++#ifndef ABS ++#define ABS(X) (((X) < 0) ? (-(X)) : (X)) ++#endif ++ ++#ifndef CLIP ++#define CLIP(x, a, b) ((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x)) ++#endif ++ ++//RGA register map ++ ++//General Registers ++#define rRGA_SYS_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_SYS_CTRL)) ++#define rRGA_CMD_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_CMD_CTRL)) ++#define rRGA_CMD_ADDR (*(volatile uint32_t *)(RGA_BASE + RGA_CMD_ADDR)) ++#define rRGA_STATUS (*(volatile uint32_t *)(RGA_BASE + RGA_STATUS)) ++#define rRGA_INT (*(volatile uint32_t *)(RGA_BASE + RGA_INT)) ++#define rRGA_AXI_ID (*(volatile uint32_t *)(RGA_BASE + RGA_AXI_ID)) ++#define rRGA_MMU_STA_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_MMU_STA_CTRL)) ++#define rRGA_MMU_STA (*(volatile uint32_t *)(RGA_BASE + RGA_MMU_STA)) ++ ++//Command code start ++#define rRGA_MODE_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_MODE_CTRL)) ++ ++//Source Image Registers ++#define rRGA_SRC_Y_MST (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_Y_MST)) ++#define rRGA_SRC_CB_MST (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_CB_MST)) ++#define rRGA_MASK_READ_MST (*(volatile uint32_t *)(RGA_BASE + RGA_MASK_READ_MST)) //repeat ++#define rRGA_SRC_CR_MST (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_CR_MST)) ++#define rRGA_SRC_VIR_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_VIR_INFO)) ++#define rRGA_SRC_ACT_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_ACT_INFO)) ++#define rRGA_SRC_X_PARA (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_X_PARA)) ++#define rRGA_SRC_Y_PARA (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_Y_PARA)) ++#define rRGA_SRC_TILE_XINFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_XINFO)) ++#define rRGA_SRC_TILE_YINFO (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_YINFO)) ++#define rRGA_SRC_TILE_H_INCR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_H_INCR)) ++#define rRGA_SRC_TILE_V_INCR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_V_INCR)) ++#define rRGA_SRC_TILE_OFFSETX (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_OFFSETX)) ++#define rRGA_SRC_TILE_OFFSETY (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TILE_OFFSETY)) ++#define rRGA_SRC_BG_COLOR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_BG_COLOR)) ++#define rRGA_SRC_FG_COLOR (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_FG_COLOR)) ++#define rRGA_LINE_DRAWING_COLOR (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAWING_COLOR)) //repeat ++#define rRGA_SRC_TR_COLOR0 (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TR_COLOR0)) ++#define rRGA_CP_GR_A (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_A)) //repeat ++#define rRGA_SRC_TR_COLOR1 (*(volatile uint32_t *)(RGA_BASE + RGA_SRC_TR_COLOR1)) ++#define rRGA_CP_GR_B (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_B)) //repeat ++ ++#define rRGA_LINE_DRAW (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAW)) ++#define rRGA_PAT_START_POINT (*(volatile uint32_t *)(RGA_BASE + RGA_PAT_START_POINT)) //repeat ++ ++//Destination Image Registers ++#define rRGA_DST_MST (*(volatile uint32_t *)(RGA_BASE + RGA_DST_MST)) ++#define rRGA_LUT_MST (*(volatile uint32_t *)(RGA_BASE + RGA_LUT_MST)) //repeat ++#define rRGA_PAT_MST (*(volatile uint32_t *)(RGA_BASE + RGA_PAT_MST)) //repeat ++#define rRGA_LINE_DRAWING_MST (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAWING_MST)) //repeat ++ ++#define rRGA_DST_VIR_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_DST_VIR_INFO)) ++ ++#define rRGA_DST_CTR_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_DST_CTR_INFO)) ++#define rRGA_LINE_DRAW_XY_INFO (*(volatile uint32_t *)(RGA_BASE + RGA_LINE_DRAW_XY_INFO)) //repeat ++ ++//Alpha/ROP Registers ++#define rRGA_ALPHA_CON (*(volatile uint32_t *)(RGA_BASE + RGA_ALPHA_CON)) ++#define rRGA_FADING_CON (*(volatile uint32_t *)(RGA_BASE + RGA_FADING_CON)) ++ ++#define rRGA_PAT_CON (*(volatile uint32_t *)(RGA_BASE + RGA_PAT_CON)) ++#define rRGA_DST_VIR_WIDTH_PIX (*(volatile uint32_t *)(RGA_BASE + RGA_DST_VIR_WIDTH_PIX)) //repeat ++ ++#define rRGA_ROP_CON0 (*(volatile uint32_t *)(RGA_BASE + RGA_ROP_CON0)) ++#define rRGA_CP_GR_G (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_G)) //repeat ++#define rRGA_PRESCL_CB_MST (*(volatile uint32_t *)(RGA_BASE + RGA_PRESCL_CB_MST)) //repeat ++ ++#define rRGA_ROP_CON1 (*(volatile uint32_t *)(RGA_BASE + RGA_ROP_CON1)) ++#define rRGA_CP_GR_R (*(volatile uint32_t *)(RGA_BASE + RGA_CP_GR_R)) //repeat ++#define rRGA_PRESCL_CR_MST (*(volatile uint32_t *)(RGA_BASE + RGA_PRESCL_CR_MST)) //repeat ++ ++//MMU Register ++#define rRGA_MMU_CTRL (*(volatile uint32_t *)(RGA_BASE + RGA_MMU_CTRL)) ++ ++ ++ ++ ++//----------------------------------------------------------------- ++//reg detail definition ++//----------------------------------------------------------------- ++/*RGA_SYS_CTRL*/ ++#define m_RGA_SYS_CTRL_CMD_MODE ( 1<<2 ) ++#define m_RGA_SYS_CTRL_OP_ST_SLV ( 1<<1 ) ++#define m_RGA_sys_CTRL_SOFT_RESET ( 1<<0 ) ++ ++#define s_RGA_SYS_CTRL_CMD_MODE(x) ( (x&0x1)<<2 ) ++#define s_RGA_SYS_CTRL_OP_ST_SLV(x) ( (x&0x1)<<1 ) ++#define s_RGA_sys_CTRL_SOFT_RESET(x) ( (x&0x1)<<0 ) ++ ++ ++/*RGA_CMD_CTRL*/ ++#define m_RGA_CMD_CTRL_CMD_INCR_NUM ( 0x3ff<<3 ) ++#define m_RGA_CMD_CTRL_CMD_STOP_MODE ( 1<<2 ) ++#define m_RGA_CMD_CTRL_CMD_INCR_VALID ( 1<<1 ) ++#define m_RGA_CMD_CTRL_CMD_LINE_FET_ST ( 1<<0 ) ++ ++#define s_RGA_CMD_CTRL_CMD_INCR_NUM(x) ( (x&0x3ff)<<3 ) ++#define s_RGA_CMD_CTRL_CMD_STOP_MODE(x) ( (x&0x1)<<2 ) ++#define s_RGA_CMD_CTRL_CMD_INCR_VALID(x) ( (x&0x1)<<1 ) ++#define s_RGA_CMD_CTRL_CMD_LINE_FET_ST(x) ( (x*0x1)<<0 ) ++ ++ ++/*RGA_STATUS*/ ++#define m_RGA_CMD_STATUS_CMD_TOTAL_NUM ( 0xfff<<20 ) ++#define m_RGA_CMD_STATUS_NOW_CMD_NUM ( 0xfff<<8 ) ++#define m_RGA_CMD_STATUS_ENGINE_STATUS ( 1<<0 ) ++ ++ ++/*RGA_INT*/ ++#define m_RGA_INT_ALL_CMD_DONE_INT_EN ( 1<<10 ) ++#define m_RGA_INT_MMU_INT_EN ( 1<<9 ) ++#define m_RGA_INT_ERROR_INT_EN ( 1<<8 ) ++#define m_RGA_INT_NOW_CMD_DONE_INT_CLEAR ( 1<<7 ) ++#define m_RGA_INT_ALL_CMD_DONE_INT_CLEAR ( 1<<6 ) ++#define m_RGA_INT_MMU_INT_CLEAR ( 1<<5 ) ++#define m_RGA_INT_ERROR_INT_CLEAR ( 1<<4 ) ++#define m_RGA_INT_NOW_CMD_DONE_INT_FLAG ( 1<<3 ) ++#define m_RGA_INT_ALL_CMD_DONE_INT_FLAG ( 1<<2 ) ++#define m_RGA_INT_MMU_INT_FLAG ( 1<<1 ) ++#define m_RGA_INT_ERROR_INT_FLAG ( 1<<0 ) ++ ++#define s_RGA_INT_ALL_CMD_DONE_INT_EN(x) ( (x&0x1)<<10 ) ++#define s_RGA_INT_MMU_INT_EN(x) ( (x&0x1)<<9 ) ++#define s_RGA_INT_ERROR_INT_EN(x) ( (x&0x1)<<8 ) ++#define s_RGA_INT_NOW_CMD_DONE_INT_CLEAR(x) ( (x&0x1)<<7 ) ++#define s_RGA_INT_ALL_CMD_DONE_INT_CLEAR(x) ( (x&0x1)<<6 ) ++#define s_RGA_INT_MMU_INT_CLEAR(x) ( (x&0x1)<<5 ) ++#define s_RGA_INT_ERROR_INT_CLEAR(x) ( (x&0x1)<<4 ) ++ ++ ++/*RGA_AXI_ID*/ ++#define m_RGA_AXI_ID_MMU_READ ( 3<<30 ) ++#define m_RGA_AXI_ID_MMU_WRITE ( 3<<28 ) ++#define m_RGA_AXI_ID_MASK_READ ( 0xf<<24 ) ++#define m_RGA_AXI_ID_CMD_FET ( 0xf<<20 ) ++#define m_RGA_AXI_ID_DST_WRITE ( 0xf<<16 ) ++#define m_RGA_AXI_ID_DST_READ ( 0xf<<12 ) ++#define m_RGA_AXI_ID_SRC_CR_READ ( 0xf<<8 ) ++#define m_RGA_AXI_ID_SRC_CB_READ ( 0xf<<4 ) ++#define m_RGA_AXI_ID_SRC_Y_READ ( 0xf<<0 ) ++ ++#define s_RGA_AXI_ID_MMU_READ(x) ( (x&0x3)<<30 ) ++#define s_RGA_AXI_ID_MMU_WRITE(x) ( (x&0x3)<<28 ) ++#define s_RGA_AXI_ID_MASK_READ(x) ( (x&0xf)<<24 ) ++#define s_RGA_AXI_ID_CMD_FET(x) ( (x&0xf)<<20 ) ++#define s_RGA_AXI_ID_DST_WRITE(x) ( (x&0xf)<<16 ) ++#define s_RGA_AXI_ID_DST_READ(x) ( (x&0xf)<<12 ) ++#define s_RGA_AXI_ID_SRC_CR_READ(x) ( (x&0xf)<<8 ) ++#define s_RGA_AXI_ID_SRC_CB_READ(x) ( (x&0xf)<<4 ) ++#define s_RGA_AXI_ID_SRC_Y_READ(x) ( (x&0xf)<<0 ) ++ ++ ++/*RGA_MMU_STA_CTRL*/ ++#define m_RGA_MMU_STA_CTRL_TLB_STA_CLEAR ( 1<<3 ) ++#define m_RGA_MMU_STA_CTRL_TLB_STA_RESUME ( 1<<2 ) ++#define m_RGA_MMU_STA_CTRL_TLB_STA_PAUSE ( 1<<1 ) ++#define m_RGA_MMU_STA_CTRL_TLB_STA_EN ( 1<<0 ) ++ ++#define s_RGA_MMU_STA_CTRL_TLB_STA_CLEAR(x) ( (x&0x1)<<3 ) ++#define s_RGA_MMU_STA_CTRL_TLB_STA_RESUME(x) ( (x&0x1)<<2 ) ++#define s_RGA_MMU_STA_CTRL_TLB_STA_PAUSE(x) ( (x&0x1)<<1 ) ++#define s_RGA_MMU_STA_CTRL_TLB_STA_EN(x) ( (x&0x1)<<0 ) ++ ++ ++ ++/* RGA_MODE_CTRL */ ++#define m_RGA_MODE_CTRL_2D_RENDER_MODE ( 7<<0 ) ++#define m_RGA_MODE_CTRL_SRC_RGB_PACK ( 1<<3 ) ++#define m_RGA_MODE_CTRL_SRC_FORMAT ( 15<<4 ) ++#define m_RGA_MODE_CTRL_SRC_RB_SWAP ( 1<<8 ) ++#define m_RGA_MODE_CTRL_SRC_ALPHA_SWAP ( 1<<9 ) ++#define m_RGA_MODE_CTRL_SRC_UV_SWAP_MODE ( 1<<10 ) ++#define m_RGA_MODE_CTRL_YUV2RGB_CON_MODE ( 3<<11 ) ++#define m_RGA_MODE_CTRL_SRC_TRANS_MODE (0x1f<<13 ) ++#define m_RGA_MODE_CTRL_SRC_TR_MODE ( 1<<13 ) ++#define m_RGA_MODE_CTRL_SRC_TR_R_EN ( 1<<14 ) ++#define m_RGA_MODE_CTRL_SRC_TR_G_EN ( 1<<15 ) ++#define m_RGA_MODE_CTRL_SRC_TR_B_EN ( 1<<16 ) ++#define m_RGA_MODE_CTRL_SRC_TR_A_EN ( 1<<17 ) ++#define m_RGA_MODE_CTRL_ROTATE_MODE ( 3<<18 ) ++#define m_RGA_MODE_CTRL_SCALE_MODE ( 3<<20 ) ++#define m_RGA_MODE_CTRL_PAT_SEL ( 1<<22 ) ++#define m_RGA_MODE_CTRL_DST_FORMAT ( 3<<23 ) ++#define m_RGA_MODE_CTRL_DST_RGB_PACK ( 1<<25 ) ++#define m_RGA_MODE_CTRL_DST_RB_SWAP ( 1<<26 ) ++#define m_RGA_MODE_CTRL_DST_ALPHA_SWAP ( 1<<27 ) ++#define m_RGA_MODE_CTRL_LUT_ENDIAN_MODE ( 1<<28 ) ++#define m_RGA_MODE_CTRL_CMD_INT_ENABLE ( 1<<29 ) ++#define m_RGA_MODE_CTRL_ZERO_MODE_ENABLE ( 1<<30 ) ++#define m_RGA_MODE_CTRL_DST_ALPHA_ENABLE ( 1<<30 ) ++ ++ ++ ++#define s_RGA_MODE_CTRL_2D_RENDER_MODE(x) ( (x&0x7)<<0 ) ++#define s_RGA_MODE_CTRL_SRC_RGB_PACK(x) ( (x&0x1)<<3 ) ++#define s_RGA_MODE_CTRL_SRC_FORMAT(x) ( (x&0xf)<<4 ) ++#define s_RGA_MODE_CTRL_SRC_RB_SWAP(x) ( (x&0x1)<<8 ) ++#define s_RGA_MODE_CTRL_SRC_ALPHA_SWAP(x) ( (x&0x1)<<9 ) ++#define s_RGA_MODE_CTRL_SRC_UV_SWAP_MODE(x) ( (x&0x1)<<10 ) ++#define s_RGA_MODE_CTRL_YUV2RGB_CON_MODE(x) ( (x&0x3)<<11 ) ++#define s_RGA_MODE_CTRL_SRC_TRANS_MODE(x) ( (x&0x1f)<<13 ) ++#define s_RGA_MODE_CTRL_SRC_TR_MODE(x) ( (x&0x1)<<13 ) ++#define s_RGA_MODE_CTRL_SRC_TR_R_EN(x) ( (x&0x1)<<14 ) ++#define s_RGA_MODE_CTRL_SRC_TR_G_EN(x) ( (x&0x1)<<15 ) ++#define s_RGA_MODE_CTRL_SRC_TR_B_EN(x) ( (x&0x1)<<16 ) ++#define s_RGA_MODE_CTRL_SRC_TR_A_EN(x) ( (x&0x1)<<17 ) ++#define s_RGA_MODE_CTRL_ROTATE_MODE(x) ( (x&0x3)<<18 ) ++#define s_RGA_MODE_CTRL_SCALE_MODE(x) ( (x&0x3)<<20 ) ++#define s_RGA_MODE_CTRL_PAT_SEL(x) ( (x&0x1)<<22 ) ++#define s_RGA_MODE_CTRL_DST_FORMAT(x) ( (x&0x3)<<23 ) ++#define s_RGA_MODE_CTRL_DST_RGB_PACK(x) ( (x&0x1)<<25 ) ++#define s_RGA_MODE_CTRL_DST_RB_SWAP(x) ( (x&0x1)<<26 ) ++#define s_RGA_MODE_CTRL_DST_ALPHA_SWAP(x) ( (x&0x1)<<27 ) ++#define s_RGA_MODE_CTRL_LUT_ENDIAN_MODE(x) ( (x&0x1)<<28 ) ++#define s_RGA_MODE_CTRL_CMD_INT_ENABLE(x) ( (x&0x1)<<29 ) ++#define s_RGA_MODE_CTRL_ZERO_MODE_ENABLE(x) ( (x&0x1)<<30 ) ++#define s_RGA_MODE_CTRL_DST_ALPHA_ENABLE(x) ( (x&0x1)<<31 ) ++ ++ ++ ++/* RGA_LINE_DRAW */ ++#define m_RGA_LINE_DRAW_MAJOR_WIDTH ( 0x7ff<<0 ) ++#define m_RGA_LINE_DRAW_LINE_DIRECTION ( 0x1<<11) ++#define m_RGA_LINE_DRAW_LINE_WIDTH ( 0xf<<12) ++#define m_RGA_LINE_DRAW_INCR_VALUE ( 0xfff<<16) ++#define m_RGA_LINE_DRAW_DIR_MAJOR ( 0x1<<28) ++#define m_RGA_LINE_DRAW_DIR_SEMI_MAJOR ( 0x1<<29) ++#define m_RGA_LINE_DRAW_LAST_POINT ( 0x1<<30) ++#define m_RGA_LINE_DRAW_ANTI_ALISING ( 0x1<<31) ++ ++#define s_RGA_LINE_DRAW_MAJOR_WIDTH(x) (((x)&0x7ff)<<0 ) ++#define s_RGA_LINE_DRAW_LINE_DIRECTION(x) ( ((x)&0x1)<<11) ++#define s_RGA_LINE_DRAW_LINE_WIDTH(x) ( ((x)&0xf)<<12) ++#define s_RGA_LINE_DRAW_INCR_VALUE(x) (((x)&0xfff)<<16) ++#define s_RGA_LINE_DRAW_DIR_MAJOR(x) ( ((x)&0x1)<<28) ++#define s_RGA_LINE_DRAW_DIR_SEMI_MAJOR(x) ( ((x)&0x1)<<29) ++#define s_RGA_LINE_DRAW_LAST_POINT(x) ( ((x)&0x1)<<30) ++#define s_RGA_LINE_DRAW_ANTI_ALISING(x) ( ((x)&0x1)<<31) ++ ++ ++/* RGA_ALPHA_CON */ ++#define m_RGA_ALPHA_CON_ENABLE ( 0x1<<0 ) ++#define m_RGA_ALPHA_CON_A_OR_R_SEL ( 0x1<<1 ) ++#define m_RGA_ALPHA_CON_ALPHA_MODE ( 0x3<<2 ) ++#define m_RGA_ALPHA_CON_PD_MODE ( 0xf<<4 ) ++#define m_RGA_ALPHA_CON_SET_CONSTANT_VALUE (0xff<<8 ) ++#define m_RGA_ALPHA_CON_PD_M_SEL ( 0x1<<16) ++#define m_RGA_ALPHA_CON_FADING_ENABLE ( 0x1<<17) ++#define m_RGA_ALPHA_CON_ROP_MODE_SEL ( 0x3<<18) ++#define m_RGA_ALPHA_CON_CAL_MODE_SEL ( 0x1<<28) ++#define m_RGA_ALPHA_CON_DITHER_ENABLE ( 0x1<<29) ++#define m_RGA_ALPHA_CON_GRADIENT_CAL_MODE ( 0x1<<30) ++#define m_RGA_ALPHA_CON_AA_SEL ( 0x1<<31) ++ ++#define s_RGA_ALPHA_CON_ENABLE(x) ( (x&0x1)<<0 ) ++#define s_RGA_ALPHA_CON_A_OR_R_SEL(x) ( (x&0x1)<<1 ) ++#define s_RGA_ALPHA_CON_ALPHA_MODE(x) ( (x&0x3)<<2 ) ++#define s_RGA_ALPHA_CON_PD_MODE(x) ( (x&0xf)<<4 ) ++#define s_RGA_ALPHA_CON_SET_CONSTANT_VALUE(x) ((x&0xff)<<8 ) ++#define s_RGA_ALPHA_CON_PD_M_SEL(x) ( (x&0x1)<<16) ++#define s_RGA_ALPHA_CON_FADING_ENABLE(x) ( (x&0x1)<<17) ++#define s_RGA_ALPHA_CON_ROP_MODE_SEL(x) ( (x&0x3)<<18) ++#define s_RGA_ALPHA_CON_CAL_MODE_SEL(x) ( (x&0x1)<<28) ++#define s_RGA_ALPHA_CON_DITHER_ENABLE(x) ( (x&0x1)<<29) ++#define s_RGA_ALPHA_CON_GRADIENT_CAL_MODE(x) ( (x&0x1)<<30) ++#define s_RGA_ALPHA_CON_AA_SEL(x) ( (x&0x1)<<31) ++ ++ ++/* blur sharp mode */ ++#define m_RGA_BLUR_SHARP_FILTER_MODE ( 0x1<<25 ) ++#define m_RGA_BLUR_SHARP_FILTER_TYPE ( 0x3<<26 ) ++ ++#define s_RGA_BLUR_SHARP_FILTER_MODE(x) ( (x&0x1)<<25 ) ++#define s_RGA_BLUR_SHARP_FILTER_TYPE(x) ( (x&0x3)<<26 ) ++ ++ ++/* pre scale mode */ ++#define m_RGA_PRE_SCALE_HOR_RATIO ( 0x3 <<20 ) ++#define m_RGA_PRE_SCALE_VER_RATIO ( 0x3 <<22 ) ++#define m_RGA_PRE_SCALE_OUTPUT_FORMAT ( 0x1 <<24 ) ++ ++#define s_RGA_PRE_SCALE_HOR_RATIO(x) ( (x&0x3) <<20 ) ++#define s_RGA_PRE_SCALE_VER_RATIO(x) ( (x&0x3) <<22 ) ++#define s_RGA_PRE_SCALE_OUTPUT_FORMAT(x) ( (x&0x1) <<24 ) ++ ++ ++ ++/* RGA_MMU_CTRL*/ ++#define m_RGA_MMU_CTRL_TLB_ADDR ( 0xffffffff<<0) ++#define m_RGA_MMU_CTRL_PAGE_TABLE_SIZE ( 0x3<<4 ) ++#define m_RGA_MMU_CTRL_MMU_ENABLE ( 0x1<<0 ) ++#define m_RGA_MMU_CTRL_SRC_FLUSH ( 0x1<<1 ) ++#define m_RGA_MMU_CTRL_DST_FLUSH ( 0x1<<2 ) ++#define m_RGA_MMU_CTRL_CMD_CHAN_FLUSH ( 0x1<<3 ) ++ ++#define s_RGA_MMU_CTRL_TLB_ADDR(x) ((x&0xffffffff)) ++#define s_RGA_MMU_CTRL_PAGE_TABLE_SIZE(x) ((x&0x3)<<4) ++#define s_RGA_MMU_CTRL_MMU_ENABLE(x) ((x&0x1)<<0) ++#define s_RGA_MMU_CTRL_SRC_FLUSH(x) ((x&0x1)<<1) ++#define s_RGA_MMU_CTRL_DST_FLUSH(x) ((x&0x1)<<2) ++#define s_RGA_MMU_CTRL_CMD_CHAN_FLUSH(x) ((x&0x1)<<3) ++ ++#endif ++ ++/* ++#define RGA_MODE_CTRL_OFFSET 0x0 ++#define RGA_SRC_Y_MST_OFFSET 0x4 ++#define RGA_SRC_CB_MST_OFFSET 0x8 ++#define RGA_SRC_CR_MST_OFFSET 0xc ++#define RGA_SRC_VIR_INFO_OFFSET 0x10 ++#define RGA_SRC_ACT_INFO_OFFSET 0x14 ++#define RGA_SRC_X_PARA_OFFSET 0x18 ++#define RGA_SRC_Y_PARA_OFFSET 0x1c ++#define RGA_SRC_TILE_XINFO_OFFSET 0x20 ++#define RGA_SRC_TILE_YINFO_OFFSET 0x24 ++#define RGA_SRC_TILE_H_INCR_OFFSET 0x28 ++#define RGA_SRC_TILE_V_INCR_OFFSET 0x2c ++#define RGA_SRC_TILE_OFFSETX_OFFSET 0x30 ++#define RGA_SRC_TILE_OFFSETY_OFFSET 0x34 ++#define RGA_SRC_BG_COLOR_OFFSET 0x38 ++ ++#define RGA_SRC_FG_COLOR_OFFSET 0x3c ++#define RGA_LINE_DRAWING_COLOR_OFFSET 0x3c ++ ++#define RGA_SRC_TR_COLOR0_OFFSET 0x40 ++#define RGA_CP_GR_A_OFFSET 0x40 //repeat ++ ++#define RGA_SRC_TR_COLOR1_OFFSET 0x44 ++#define RGA_CP_GR_B_OFFSET 0x44 //repeat ++ ++#define RGA_LINE_DRAW_OFFSET 0x48 ++#define RGA_PAT_START_POINT_OFFSET 0x48 //repeat ++ ++#define RGA_DST_MST_OFFSET 0x4c ++#define RGA_LUT_MST_OFFSET 0x4c //repeat ++#define RGA_PAT_MST_OFFSET 0x4c //repeat ++#define RGA_LINE_DRAWING_MST_OFFSET 0x4c //repeat ++ ++#define RGA_DST_VIR_INFO_OFFSET 0x50 ++ ++#define RGA_DST_CTR_INFO_OFFSET 0x54 ++#define RGA_LINE_DRAW_XY_INFO_OFFSET 0x54 //repeat ++ ++#define RGA_ALPHA_CON_OFFSET 0x58 ++#define RGA_FADING_CON_OFFSET 0x5c ++ ++#define RGA_PAT_CON_OFFSET 0x60 ++#define RGA_LINE_DRAWING_WIDTH_OFFSET 0x60 //repeat ++ ++#define RGA_ROP_CON0_OFFSET 0x64 ++#define RGA_CP_GR_G_OFFSET 0x64 //repeat ++#define RGA_PRESCL_CB_MST_OFFSET 0x64 //repeat ++ ++#define RGA_ROP_CON1_OFFSET 0x68 ++#define RGA_CP_GR_R_OFFSET 0x68 //repeat ++#define RGA_PRESCL_CR_MST_OFFSET 0x68 //repeat ++ ++#define RGA_MMU_CTRL_OFFSET 0x6c ++ ++ ++#define RGA_SYS_CTRL_OFFSET 0x000 ++#define RGA_CMD_CTRL_OFFSET 0x004 ++#define RGA_CMD_ADDR_OFFSET 0x008 ++#define RGA_STATUS_OFFSET 0x00c ++#define RGA_INT_OFFSET 0x010 ++#define RGA_AXI_ID_OFFSET 0x014 ++#define RGA_MMU_STA_CTRL_OFFSET 0x018 ++#define RGA_MMU_STA_OFFSET 0x01c ++*/ ++//hxx ++ ++#define RGA_SYS_CTRL_OFFSET (RGA_SYS_CTRL-0x100) ++#define RGA_CMD_CTRL_OFFSET (RGA_CMD_CTRL-0x100) ++#define RGA_CMD_ADDR_OFFSET (RGA_CMD_ADDR-0x100) ++#define RGA_STATUS_OFFSET (RGA_STATUS-0x100) ++#define RGA_INT_OFFSET (RGA_INT-0x100) ++#define RGA_AXI_ID_OFFSET (RGA_AXI_ID-0x100) ++#define RGA_MMU_STA_CTRL_OFFSET (RGA_MMU_STA_CTRL-0x100) ++#define RGA_MMU_STA_OFFSET (RGA_MMU_STA-0x100) ++ ++#define RGA_MODE_CTRL_OFFSET (RGA_MODE_CTRL-0x100) ++#define RGA_SRC_Y_MST_OFFSET (RGA_SRC_Y_MST-0x100) ++#define RGA_SRC_CB_MST_OFFSET (RGA_SRC_CB_MST-0x100) ++#define RGA_SRC_CR_MST_OFFSET (RGA_SRC_CR_MST-0x100) ++#define RGA_SRC_VIR_INFO_OFFSET (RGA_SRC_VIR_INFO-0x100) ++#define RGA_SRC_ACT_INFO_OFFSET (RGA_SRC_ACT_INFO-0x100) ++#define RGA_SRC_X_PARA_OFFSET (RGA_SRC_X_PARA-0x100) ++#define RGA_SRC_Y_PARA_OFFSET (RGA_SRC_Y_PARA-0x100) ++#define RGA_SRC_TILE_XINFO_OFFSET (RGA_SRC_TILE_XINFO-0x100) ++#define RGA_SRC_TILE_YINFO_OFFSET (RGA_SRC_TILE_YINFO-0x100) ++#define RGA_SRC_TILE_H_INCR_OFFSET (RGA_SRC_TILE_H_INCR-0x100) ++#define RGA_SRC_TILE_V_INCR_OFFSET (RGA_SRC_TILE_V_INCR-0x100) ++#define RGA_SRC_TILE_OFFSETX_OFFSET (RGA_SRC_TILE_OFFSETX-0x100) ++#define RGA_SRC_TILE_OFFSETY_OFFSET (RGA_SRC_TILE_OFFSETY-0x100) ++#define RGA_SRC_BG_COLOR_OFFSET (RGA_SRC_BG_COLOR-0x100) ++ ++#define RGA_SRC_FG_COLOR_OFFSET (RGA_SRC_FG_COLOR-0x100) ++#define RGA_LINE_DRAWING_COLOR_OFFSET (RGA_LINE_DRAWING_COLOR-0x100) ++ ++#define RGA_SRC_TR_COLOR0_OFFSET (RGA_SRC_TR_COLOR0-0x100) ++#define RGA_CP_GR_A_OFFSET (RGA_CP_GR_A-0x100) //repeat ++ ++#define RGA_SRC_TR_COLOR1_OFFSET (RGA_SRC_TR_COLOR1-0x100) ++#define RGA_CP_GR_B_OFFSET (RGA_CP_GR_B-0x100) //repeat ++ ++#define RGA_LINE_DRAW_OFFSET (RGA_LINE_DRAW-0x100) ++#define RGA_PAT_START_POINT_OFFSET (RGA_PAT_START_POINT-0x100) //repeat ++ ++#define RGA_DST_MST_OFFSET (RGA_DST_MST-0x100) ++#define RGA_LUT_MST_OFFSET (RGA_LUT_MST-0x100) //repeat ++#define RGA_PAT_MST_OFFSET (RGA_PAT_MST-0x100) //repeat ++#define RGA_LINE_DRAWING_MST_OFFSET (RGA_LINE_DRAWING_MST-0x100) //repeat ++ ++#define RGA_DST_VIR_INFO_OFFSET (RGA_DST_VIR_INFO-0x100) ++ ++#define RGA_DST_CTR_INFO_OFFSET (RGA_DST_CTR_INFO-0x100) ++#define RGA_LINE_DRAW_XY_INFO_OFFSET (RGA_LINE_DRAW_XY_INFO-0x100) //repeat ++ ++#define RGA_ALPHA_CON_OFFSET (RGA_ALPHA_CON-0x100) ++ ++#define RGA_PAT_CON_OFFSET (RGA_PAT_CON-0x100) ++#define RGA_LINE_DRAWING_WIDTH_OFFSET (RGA_DST_VIR_WIDTH_PIX-0x100) //repeat ++ ++#define RGA_ROP_CON0_OFFSET (RGA_ROP_CON0-0x100) ++#define RGA_CP_GR_G_OFFSET (RGA_CP_GR_G-0x100) //repeat ++#define RGA_PRESCL_CB_MST_OFFSET (RGA_PRESCL_CB_MST-0x100) //repeat ++ ++#define RGA_ROP_CON1_OFFSET (RGA_ROP_CON1-0x100) ++#define RGA_CP_GR_R_OFFSET (RGA_CP_GR_R-0x100) //repeat ++#define RGA_PRESCL_CR_MST_OFFSET (RGA_PRESCL_CR_MST-0x100) //repeat ++ ++#define RGA_FADING_CON_OFFSET (RGA_FADING_CON-0x100) ++#define RGA_MMU_TLB_OFFSET (RGA_MMU_TBL-0x100) ++ ++#define RGA_YUV_OUT_CFG_OFFSET (RGA_YUV_OUT_CFG-0x100) ++#define RGA_DST_UV_MST_OFFSET (RGA_DST_UV_MST-0x100) ++ ++ ++ ++void matrix_cal(const struct rga_req *msg, TILE_INFO *tile); ++ ++ ++int RGA_gen_reg_info(const struct rga_req *msg, unsigned char *base); ++uint8_t RGA_pixel_width_init(uint32_t format); ++ diff --git a/drivers/video/rockchip/rga/rga_rop.h b/drivers/video/rockchip/rga/rga_rop.h new file mode 100755 -index 000000000000..ed9758711022 +index 000000000..c38f05a13 --- /dev/null +++ b/drivers/video/rockchip/rga/rga_rop.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef __RGA_ROP_H__ -+#define __RGA_ROP_H__ -+ -+unsigned int ROP3_code[256] = -+{ -+ 0x00000007, 0x00000451, 0x00006051, 0x00800051, 0x00007041, 0x00800041, 0x00804830, 0x000004f0,//0 -+ 0x00800765, 0x000004b0, 0x00000065, 0x000004f4, 0x00000075, 0x000004e6, 0x00804850, 0x00800005, -+ -+ 0x00006850, 0x00800050, 0x00805028, 0x00000568, 0x00804031, 0x00000471, 0x002b6071, 0x018037aa,//1 -+ 0x008007aa, 0x00036071, 0x00002c6a, 0x00803631, 0x00002d68, 0x00802721, 0x008002d0, 0x000006d0, -+ -+ 0x0080066e, 0x00000528, 0x00000066, 0x0000056c, 0x018007aa, 0x0002e06a, 0x00003471, 0x00834031,//2 -+ 0x00800631, 0x0002b471, 0x00006071, 0x008037aa, 0x000036d0, 0x008002d4, 0x00002d28, 0x000006d4, -+ -+ 0x0000006e, 0x00000565, 0x00003451, 0x00800006, 0x000034f0, 0x00834830, 0x00800348, 0x00000748,//3 -+ 0x00002f48, 0x0080034c, 0x000034b0, 0x0000074c, 0x00000031, 0x00834850, 0x000034e6, 0x00800071, -+ -+ 0x008006f4, 0x00000431, 0x018007a1, 0x00b6e870, 0x00000074, 0x0000046e, 0x00002561, 0x00802f28,//4 -+ 0x00800728, 0x0002a561, 0x000026c2, 0x008002c6, 0x00007068, 0x018035aa, 0x00002c2a, 0x000006c6, -+ -+ 0x0000006c, 0x00000475, 0x000024e2, 0x008036b0, 0x00804051, 0x00800004, 0x00800251, 0x00000651, -+ 0x00002e4a, 0x0080024e, 0x00000028, 0x00824842, 0x000024a2, 0x0000064e, 0x000024f4, 0x00800068,//5 -+ -+ 0x008006b0, 0x000234f0, 0x00002741, 0x00800345, 0x00003651, 0x00800255, 0x00000030, 0x00834051, -+ 0x00a34842, 0x000002b0, 0x00800271, 0x0002b651, 0x00800368, 0x0002a741, 0x0000364e, 0x00806830,//6 -+ -+ 0x00006870, 0x008037a2, 0x00003431, 0x00000745, 0x00002521, 0x00000655, 0x0000346e, 0x00800062, -+ 0x008002f0, 0x000236d0, 0x000026d4, 0x00807028, 0x000036c6, 0x00806031, 0x008005aa, 0x00000671,//7 -+ -+ 0x00800671, 0x000005aa, 0x00006031, 0x008036c6, 0x00007028, 0x00802e55, 0x008236d0, 0x000002f0, -+ 0x00000070, 0x0080346e, 0x00800655, 0x00802521, 0x00800745, 0x00803431, 0x000037a2, 0x00806870,//8 -+ -+ 0x00006830, 0x0080364e, 0x00822f48, 0x00000361, 0x0082b651, 0x00000271, 0x00800231, 0x002b4051, -+ 0x00034051, 0x00800030, 0x0080026e, 0x00803651, 0x0080036c, 0x00802741, 0x008234f0, 0x000006b0,//9 -+ -+ 0x00000068, 0x00802c75, 0x0080064e, 0x008024a2, 0x0002c04a, 0x00800021, 0x00800275, 0x00802e51, -+ 0x00800651, 0x00000251, 0x00800000, 0x00004051, 0x000036b0, 0x008024e2, 0x00800475, 0x00000045,//a -+ -+ 0x008006c6, 0x00802c2a, 0x000035aa, 0x00807068, 0x008002f4, 0x008026c2, 0x00822d68, 0x00000728, -+ 0x00002f28, 0x00802561, 0x0080046e, 0x00000046, 0x00836870, 0x000007a2, 0x00800431, 0x00004071,//b -+ -+ 0x00000071, 0x008034e6, 0x00034850, 0x00800031, 0x0080074c, 0x008034b0, 0x00800365, 0x00802f48, -+ 0x00800748, 0x00000341, 0x000026a2, 0x008034f0, 0x00800002, 0x00005048, 0x00800565, 0x00000055,//c -+ -+ 0x008006d4, 0x00802d28, 0x008002e6, 0x008036d0, 0x000037aa, 0x00806071, 0x0082b471, 0x00000631, -+ 0x00002e2a, 0x00803471, 0x00826862, 0x010007aa, 0x0080056c, 0x00000054, 0x00800528, 0x00005068,//d -+ -+ 0x008006d0, 0x000002d0, 0x00002721, 0x00802d68, 0x00003631, 0x00802c6a, 0x00836071, 0x000007aa, -+ 0x010037aa, 0x00a36870, 0x00800471, 0x00004031, 0x00800568, 0x00005028, 0x00000050, 0x00800545,//e -+ -+ 0x00800001, 0x00004850, 0x008004e6, 0x0000004e, 0x008004f4, 0x0000004c, 0x008004b0, 0x00004870, -+ 0x008004f0, 0x00004830, 0x00000048, 0x0080044e, 0x00000051, 0x008004d4, 0x00800451, 0x00800007,//f -+}; -+ -+#endif ++#ifndef __RGA_ROP_H__ ++#define __RGA_ROP_H__ ++ ++unsigned int ROP3_code[256] = ++{ ++ 0x00000007, 0x00000451, 0x00006051, 0x00800051, 0x00007041, 0x00800041, 0x00804830, 0x000004f0,//0 ++ 0x00800765, 0x000004b0, 0x00000065, 0x000004f4, 0x00000075, 0x000004e6, 0x00804850, 0x00800005, ++ ++ 0x00006850, 0x00800050, 0x00805028, 0x00000568, 0x00804031, 0x00000471, 0x002b6071, 0x018037aa,//1 ++ 0x008007aa, 0x00036071, 0x00002c6a, 0x00803631, 0x00002d68, 0x00802721, 0x008002d0, 0x000006d0, ++ ++ 0x0080066e, 0x00000528, 0x00000066, 0x0000056c, 0x018007aa, 0x0002e06a, 0x00003471, 0x00834031,//2 ++ 0x00800631, 0x0002b471, 0x00006071, 0x008037aa, 0x000036d0, 0x008002d4, 0x00002d28, 0x000006d4, ++ ++ 0x0000006e, 0x00000565, 0x00003451, 0x00800006, 0x000034f0, 0x00834830, 0x00800348, 0x00000748,//3 ++ 0x00002f48, 0x0080034c, 0x000034b0, 0x0000074c, 0x00000031, 0x00834850, 0x000034e6, 0x00800071, ++ ++ 0x008006f4, 0x00000431, 0x018007a1, 0x00b6e870, 0x00000074, 0x0000046e, 0x00002561, 0x00802f28,//4 ++ 0x00800728, 0x0002a561, 0x000026c2, 0x008002c6, 0x00007068, 0x018035aa, 0x00002c2a, 0x000006c6, ++ ++ 0x0000006c, 0x00000475, 0x000024e2, 0x008036b0, 0x00804051, 0x00800004, 0x00800251, 0x00000651, ++ 0x00002e4a, 0x0080024e, 0x00000028, 0x00824842, 0x000024a2, 0x0000064e, 0x000024f4, 0x00800068,//5 ++ ++ 0x008006b0, 0x000234f0, 0x00002741, 0x00800345, 0x00003651, 0x00800255, 0x00000030, 0x00834051, ++ 0x00a34842, 0x000002b0, 0x00800271, 0x0002b651, 0x00800368, 0x0002a741, 0x0000364e, 0x00806830,//6 ++ ++ 0x00006870, 0x008037a2, 0x00003431, 0x00000745, 0x00002521, 0x00000655, 0x0000346e, 0x00800062, ++ 0x008002f0, 0x000236d0, 0x000026d4, 0x00807028, 0x000036c6, 0x00806031, 0x008005aa, 0x00000671,//7 ++ ++ 0x00800671, 0x000005aa, 0x00006031, 0x008036c6, 0x00007028, 0x00802e55, 0x008236d0, 0x000002f0, ++ 0x00000070, 0x0080346e, 0x00800655, 0x00802521, 0x00800745, 0x00803431, 0x000037a2, 0x00806870,//8 ++ ++ 0x00006830, 0x0080364e, 0x00822f48, 0x00000361, 0x0082b651, 0x00000271, 0x00800231, 0x002b4051, ++ 0x00034051, 0x00800030, 0x0080026e, 0x00803651, 0x0080036c, 0x00802741, 0x008234f0, 0x000006b0,//9 ++ ++ 0x00000068, 0x00802c75, 0x0080064e, 0x008024a2, 0x0002c04a, 0x00800021, 0x00800275, 0x00802e51, ++ 0x00800651, 0x00000251, 0x00800000, 0x00004051, 0x000036b0, 0x008024e2, 0x00800475, 0x00000045,//a ++ ++ 0x008006c6, 0x00802c2a, 0x000035aa, 0x00807068, 0x008002f4, 0x008026c2, 0x00822d68, 0x00000728, ++ 0x00002f28, 0x00802561, 0x0080046e, 0x00000046, 0x00836870, 0x000007a2, 0x00800431, 0x00004071,//b ++ ++ 0x00000071, 0x008034e6, 0x00034850, 0x00800031, 0x0080074c, 0x008034b0, 0x00800365, 0x00802f48, ++ 0x00800748, 0x00000341, 0x000026a2, 0x008034f0, 0x00800002, 0x00005048, 0x00800565, 0x00000055,//c ++ ++ 0x008006d4, 0x00802d28, 0x008002e6, 0x008036d0, 0x000037aa, 0x00806071, 0x0082b471, 0x00000631, ++ 0x00002e2a, 0x00803471, 0x00826862, 0x010007aa, 0x0080056c, 0x00000054, 0x00800528, 0x00005068,//d ++ ++ 0x008006d0, 0x000002d0, 0x00002721, 0x00802d68, 0x00003631, 0x00802c6a, 0x00836071, 0x000007aa, ++ 0x010037aa, 0x00a36870, 0x00800471, 0x00004031, 0x00800568, 0x00005028, 0x00000050, 0x00800545,//e ++ ++ 0x00800001, 0x00004850, 0x008004e6, 0x0000004e, 0x008004f4, 0x0000004c, 0x008004b0, 0x00004870, ++ 0x008004f0, 0x00004830, 0x00000048, 0x0080044e, 0x00000051, 0x008004d4, 0x00800451, 0x00800007,//f ++}; ++ ++#endif diff --git a/drivers/video/rockchip/rga/rga_type.h b/drivers/video/rockchip/rga/rga_type.h new file mode 100755 -index 000000000000..ce3610ab9b67 +index 000000000..30f5df2f3 --- /dev/null +++ b/drivers/video/rockchip/rga/rga_type.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0 */ -+#ifndef __RGA_TYPE_H__ -+#define __RGA_TYPE_H__ -+ -+ -+#ifdef __cplusplus -+#if __cplusplus -+} -+#endif -+#endif /* __cplusplus */ -+ -+typedef unsigned int UWORD32; -+typedef unsigned int uint32; -+typedef unsigned int RK_U32; -+ -+typedef unsigned short UWORD16; -+typedef unsigned short RK_U16; -+ -+typedef unsigned char UBYTE; -+typedef unsigned char RK_U8; -+ -+typedef int WORD32; -+typedef int RK_S32; -+ -+typedef short WORD16; -+typedef short RK_S16; -+ -+typedef char BYTE; -+typedef char RK_S8; -+ -+ -+#ifndef NULL -+#define NULL 0L -+#endif -+ -+#ifndef TRUE -+#define TRUE 1L -+#endif -+ -+ -+#ifdef __cplusplus -+#if __cplusplus -+} -+#endif -+#endif /* __cplusplus */ -+ -+ -+#endif /* __RGA_TYPR_H__ */ -+ ++#ifndef __RGA_TYPE_H__ ++#define __RGA_TYPE_H__ ++ ++ ++#ifdef __cplusplus ++#if __cplusplus ++} ++#endif ++#endif /* __cplusplus */ ++ ++typedef unsigned int UWORD32; ++typedef unsigned int uint32; ++typedef unsigned int RK_U32; ++ ++typedef unsigned short UWORD16; ++typedef unsigned short RK_U16; ++ ++typedef unsigned char UBYTE; ++typedef unsigned char RK_U8; ++ ++typedef int WORD32; ++typedef int RK_S32; ++ ++typedef short WORD16; ++typedef short RK_S16; ++ ++typedef char BYTE; ++typedef char RK_S8; ++ ++ ++#ifndef NULL ++#define NULL 0L ++#endif ++ ++#ifndef TRUE ++#define TRUE 1L ++#endif ++ ++ ++#ifdef __cplusplus ++#if __cplusplus ++} ++#endif ++#endif /* __cplusplus */ ++ ++ ++#endif /* __RGA_TYPR_H__ */ ++ diff --git a/drivers/video/rockchip/rga2/Kconfig b/drivers/video/rockchip/rga2/Kconfig new file mode 100755 -index 000000000000..49a0f62b99a0 +index 000000000..49a0f62b9 --- /dev/null +++ b/drivers/video/rockchip/rga2/Kconfig @@ -0,0 +1,30 @@ @@ -1672092,7 +1672153,7 @@ index 000000000000..49a0f62b99a0 +endif diff --git a/drivers/video/rockchip/rga2/Makefile b/drivers/video/rockchip/rga2/Makefile new file mode 100755 -index 000000000000..60181fffa4c8 +index 000000000..60181fffa --- /dev/null +++ b/drivers/video/rockchip/rga2/Makefile @@ -0,0 +1,5 @@ @@ -1672103,7 +1672164,7 @@ index 000000000000..60181fffa4c8 +obj-$(CONFIG_ROCKCHIP_RGA2) += rga2.o diff --git a/drivers/video/rockchip/rga2/RGA2_API.c b/drivers/video/rockchip/rga2/RGA2_API.c new file mode 100755 -index 000000000000..0be2c1ae64b6 +index 000000000..0be2c1ae6 --- /dev/null +++ b/drivers/video/rockchip/rga2/RGA2_API.c @@ -0,0 +1,23 @@ @@ -1672132,7 +1672193,7 @@ index 000000000000..0be2c1ae64b6 + diff --git a/drivers/video/rockchip/rga2/RGA2_API.h b/drivers/video/rockchip/rga2/RGA2_API.h new file mode 100755 -index 000000000000..1fa38ed6cffe +index 000000000..1fa38ed6c --- /dev/null +++ b/drivers/video/rockchip/rga2/RGA2_API.h @@ -0,0 +1,59 @@ @@ -1672197,7 +1672258,7 @@ index 000000000000..1fa38ed6cffe +#endif diff --git a/drivers/video/rockchip/rga2/rga2.h b/drivers/video/rockchip/rga2/rga2.h new file mode 100755 -index 000000000000..335970c44ed6 +index 000000000..335970c44 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2.h @@ -0,0 +1,792 @@ @@ -1672995,7 +1673056,7 @@ index 000000000000..335970c44ed6 +#endif /*_RK29_IPP_DRIVER_H_*/ diff --git a/drivers/video/rockchip/rga2/rga2_debugger.c b/drivers/video/rockchip/rga2/rga2_debugger.c new file mode 100755 -index 000000000000..589241322cf4 +index 000000000..589241322 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_debugger.c @@ -0,0 +1,396 @@ @@ -1673397,7 +1673458,7 @@ index 000000000000..589241322cf4 +#endif /* #ifdef CONFIG_ROCKCHIP_RGA2_PROC_FS */ diff --git a/drivers/video/rockchip/rga2/rga2_debugger.h b/drivers/video/rockchip/rga2/rga2_debugger.h new file mode 100755 -index 000000000000..33b2f43e9f8a +index 000000000..33b2f43e9 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_debugger.h @@ -0,0 +1,120 @@ @@ -1673523,7 +1673584,7 @@ index 000000000000..33b2f43e9f8a + diff --git a/drivers/video/rockchip/rga2/rga2_drv.c b/drivers/video/rockchip/rga2/rga2_drv.c new file mode 100755 -index 000000000000..ca5218f3e09f +index 000000000..ca5218f3e --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_drv.c @@ -0,0 +1,2273 @@ @@ -1675802,7 +1675863,7 @@ index 000000000000..ca5218f3e09f +MODULE_LICENSE("GPL"); diff --git a/drivers/video/rockchip/rga2/rga2_mmu_info.c b/drivers/video/rockchip/rga2/rga2_mmu_info.c new file mode 100755 -index 000000000000..2b05c9356c3a +index 000000000..2b05c9356 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_mmu_info.c @@ -0,0 +1,1831 @@ @@ -1677639,7 +1677700,7 @@ index 000000000000..2b05c9356c3a + diff --git a/drivers/video/rockchip/rga2/rga2_mmu_info.h b/drivers/video/rockchip/rga2/rga2_mmu_info.h new file mode 100755 -index 000000000000..a823f2fe7c3a +index 000000000..a823f2fe7 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_mmu_info.h @@ -0,0 +1,35 @@ @@ -1677680,7 +1677741,7 @@ index 000000000000..a823f2fe7c3a + diff --git a/drivers/video/rockchip/rga2/rga2_reg_info.c b/drivers/video/rockchip/rga2/rga2_reg_info.c new file mode 100755 -index 000000000000..a6c154989dd1 +index 000000000..a6c154989 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_reg_info.c @@ -0,0 +1,1689 @@ @@ -1679375,7 +1679436,7 @@ index 000000000000..a6c154989dd1 +} diff --git a/drivers/video/rockchip/rga2/rga2_reg_info.h b/drivers/video/rockchip/rga2/rga2_reg_info.h new file mode 100755 -index 000000000000..7aaac7d3502b +index 000000000..7aaac7d35 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_reg_info.h @@ -0,0 +1,331 @@ @@ -1679712,7 +1679773,7 @@ index 000000000000..7aaac7d3502b + diff --git a/drivers/video/rockchip/rga2/rga2_rop.h b/drivers/video/rockchip/rga2/rga2_rop.h new file mode 100755 -index 000000000000..dc2a343f4c5c +index 000000000..dc2a343f4 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_rop.h @@ -0,0 +1,56 @@ @@ -1679774,7 +1679835,7 @@ index 000000000000..dc2a343f4c5c +#endif diff --git a/drivers/video/rockchip/rga2/rga2_type.h b/drivers/video/rockchip/rga2/rga2_type.h new file mode 100755 -index 000000000000..30f5df2f38e5 +index 000000000..30f5df2f3 --- /dev/null +++ b/drivers/video/rockchip/rga2/rga2_type.h @@ -0,0 +1,49 @@ @@ -1679828,8 +1679889,8 @@ index 000000000000..30f5df2f38e5 +#endif /* __RGA_TYPR_H__ */ + diff --git a/drivers/video/rockchip/rga3/Kconfig b/drivers/video/rockchip/rga3/Kconfig -new file mode 100644 -index 000000000000..c8c96b2d67ff +new file mode 100755 +index 000000000..c8c96b2d6 --- /dev/null +++ b/drivers/video/rockchip/rga3/Kconfig @@ -0,0 +1,37 @@ @@ -1679871,8 +1679932,8 @@ index 000000000000..c8c96b2d67ff + +endif diff --git a/drivers/video/rockchip/rga3/Makefile b/drivers/video/rockchip/rga3/Makefile -new file mode 100644 -index 000000000000..11f401de2ae0 +new file mode 100755 +index 000000000..11f401de2 --- /dev/null +++ b/drivers/video/rockchip/rga3/Makefile @@ -0,0 +1,9 @@ @@ -1679886,11 +1679947,11 @@ index 000000000000..11f401de2ae0 + +obj-$(CONFIG_ROCKCHIP_MULTI_RGA) += rga3.o diff --git a/drivers/video/rockchip/rga3/include/rga.h b/drivers/video/rockchip/rga3/include/rga.h -new file mode 100644 -index 000000000000..2a60a1ae72db +new file mode 100755 +index 000000000..f6be6eafb --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga.h -@@ -0,0 +1,944 @@ +@@ -0,0 +1,871 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _RGA_DRIVER_H_ +#define _RGA_DRIVER_H_ @@ -1679979,12 +1680040,6 @@ index 000000000000..2a60a1ae72db + RGA_SCALE_DOWN_AVG = 0x1, +}; + -+enum RGA_SCHEDULER_CORE { -+ RGA_SCHEDULER_RGA3_CORE0 = 1 << 0, -+ RGA_SCHEDULER_RGA3_CORE1 = 1 << 1, -+ RGA_SCHEDULER_RGA2_CORE0 = 1 << 2, -+}; -+ +/* RGA process mode enum */ +enum { + BITBLT_MODE = 0x0, @@ -1680038,7 +1680093,6 @@ index 000000000000..2a60a1ae72db + RGA_YUV_VDS = 0x1 << 10, + RGA_OSD = 0x1 << 11, + RGA_PRE_INTR = 0x1 << 12, -+ RGA_FULL_CSC = 0x1 << 13, +}; + +enum rga_surf_format { @@ -1680103,55 +1680157,6 @@ index 000000000000..2a60a1ae72db + RGA_FORMAT_UNKNOWN = 0x100, +}; + -+enum rga_alpha_mode { -+ RGA_ALPHA_STRAIGHT = 0, -+ RGA_ALPHA_INVERSE = 1, -+}; -+ -+enum rga_global_blend_mode { -+ RGA_ALPHA_GLOBAL = 0, -+ RGA_ALPHA_PER_PIXEL = 1, -+ RGA_ALPHA_PER_PIXEL_GLOBAL = 2, -+}; -+ -+enum rga_alpha_cal_mode { -+ RGA_ALPHA_SATURATION = 0, -+ RGA_ALPHA_NO_SATURATION = 1, -+}; -+ -+enum rga_factor_mode { -+ RGA_ALPHA_ZERO = 0, -+ RGA_ALPHA_ONE = 1, -+ /* -+ * When used as a factor for the SRC channel, it indicates -+ * the use of the DST channel's alpha value, and vice versa. -+ */ -+ RGA_ALPHA_OPPOSITE = 2, -+ RGA_ALPHA_OPPOSITE_INVERSE = 3, -+ RGA_ALPHA_OWN = 4, -+}; -+ -+enum rga_color_mode { -+ RGA_ALPHA_PRE_MULTIPLIED = 0, -+ RGA_ALPHA_NO_PRE_MULTIPLIED = 1, -+}; -+ -+enum rga_alpha_blend_mode { -+ RGA_ALPHA_NONE = 0, -+ RGA_ALPHA_BLEND_SRC, -+ RGA_ALPHA_BLEND_DST, -+ RGA_ALPHA_BLEND_SRC_OVER, -+ RGA_ALPHA_BLEND_DST_OVER, -+ RGA_ALPHA_BLEND_SRC_IN, -+ RGA_ALPHA_BLEND_DST_IN, -+ RGA_ALPHA_BLEND_SRC_OUT, -+ RGA_ALPHA_BLEND_DST_OUT, -+ RGA_ALPHA_BLEND_SRC_ATOP, -+ RGA_ALPHA_BLEND_DST_ATOP, -+ RGA_ALPHA_BLEND_XOR, -+ RGA_ALPHA_BLEND_CLEAR, -+}; -+ +#define RGA_SCHED_PRIORITY_DEFAULT 0 +#define RGA_SCHED_PRIORITY_MAX 6 + @@ -1680280,16 +1680285,6 @@ index 000000000000..2a60a1ae72db + struct rga_csc_coe coe_v; +}; + -+struct rga_csc_range { -+ uint16_t max; -+ uint16_t min; -+}; -+ -+struct rga_csc_clip { -+ struct rga_csc_range y; -+ struct rga_csc_range uv; -+}; -+ +struct rga_mosaic_info { + uint8_t enable; + uint8_t mode; @@ -1680466,12 +1680461,6 @@ index 000000000000..2a60a1ae72db + uint16_t enable; +}; + -+struct rga_feature { -+ uint32_t global_alpha_en:1; -+ uint32_t full_csc_clip_en:1; -+ uint32_t user_close_fence:1; -+}; -+ +struct rga_req { + /* (enum) process mode sel */ + uint8_t render_mode; @@ -1680528,7 +1680517,7 @@ index 000000000000..2a60a1ae72db + /* porter duff alpha mode sel */ + uint8_t PD_mode; + -+ /* legacy: global alpha value */ ++ /* global alpha value */ + uint8_t alpha_global_value; + + /* rop2/3/4 code scan from rop code table*/ @@ -1680590,28 +1680579,7 @@ index 000000000000..2a60a1ae72db + + struct rga_pre_intr_info pre_intr_info; + -+ /* global alpha */ -+ uint8_t fg_global_alpha; -+ uint8_t bg_global_alpha; -+ -+ struct rga_feature feature; -+ -+ struct rga_csc_clip full_csc_clip; -+ -+ uint8_t reservr[43]; -+}; -+ -+struct rga_alpha_config { -+ bool enable; -+ bool fg_pre_multiplied; -+ bool bg_pre_multiplied; -+ bool fg_pixel_alpha_en; -+ bool bg_pixel_alpha_en; -+ bool fg_global_alpha_en; -+ bool bg_global_alpha_en; -+ uint16_t fg_global_alpha_value; -+ uint16_t bg_global_alpha_value; -+ enum rga_alpha_blend_mode mode; ++ uint8_t reservr[59]; +}; + +struct rga2_req { @@ -1680658,7 +1680626,29 @@ index 000000000000..2a60a1ae72db + /* ([7] = 1 gradient fill mode sel) */ + u16 alpha_rop_flag; + -+ struct rga_alpha_config alpha_config; ++ /* [0] SrcAlphaMode0 */ ++ /* [2:1] SrcGlobalAlphaMode0 */ ++ /* [3] SrcAlphaSelectMode0 */ ++ /* [6:4] SrcFactorMode0 */ ++ /* [7] SrcColorMode */ ++ ++ /* [8] DstAlphaMode0 */ ++ /* [10:9] DstGlobalAlphaMode0 */ ++ /* [11] DstAlphaSelectMode0 */ ++ /* [14:12] DstFactorMode0 */ ++ /* [15] DstColorMode0 */ ++ u16 alpha_mode_0; ++ ++ /* [0] SrcAlphaMode1 */ ++ /* [2:1] SrcGlobalAlphaMode1 */ ++ /* [3] SrcAlphaSelectMode1 */ ++ /* [6:4] SrcFactorMode1 */ ++ ++ /* [8] DstAlphaMode1 */ ++ /* [10:9] DstGlobalAlphaMode1 */ ++ /* [11] DstAlphaSelectMode1 */ ++ /* [14:12] DstFactorMode1 */ ++ u16 alpha_mode_1; + + /* 0 1 2 3 */ + u8 scale_bicu_mode; @@ -1680746,10 +1680736,8 @@ index 000000000000..2a60a1ae72db + + u16 alpha_rop_flag; + -+ struct rga_alpha_config alpha_config; -+ -+ /* for abb mode presever alpha. */ -+ bool abb_alpha_pass; ++ u16 alpha_mode_0; ++ u16 alpha_mode_1; + + u8 scale_bicu_mode; + @@ -1680836,133 +1680824,49 @@ index 000000000000..2a60a1ae72db + +#endif /*_RGA_DRIVER_H_*/ diff --git a/drivers/video/rockchip/rga3/include/rga2_reg_info.h b/drivers/video/rockchip/rga3/include/rga2_reg_info.h -new file mode 100644 -index 000000000000..add2f41bda78 +new file mode 100755 +index 000000000..cd84951aa --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga2_reg_info.h -@@ -0,0 +1,477 @@ +@@ -0,0 +1,419 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __REG2_INFO_H__ +#define __REG2_INFO_H__ + +#include "rga_drv.h" + -+#define RGA2_SYS_REG_BASE 0x000 -+#define RGA2_CSC_REG_BASE 0x060 -+#define RGA2_CMD_REG_BASE 0x100 -+ -+/* sys reg */ -+#define RGA2_SYS_CTRL 0x000 -+#define RGA2_CMD_CTRL 0x004 -+#define RGA2_CMD_BASE 0x008 -+#define RGA2_STATUS1 0x00c -+#define RGA2_INT 0x010 -+#define RGA2_MMU_CTRL0 0x014 -+#define RGA2_MMU_CMD_BASE 0x018 -+#define RGA2_STATUS2 0x01c -+#define RGA2_VERSION_NUM 0x028 -+#define RGA2_READ_LINE_CNT 0x030 -+#define RGA2_WRITE_LINE_CNT 0x034 -+#define RGA2_LINE_CNT 0x038 -+#define RGA2_PERF_CTRL0 0x040 -+ -+/* full csc reg */ -+#define RGA2_DST_CSC_00 0x060 -+#define RGA2_DST_CSC_01 0x064 -+#define RGA2_DST_CSC_02 0x068 -+#define RGA2_DST_CSC_OFF0 0x06c -+#define RGA2_DST_CSC_10 0x070 -+#define RGA2_DST_CSC_11 0x074 -+#define RGA2_DST_CSC_12 0x078 -+#define RGA2_DST_CSC_OFF1 0x07c -+#define RGA2_DST_CSC_20 0x080 -+#define RGA2_DST_CSC_21 0x084 -+#define RGA2_DST_CSC_22 0x088 -+#define RGA2_DST_CSC_OFF2 0x08c -+ -+/* osd read-back reg */ -+#define RGA2_OSD_CUR_FLAGS0 0x090 -+#define RGA2_OSD_CUR_FLAGS1 0x09c -+ -+/* mode ctrl */ -+#define RGA2_MODE_CTRL_OFFSET 0x000 -+#define RGA2_SRC_INFO_OFFSET 0x004 -+#define RGA2_SRC_BASE0_OFFSET 0x008 -+#define RGA2_SRC_BASE1_OFFSET 0x00c -+#define RGA2_SRC_BASE2_OFFSET 0x010 -+#define RGA2_SRC_BASE3_OFFSET 0x014 -+#define RGA2_SRC_VIR_INFO_OFFSET 0x018 -+#define RGA2_SRC_ACT_INFO_OFFSET 0x01c -+#define RGA2_SRC_X_FACTOR_OFFSET 0x020 -+#define RGA2_OSD_CTRL0_OFFSET 0x020 // repeat -+#define RGA2_SRC_Y_FACTOR_OFFSET 0x024 -+#define RGA2_OSD_CTRL1_OFFSET 0x024 // repeat -+#define RGA2_SRC_BG_COLOR_OFFSET 0x028 -+#define RGA2_OSD_COLOR0_OFFSET 0x028 // repeat -+#define RGA2_SRC_FG_COLOR_OFFSET 0x02c -+#define RGA2_OSD_COLOR1_OFFSET 0x02c // repeat -+#define RGA2_SRC_TR_COLOR0_OFFSET 0x030 -+#define RGA2_CF_GR_A_OFFSET 0x030 // repeat -+#define RGA2_OSD_LAST_FLAGS0_OFFSET 0x030 // repeat -+#define RGA2_MOSAIC_MODE_OFFSET 0x030 // repeat -+#define RGA2_SRC_TR_COLOR1_OFFSET 0x034 -+#define RGA2_CF_GR_B_OFFSET 0x034 // repeat -+#define RGA2_OSD_LAST_FLAGS1_OFFSET 0x034 // repeat -+#define RGA2_DST_INFO_OFFSET 0x038 -+#define RGA2_DST_BASE0_OFFSET 0x03c -+#define RGA2_DST_BASE1_OFFSET 0x040 -+#define RGA2_DST_BASE2_OFFSET 0x044 -+#define RGA2_DST_VIR_INFO_OFFSET 0x048 -+#define RGA2_DST_ACT_INFO_OFFSET 0x04c -+#define RGA2_ALPHA_CTRL0_OFFSET 0x050 -+#define RGA2_ALPHA_CTRL1_OFFSET 0x054 -+#define RGA2_FADING_CTRL_OFFSET 0x058 -+#define RGA2_PAT_CON_OFFSET 0x05c -+#define RGA2_ROP_CTRL0_OFFSET 0x060 -+#define RGA2_CF_GR_G_OFFSET 0x060 // repeat -+#define RGA2_DST_Y4MAP_LUT0_OFFSET 0x060 // repeat -+#define RGA2_DST_QUANTIZE_SCALE_OFFSET 0x060 // repeat -+#define RGA2_OSD_INVERTSION_CAL0_OFFSET 0x060 // repeat -+#define RGA2_ROP_CTRL1_OFFSET 0x064 -+#define RGA2_CF_GR_R_OFFSET 0x064 // repeat -+#define RGA2_DST_Y4MAP_LUT1_OFFSET 0x064 // repeat -+#define RGA2_DST_QUANTIZE_OFFSET_OFFSET 0x064 // repeat -+#define RGA2_OSD_INVERTSION_CAL1_OFFSET 0x064 // repeat -+#define RGA2_MASK_BASE_OFFSET 0x068 -+#define RGA2_MMU_CTRL1_OFFSET 0x06c -+#define RGA2_MMU_SRC_BASE_OFFSET 0x070 -+#define RGA2_MMU_SRC1_BASE_OFFSET 0x074 -+#define RGA2_MMU_DST_BASE_OFFSET 0x078 -+#define RGA2_MMU_ELS_BASE_OFFSET 0x07c ++#define RGA2_USE_MASTER_MODE 1 ++ ++/* General Registers */ ++#define RGA2_SYS_CTRL 0x000 ++#define RGA2_CMD_CTRL 0x004 ++#define RGA2_CMD_BASE 0x008 ++#define RGA2_STATUS 0x00c ++#define RGA2_INT 0x010 ++#define RGA2_MMU_CTRL0 0x018 ++#define RGA2_MMU_CMD_BASE 0x01c ++#define RGA2_VERSION_NUM 0x028 ++ ++#define rRGA_SYS_CTRL (*(volatile u32 *)(RGA2_BASE + RGA2_SYS_CTRL_OFFSET)) ++#define rRGA_CMD_CTRL (*(volatile u32 *)(RGA2_BASE + RGA2_CMD_CTRL_OFFSET)) ++#define rRGA_CMD_BASE (*(volatile u32 *)(RGA2_BASE + RGA2_CMD_BASE_OFFSET)) ++#define rRGA_STATUS (*(volatile u32 *)(RGA2_BASE + RGA2_STATUS_OFFSET)) ++#define rRGA_INT (*(volatile u32 *)(RGA2_BASE + RGA2_INT_OFFSET)) ++#define rRGA_MMU_CTRL0 (*(volatile u32 *)(RGA2_BASE + RGA2_MMU_CTRL0_OFFSET)) ++#define rRGA_MMU_CMD_BASE (*(volatile u32 *)(RGA2_BASE + RGA2_MMU_CMD_BASE_OFFSET)) ++#define rRGA_CMD_ADDR (*(volatile u32 *)(RGA2_BASE + RGA2_CMD_ADDR)) ++#define rRGA_READ_LINE_CNT_TH (*(volatile u32 *)(RGA2_BASE + RGA2_READ_LINE_CNT_OFFSET)) ++#define rRGA_WRITE_LINE_CNT_TH (*(volatile u32 *)(RGA2_BASE + RGA2_WRITE_LINE_CNT_OFFSET)) ++#define rRGA_INT_LINE_CNT (*(volatile u32 *)(RGA2_BASE + RGA2_LINE_CNT_OFFSET)) ++#define rRGA_PERF_CTRL0 (*(volatile u32 *)(RGA2_BASE + RGA2_PERF_CTRL0_OFFSET)) ++#define rRGA_OSD_CUR_FLAGS0 (*(volatile u32 *)(RGA2_BASE + RGA2_OSD_CUR_FLAGS0)) ++#define rRGA_OSD_CUR_FLAGS1 (*(volatile u32 *)(RGA2_BASE + RGA2_OSD_CUR_FLAGS1)) + +/*RGA_SYS*/ -+#define m_RGA2_SYS_CTRL_SRC0YUV420SP_RD_OPT_DIS (0x1 << 12) -+#define m_RGA2_SYS_CTRL_DST_WR_OPT_DIS (0x1 << 11) -+#define m_RGA2_SYS_CTRL_CMD_CONTINUE_P (0x1 << 10) -+#define m_RGA2_SYS_CTRL_HOLD_MODE_EN (0x1 << 9) -+#define m_RGA2_SYS_CTRL_RST_HANDSAVE_P (0x1 << 7) -+#define m_RGA2_SYS_CTRL_RST_PROTECT_P (0x1 << 6) -+#define m_RGA2_SYS_CTRL_AUTO_RST (0x1 << 5) -+#define m_RGA2_SYS_CTRL_CCLK_SRESET_P (0x1 << 4) -+#define m_RGA2_SYS_CTRL_ACLK_SRESET_P (0x1 << 3) -+#define m_RGA2_SYS_CTRL_AUTO_CKG (0x1 << 2) -+#define m_RGA2_SYS_CTRL_CMD_MODE (0x1 << 1) -+#define m_RGA2_SYS_CTRL_CMD_OP_ST_P (0x1 << 0) -+ -+#define s_RGA2_SYS_CTRL_CMD_CONTINUE(x) ((x & 0x1) << 10) -+#define s_RGA2_SYS_CTRL_HOLD_MODE_EN(x) ((x & 0x1) << 9) -+#define s_RGA2_SYS_CTRL_CMD_MODE(x) ((x & 0x1) << 1) -+ -+/* RGA_CMD_CTRL */ -+#define m_RGA2_CMD_CTRL_INCR_NUM (0x3ff << 3) -+#define m_RGA2_CMD_CTRL_STOP (0x1 << 2) -+#define m_RGA2_CMD_CTRL_INCR_VALID_P (0x1 << 1) -+#define m_RGA2_CMD_CTRL_CMD_LINE_ST_P (0x1 << 0) -+ -+/* RGA_STATUS1 */ -+#define m_RGA2_STATUS1_SW_CMD_TOTAL_NUM (0xfff << 8) -+#define m_RGA2_STATUS1_SW_CMD_CUR_NUM (0xfff << 8) -+#define m_RGA2_STATUS1_SW_RGA_STA (0x1 << 0) ++#define m_RGA2_SYS_HOLD_MODE_EN (1 << 9) ++ ++#define s_RGA2_SYS_HOLD_MODE_EN(x) ((x & 0x1) << 9) ++#define s_RGA2_SYS_CMD_CONTINUE(x) ((x & 0x1) << 10) + +/*RGA_INT*/ +#define m_RGA2_INT_LINE_WR_CLEAR (1 << 16) @@ -1680983,22 +1680887,6 @@ index 000000000000..add2f41bda78 +#define m_RGA2_INT_MMU_INT_FLAG (1 << 1) +#define m_RGA2_INT_ERROR_INT_FLAG (1 << 0) + -+#define m_RGA2_INT_ERROR_FLAG_MASK \ -+ ( \ -+ m_RGA2_INT_MMU_INT_FLAG | \ -+ m_RGA2_INT_ERROR_INT_FLAG \ -+ ) -+#define m_RGA2_INT_ERROR_CLEAR_MASK \ -+ ( \ -+ m_RGA2_INT_MMU_INT_CLEAR | \ -+ m_RGA2_INT_ERROR_INT_CLEAR \ -+) -+#define m_RGA2_INT_ERROR_ENABLE_MASK \ -+ ( \ -+ m_RGA2_INT_MMU_INT_EN | \ -+ m_RGA2_INT_ERROR_INT_EN \ -+ ) -+ +#define s_RGA2_INT_LINE_WR_CLEAR(x) ((x & 0x1) << 16) +#define s_RGA2_INT_LINE_RD_CLEAR(x) ((x & 0x1) << 15) +#define s_RGA2_INT_LINE_WR_EN(x) ((x & 0x1) << 14) @@ -1681011,13 +1680899,6 @@ index 000000000000..add2f41bda78 +#define s_RGA2_INT_MMU_INT_CLEAR(x) ((x & 0x1) << 5) +#define s_RGA2_INT_ERROR_INT_CLEAR(x) ((x & 0x1) << 4) + -+/* RGA_STATUS2 hardware status */ -+#define m_RGA2_STATUS2_RPP_MKRAM_RREADY (0x2 << 11) -+#define m_RGA2_STATUS2_DSTRPP_OUTBUF_RREADY (0x1f << 6) -+#define m_RGA2_STATUS2_SRCRPP_OUTBUF_RREADY (0xf << 2) -+#define m_RGA2_STATUS2_BUS_ERROR (0x1 << 1) -+#define m_RGA2_STATUS2_RPP_ERROR (0x1 << 0) -+ +/* RGA_READ_LINE_CNT_TH */ +#define m_RGA2_READ_LINE_SW_INTR_LINE_RD_TH (0x1fff << 0) + @@ -1681275,582 +1681156,564 @@ index 000000000000..add2f41bda78 +#define s_RGA2_MMU_CTRL1_SW_ELS_MMU_EN(x) ((x & 0x1) << 12) +#define s_RGA2_MMU_CTRL1_SW_ELS_MMU_FLUSH(x) ((x & 0x1) << 13) + -+#define RGA2_VSP_BICUBIC_LIMIT 1996 ++/* sys ctrl */ ++#define RGA2_SYS_CTRL_OFFSET 0x0 ++#define RGA2_CMD_CTRL_OFFSET 0x4 ++#define RGA2_CMD_BASE_OFFSET 0x8 ++#define RGA2_STATUS_OFFSET 0xc ++#define RGA2_INT_OFFSET 0x10 ++#define RGA2_MMU_CTRL0_OFFSET 0x14 ++#define RGA2_MMU_CMD_BASE_OFFSET 0x18 ++#define RGA2_READ_LINE_CNT_OFFSET 0x30 ++#define RGA2_WRITE_LINE_CNT_OFFSET 0x34 ++#define RGA2_LINE_CNT_OFFSET 0x38 ++#define RGA2_PERF_CTRL0_OFFSET 0x40 ++#define RGA2_DST_CSC_00_OFFSET 0x60 ++#define RGA2_DST_CSC_01_OFFSET 0x64 ++#define RGA2_DST_CSC_02_OFFSET 0x68 ++#define RGA2_DST_CSC_OFF0_OFFSET 0x6c ++#define RGA2_DST_CSC_10_OFFSET 0x70 ++#define RGA2_DST_CSC_11_OFFSET 0x74 ++#define RGA2_DST_CSC_12_OFFSET 0x78 ++#define RGA2_DST_CSC_OFF1_OFFSET 0x7c ++#define RGA2_DST_CSC_20_OFFSET 0x80 ++#define RGA2_DST_CSC_21_OFFSET 0x84 ++#define RGA2_DST_CSC_22_OFFSET 0x88 ++#define RGA2_DST_CSC_OFF2_OFFSET 0x8c ++#define RGA2_OSD_CUR_FLAGS0_OFFSET 0x90 ++#define RGA2_OSD_CUR_FLAGS1_OFFSET 0x9c + -+union rga2_color_ctrl { -+ uint32_t value; -+ struct { -+ uint32_t dst_color_mode:1; -+ uint32_t src_color_mode:1; -+ -+ uint32_t dst_factor_mode:3; -+ uint32_t src_factor_mode:3; -+ -+ uint32_t dst_alpha_cal_mode:1; -+ uint32_t src_alpha_cal_mode:1; -+ -+ uint32_t dst_blend_mode:2; -+ uint32_t src_blend_mode:2; -+ -+ uint32_t dst_alpha_mode:1; -+ uint32_t src_alpha_mode:1; -+ } bits; -+}; -+ -+union rga2_alpha_ctrl { -+ uint32_t value; -+ struct { -+ uint32_t dst_factor_mode:3; -+ uint32_t src_factor_mode:3; -+ -+ uint32_t dst_alpha_cal_mode:1; -+ uint32_t src_alpha_cal_mode:1; -+ -+ uint32_t dst_blend_mode:2; -+ uint32_t src_blend_mode:2; -+ -+ uint32_t dst_alpha_mode:1; -+ uint32_t src_alpha_mode:1; -+ } bits; -+}; -+ -+extern const struct rga_backend_ops rga2_ops; ++/* mode ctrl */ ++#define RGA2_MODE_CTRL_OFFSET 0x00 ++#define RGA2_SRC_INFO_OFFSET 0x04 ++#define RGA2_SRC_BASE0_OFFSET 0x08 ++#define RGA2_SRC_BASE1_OFFSET 0x0c ++#define RGA2_SRC_BASE2_OFFSET 0x10 ++#define RGA2_SRC_BASE3_OFFSET 0x14 ++#define RGA2_SRC_VIR_INFO_OFFSET 0x18 ++#define RGA2_SRC_ACT_INFO_OFFSET 0x1c ++#define RGA2_SRC_X_FACTOR_OFFSET 0x20 ++#define RGA2_OSD_CTRL0_OFFSET 0x20 // repeat ++#define RGA2_SRC_Y_FACTOR_OFFSET 0x24 ++#define RGA2_OSD_CTRL1_OFFSET 0x24 // repeat ++#define RGA2_SRC_BG_COLOR_OFFSET 0x28 ++#define RGA2_OSD_COLOR0_OFFSET 0x28 // repeat ++#define RGA2_SRC_FG_COLOR_OFFSET 0x2c ++#define RGA2_OSD_COLOR1_OFFSET 0x2c // repeat ++#define RGA2_SRC_TR_COLOR0_OFFSET 0x30 ++#define RGA2_CF_GR_A_OFFSET 0x30 // repeat ++#define RGA2_OSD_LAST_FLAGS0_OFFSET 0x30 // repeat ++#define RGA2_MOSAIC_MODE_OFFSET 0x30 // repeat ++#define RGA2_SRC_TR_COLOR1_OFFSET 0x34 ++#define RGA2_CF_GR_B_OFFSET 0x34 // repeat ++#define RGA2_OSD_LAST_FLAGS1_OFFSET 0x34 // repeat ++#define RGA2_DST_INFO_OFFSET 0x38 ++#define RGA2_DST_BASE0_OFFSET 0x3c ++#define RGA2_DST_BASE1_OFFSET 0x40 ++#define RGA2_DST_BASE2_OFFSET 0x44 ++#define RGA2_DST_VIR_INFO_OFFSET 0x48 ++#define RGA2_DST_ACT_INFO_OFFSET 0x4c ++#define RGA2_ALPHA_CTRL0_OFFSET 0x50 ++#define RGA2_ALPHA_CTRL1_OFFSET 0x54 ++#define RGA2_FADING_CTRL_OFFSET 0x58 ++#define RGA2_PAT_CON_OFFSET 0x5c ++#define RGA2_ROP_CTRL0_OFFSET 0x60 ++#define RGA2_CF_GR_G_OFFSET 0x60 // repeat ++#define RGA2_DST_Y4MAP_LUT0_OFFSET 0x60 // repeat ++#define RGA2_DST_QUANTIZE_SCALE_OFFSET 0x60 // repeat ++#define RGA2_OSD_INVERTSION_CAL0_OFFSET 0x60 // repeat ++#define RGA2_ROP_CTRL1_OFFSET 0x64 ++#define RGA2_CF_GR_R_OFFSET 0x64 // repeat ++#define RGA2_DST_Y4MAP_LUT1_OFFSET 0x64 // repeat ++#define RGA2_DST_QUANTIZE_OFFSET_OFFSET 0x64 // repeat ++#define RGA2_OSD_INVERTSION_CAL1_OFFSET 0x64 // repeat ++#define RGA2_MASK_BASE_OFFSET 0x68 ++#define RGA2_MMU_CTRL1_OFFSET 0x6c ++#define RGA2_MMU_SRC_BASE_OFFSET 0x70 ++#define RGA2_MMU_SRC1_BASE_OFFSET 0x74 ++#define RGA2_MMU_DST_BASE_OFFSET 0x78 ++#define RGA2_MMU_ELS_BASE_OFFSET 0x7c ++ ++#define RGA2_SYS_REG_BASE 0x0 ++#define RGA2_CSC_REG_BASE 0x60 ++#define RGA2_CMD_REG_BASE 0x100 ++ ++int rga2_gen_reg_info(unsigned char *base, struct rga2_req *msg); ++ ++void rga2_soft_reset(struct rga_scheduler_t *scheduler); ++int rga2_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler); ++int rga2_init_reg(struct rga_job *job); ++int rga2_get_version(struct rga_scheduler_t *scheduler); ++void rga2_dump_read_back_reg(struct rga_scheduler_t *scheduler); + +#endif + diff --git a/drivers/video/rockchip/rga3/include/rga3_reg_info.h b/drivers/video/rockchip/rga3/include/rga3_reg_info.h -new file mode 100644 -index 000000000000..4db80cfb09ee +new file mode 100755 +index 000000000..d8eba9f06 --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga3_reg_info.h -@@ -0,0 +1,521 @@ +@@ -0,0 +1,454 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __REG3_INFO_H__ +#define __REG3_INFO_H__ + +#include "rga_drv.h" + -+/* sys reg */ -+#define RGA3_SYS_CTRL 0x000 -+#define RGA3_CMD_CTRL 0x004 -+#define RGA3_CMD_ADDR 0x008 -+#define RGA3_MI_GROUP_CTRL 0x00c -+#define RGA3_ARQOS_CTRL 0x010 -+#define RGA3_VERSION_NUM 0x018 -+#define RGA3_VERSION_TIM 0x01c -+#define RGA3_INT_EN 0x020 -+#define RGA3_INT_RAW 0x024 -+#define RGA3_INT_MSK 0x028 -+#define RGA3_INT_CLR 0x02c -+#define RGA3_RO_SRST 0x030 -+#define RGA3_STATUS0 0x034 -+#define RGA3_SCAN_CNT 0x038 -+#define RGA3_CMD_STATE 0x040 -+ -+/* cmd reg */ -+#define RGA3_WIN0_RD_CTRL_OFFSET 0x000 -+#define RGA3_WIN0_Y_BASE_OFFSET 0x010 -+#define RGA3_WIN0_U_BASE_OFFSET 0x014 -+#define RGA3_WIN0_V_BASE_OFFSET 0x018 -+#define RGA3_WIN0_VIR_STRIDE_OFFSET 0x01c -+#define RGA3_WIN0_FBC_OFF_OFFSET 0x020 -+#define RGA3_WIN0_SRC_SIZE_OFFSET 0x024 -+#define RGA3_WIN0_ACT_OFF_OFFSET 0x028 -+#define RGA3_WIN0_ACT_SIZE_OFFSET 0x02c -+#define RGA3_WIN0_DST_SIZE_OFFSET 0x030 -+#define RGA3_WIN0_SCL_FAC_OFFSET 0x034 -+#define RGA3_WIN0_UV_VIR_STRIDE_OFFSET 0x038 -+#define RGA3_WIN1_RD_CTRL_OFFSET 0x040 -+#define RGA3_WIN1_Y_BASE_OFFSET 0x050 -+#define RGA3_WIN1_U_BASE_OFFSET 0x054 -+#define RGA3_WIN1_V_BASE_OFFSET 0x058 -+#define RGA3_WIN1_VIR_STRIDE_OFFSET 0x05c -+#define RGA3_WIN1_FBC_OFF_OFFSET 0x060 -+#define RGA3_WIN1_SRC_SIZE_OFFSET 0x064 -+#define RGA3_WIN1_ACT_OFF_OFFSET 0x068 -+#define RGA3_WIN1_ACT_SIZE_OFFSET 0x06c -+#define RGA3_WIN1_DST_SIZE_OFFSET 0x070 -+#define RGA3_WIN1_SCL_FAC_OFFSET 0x074 -+#define RGA3_WIN1_UV_VIR_STRIDE_OFFSET 0x078 -+#define RGA3_OVLP_CTRL_OFFSET 0x080 -+#define RGA3_OVLP_OFF_OFFSET 0x084 -+#define RGA3_OVLP_TOP_KEY_MIN_OFFSET 0x088 -+#define RGA3_OVLP_TOP_KEY_MAX_OFFSET 0x08c -+#define RGA3_OVLP_TOP_CTRL_OFFSET 0x090 -+#define RGA3_OVLP_BOT_CTRL_OFFSET 0x094 -+#define RGA3_OVLP_TOP_ALPHA_OFFSET 0x098 -+#define RGA3_OVLP_BOT_ALPHA_OFFSET 0x09c -+#define RGA3_WR_CTRL_OFFSET 0x0a0 -+#define RGA3_WR_FBCE_CTRL_OFFSET 0x0a4 -+#define RGA3_WR_VIR_STRIDE_OFFSET 0x0a8 -+#define RGA3_WR_PL_VIR_STRIDE_OFFSET 0x0ac -+#define RGA3_WR_Y_BASE_OFFSET 0x0b0 -+#define RGA3_WR_U_BASE_OFFSET 0x0b4 -+#define RGA3_WR_V_BASE_OFFSET 0x0b8 -+ -+/* RGA3_SYS_CTRL */ -+#define m_RGA3_SYS_CTRL_FRMEND_AUTO_RSTN_EN (0x1 << 11) -+#define m_RGA3_SYS_CTRL_RGA_BIC_MODE (0x3 << 9) -+#define m_RGA3_SYS_CTRL_RGA_RAM_CLK_ON (0x1 << 8) -+#define m_RGA3_SYS_CTRL_CCLK_SRESET (0x1 << 4) -+#define m_RGA3_SYS_CTRL_ACLK_SRESET (0x1 << 3) -+#define m_RGA3_SYS_CTRL_RGA_LGC_CLK_ON (0x1 << 2) -+#define m_RGA3_SYS_CTRL_CMD_MODE (0x1 << 1) -+#define m_RGA3_SYS_CTRL_RGA_SART (0x1 << 0) -+ -+#define s_RGA3_SYS_CTRL_RGA_BIC_MODE(x) ((x & 0x3) << 9) -+#define s_RGA3_SYS_CTRL_CCLK_SRESET(x) ((x & 0x1) << 4) -+#define s_RGA3_SYS_CTRL_ACLK_SRESET(x) ((x & 0x1) << 3) -+#define s_RGA3_SYS_CTRL_CMD_MODE(x) ((x & 0x1) << 1) -+ -+/* TODO: RGA3_INT_EN/RGA3_INT_RAW/RGA3_INT_MSK/RGA3_INT_CLR */ -+#define m_RGA3_INT_WIN1_VOR_FIFO_REN_ERR (0x1 << 29) -+#define m_RGA3_INT_WIN1_VOR_FIFO_WEN_ERR (0x1 << 28) -+#define m_RGA3_INT_WIN1_HOR_FIFO_REN_ERR (0x1 << 27) -+#define m_RGA3_INT_WIN1_HOR_FIFO_WEN_ERR (0x1 << 26) -+#define m_RGA3_INT_WIN1_IN_FIFO_REB_ERR (0x1 << 25) -+#define m_RGA3_INT_WIN1_IN_FIFO_WEN_ERR (0x1 << 24) -+#define m_RGA3_INT_WIN0_VOR_FIFO_REN_ERR (0x1 << 21) -+#define m_RGA3_INT_WIN0_VOR_FIFO_WEN_ERR (0x1 << 20) -+#define m_RGA3_INT_WIN0_HOR_FIFO_REN_ERR (0x1 << 19) -+#define m_RGA3_INT_WIN0_HOR_FIFO_WEN_ERR (0x1 << 18) -+#define m_RGA3_INT_WIN0_IN_FIFO_REB_ERR (0x1 << 17) -+#define m_RGA3_INT_WIN0_IN_FIFO_WEN_ERR (0x1 << 16) -+#define m_RGA3_INT_RGA_MI_WR_BUS_ERR (0x1 << 15) -+#define m_RGA3_INT_RGA_MI_WR_IN_HERR (0x1 << 14) -+//The signal is invalid, it will be pulled up every time, no need to care. -+// #define m_RGA3_INT_RGA_MI_WR_IN_VERR (0x1 << 13) -+#define m_RGA3_INT_WIN1_V_ERR (0x1 << 11) -+#define m_RGA3_INT_WIN1_H_ERR (0x1 << 10) -+#define m_RGA3_INT_WIN1_FBCD_DEC_ERR (0x1 << 9) -+#define m_RGA3_INT_WIN1_RD_FRM_END (0x1 << 8) //not error -+#define m_RGA3_INT_WIN0_V_ERR (0x1 << 7) -+#define m_RGA3_INT_WIN0_H_ERR (0x1 << 6) -+#define m_RGA3_INT_WIN0_FBCD_DEC_ERR (0x1 << 5) -+#define m_RGA3_INT_WIN0_RD_FRM_END (0x1 << 4) //not error -+#define m_RGA3_INT_CMD_LINE_FINISH (0x1 << 3) //not error -+#define m_RGA3_INT_RAG_MI_RD_BUS_ERR (0x1 << 2) -+#define m_RGA3_INT_RGA_MMU_INTR (0x1 << 1) -+#define m_RGA3_INT_FRM_DONE (0x1 << 0) //not error -+ -+#define m_RGA3_INT_ERROR_MASK \ -+ ( \ -+ m_RGA3_INT_RGA_MMU_INTR | \ -+ m_RGA3_INT_RAG_MI_RD_BUS_ERR | \ -+ m_RGA3_INT_WIN0_FBCD_DEC_ERR | \ -+ m_RGA3_INT_WIN0_H_ERR | \ -+ m_RGA3_INT_WIN0_V_ERR | \ -+ m_RGA3_INT_WIN1_FBCD_DEC_ERR | \ -+ m_RGA3_INT_WIN1_H_ERR | \ -+ m_RGA3_INT_WIN1_V_ERR | \ -+ m_RGA3_INT_RGA_MI_WR_IN_HERR | \ -+ m_RGA3_INT_RGA_MI_WR_BUS_ERR | \ -+ m_RGA3_INT_WIN0_IN_FIFO_WEN_ERR | \ -+ m_RGA3_INT_WIN0_IN_FIFO_REB_ERR | \ -+ m_RGA3_INT_WIN0_HOR_FIFO_WEN_ERR | \ -+ m_RGA3_INT_WIN0_HOR_FIFO_REN_ERR| \ -+ m_RGA3_INT_WIN0_VOR_FIFO_WEN_ERR | \ -+ m_RGA3_INT_WIN0_VOR_FIFO_REN_ERR | \ -+ m_RGA3_INT_WIN1_IN_FIFO_WEN_ERR | \ -+ m_RGA3_INT_WIN1_IN_FIFO_REB_ERR | \ -+ m_RGA3_INT_WIN1_HOR_FIFO_WEN_ERR | \ -+ m_RGA3_INT_WIN1_HOR_FIFO_REN_ERR| \ -+ m_RGA3_INT_WIN1_VOR_FIFO_WEN_ERR | \ -+ m_RGA3_INT_WIN1_VOR_FIFO_REN_ERR \ -+ ) -+ -+/* RGA3_CMD_CTRL */ -+#define m_RGA3_CMD_CTRL_CMD_INCR_NUM (0x3ff << 3) -+#define m_RGA3_CMD_CTRL_CMD_STOP_MODE (0x1 << 2) -+#define m_RGA3_CMD_CTRL_CMD_INCR_VALID_P (0x1 << 1) -+#define m_RGA3_CMD_CTRL_CMD_LINE_ST_P (0x1 << 0) -+ -+/* RGA3_RO_SRST */ -+#define m_RGA3_RO_SRST_RO_RST_DONE (0x3f << 0) -+ -+/* RGA3_CMD_STATE */ -+#define m_RGA3_CMD_STATE_CMD_CNT_CUR (0xfff << 16) -+#define m_RGA3_CMD_STATE_CMD_WORKING (0x1 << 0) ++//General Registers ++/* yqw: statuså’Œintå¯„å­˜å™¨å°šä¸æ˜Žäº†ï¼Œæ— æ³•进行修改。 */ ++//#define RGA2_STATUS 0x00c ++//#define RGA2_INT 0x010 ++ ++#define RGA3_SYS_CTRL 0x000 ++#define RGA3_CMD_CTRL 0x004 ++#define RGA3_CMD_ADDR 0x008 ++#define RGA3_MI_GROUP_CTRL 0x00c ++#define RGA3_ARQOS_CTRL 0x010 ++#define RGA3_VERSION_NUM 0x018 ++#define RGA3_VERSION_TIM 0x01c ++#define RGA3_INT_EN 0x020 ++#define RGA3_INT_RAW 0x024 ++#define RGA3_INT_MSK 0x028 ++#define RGA3_INT_CLR 0x02c ++#define RGA3_RO_SRST 0x030 ++#define RGA3_STATUS0 0x034 ++#define RGA3_SCAN_CNT 0x038 ++#define RGA3_STATUS1 0x03c ++#define RGA3_CMD_STATE 0x040 ++ ++/* TODO: RGA_INT */ + +/* RGA3_WIN0_RD_CTRL */ -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ENABLE (0x1 << 0) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_MODE (0x3 << 1) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_PIC_FORMAT (0xf << 4) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_FORMAT (0x3 << 8) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT (0x1 << 10) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ENDIAN_MODE (0x1 << 11) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ENABLE (0x1 << 0) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_MODE (0x3 << 1) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_PIC_FORMAT (0xf << 4) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_FORMAT (0x3 << 8) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT (0x1 << 10) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ENDIAN_MODE (0x1 << 11) +#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_PIX_SWAP (0x1 << 12) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YC_SWAP (0x1 << 13) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT (0x1 << 16) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_XMIRROR (0x1 << 17) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR (0x1 << 18) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY (0x1 << 20) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP (0x1 << 21) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY (0x1 << 22) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP (0x1 << 23) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_Y2R_EN (0x1 << 24) -+#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_R2Y_EN (0x1 << 25) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YC_SWAP (0x1 << 13) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT (0x1 << 16) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_XMIRROR (0x1 << 17) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR (0x1 << 18) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY (0x1 << 20) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP (0x1 << 21) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY (0x1 << 22) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP (0x1 << 23) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_Y2R_EN (0x1 << 24) ++#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_R2Y_EN (0x1 << 25) +#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_CSC_MODE (0x3 << 26) +#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_PERF_OPT_DIS (0x1 << 29) +#define m_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_ALIGN_DIS (0x1 << 30) + -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ENABLE(x) ((x & 0x1) << 0) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_MODE(x) ((x & 0x3) << 1) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PIC_FORMAT(x) ((x & 0xf) << 4) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ENABLE(x) ((x & 0x1) << 0) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_MODE(x) ((x & 0x3) << 1) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PIC_FORMAT(x) ((x & 0xf) << 4) +#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_FORMAT(x) ((x & 0x3) << 8) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT(x) ((x & 0x1) << 10) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ENDIAN_MODE(x) ((x & 0x1) << 11) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PIX_SWAP(x) ((x & 0x1) << 12) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YC_SWAP(x) ((x & 0x1) << 13) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT(x) ((x & 0x1) << 16) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_XMIRROR(x) ((x & 0x1) << 17) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR(x) ((x & 0x1) << 18) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY(x) ((x & 0x1) << 20) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP(x) ((x & 0x1) << 21) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY(x) ((x & 0x1) << 22) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP(x) ((x & 0x1) << 23) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_Y2R_EN(x) ((x & 0x1) << 24) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_R2Y_EN(x) ((x & 0x1) << 25) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_CSC_MODE(x) ((x & 0x3) << 26) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PERF_OPT_DIS(x) ((x & 0x1) << 29) -+#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_ALIGN_DIS(x) ((x & 0x1) << 30) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT(x) ((x & 0x1) << 10) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ENDIAN_MODE(x) ((x & 0x1) << 11) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PIX_SWAP(x) ((x & 0x1) << 12) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YC_SWAP(x) ((x & 0x1) << 13) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT(x) ((x & 0x1) << 16) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_XMIRROR(x) ((x & 0x1) << 17) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR(x) ((x & 0x1) << 18) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY(x) ((x & 0x1) << 20) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP(x) ((x & 0x1) << 21) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY(x) ((x & 0x1) << 22) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP(x) ((x & 0x1) << 23) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_Y2R_EN(x) ((x & 0x1) << 24) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_R2Y_EN(x) ((x & 0x1) << 25) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_CSC_MODE(x) ((x & 0x3) << 26) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_PERF_OPT_DIS(x) ((x & 0x1) << 29) ++#define s_RGA3_WIN0_RD_CTRL_SW_WIN0_RD_ALIGN_DIS(x) ((x & 0x1) << 30) + +/* RGA3_WIN0_FBC_OFF */ +#define m_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_XOFF (0x1fff << 0) +#define m_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_YOFF (0x1fff << 16) + -+#define s_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_XOFF(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_YOFF(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_XOFF(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN0_FBC_OFF_SW_WIN0_FBC_YOFF(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN0_SRC_SIZE */ -+#define m_RGA3_WIN0_SRC_SIZE_SW_WIN0_SRC_WIDTH (0x1fff << 0) -+#define m_RGA3_WIN0_SRC_SIZE_SW_WIN0_SRC_HEIGHT (0x1fff << 16) ++#define m_RGA3_WIN0_SRC_SIZE_SW_WIN0_SRC_WIDTH (0x1fff << 0) ++#define m_RGA3_WIN0_SRC_SIZE_SW_WIN0_SRC_HEIGHT (0x1fff << 16) + -+#define s_RGA3_WIN0_SRC_OFF_SW_WIN0_SRC_WIDTH(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN0_SRC_OFF_SW_WIN0_SRC_HEIGHT(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN0_SRC_OFF_SW_WIN0_SRC_WIDTH(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN0_SRC_OFF_SW_WIN0_SRC_HEIGHT(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN0_ACT_OFF */ +#define m_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_XOFF (0x1fff << 0) +#define m_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_YOFF (0x1fff << 16) + -+#define s_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_XOFF(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_YOFF(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_XOFF(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN0_ACT_OFF_SW_WIN0_ACT_YOFF(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN0_ACT_SIZE */ -+#define m_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_WIDTH (0x1fff << 0) -+#define m_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_HEIGHT (0x1fff << 16) ++#define m_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_WIDTH (0x1fff << 0) ++#define m_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_HEIGHT (0x1fff << 16) + -+#define s_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_WIDTH(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_HEIGHT(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_WIDTH(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN0_ACT_SIZE_SW_WIN0_ACT_HEIGHT(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN0_DST_SIZE */ -+#define m_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_WIDTH (0x1fff << 0) -+#define m_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_HEIGHT (0x1fff << 16) ++#define m_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_WIDTH (0x1fff << 0) ++#define m_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_HEIGHT (0x1fff << 16) + -+#define s_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_WIDTH(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_HEIGHT(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_WIDTH(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN0_DST_SIZE_SW_WIN0_DST_HEIGHT(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN0_SCL_FAC */ -+#define m_RGA3_WIN0_SCL_FAC_SW_WIN0_VER_FAC (0xffff << 0) -+#define m_RGA3_WIN0_SCL_FAC_SW_WIN0_HOR_FAC (0xffff << 16) ++#define m_RGA3_WIN0_SCL_FAC_SW_WIN0_VER_FAC (0xffff << 0) ++#define m_RGA3_WIN0_SCL_FAC_SW_WIN0_HOR_FAC (0xffff << 16) + -+#define s_RGA3_WIN0_SCL_FAC_SW_WIN0_VER_FAC(x) ((x & 0xffff) << 0) -+#define s_RGA3_WIN0_SCL_FAC_SW_WIN0_HOR_FAC(x) ((x & 0xffff) << 16) ++#define s_RGA3_WIN0_SCL_FAC_SW_WIN0_VER_FAC(x) ((x & 0xffff) << 0) ++#define s_RGA3_WIN0_SCL_FAC_SW_WIN0_HOR_FAC(x) ((x & 0xffff) << 16) + +/* RGA3_WIN1_RD_CTRL */ -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ENABLE (0x1 << 0) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_MODE (0x3 << 1) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_PIC_FORMAT (0xf << 4) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_FORMAT (0x3 << 8) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YUV10B_COMPACT (0x1 << 10) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ENDIAN_MODE (0x1 << 11) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ENABLE (0x1 << 0) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_MODE (0x3 << 1) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_PIC_FORMAT (0xf << 4) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_FORMAT (0x3 << 8) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YUV10B_COMPACT (0x1 << 10) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ENDIAN_MODE (0x1 << 11) +#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_PIX_SWAP (0x1 << 12) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YC_SWAP (0x1 << 13) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ROT (0x1 << 16) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_XMIRROR (0x1 << 17) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YMIRROR (0x1 << 18) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_BY (0x1 << 20) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_UP (0x1 << 21) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_BY (0x1 << 22) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_UP (0x1 << 23) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_Y2R_EN (0x1 << 24) -+#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_R2Y_EN (0x1 << 25) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YC_SWAP (0x1 << 13) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_ROT (0x1 << 16) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_XMIRROR (0x1 << 17) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_YMIRROR (0x1 << 18) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_BY (0x1 << 20) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_UP (0x1 << 21) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_BY (0x1 << 22) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_UP (0x1 << 23) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_Y2R_EN (0x1 << 24) ++#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_R2Y_EN (0x1 << 25) +#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_CSC_MODE (0x3 << 26) +#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_PERF_OPT_DIS (0x1 << 29) +#define m_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_ALIGN_DIS (0x1 << 30) + -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ENABLE(x) ((x & 0x1) << 0) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_MODE(x) ((x & 0x3) << 1) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PIC_FORMAT(x) ((x & 0xf) << 4) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ENABLE(x) ((x & 0x1) << 0) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_MODE(x) ((x & 0x3) << 1) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PIC_FORMAT(x) ((x & 0xf) << 4) +#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_FORMAT(x) ((x & 0x3) << 8) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YUV10B_COMPACT(x) ((x & 0x1) << 10) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ENDIAN_MODE(x) ((x & 0x1) << 11) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PIX_SWAP(x) ((x & 0x1) << 12) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YC_SWAP(x) ((x & 0x1) << 13) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ROT(x) ((x & 0x1) << 16) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_XMIRROR(x) ((x & 0x1) << 17) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YMIRROR(x) ((x & 0x1) << 18) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_BY(x) ((x & 0x1) << 20) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_UP(x) ((x & 0x1) << 21) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_BY(x) ((x & 0x1) << 22) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_UP(x) ((x & 0x1) << 23) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_Y2R_EN(x) ((x & 0x1) << 24) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_R2Y_EN(x) ((x & 0x1) << 25) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_CSC_MODE(x) ((x & 0x3) << 26) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PERF_OPT_DIS(x) ((x & 0x1) << 29) -+#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_ALIGN_DIS(x) ((x & 0x1) << 30) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YUV10B_COMPACT(x) ((x & 0x1) << 10) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ENDIAN_MODE(x) ((x & 0x1) << 11) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PIX_SWAP(x) ((x & 0x1) << 12) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YC_SWAP(x) ((x & 0x1) << 13) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_ROT(x) ((x & 0x1) << 16) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_XMIRROR(x) ((x & 0x1) << 17) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_YMIRROR(x) ((x & 0x1) << 18) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_BY(x) ((x & 0x1) << 20) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_HOR_UP(x) ((x & 0x1) << 21) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_BY(x) ((x & 0x1) << 22) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_VER_UP(x) ((x & 0x1) << 23) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_Y2R_EN(x) ((x & 0x1) << 24) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_R2Y_EN(x) ((x & 0x1) << 25) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_CSC_MODE(x) ((x & 0x3) << 26) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_PERF_OPT_DIS(x) ((x & 0x1) << 29) ++#define s_RGA3_WIN1_RD_CTRL_SW_WIN1_RD_ALIGN_DIS(x) ((x & 0x1) << 30) + +/* RGA3_WIN1_FBC_OFF */ +#define m_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_XOFF (0x1fff << 0) +#define m_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_YOFF (0x1fff << 16) + -+#define s_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_XOFF(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_YOFF(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_XOFF(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN1_FBC_OFF_SW_WIN1_FBC_YOFF(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN1_SRC_SIZE */ -+#define m_RGA3_WIN1_SRC_SIZE_SW_WIN1_SRC_WIDTH (0x1fff << 0) -+#define m_RGA3_WIN1_SRC_SIZE_SW_WIN1_SRC_HEIGHT (0x1fff << 16) ++#define m_RGA3_WIN1_SRC_SIZE_SW_WIN1_SRC_WIDTH (0x1fff << 0) ++#define m_RGA3_WIN1_SRC_SIZE_SW_WIN1_SRC_HEIGHT (0x1fff << 16) + -+#define s_RGA3_WIN1_SRC_OFF_SW_WIN1_SRC_WIDTH(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN1_SRC_OFF_SW_WIN1_SRC_HEIGHT(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN1_SRC_OFF_SW_WIN1_SRC_WIDTH(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN1_SRC_OFF_SW_WIN1_SRC_HEIGHT(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN1_ACT_OFF */ +#define m_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_XOFF (0x1fff << 0) +#define m_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_YOFF (0x1fff << 16) + -+#define s_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_XOFF(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_YOFF(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_XOFF(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN1_ACT_OFF_SW_WIN1_ACT_YOFF(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN1_ACT_SIZE */ -+#define m_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_WIDTH (0x1fff << 0) -+#define m_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_HEIGHT (0x1fff << 16) ++#define m_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_WIDTH (0x1fff << 0) ++#define m_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_HEIGHT (0x1fff << 16) + -+#define s_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_WIDTH(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_HEIGHT(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_WIDTH(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN1_ACT_SIZE_SW_WIN1_ACT_HEIGHT(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN1_DST_SIZE */ -+#define m_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_WIDTH (0x1fff << 0) -+#define m_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_HEIGHT (0x1fff << 16) ++#define m_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_WIDTH (0x1fff << 0) ++#define m_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_HEIGHT (0x1fff << 16) + -+#define s_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_WIDTH(x) ((x & 0x1fff) << 0) -+#define s_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_HEIGHT(x) ((x & 0x1fff) << 16) ++#define s_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_WIDTH(x) ((x & 0x1fff) << 0) ++#define s_RGA3_WIN1_DST_SIZE_SW_WIN1_DST_HEIGHT(x) ((x & 0x1fff) << 16) + +/* RGA3_WIN1_SCL_FAC */ -+#define m_RGA3_WIN1_SCL_FAC_SW_WIN1_VER_FAC (0xffff << 0) -+#define m_RGA3_WIN1_SCL_FAC_SW_WIN1_HOR_FAC (0xffff << 16) ++#define m_RGA3_WIN1_SCL_FAC_SW_WIN1_VER_FAC (0xffff << 0) ++#define m_RGA3_WIN1_SCL_FAC_SW_WIN1_HOR_FAC (0xffff << 16) + -+#define s_RGA3_WIN1_SCL_FAC_SW_WIN1_VER_FAC(x) ((x & 0xffff) << 0) -+#define s_RGA3_WIN1_SCL_FAC_SW_WIN1_HOR_FAC(x) ((x & 0xffff) << 16) ++#define s_RGA3_WIN1_SCL_FAC_SW_WIN1_VER_FAC(x) ((x & 0xffff) << 0) ++#define s_RGA3_WIN1_SCL_FAC_SW_WIN1_HOR_FAC(x) ((x & 0xffff) << 16) + +/* RGA3_OVLP_CTRL */ -+#define m_RGA3_OVLP_CTRL_SW_OVLP_MODE (0x3 << 0) -+#define m_RGA3_OVLP_CTRL_SW_OVLP_FIELD (0x1 << 2) -+#define m_RGA3_OVLP_CTRL_SW_TOP_SWAP (0x1 << 3) -+#define m_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN (0x1 << 4) -+#define m_RGA3_OVLP_CTRL_SW_TOP_KEY_EN (0x7FFF << 5) -+#define m_RGA3_OVLP_CTRL_SW_OVLP_Y2R_EN (0x1 << 20) -+#define m_RGA3_OVLP_CTRL_SW_OVLP_R2Y_EN (0x1 << 21) -+#define m_RGA3_OVLP_CTRL_SW_OVLP_CSC_MODE (0x3 << 22) -+ -+#define s_RGA3_OVLP_CTRL_SW_OVLP_MODE(x) ((x & 0x3) << 0) -+#define s_RGA3_OVLP_CTRL_SW_OVLP_FIELD(x) ((x & 0x1) << 2) -+#define s_RGA3_OVLP_CTRL_SW_TOP_SWAP(x) ((x & 0x1) << 3) -+#define s_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN(x) ((x & 0x1) << 4) -+#define s_RGA3_OVLP_CTRL_SW_TOP_KEY_EN(x) ((x & 0x7FFF) << 5) -+#define s_RGA3_OVLP_CTRL_SW_OVLP_Y2R_EN(x) ((x & 0x1) << 20) -+#define s_RGA3_OVLP_CTRL_SW_OVLP_R2Y_EN(x) ((x & 0x1) << 21) -+#define s_RGA3_OVLP_CTRL_SW_OVLP_CSC_MODE(x) ((x & 0x3) << 22) ++#define m_RGA3_OVLP_CTRL_SW_OVLP_MODE (0x3 << 0) ++#define m_RGA3_OVLP_CTRL_SW_OVLP_FIELD (0x1 << 2) ++#define m_RGA3_OVLP_CTRL_SW_TOP_SWAP (0x1 << 3) ++#define m_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN (0x1 << 4) ++#define m_RGA3_OVLP_CTRL_SW_TOP_KEY_EN (0x7FFF << 5) ++#define m_RGA3_OVLP_CTRL_SW_OVLP_Y2R_EN (0x1 << 20) ++#define m_RGA3_OVLP_CTRL_SW_OVLP_R2Y_EN (0x1 << 21) ++#define m_RGA3_OVLP_CTRL_SW_OVLP_CSC_MODE (0x3 << 22) ++ ++#define s_RGA3_OVLP_CTRL_SW_OVLP_MODE(x) ((x & 0x3) << 0) ++#define s_RGA3_OVLP_CTRL_SW_OVLP_FIELD(x) ((x & 0x1) << 2) ++#define s_RGA3_OVLP_CTRL_SW_TOP_SWAP(x) ((x & 0x1) << 3) ++#define s_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN(x) ((x & 0x1) << 4) ++#define s_RGA3_OVLP_CTRL_SW_TOP_KEY_EN(x) ((x & 0x7FFF) << 5) ++#define s_RGA3_OVLP_CTRL_SW_OVLP_Y2R_EN(x) ((x & 0x1) << 20) ++#define s_RGA3_OVLP_CTRL_SW_OVLP_R2Y_EN(x) ((x & 0x1) << 21) ++#define s_RGA3_OVLP_CTRL_SW_OVLP_CSC_MODE(x) ((x & 0x3) << 22) + +/* RGA3_OVLP_OFF */ -+#define m_RGA3_OVLP_OFF_SW_OVLP_XOFF (0x1fff << 0) -+#define m_RGA3_OVLP_OFF_SW_OVLP_YOFF (0x1fff << 16) ++#define m_RGA3_OVLP_OFF_SW_OVLP_XOFF (0x1fff << 0) ++#define m_RGA3_OVLP_OFF_SW_OVLP_YOFF (0x1fff << 16) + -+#define s_RGA3_OVLP_OFF_SW_OVLP_XOFF(x) ((x & 0x1fff) << 0) -+#define s_RGA3_OVLP_OFF_SW_OVLP_YOFF(x) ((x & 0x1fff) << 16) ++#define s_RGA3_OVLP_OFF_SW_OVLP_XOFF(x) ((x & 0x1fff) << 0) ++#define s_RGA3_OVLP_OFF_SW_OVLP_YOFF(x) ((x & 0x1fff) << 16) + +/* RGA3_OVLP_TOP_KEY_MIN */ -+#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_YG_MIN (0x3ff << 0) -+#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_UB_MIN (0x3ff << 10) -+#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_VR_MIN (0x3ff << 20) ++#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_YG_MIN (0x3ff << 0) ++#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_UB_MIN (0x3ff << 10) ++#define m_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_VR_MIN (0x3ff << 20) + -+#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_YG_MIN(x) ((x & 0x3f)f << 0) -+#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_UB_MIN(x) ((x & 0x3ff) << 10) -+#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_VR_MIN(x) ((x & 0x3ff) << 20) ++#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_YG_MIN(x) ((x & 0x3f)f << 0) ++#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_UB_MIN(x) ((x & 0x3ff) << 10) ++#define s_RGA3_OVLP_TOP_KEY_MIN_SW_TOP_KEY_VR_MIN(x) ((x & 0x3ff) << 20) + +/* RGA3_OVLP_TOP_KEY_MAX */ -+#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_YG_MAX (0x3ff << 0) -+#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_UB_MAX (0x3ff << 10) -+#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_VR_MAX (0x3ff << 20) ++#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_YG_MAX (0x3ff << 0) ++#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_UB_MAX (0x3ff << 10) ++#define m_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_VR_MAX (0x3ff << 20) + -+#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_YG_MAX(x) ((x & 0x3ff) << 0) -+#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_UB_MAX(x) ((x & 0x3ff) << 10) -+#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_VR_MAX(x) ((x & 0x3ff) << 20) ++#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_YG_MAX(x) ((x & 0x3ff) << 0) ++#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_UB_MAX(x) ((x & 0x3ff) << 10) ++#define s_RGA3_OVLP_TOP_KEY_MAX_SW_TOP_KEY_VR_MAX(x) ((x & 0x3ff) << 20) + +/* RGA3_OVLP_TOP_CTRL */ +#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_COLOR_M0 (0x1 << 0) +#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_M0 (0x1 << 1) +#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_BLEND_M0 (0x3 << 2) +#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_CAL_M0 (0x1 << 4) -+#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_FACTOR_M0 (0x7 << 5) ++#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_FACTOR_M0 (0x7 << 5) +#define m_RGA3_OVLP_TOP_CTRL_SW_TOP_GLOBAL_ALPHA (0xff << 16) + -+#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_COLOR_M0(x) ((x & 0x1) << 0) -+#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_M0(x) ((x & 0x1) << 1) -+#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_BLEND_M0(x) ((x & 0x3) << 2) -+#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_CAL_M0(x) ((x & 0x1) << 4) ++#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_COLOR_M0(x) ((x & 0x1) << 0) ++#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_M0(x) ((x & 0x1) << 1) ++#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_BLEND_M0(x) ((x & 0x3) << 2) ++#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_CAL_M0(x) ((x & 0x1) << 4) +#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_FACTOR_M0(x) ((x & 0x7) << 5) -+#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_GLOBAL_ALPHA(x) ((x & 0xff) << 16) ++#define s_RGA3_OVLP_TOP_CTRL_SW_TOP_GLOBAL_ALPHA(x) ((x & 0xff) << 16) + +/* RGA3_OVLP_BOT_CTRL */ +#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_COLOR_M0 (0x1 << 0) +#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_M0 (0x1 << 1) +#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_BLEND_M0 (0x3 << 2) +#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_CAL_M0 (0x1 << 4) -+#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_FACTOR_M0 (0x7 << 5) ++#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_FACTOR_M0 (0x7 << 5) +#define m_RGA3_OVLP_BOT_CTRL_SW_BOT_GLOBAL_ALPHA (0xff << 16) + -+#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_COLOR_M0(x) ((x & 0x1) << 0) -+#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_M0(x) ((x & 0x1) << 1) -+#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_BLEND_M0(x) ((x & 0x3) << 2) -+#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_CAL_M0(x) ((x & 0x1) << 4) ++#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_COLOR_M0(x) ((x & 0x1) << 0) ++#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_M0(x) ((x & 0x1) << 1) ++#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_BLEND_M0(x) ((x & 0x3) << 2) ++#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_CAL_M0(x) ((x & 0x1) << 4) +#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_FACTOR_M0(x) ((x & 0x7) << 5) -+#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_GLOBAL_ALPHA(x) ((x & 0xff) << 16) ++#define s_RGA3_OVLP_BOT_CTRL_SW_BOT_GLOBAL_ALPHA(x) ((x & 0xff) << 16) + +/* RGA3_OVLP_TOP_ALPHA */ -+#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_M1 (0x1 << 1) -+#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_BLEND_M1 (0x3 << 2) -+#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1 (0x1 << 4) -+#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1 (0x7 << 5) ++#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_M1 (0x1 << 1) ++#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_BLEND_M1 (0x3 << 2) ++#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1 (0x1 << 4) ++#define m_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1 (0x7 << 5) + +#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_M1(x) ((x & 0x1) << 1) +#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_BLEND_M1(x) ((x & 0x3) << 2) -+#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1(x) ((x & 0x1) << 4) -+#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1(x) ((x & 0x7) << 5) ++#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1(x) ((x & 0x1) << 4) ++#define s_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1(x) ((x & 0x7) << 5) + +/* RGA3_OVLP_BOT_ALPHA */ -+#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_M1 (0x1 << 1) -+#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_BLEND_M1 (0x3 << 2) -+#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1 (0x1 << 4) -+#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1 (0x7 << 5) ++#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_M1 (0x1 << 1) ++#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_BLEND_M1 (0x3 << 2) ++#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1 (0x1 << 4) ++#define m_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1 (0x7 << 5) + +#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_M1(x) ((x & 0x1) << 1) +#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_BLEND_M1(x) ((x & 0x3) << 2) -+#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1(x) ((x & 0x1) << 4) -+#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1(x) ((x & 0x7) << 5) ++#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1(x) ((x & 0x1) << 4) ++#define s_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1(x) ((x & 0x7) << 5) + +/* RGA3_WR_CTRL */ -+#define m_RGA3_WR_CTRL_SW_WR_MODE (0x3 << 0) -+#define m_RGA3_WR_CTRL_SW_WR_FBCE_SPARSE_EN (0x1 << 2) -+#define m_RGA3_WR_CTRL_SW_WR_PIC_FORMAT (0xf << 4) ++#define m_RGA3_WR_CTRL_SW_WR_MODE (0x3 << 0) ++#define m_RGA3_WR_CTRL_SW_WR_FBCE_SPARSE_EN (0x1 << 2) ++#define m_RGA3_WR_CTRL_SW_WR_PIC_FORMAT (0xf << 4) +#define m_RGA3_WR_CTRL_SW_WR_FORMAT (0x3 << 8) -+#define m_RGA3_WR_CTRL_SW_WR_YUV10B_COMPACT (0x1 << 10) -+#define m_RGA3_WR_CTRL_SW_WR_ENDIAN_MODE (0x1 << 11) -+#define m_RGA3_WR_CTRL_SW_WR_PIX_SWAP (0x1 << 12) -+#define m_RGA3_WR_CTRL_SW_OUTSTANDING_MAX (0x3f << 13) -+#define m_RGA3_WR_CTRL_SW_WR_YC_SWAP (0x1 << 20) -+ -+#define s_RGA3_WR_CTRL_SW_WR_MODE(x) ((x & 0x3) << 0) -+#define s_RGA3_WR_CTRL_SW_WR_FBCE_SPARSE_EN(x) ((x & 0x1) << 2) -+#define s_RGA3_WR_CTRL_SW_WR_PIC_FORMAT(x) ((x & 0xf) << 4) -+#define s_RGA3_WR_CTRL_SW_WR_FORMAT(x) ((x & 0x3) << 8) -+#define s_RGA3_WR_CTRL_SW_WR_YUV10B_COMPACT(x) ((x & 0x1) << 10) -+#define s_RGA3_WR_CTRL_SW_WR_ENDIAN_MODE(x) ((x & 0x1) << 11) -+#define s_RGA3_WR_CTRL_SW_WR_PIX_SWAP(x) ((x & 0x1) << 12) -+#define s_RGA3_WR_CTRL_SW_OUTSTANDING_MAX(x) ((x & 0x3f) << 13) -+#define s_RGA3_WR_CTRL_SW_WR_YC_SWAP(x) ((x & 0x1) << 20) ++#define m_RGA3_WR_CTRL_SW_WR_YUV10B_COMPACT (0x1 << 10) ++#define m_RGA3_WR_CTRL_SW_WR_ENDIAN_MODE (0x1 << 11) ++#define m_RGA3_WR_CTRL_SW_WR_PIX_SWAP (0x1 << 12) ++#define m_RGA3_WR_CTRL_SW_OUTSTANDING_MAX (0x3f << 13) ++#define m_RGA3_WR_CTRL_SW_WR_YC_SWAP (0x1 << 20) ++ ++#define s_RGA3_WR_CTRL_SW_WR_MODE(x) ((x & 0x3) << 0) ++#define s_RGA3_WR_CTRL_SW_WR_FBCE_SPARSE_EN(x) ((x & 0x1) << 2) ++#define s_RGA3_WR_CTRL_SW_WR_PIC_FORMAT(x) ((x & 0xf) << 4) ++#define s_RGA3_WR_CTRL_SW_WR_FORMAT(x) ((x & 0x3) << 8) ++#define s_RGA3_WR_CTRL_SW_WR_YUV10B_COMPACT(x) ((x & 0x1) << 10) ++#define s_RGA3_WR_CTRL_SW_WR_ENDIAN_MODE(x) ((x & 0x1) << 11) ++#define s_RGA3_WR_CTRL_SW_WR_PIX_SWAP(x) ((x & 0x1) << 12) ++#define s_RGA3_WR_CTRL_SW_OUTSTANDING_MAX(x) ((x & 0x3f) << 13) ++#define s_RGA3_WR_CTRL_SW_WR_YC_SWAP(x) ((x & 0x1) << 20) + +/* RGA3_WR_FBCE_CTRL */ -+#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_BLKBD_OPT_DIS (0x1 << 0) ++#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_BLKBD_OPT_DIS (0x1 << 0) +#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_HOFF_DISS (0x1 << 1) -+#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO0_WATERMARK (0x3f << 2) -+#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO1_WATERMARK (0x3f << 8) -+#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_SIZE_ALIGN_DIS (0x1 << 31) ++#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO0_WATERMARK (0x3f << 2) ++#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO1_WATERMARK (0x3f << 8) ++#define m_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_SIZE_ALIGN_DIS (0x1 << 31) + -+#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_BLKBD_OPT_DIS(x) ((x & 0x1) << 0) ++#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_BLKBD_OPT_DIS(x) ((x & 0x1) << 0) +#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_HOFF_DISS(x) ((x & 0x1) << 1) -+#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO0_WATERMARK(x) ((x & 0x3f) << 2) -+#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO1_WATERMARK(x) ((x & 0x3f) << 8) -+#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_SIZE_ALIGN_DIS(x) ((x & 0x1) << 31) ++#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO0_WATERMARK(x) ((x & 0x3f) << 2) ++#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_PL_FIFO1_WATERMARK(x) ((x & 0x3f) << 8) ++#define s_RGA3_WR_FBCE_CTRL_SW_WR_FBCE_SIZE_ALIGN_DIS(x) ((x & 0x1) << 31) + +/* RGA3_MMU_STATUS read_only */ -+#define m_RGA3_MMU_STATUS_PAGING_ENABLED (0x1 << 0) -+#define m_RGA3_MMU_STATUS_PAGE_FAULT_ACTIVE (0x1 << 1) -+#define m_RGA3_MMU_STATUS_STAIL_ACTIVE (0x1 << 2) -+#define m_RGA3_MMU_STATUS_MMU_IDLE (0x1 << 3) -+#define m_RGA3_MMU_STATUS_REPLAY_BUFFER_EMPTY (0x1 << 4) -+#define m_RGA3_MMU_STATUS_PAGE_FAULT_IS_WRITE (0x1 << 5) -+#define m_RGA3_MMU_STATUS_PAGE_FAULT_BUS_ID (0x1f << 6) ++#define m_RGA3_MMU_STATUS_PAGING_ENABLED (0x1 << 0) ++#define m_RGA3_MMU_STATUS_PAGE_FAULT_ACTIVE (0x1 << 1) ++#define m_RGA3_MMU_STATUS_STAIL_ACTIVE (0x1 << 2) ++#define m_RGA3_MMU_STATUS_MMU_IDLE (0x1 << 3) ++#define m_RGA3_MMU_STATUS_REPLAY_BUFFER_EMPTY (0x1 << 4) ++#define m_RGA3_MMU_STATUS_PAGE_FAULT_IS_WRITE (0x1 << 5) ++#define m_RGA3_MMU_STATUS_PAGE_FAULT_BUS_ID (0x1f << 6) + +/* RGA3_MMU_INT_RAWSTAT read_only */ -+#define m_RGA3_MMU_INT_RAWSTAT_READ_BUS_ERROR (0x1 << 0) -+#define m_RGA3_MMU_INT_RAWSTAT_PAGE_FAULT (0x1 << 1) ++#define m_RGA3_MMU_INT_RAWSTAT_READ_BUS_ERROR (0x1 << 0) ++#define m_RGA3_MMU_INT_RAWSTAT_PAGE_FAULT (0x1 << 1) + +/* RGA3_MMU_INT_CLEAR write_only */ -+#define m_RGA3_MMU_INT_CLEAR_READ_BUS_ERROR (0x1 << 0) -+#define m_RGA3_MMU_INT_CLEAR_PAGE_FAULT (0x1 << 1) ++#define m_RGA3_MMU_INT_CLEAR_READ_BUS_ERROR (0x1 << 0) ++#define m_RGA3_MMU_INT_CLEAR_PAGE_FAULT (0x1 << 1) + -+#define s_RGA3_MMU_INT_CLEAR_READ_BUS_ERROR(x) ((x & 0x1) << 0) -+#define s_RGA3_MMU_INT_CLEAR_PAGE_FAULT(x) ((x & 0x1) << 1) ++#define s_RGA3_MMU_INT_CLEAR_READ_BUS_ERROR(x) ((x & 0x1) << 0) ++#define s_RGA3_MMU_INT_CLEAR_PAGE_FAULT(x) ((x & 0x1) << 1) + +/* RGA3_MMU_INT_MASK */ -+#define m_RGA3_MMU_INT_MASK_READ_BUS_ERROR (0x1 << 0) -+#define m_RGA3_MMU_INT_MASK_PAGE_FAULT (0x1 << 1) ++#define m_RGA3_MMU_INT_MASK_READ_BUS_ERROR (0x1 << 0) ++#define m_RGA3_MMU_INT_MASK_PAGE_FAULT (0x1 << 1) + -+#define s_RGA3_MMU_INT_MASK_READ_BUS_ERROR(x) ((x & 0x1) << 0) -+#define s_RGA3_MMU_INT_MASK_PAGE_FAULT(x) ((x & 0x1) << 1) ++#define s_RGA3_MMU_INT_MASK_READ_BUS_ERROR(x) ((x & 0x1) << 0) ++#define s_RGA3_MMU_INT_MASK_PAGE_FAULT(x) ((x & 0x1) << 1) + +/* RGA3_MMU_INT_STATUS read_only */ -+#define m_RGA3_MMU_INT_STATUS_READ_BUS_ERROR (0x1 << 0) ++#define m_RGA3_MMU_INT_STATUS_READ_BUS_ERROR (0x1 << 0) +#define m_RGA3_MMU_INT_STATUS_PAGE_FAULT (0x1 << 1) + +/* RGA3_MMU_AUTO_GATING */ -+#define m_RGA3_MMU_AUTO_GATING_MMU_AUTO_GATING (0x1 << 1) -+#define m_RGA3_MMU_AUTO_GATING_MMU_CFG_MODE (0x1 << 1) -+#define m_RGA3_MMU_AUTO_GATING_MMU_BUG_FIXED_DISABLE (0x1 << 31) -+ -+#define s_RGA3_MMU_AUTO_GATING_MMU_AUTO_GATING(x) ((x & 0x1) << 1) -+#define s_RGA3_MMU_AUTO_GATING_MMU_BUG_FIXED_DISABLE(x) ((x & 0x1) << 31) -+ -+#define RGA3_ROT_BIT_ROT_90 BIT(0) -+#define RGA3_ROT_BIT_X_MIRROR BIT(1) -+#define RGA3_ROT_BIT_Y_MIRROR BIT(2) -+ -+union rga3_color_ctrl { -+ uint32_t value; -+ struct { -+ uint32_t color_mode:1; -+ uint32_t alpha_mode:1; -+ uint32_t blend_mode:2; -+ uint32_t alpha_cal_mode:1; -+ uint32_t factor_mode:3; -+ -+ uint32_t reserved:8; -+ -+ uint32_t global_alpha:8; -+ } bits; -+}; -+ -+union rga3_alpha_ctrl { -+ uint32_t value; -+ struct { -+ uint32_t reserved:1; -+ uint32_t alpha_mode:1; -+ uint32_t blend_mode:2; -+ uint32_t alpha_cal_mode:1; -+ uint32_t factor_mode:3; -+ } bits; -+}; -+ -+extern const struct rga_backend_ops rga3_ops; ++#define m_RGA3_MMU_AUTO_GATING_MMU_AUTO_GATING (0x1 << 1) ++#define m_RGA3_MMU_AUTO_GATING_MMU_CFG_MODE (0x1 << 1) ++#define m_RGA3_MMU_AUTO_GATING_MMU_BUG_FIXED_DISABLE (0x1 << 31) ++ ++#define s_RGA3_MMU_AUTO_GATING_MMU_AUTO_GATING(x) ((x & 0x1) << 1) ++#define s_RGA3_MMU_AUTO_GATING_MMU_BUG_FIXED_DISABLE(x) ((x & 0x1) << 31) ++ ++/* sys_reg */ ++#define RGA3_SYS_CTRL_OFFSET 0x000 ++#define RGA3_CMD_CTRL_OFFSET 0x004 ++#define RGA3_CMD_ADDR_OFFSET 0x008 ++#define RGA3_MI_GROUP_CTRL_OFFSET 0x00c ++#define RGA3_ARQOS_CTRL_OFFSET 0x010 ++#define RGA3_VERSION_NUM_OFFSET 0x018 ++#define RGA3_VERSION_TIM_OFFSET 0x01c ++#define RGA3_INT_EN_OFFSET 0x020 ++#define RGA3_INT_RAW_OFFSET 0x024 ++#define RGA3_INT_MSK_OFFSET 0x028 ++#define RGA3_INT_CLR_OFFSET 0x02c ++#define RGA3_RO_SRST_OFFSET 0x030 ++#define RGA3_STATUS0_OFFSET 0x034 ++#define RGA3_SCAN_CNT_OFFSET 0x038 ++#define RGA3_STATUS1_OFFSET 0x03c ++#define RGA3_CMD_STATE_OFFSET 0x040 ++ ++/* op_reg */ ++#define RGA3_WIN0_RD_CTRL_OFFSET 0x000 ++#define RGA3_WIN0_Y_BASE_OFFSET 0x010 ++#define RGA3_WIN0_U_BASE_OFFSET 0x014 ++#define RGA3_WIN0_V_BASE_OFFSET 0x018 ++#define RGA3_WIN0_VIR_STRIDE_OFFSET 0x01c ++#define RGA3_WIN0_FBC_OFF_OFFSET 0x020 ++#define RGA3_WIN0_SRC_SIZE_OFFSET 0x024 ++#define RGA3_WIN0_ACT_OFF_OFFSET 0x028 ++#define RGA3_WIN0_ACT_SIZE_OFFSET 0x02c ++#define RGA3_WIN0_DST_SIZE_OFFSET 0x030 ++#define RGA3_WIN0_SCL_FAC_OFFSET 0x034 ++#define RGA3_WIN0_UV_VIR_STRIDE_OFFSET 0x038 ++#define RGA3_WIN1_RD_CTRL_OFFSET 0x040 ++#define RGA3_WIN1_Y_BASE_OFFSET 0x050 ++#define RGA3_WIN1_U_BASE_OFFSET 0x054 ++#define RGA3_WIN1_V_BASE_OFFSET 0x058 ++#define RGA3_WIN1_VIR_STRIDE_OFFSET 0x05c ++#define RGA3_WIN1_FBC_OFF_OFFSET 0x060 ++#define RGA3_WIN1_SRC_SIZE_OFFSET 0x064 ++#define RGA3_WIN1_ACT_OFF_OFFSET 0x068 ++#define RGA3_WIN1_ACT_SIZE_OFFSET 0x06c ++#define RGA3_WIN1_DST_SIZE_OFFSET 0x070 ++#define RGA3_WIN1_SCL_FAC_OFFSET 0x074 ++#define RGA3_WIN1_UV_VIR_STRIDE_OFFSET 0x078 ++#define RGA3_OVLP_CTRL_OFFSET 0x080 ++#define RGA3_OVLP_OFF_OFFSET 0x084 ++#define RGA3_OVLP_TOP_KEY_MIN_OFFSET 0x088 ++#define RGA3_OVLP_TOP_KEY_MAX_OFFSET 0x08c ++#define RGA3_OVLP_TOP_CTRL_OFFSET 0x090 ++#define RGA3_OVLP_BOT_CTRL_OFFSET 0x094 ++#define RGA3_OVLP_TOP_ALPHA_OFFSET 0x098 ++#define RGA3_OVLP_BOT_ALPHA_OFFSET 0x09c ++#define RGA3_WR_CTRL_OFFSET 0x0a0 ++#define RGA3_WR_FBCE_CTRL_OFFSET 0x0a4 ++#define RGA3_WR_VIR_STRIDE_OFFSET 0x0a8 ++#define RGA3_WR_PL_VIR_STRIDE_OFFSET 0x0ac ++#define RGA3_WR_Y_BASE_OFFSET 0x0b0 ++#define RGA3_WR_U_BASE_OFFSET 0x0b4 ++#define RGA3_WR_V_BASE_OFFSET 0x0b8 ++#define RGA3_MMU_DTE_ADDR_OFFSET 0x0f00 ++#define RGA3_MMU_STATUS_OFFSET 0x0f04 ++#define RGA3_MMU_COMMAND_OFFSET 0x0f08 ++#define RGA3_MMU_PAGE_FAULT_ADDR_OFFSET 0x0f0c ++#define RGA3_MMU_ZAP_ONE_LINE_OFFSET 0x0f10 ++#define RGA3_MMU_INT_RAWSTAT_OFFSET 0x0f14 ++#define RGA3_MMU_INT_CLEAR_OFFSET 0x0f18 ++#define RGA3_MMU_INT_MASK_OFFSET 0x0f1c ++#define RGA3_MMU_INT_STATUS_OFFSET 0x0f20 ++#define RGA3_MMU_AUTO_GATING_OFFSET 0x0f24 ++#define RGA3_MMU_REG_LOAD_EN_OFFSET 0x0f28 ++ ++#define RGA3_ROT_BIT_ROT_90 BIT(0) ++#define RGA3_ROT_BIT_X_MIRROR BIT(1) ++#define RGA3_ROT_BIT_Y_MIRROR BIT(2) ++ ++int rga3_gen_reg_info(unsigned char *base, struct rga3_req *msg); ++void rga_cmd_to_rga3_cmd(struct rga_req *req_rga, struct rga3_req *req); ++//void RGA_MSG_2_RGA3_MSG_32(struct rga_req_32 *req_rga, struct rga3_req *req); ++ ++void rga3_soft_reset(struct rga_scheduler_t *scheduler); ++int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler); ++int rga3_init_reg(struct rga_job *job); ++int rga3_get_version(struct rga_scheduler_t *scheduler); + +#endif + diff --git a/drivers/video/rockchip/rga3/include/rga_common.h b/drivers/video/rockchip/rga3/include/rga_common.h -new file mode 100644 -index 000000000000..32e83cc9c9f9 +new file mode 100755 +index 000000000..addd4cb7a --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_common.h -@@ -0,0 +1,49 @@ +@@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1681871,11 +1681734,7 @@ index 000000000000..32e83cc9c9f9 +bool rga_is_yuv_format(uint32_t format); +bool rga_is_alpha_format(uint32_t format); +bool rga_is_yuv420_packed_format(uint32_t format); -+bool rga_is_yuv420_planar_format(uint32_t format); -+bool rga_is_yuv420_semi_planar_format(uint32_t format); +bool rga_is_yuv422_packed_format(uint32_t format); -+bool rga_is_yuv422_planar_format(uint32_t format); -+bool rga_is_yuv422_semi_planar_format(uint32_t format); +bool rga_is_yuv8bit_format(uint32_t format); +bool rga_is_yuv10bit_format(uint32_t format); +bool rga_is_yuv422p_format(uint32_t format); @@ -1681887,25 +1681746,24 @@ index 000000000000..32e83cc9c9f9 +const char *rga_get_format_name(uint32_t format); +const char *rga_get_render_mode_str(uint8_t mode); +const char *rga_get_rotate_mode_str(uint8_t mode); -+const char *rga_get_blend_mode_str(enum rga_alpha_blend_mode mode); ++const char *rga_get_blend_mode_str(uint16_t alpha_rop_flag, ++ uint16_t alpha_mode_0, ++ uint16_t alpha_mode_1); +const char *rga_get_memory_type_str(uint8_t type); +const char *rga_get_mmu_type_str(enum rga_mmu mmu_type); -+const char *rga_get_core_name(enum RGA_SCHEDULER_CORE core); + +void rga_convert_addr(struct rga_img_info_t *img, bool before_vir_get_channel); +void rga_swap_pd_mode(struct rga_req *req_rga); +int rga_image_size_cal(int w, int h, int format, + int *yrgb_size, int *uv_size, int *v_size); -+void rga_dump_memory_parm(struct rga_memory_parm *parm); -+void rga_dump_external_buffer(struct rga_external_buffer *buffer); + +#endif diff --git a/drivers/video/rockchip/rga3/include/rga_debugger.h b/drivers/video/rockchip/rga3/include/rga_debugger.h -new file mode 100644 -index 000000000000..c274fe87f070 +new file mode 100755 +index 000000000..05d5f6966 --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_debugger.h -@@ -0,0 +1,145 @@ +@@ -0,0 +1,146 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1682041,6 +1681899,7 @@ index 000000000000..c274fe87f070 + +void rga_cmd_print_debug_info(struct rga_req *req); +void rga_request_task_debug_info(struct seq_file *m, struct rga_req *req); ++void rga_dump_external_buffer(struct rga_external_buffer *buffer); +#ifdef CONFIG_NO_GKI +void rga_dump_job_image(struct rga_job *dump_job); +#else @@ -1682052,8 +1681911,8 @@ index 000000000000..c274fe87f070 +#endif /* #ifndef _RGA_DEBUGGER_H_ */ + diff --git a/drivers/video/rockchip/rga3/include/rga_dma_buf.h b/drivers/video/rockchip/rga3/include/rga_dma_buf.h -new file mode 100644 -index 000000000000..2ff0857a66a9 +new file mode 100755 +index 000000000..2ff0857a6 --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_dma_buf.h @@ -0,0 +1,46 @@ @@ -1682104,11 +1681963,11 @@ index 000000000000..2ff0857a66a9 +#endif /* #ifndef __RGA3_DMA_BUF_H__ */ + diff --git a/drivers/video/rockchip/rga3/include/rga_drv.h b/drivers/video/rockchip/rga3/include/rga_drv.h -new file mode 100644 -index 000000000000..e9743a40327b +new file mode 100755 +index 000000000..7f94456bc --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_drv.h -@@ -0,0 +1,463 @@ +@@ -0,0 +1,443 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1682127,7 +1681986,6 @@ index 000000000000..e9743a40327b +#include +#include +#include -+#include +#include +#include +#include @@ -1682160,6 +1682018,7 @@ index 000000000000..e9743a40327b + +#include +#include ++#include +#include + +#ifdef CONFIG_DMABUF_CACHE @@ -1682197,8 +1682056,8 @@ index 000000000000..e9743a40327b +#define STR(x) STR_HELPER(x) + +#define DRIVER_MAJOR_VERISON 1 -+#define DRIVER_MINOR_VERSION 3 -+#define DRIVER_REVISION_VERSION 1 ++#define DRIVER_MINOR_VERSION 2 ++#define DRIVER_REVISION_VERSION 20 +#define DRIVER_PATCH_VERSION + +#define DRIVER_VERSION (STR(DRIVER_MAJOR_VERISON) "." STR(DRIVER_MINOR_VERSION) \ @@ -1682208,7 +1682067,7 @@ index 000000000000..e9743a40327b +#define RGA_JOB_TIMEOUT_DELAY HZ +#define RGA_RESET_TIMEOUT 1000 + -+#define RGA_MAX_SCHEDULER RGA_HW_SIZE ++#define RGA_MAX_SCHEDULER 3 +#define RGA_MAX_BUS_CLK 10 + +#define RGA_BUFFER_POOL_MAX_SIZE 64 @@ -1682248,17 +1682107,6 @@ index 000000000000..e9743a40327b + RGA_SCHEDULER_ABORT, +}; + -+enum rga_job_state { -+ RGA_JOB_STATE_PENDING = 0, -+ RGA_JOB_STATE_PREPARE, -+ RGA_JOB_STATE_RUNNING, -+ RGA_JOB_STATE_FINISH, -+ RGA_JOB_STATE_DONE, -+ RGA_JOB_STATE_INTR_ERR, -+ RGA_JOB_STATE_HW_TIMEOUT, -+ RGA_JOB_STATE_ABORT, -+}; -+ +struct rga_iommu_dma_cookie { + enum iommu_dma_cookie_type type; + @@ -1682383,7 +1682231,6 @@ index 000000000000..e9743a40327b + struct rga_req rga_command_base; + uint32_t cmd_reg[32 * 8]; + struct rga_full_csc full_csc; -+ struct rga_csc_clip full_csc_clip; + struct rga_pre_intr_info pre_intr_info; + + struct rga_job_buffer src_buffer; @@ -1682408,12 +1682255,6 @@ index 000000000000..e9743a40327b + int ret; + pid_t pid; + bool use_batch_mode; -+ -+ struct kref refcount; -+ unsigned long state; -+ uint32_t intr_status; -+ uint32_t hw_status; -+ uint32_t cmd_status; +}; + +struct rga_backend_ops { @@ -1682421,9 +1682262,6 @@ index 000000000000..e9743a40327b + int (*set_reg)(struct rga_job *job, struct rga_scheduler_t *scheduler); + int (*init_reg)(struct rga_job *job); + void (*soft_reset)(struct rga_scheduler_t *scheduler); -+ int (*read_back_reg)(struct rga_job *job, struct rga_scheduler_t *scheduler); -+ int (*irq)(struct rga_scheduler_t *scheduler); -+ int (*isr_thread)(struct rga_job *job, struct rga_scheduler_t *scheduler); +}; + +struct rga_timer { @@ -1682491,7 +1682329,6 @@ index 000000000000..e9743a40327b + */ + struct mm_struct *current_mm; + -+ struct rga_feature feature; + /* TODO: add some common work */ +}; + @@ -1682554,6 +1682391,8 @@ index 000000000000..e9743a40327b +struct rga_match_data_t { + const char * const *clks; + int num_clks; ++ const struct rga_irqs_data_t *irqs; ++ int num_irqs; +}; + +static inline int rga_read(int offset, struct rga_scheduler_t *scheduler) @@ -1682573,8 +1682412,8 @@ index 000000000000..e9743a40327b + +#endif /* __LINUX_RGA_FENCE_H_ */ diff --git a/drivers/video/rockchip/rga3/include/rga_fence.h b/drivers/video/rockchip/rga3/include/rga_fence.h -new file mode 100644 -index 000000000000..7e3bbeebbc3a +new file mode 100755 +index 000000000..7e3bbeebb --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_fence.h @@ -0,0 +1,101 @@ @@ -1682680,11 +1682519,11 @@ index 000000000000..7e3bbeebbc3a + +#endif /* __LINUX_RGA_FENCE_H_ */ diff --git a/drivers/video/rockchip/rga3/include/rga_hw_config.h b/drivers/video/rockchip/rga3/include/rga_hw_config.h -new file mode 100644 -index 000000000000..46f7531aa88f +new file mode 100755 +index 000000000..ae5c53d23 --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_hw_config.h -@@ -0,0 +1,81 @@ +@@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1682703,22 +1682542,20 @@ index 000000000000..46f7531aa88f + RGA_IOMMU = 2, +}; + -+enum rga_hw_support_format_index { -+ RGA_RASTER_INDEX, -+ RGA_AFBC16x16_INDEX, -+ RGA_TILE8x8_INDEX, -+ RGA_FORMAT_INDEX_BUTT, -+}; -+ +struct rga_win_data { + const char *name; -+ const uint32_t *formats[RGA_FORMAT_INDEX_BUTT]; -+ uint32_t formats_count[RGA_FORMAT_INDEX_BUTT]; ++ const uint32_t *raster_formats; ++ const uint32_t *fbc_formats; ++ const uint32_t *tile_formats; ++ uint32_t num_of_raster_formats; ++ uint32_t num_of_fbc_formats; ++ uint32_t num_of_tile_formats; ++ ++ const unsigned int supported_rotations; ++ const unsigned int scale_up_mode; ++ const unsigned int scale_down_mode; ++ const unsigned int rd_mode; + -+ uint32_t supported_rotations; -+ uint32_t scale_up_mode; -+ uint32_t scale_down_mode; -+ uint32_t rd_mode; +}; + +struct rga_rect { @@ -1682756,7 +1682593,6 @@ index 000000000000..46f7531aa88f +extern const struct rga_hw_data rga3_data; +extern const struct rga_hw_data rga2e_data; +extern const struct rga_hw_data rga2e_1106_data; -+extern const struct rga_hw_data rga2e_iommu_data; + +/* Returns false if in range, true otherwise */ +static inline bool rga_hw_out_of_range(const struct rga_rect_range *range, int width, int height) @@ -1682767,53 +1682603,17 @@ index 000000000000..46f7531aa88f + +#endif /* __LINUX_RGA_HW_CONFIG_H_ */ diff --git a/drivers/video/rockchip/rga3/include/rga_iommu.h b/drivers/video/rockchip/rga3/include/rga_iommu.h -new file mode 100644 -index 000000000000..b80a1f48bb25 +new file mode 100755 +index 000000000..fd37377a7 --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_iommu.h -@@ -0,0 +1,79 @@ +@@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __RGA_MMU_INFO_H__ +#define __RGA_MMU_INFO_H__ + +#include "rga_drv.h" + -+/* RGA_IOMMU register offsets */ -+#define RGA_IOMMU_BASE 0xf00 -+#define RGA_IOMMU_DTE_ADDR (RGA_IOMMU_BASE + 0x00) /* Directory table address */ -+#define RGA_IOMMU_STATUS (RGA_IOMMU_BASE + 0x04) -+#define RGA_IOMMU_COMMAND (RGA_IOMMU_BASE + 0x08) -+#define RGA_IOMMU_PAGE_FAULT_ADDR (RGA_IOMMU_BASE + 0x0C) /* IOVA of last page fault */ -+#define RGA_IOMMU_ZAP_ONE_LINE (RGA_IOMMU_BASE + 0x10) /* Shootdown one IOTLB entry */ -+#define RGA_IOMMU_INT_RAWSTAT (RGA_IOMMU_BASE + 0x14) /* IRQ status ignoring mask */ -+#define RGA_IOMMU_INT_CLEAR (RGA_IOMMU_BASE + 0x18) /* Acknowledge and re-arm irq */ -+#define RGA_IOMMU_INT_MASK (RGA_IOMMU_BASE + 0x1C) /* IRQ enable */ -+#define RGA_IOMMU_INT_STATUS (RGA_IOMMU_BASE + 0x20) /* IRQ status after masking */ -+#define RGA_IOMMU_AUTO_GATING (RGA_IOMMU_BASE + 0x24) -+ -+/* RGA_IOMMU_STATUS fields */ -+#define RGA_IOMMU_STATUS_PAGING_ENABLED BIT(0) -+#define RGA_IOMMU_STATUS_PAGE_FAULT_ACTIVE BIT(1) -+#define RGA_IOMMU_STATUS_STALL_ACTIVE BIT(2) -+#define RGA_IOMMU_STATUS_IDLE BIT(3) -+#define RGA_IOMMU_STATUS_REPLAY_BUFFER_EMPTY BIT(4) -+#define RGA_IOMMU_STATUS_PAGE_FAULT_IS_WRITE BIT(5) -+#define RGA_IOMMU_STATUS_STALL_NOT_ACTIVE BIT(31) -+ -+/* RGA_IOMMU_COMMAND command values */ -+#define RGA_IOMMU_CMD_ENABLE_PAGING 0 /* Enable memory translation */ -+#define RGA_IOMMU_CMD_DISABLE_PAGING 1 /* Disable memory translation */ -+#define RGA_IOMMU_CMD_ENABLE_STALL 2 /* Stall paging to allow other cmds */ -+#define RGA_IOMMU_CMD_DISABLE_STALL 3 /* Stop stall re-enables paging */ -+#define RGA_IOMMU_CMD_ZAP_CACHE 4 /* Shoot down entire IOTLB */ -+#define RGA_IOMMU_CMD_PAGE_FAULT_DONE 5 /* Clear page fault */ -+#define RGA_IOMMU_CMD_FORCE_RESET 6 /* Reset all registers */ -+ -+/* RGA_IOMMU_INT_* register fields */ -+#define RGA_IOMMU_IRQ_PAGE_FAULT 0x01 /* page fault */ -+#define RGA_IOMMU_IRQ_BUS_ERROR 0x02 /* bus read error */ -+#define RGA_IOMMU_IRQ_MASK (RGA_IOMMU_IRQ_PAGE_FAULT | RGA_IOMMU_IRQ_BUS_ERROR) -+ +/* + * The maximum input is 8192*8192, the maximum output is 4096*4096 + * The size of physical pages requested is: @@ -1682852,11 +1682652,11 @@ index 000000000000..b80a1f48bb25 +#endif + diff --git a/drivers/video/rockchip/rga3/include/rga_job.h b/drivers/video/rockchip/rga3/include/rga_job.h -new file mode 100644 -index 000000000000..0fc776173f16 +new file mode 100755 +index 000000000..214472e31 --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_job.h -@@ -0,0 +1,53 @@ +@@ -0,0 +1,61 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1682880,9 +1682680,12 @@ index 000000000000..0fc776173f16 + RGA_JOB_UNSUPPORT_RGA_MMU = 1 << 4, +}; + ++struct rga_scheduler_t *rga_job_get_scheduler(struct rga_job *job); ++ ++void rga_job_session_destroy(struct rga_session *session); ++ +void rga_job_scheduler_dump_info(struct rga_scheduler_t *scheduler); -+void rga_job_next(struct rga_scheduler_t *scheduler); -+struct rga_job *rga_job_done(struct rga_scheduler_t *scheduler); ++void rga_job_done(struct rga_scheduler_t *scheduler, int ret); +struct rga_job *rga_job_commit(struct rga_req *rga_command_base, struct rga_request *request); +int rga_job_mpi_commit(struct rga_req *rga_command_base, struct rga_request *request); + @@ -1682894,7 +1682697,6 @@ index 000000000000..0fc776173f16 + uint32_t id); + +int rga_request_commit(struct rga_request *user_request); -+void rga_request_session_destroy_abort(struct rga_session *session); +int rga_request_put(struct rga_request *request); +void rga_request_get(struct rga_request *request); +int rga_request_free(struct rga_request *request); @@ -1682909,13 +1682711,19 @@ index 000000000000..0fc776173f16 +int rga_request_manager_init(struct rga_pending_request_manager **request_manager_session); +int rga_request_manager_remove(struct rga_pending_request_manager **request_manager_session); + ++struct rga_job * ++rga_scheduler_get_pending_job_list(struct rga_scheduler_t *scheduler); ++ ++struct rga_job * ++rga_scheduler_get_running_job(struct rga_scheduler_t *scheduler); ++ +#endif /* __LINUX_RKRGA_JOB_H_ */ diff --git a/drivers/video/rockchip/rga3/include/rga_mm.h b/drivers/video/rockchip/rga3/include/rga_mm.h -new file mode 100644 -index 000000000000..d68fd75dcb45 +new file mode 100755 +index 000000000..3c2761507 --- /dev/null +++ b/drivers/video/rockchip/rga3/include/rga_mm.h -@@ -0,0 +1,67 @@ +@@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1682936,8 +1682744,6 @@ index 000000000000..d68fd75dcb45 + RGA_MEM_NEED_USE_IOMMU = 1 << 1, + /* Flag this is a physical contiguous memory. */ + RGA_MEM_PHYSICAL_CONTIGUOUS = 1 << 2, -+ /* need force flush cache */ -+ RGA_MEM_FORCE_FLUSH_CACHE = 1 << 3, +}; + +struct rga_mm { @@ -1682974,8 +1682780,8 @@ index 000000000000..d68fd75dcb45 +int rga_mm_map_job_info(struct rga_job *job); +void rga_mm_unmap_job_info(struct rga_job *job); + -+int rga_mm_import_buffer(struct rga_external_buffer *external_buffer, -+ struct rga_session *session); ++uint32_t rga_mm_import_buffer(struct rga_external_buffer *external_buffer, ++ struct rga_session *session); +int rga_mm_release_buffer(uint32_t handle); +int rga_mm_session_release_buffer(struct rga_session *session); + @@ -1682984,11 +1682790,11 @@ index 000000000000..d68fd75dcb45 + +#endif diff --git a/drivers/video/rockchip/rga3/rga2_reg_info.c b/drivers/video/rockchip/rga3/rga2_reg_info.c -new file mode 100644 -index 000000000000..8792e8d64dfc +new file mode 100755 +index 000000000..4216ffb3b --- /dev/null +++ b/drivers/video/rockchip/rga3/rga2_reg_info.c -@@ -0,0 +1,2742 @@ +@@ -0,0 +1,2503 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1682998,6 +1682804,7 @@ index 000000000000..8792e8d64dfc + +#define pr_fmt(fmt) "rga2_reg: " fmt + ++#include "rga_job.h" +#include "rga2_reg_info.h" +#include "rga_dma_buf.h" +#include "rga_iommu.h" @@ -1683155,8 +1682962,12 @@ index 000000000000..8792e8d64dfc + + bRGA_MODE_CTL = (u32 *) (base + RGA2_MODE_CTRL_OFFSET); + -+ if (msg->render_mode == UPDATE_PALETTE_TABLE_MODE) -+ render_mode = 0x3; ++ if (msg->render_mode == 4) ++ render_mode = 3; ++ ++ /* In slave mode, the current frame completion interrupt must be enabled. */ ++ if (!RGA2_USE_MASTER_MODE) ++ msg->CMD_fin_int_enable = 1; + + reg = + ((reg & (~m_RGA2_MODE_CTRL_SW_RENDER_MODE)) | @@ -1683217,7 +1683028,6 @@ index 000000000000..8792e8d64dfc + u32 sw, sh; + u32 dw, dh; + u8 rotate_mode; -+ u8 vsp_scale_mode = 0; + u8 scale_w_flag, scale_h_flag; + + bRGA_SRC_INFO = (u32 *) (base + RGA2_SRC_INFO_OFFSET); @@ -1683281,18 +1683091,6 @@ index 000000000000..8792e8d64dfc + scale_w_flag = 3; + } + -+ /* VSP scale mode select, HSD > VSD > VSP > HSP */ -+ if (scale_h_flag == 0x2) { -+ /* After HSD, VSP needs to check dst_width */ -+ if ((scale_w_flag == 0x1) && (dw < RGA2_VSP_BICUBIC_LIMIT)) -+ vsp_scale_mode = 0x0; -+ else if (sw < RGA2_VSP_BICUBIC_LIMIT) -+ vsp_scale_mode = 0x0; -+ else -+ /* default select bilinear */ -+ vsp_scale_mode = 0x1; -+ } -+ + switch (msg->src.format) { + case RGA_FORMAT_RGBA_8888: + src0_format = 0x0; @@ -1683563,7 +1683361,8 @@ index 000000000000..8792e8d64dfc + ((msg->alpha_rop_flag >> 4) & 0x1))); + reg = + ((reg & (~m_RGA2_SRC_INFO_SW_SW_VSP_MODE_SEL)) | -+ (s_RGA2_SRC_INFO_SW_SW_VSP_MODE_SEL((vsp_scale_mode)))); ++ (s_RGA2_SRC_INFO_SW_SW_VSP_MODE_SEL(( ++ msg->scale_bicu_mode >> 4)))); + reg = + ((reg & (~m_RGA2_SRC_INFO_SW_SW_YUV10_E)) | + (s_RGA2_SRC_INFO_SW_SW_YUV10_E((yuv10)))); @@ -1684268,253 +1684067,104 @@ index 000000000000..8792e8d64dfc + u32 *bRGA_ALPHA_CTRL0; + u32 *bRGA_ALPHA_CTRL1; + u32 *bRGA_FADING_CTRL; -+ u32 reg = 0; -+ union rga2_color_ctrl color_ctrl; -+ union rga2_alpha_ctrl alpha_ctrl; -+ struct rga_alpha_config *config; ++ u32 reg0 = 0; ++ u32 reg1 = 0; + + bRGA_ALPHA_CTRL0 = (u32 *) (base + RGA2_ALPHA_CTRL0_OFFSET); + bRGA_ALPHA_CTRL1 = (u32 *) (base + RGA2_ALPHA_CTRL1_OFFSET); + bRGA_FADING_CTRL = (u32 *) (base + RGA2_FADING_CTRL_OFFSET); + -+ color_ctrl.value = 0; -+ alpha_ctrl.value = 0; -+ config = &msg->alpha_config; -+ -+ color_ctrl.bits.src_color_mode = -+ config->fg_pre_multiplied ? RGA_ALPHA_PRE_MULTIPLIED : RGA_ALPHA_NO_PRE_MULTIPLIED; -+ color_ctrl.bits.dst_color_mode = -+ config->bg_pre_multiplied ? RGA_ALPHA_PRE_MULTIPLIED : RGA_ALPHA_NO_PRE_MULTIPLIED; -+ -+ if (config->fg_pixel_alpha_en) -+ color_ctrl.bits.src_blend_mode = -+ config->fg_global_alpha_en ? RGA_ALPHA_PER_PIXEL_GLOBAL : -+ RGA_ALPHA_PER_PIXEL; -+ else -+ color_ctrl.bits.src_blend_mode = RGA_ALPHA_GLOBAL; -+ -+ if (config->bg_pixel_alpha_en) -+ color_ctrl.bits.dst_blend_mode = -+ config->bg_global_alpha_en ? RGA_ALPHA_PER_PIXEL_GLOBAL : -+ RGA_ALPHA_PER_PIXEL; -+ else -+ color_ctrl.bits.dst_blend_mode = RGA_ALPHA_GLOBAL; -+ -+ /* -+ * Since the hardware uses 256 as 1, the original alpha value needs to -+ * be + (alpha >> 7). -+ */ -+ color_ctrl.bits.src_alpha_cal_mode = RGA_ALPHA_SATURATION; -+ color_ctrl.bits.dst_alpha_cal_mode = RGA_ALPHA_SATURATION; -+ -+ /* porter duff alpha enable */ -+ switch (config->mode) { -+ case RGA_ALPHA_BLEND_SRC: -+ /* -+ * SRC mode: -+ * Sf = 1, Df = 0ï¼› -+ * [Rc,Ra] = [Sc,Sa]ï¼› -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_ONE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST: -+ /* -+ * SRC mode: -+ * Sf = 0, Df = 1ï¼› -+ * [Rc,Ra] = [Dc,Da]ï¼› -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ONE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_OVER: -+ /* -+ * SRC-OVER mode: -+ * Sf = 1, Df = (1 - Sa) -+ * [Rc,Ra] = [ Sc + (1 - Sa) * Dc, Sa + (1 - Sa) * Da ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_ONE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_OVER: -+ /* -+ * DST-OVER mode: -+ * Sf = (1 - Da) , Df = 1 -+ * [Rc,Ra] = [ Sc * (1 - Da) + Dc, Sa * (1 - Da) + Da ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ONE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_IN: -+ /* -+ * SRC-IN mode: -+ * Sf = Da , Df = 0 -+ * [Rc,Ra] = [ Sc * Da, Sa * Da ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_IN: -+ /* -+ * DST-IN mode: -+ * Sf = 0 , Df = Sa -+ * [Rc,Ra] = [ Dc * Sa, Da * Sa ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_OUT: -+ /* -+ * SRC-OUT mode: -+ * Sf = (1 - Da) , Df = 0 -+ * [Rc,Ra] = [ Sc * (1 - Da), Sa * (1 - Da) ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_OUT: -+ /* -+ * DST-OUT mode: -+ * Sf = 0 , Df = (1 - Sa) -+ * [Rc,Ra] = [ Dc * (1 - Sa), Da * (1 - Sa) ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_ATOP: -+ /* -+ * SRC-ATOP mode: -+ * Sf = Da , Df = (1 - Sa) -+ * [Rc,Ra] = [ Sc * Da + Dc * (1 - Sa), Sa * Da + Da * (1 - Sa) ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_ATOP: -+ /* -+ * DST-ATOP mode: -+ * Sf = (1 - Da) , Df = Sa -+ * [Rc,Ra] = [ Sc * (1 - Da) + Dc * Sa, Sa * (1 - Da) + Da * Sa ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_XOR: -+ /* -+ * DST-XOR mode: -+ * Sf = (1 - Da) , Df = (1 - Sa) -+ * [Rc,Ra] = [ Sc * (1 - Da) + Dc * (1 - Sa), Sa * (1 - Da) + Da * (1 - Sa) ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_CLEAR: -+ /* -+ * DST-CLEAR mode: -+ * Sf = 0 , Df = 0 -+ * [Rc,Ra] = [ 0, 0 ] -+ */ -+ color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; -+ -+ color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; -+ color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ default: -+ break; -+ } -+ -+ alpha_ctrl.bits.src_blend_mode = color_ctrl.bits.src_blend_mode; -+ alpha_ctrl.bits.dst_blend_mode = color_ctrl.bits.dst_blend_mode; -+ -+ alpha_ctrl.bits.src_alpha_cal_mode = color_ctrl.bits.src_alpha_cal_mode; -+ alpha_ctrl.bits.dst_alpha_cal_mode = color_ctrl.bits.dst_alpha_cal_mode; -+ -+ alpha_ctrl.bits.src_alpha_mode = color_ctrl.bits.src_alpha_mode; -+ alpha_ctrl.bits.src_factor_mode = color_ctrl.bits.src_factor_mode; -+ -+ alpha_ctrl.bits.dst_alpha_mode = color_ctrl.bits.dst_alpha_mode; -+ alpha_ctrl.bits.dst_factor_mode = color_ctrl.bits.dst_factor_mode; -+ -+ reg = -+ ((reg & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_0)) | ++ reg0 = ++ ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_0)) | + (s_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_0(msg->alpha_rop_flag))); -+ reg = -+ ((reg & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_SEL)) | ++ reg0 = ++ ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_SEL)) | + (s_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_SEL + (msg->alpha_rop_flag >> 1))); -+ reg = -+ ((reg & (~m_RGA2_ALPHA_CTRL0_SW_ROP_MODE)) | ++ reg0 = ++ ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_ROP_MODE)) | + (s_RGA2_ALPHA_CTRL0_SW_ROP_MODE(msg->rop_mode))); -+ reg = -+ ((reg & (~m_RGA2_ALPHA_CTRL0_SW_SRC_GLOBAL_ALPHA)) | ++ reg0 = ++ ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_SRC_GLOBAL_ALPHA)) | + (s_RGA2_ALPHA_CTRL0_SW_SRC_GLOBAL_ALPHA -+ ((uint8_t)config->fg_global_alpha_value))); -+ reg = -+ ((reg & (~m_RGA2_ALPHA_CTRL0_SW_DST_GLOBAL_ALPHA)) | ++ (msg->src_a_global_val))); ++ reg0 = ++ ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_DST_GLOBAL_ALPHA)) | + (s_RGA2_ALPHA_CTRL0_SW_DST_GLOBAL_ALPHA -+ ((uint8_t)config->bg_global_alpha_value))); -+ -+ *bRGA_ALPHA_CTRL0 = reg; -+ *bRGA_ALPHA_CTRL1 = color_ctrl.value | (alpha_ctrl.value << 16); -+ ++ (msg->dst_a_global_val))); ++ ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_COLOR_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_COLOR_M0 ++ (msg->alpha_mode_0 >> 15))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_COLOR_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_COLOR_M0 ++ (msg->alpha_mode_0 >> 7))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M0 ++ (msg->alpha_mode_0 >> 12))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M0 ++ (msg->alpha_mode_0 >> 4))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M0 ++ (msg->alpha_mode_0 >> 11))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M0 ++ (msg->alpha_mode_0 >> 3))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M0 ++ (msg->alpha_mode_0 >> 9))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M0 ++ (msg->alpha_mode_0 >> 1))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M0 ++ (msg->alpha_mode_0 >> 8))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M0)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M0 ++ (msg->alpha_mode_0 >> 0))); ++ ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M1 ++ (msg->alpha_mode_1 >> 12))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M1 ++ (msg->alpha_mode_1 >> 4))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M1 ++ (msg->alpha_mode_1 >> 11))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M1 ++ (msg->alpha_mode_1 >> 3))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M1(msg->alpha_mode_1 >> 9))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M1(msg->alpha_mode_1 >> 1))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M1(msg->alpha_mode_1 >> 8))); ++ reg1 = ++ ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M1)) | ++ (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M1(msg->alpha_mode_1 >> 0))); ++ ++ *bRGA_ALPHA_CTRL0 = reg0; ++ *bRGA_ALPHA_CTRL1 = reg1; + + if ((msg->alpha_rop_flag >> 2) & 1) { + *bRGA_FADING_CTRL = (1 << 24) | (msg->fading_b_value << 16) | @@ -1684862,7 +1684512,7 @@ index 000000000000..8792e8d64dfc + *bRGA_MMU_ELS_BASE = (u32) (msg->mmu_info.els_base_addr) >> 4; +} + -+static int rga2_gen_reg_info(u8 *base, struct rga2_req *msg) ++int rga2_gen_reg_info(u8 *base, struct rga2_req *msg) +{ + u8 dst_nn_quantize_en = 0; + @@ -1684916,6 +1684566,8 @@ index 000000000000..8792e8d64dfc +static void rga_cmd_to_rga2_cmd(struct rga_scheduler_t *scheduler, + struct rga_req *req_rga, struct rga2_req *req) +{ ++ u16 alpha_mode_0, alpha_mode_1; ++ + if (req_rga->render_mode == 6) + req->render_mode = UPDATE_PALETTE_TABLE_MODE; + else if (req_rga->render_mode == 7) @@ -1684993,6 +1684645,9 @@ index 000000000000..8792e8d64dfc + break; + } + ++ if ((req->dst.act_w > 2048) && (req->src.act_h < req->dst.act_h)) ++ req->scale_bicu_mode |= (1 << 4); ++ + req->LUT_addr = req_rga->LUT_addr; + req->rop_mask_addr = req_rga->rop_mask_addr; + @@ -1685015,8 +1684670,6 @@ index 000000000000..8792e8d64dfc + + req->palette_mode = req_rga->palette_mode; + req->yuv2rgb_mode = req_rga->yuv2rgb_mode; -+ if (req_rga->full_csc.flag & 0x1) -+ req->full_csc_en = 1; + req->endian_mode = req_rga->endian_mode; + req->rgb2yuv_mode = 0; + @@ -1685058,52 +1684711,110 @@ index 000000000000..8792e8d64dfc + + if (((req_rga->alpha_rop_flag) & 1)) { + if ((req_rga->alpha_rop_flag >> 3) & 1) { -+ req->alpha_config.enable = true; ++ /* porter duff alpha enable */ ++ switch (req_rga->PD_mode) { ++ /* dst = 0 */ ++ case 0: ++ break; ++ /* dst = src */ ++ case 1: ++ req->alpha_mode_0 = 0x0212; ++ req->alpha_mode_1 = 0x0212; ++ break; ++ /* dst = dst */ ++ case 2: ++ req->alpha_mode_0 = 0x1202; ++ req->alpha_mode_1 = 0x1202; ++ break; ++ /* dst = (256*sc + (256 - sa)*dc) >> 8 */ ++ case 3: ++ if ((req_rga->alpha_rop_mode & 3) == 0) { ++ /* both use globalAlpha. */ ++ alpha_mode_0 = 0x3010; ++ alpha_mode_1 = 0x3010; ++ } else if ((req_rga->alpha_rop_mode & 3) == 1) { ++ /* Do not use globalAlpha. */ ++ alpha_mode_0 = 0x3212; ++ alpha_mode_1 = 0x3212; ++ } else if ((req_rga->alpha_rop_mode & 3) == 2) { ++ /* ++ * dst use globalAlpha, ++ * and dst has pixelAlpha. ++ */ ++ alpha_mode_0 = 0x3014; ++ alpha_mode_1 = 0x3014; ++ } else { ++ /* ++ * dst use globalAlpha, and ++ * dst does not have pixelAlpha. ++ */ ++ alpha_mode_0 = 0x3012; ++ alpha_mode_1 = 0x3012; ++ } ++ req->alpha_mode_0 = alpha_mode_0; ++ req->alpha_mode_1 = alpha_mode_1; ++ break; ++ /* dst = (sc*(256-da) + 256*dc) >> 8 */ ++ case 4: ++ /* Do not use globalAlpha. */ ++ req->alpha_mode_0 = 0x1232; ++ req->alpha_mode_1 = 0x1232; ++ break; ++ /* dst = (da*sc) >> 8 */ ++ case 5: ++ break; ++ /* dst = (sa*dc) >> 8 */ ++ case 6: ++ break; ++ /* dst = ((256-da)*sc) >> 8 */ ++ case 7: ++ break; ++ /* dst = ((256-sa)*dc) >> 8 */ ++ case 8: ++ break; ++ /* dst = (da*sc + (256-sa)*dc) >> 8 */ ++ case 9: ++ req->alpha_mode_0 = 0x3040; ++ req->alpha_mode_1 = 0x3040; ++ break; ++ /* dst = ((256-da)*sc + (sa*dc)) >> 8 */ ++ case 10: ++ break; ++ /* dst = ((256-da)*sc + (256-sa)*dc) >> 8 */ ++ case 11: ++ break; ++ case 12: ++ req->alpha_mode_0 = 0x0010; ++ req->alpha_mode_1 = 0x0820; ++ break; ++ default: ++ break; ++ } + -+ if ((req_rga->alpha_rop_flag >> 9) & 1) { -+ req->alpha_config.fg_pre_multiplied = false; -+ req->alpha_config.bg_pre_multiplied = false; -+ } else if (req->osd_info.enable) { -+ req->alpha_config.fg_pre_multiplied = true; ++ if (req->osd_info.enable) { + /* set dst(osd_block) real color mode */ -+ req->alpha_config.bg_pre_multiplied = false; -+ } else { -+ req->alpha_config.fg_pre_multiplied = true; -+ req->alpha_config.bg_pre_multiplied = true; ++ if (req->alpha_mode_0 & (0x01 << 9)) ++ req->alpha_mode_0 |= (1 << 15); + } + -+ req->alpha_config.fg_pixel_alpha_en = rga_is_alpha_format(req->src.format); -+ if (req->bitblt_mode) -+ req->alpha_config.bg_pixel_alpha_en = -+ rga_is_alpha_format(req->src1.format); -+ else -+ req->alpha_config.bg_pixel_alpha_en = -+ rga_is_alpha_format(req->dst.format); -+ -+ if (req_rga->feature.global_alpha_en) { -+ if (req_rga->fg_global_alpha < 0xff) { -+ req->alpha_config.fg_global_alpha_en = true; -+ req->alpha_config.fg_global_alpha_value = -+ req_rga->fg_global_alpha; -+ } else if (!req->alpha_config.fg_pixel_alpha_en) { -+ req->alpha_config.fg_global_alpha_en = true; -+ req->alpha_config.fg_global_alpha_value = 0xff; -+ } -+ -+ if (req_rga->bg_global_alpha < 0xff) { -+ req->alpha_config.bg_global_alpha_en = true; -+ req->alpha_config.bg_global_alpha_value = -+ req_rga->bg_global_alpha; -+ } else if (!req->alpha_config.bg_pixel_alpha_en) { -+ req->alpha_config.bg_global_alpha_en = true; -+ req->alpha_config.bg_global_alpha_value = 0xff; -+ } -+ } else { -+ req->alpha_config.bg_global_alpha_value = 0xff; -+ req->alpha_config.bg_global_alpha_value = 0xff; ++ /* Real color mode */ ++ if ((req_rga->alpha_rop_flag >> 9) & 1) { ++ if (req->alpha_mode_0 & (0x01 << 1)) ++ req->alpha_mode_0 |= (1 << 7); ++ if (req->alpha_mode_0 & (0x01 << 9)) ++ req->alpha_mode_0 |= (1 << 15); ++ } ++ } else { ++ if ((req_rga->alpha_rop_mode & 3) == 0) { ++ req->alpha_mode_0 = 0x3040; ++ req->alpha_mode_1 = 0x3040; ++ } else if ((req_rga->alpha_rop_mode & 3) == 1) { ++ req->alpha_mode_0 = 0x3042; ++ req->alpha_mode_1 = 0x3242; ++ } else if ((req_rga->alpha_rop_mode & 3) == 2) { ++ req->alpha_mode_0 = 0x3044; ++ req->alpha_mode_1 = 0x3044; + } -+ -+ req->alpha_config.mode = req_rga->PD_mode; + } + } + @@ -1685146,18 +1684857,12 @@ index 000000000000..8792e8d64dfc + } +} + -+static void rga2_soft_reset(struct rga_scheduler_t *scheduler) ++void rga2_soft_reset(struct rga_scheduler_t *scheduler) +{ + u32 i; + u32 reg; -+ u32 iommu_dte_addr = 0; -+ -+ if (scheduler->data->mmu == RGA_IOMMU) -+ iommu_dte_addr = rga_read(RGA_IOMMU_DTE_ADDR, scheduler); + -+ rga_write(m_RGA2_SYS_CTRL_ACLK_SRESET_P | m_RGA2_SYS_CTRL_CCLK_SRESET_P | -+ m_RGA2_SYS_CTRL_RST_PROTECT_P, -+ RGA2_SYS_CTRL, scheduler); ++ rga_write((1 << 3) | (1 << 4) | (1 << 6), RGA2_SYS_CTRL, scheduler); + + for (i = 0; i < RGA_RESET_TIMEOUT; i++) { + /* RGA_SYS_CTRL */ @@ -1685169,17 +1684874,8 @@ index 000000000000..8792e8d64dfc + udelay(1); + } + -+ if (scheduler->data->mmu == RGA_IOMMU) { -+ rga_write(iommu_dte_addr, RGA_IOMMU_DTE_ADDR, scheduler); -+ /* enable iommu */ -+ rga_write(RGA_IOMMU_CMD_ENABLE_PAGING, RGA_IOMMU_COMMAND, scheduler); -+ } -+ + if (i == RGA_RESET_TIMEOUT) -+ pr_err("RAG2 core[%d] soft reset timeout.\n", scheduler->core); -+ else -+ pr_info("RGA2 core[%d] soft reset complete.\n", scheduler->core); -+ ++ pr_err("soft reset timeout.\n"); +} + +static int rga2_check_param(const struct rga_hw_data *data, const struct rga2_req *req) @@ -1685298,23 +1684994,19 @@ index 000000000000..8792e8d64dfc + pr_info("mmu: src=%.2x src1=%.2x dst=%.2x els=%.2x\n", + req->mmu_info.src0_mmu_flag, req->mmu_info.src1_mmu_flag, + req->mmu_info.dst_mmu_flag, req->mmu_info.els_mmu_flag); -+ pr_info("alpha: flag %x mode=%s\n", -+ req->alpha_rop_flag, rga_get_blend_mode_str(req->alpha_config.mode)); -+ pr_info("alpha: pre_multi=[%d,%d] pixl=[%d,%d] glb=[%d,%d]\n", -+ req->alpha_config.fg_pre_multiplied, req->alpha_config.bg_pre_multiplied, -+ req->alpha_config.fg_pixel_alpha_en, req->alpha_config.bg_pixel_alpha_en, -+ req->alpha_config.fg_global_alpha_en, req->alpha_config.bg_global_alpha_en); -+ pr_info("alpha: fg_global_alpha=%x bg_global_alpha=%x\n", -+ req->alpha_config.fg_global_alpha_value, req->alpha_config.bg_global_alpha_value); ++ pr_info("alpha: flag %x mode0=%x mode1=%x\n", req->alpha_rop_flag, ++ req->alpha_mode_0, req->alpha_mode_1); ++ pr_info("blend mode is %s\n", ++ rga_get_blend_mode_str(req->alpha_rop_flag, req->alpha_mode_0, ++ req->alpha_mode_1)); + pr_info("yuv2rgb mode is %x\n", req->yuv2rgb_mode); +} + -+static int rga2_init_reg(struct rga_job *job) ++int rga2_init_reg(struct rga_job *job) +{ + struct rga2_req req; + int ret = 0; + struct rga_scheduler_t *scheduler = NULL; -+ ktime_t timestamp = ktime_get(); + + scheduler = job->scheduler; + if (unlikely(scheduler == NULL)) { @@ -1685325,24 +1685017,7 @@ index 000000000000..8792e8d64dfc + memset(&req, 0x0, sizeof(req)); + + rga_cmd_to_rga2_cmd(scheduler, &job->rga_command_base, &req); -+ if (req.full_csc_en) { -+ memcpy(&job->full_csc, &job->rga_command_base.full_csc, sizeof(job->full_csc)); -+ if (job->rga_command_base.feature.full_csc_clip_en) { -+ memcpy(&job->full_csc_clip, &job->rga_command_base.full_csc_clip, -+ sizeof(job->full_csc_clip)); -+ } else { -+ job->full_csc_clip.y.max = 0xff; -+ job->full_csc_clip.y.min = 0x0; -+ job->full_csc_clip.uv.max = 0xff; -+ job->full_csc_clip.uv.min = 0x0; -+ } -+ -+ } else { -+ job->full_csc_clip.y.max = 0xff; -+ job->full_csc_clip.y.min = 0x0; -+ job->full_csc_clip.uv.max = 0xff; -+ job->full_csc_clip.uv.min = 0x0; -+ } ++ memcpy(&job->full_csc, &job->rga_command_base.full_csc, sizeof(job->full_csc)); + memcpy(&job->pre_intr_info, &job->rga_command_base.pre_intr_info, + sizeof(job->pre_intr_info)); + @@ -1685379,19 +1685054,11 @@ index 000000000000..8792e8d64dfc + } + } + -+ /* In slave mode, the current frame completion interrupt must be enabled. */ -+ if (scheduler->data->mmu == RGA_IOMMU) -+ req.CMD_fin_int_enable = 1; -+ + if (rga2_gen_reg_info((uint8_t *)job->cmd_reg, &req) == -1) { + pr_err("gen reg info error\n"); + return -EINVAL; + } + -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], generate register cost time %lld us\n", -+ job->request_id, ktime_us_delta(ktime_get(), timestamp)); -+ + return ret; +} + @@ -1685458,7 +1685125,7 @@ index 000000000000..8792e8d64dfc + cmd_reg[2 + i * 4], cmd_reg[3 + i * 4]); +} + -+static void rga2_dump_read_back_reg(struct rga_scheduler_t *scheduler) ++void rga2_dump_read_back_reg(struct rga_scheduler_t *scheduler) +{ + rga2_dump_read_back_sys_reg(scheduler); + rga2_dump_read_back_csc_reg(scheduler); @@ -1685471,71 +1685138,66 @@ index 000000000000..8792e8d64dfc + + if (job->pre_intr_info.read_intr_en) { + reg = s_RGA2_READ_LINE_SW_INTR_LINE_RD_TH(job->pre_intr_info.read_threshold); -+ rga_write(reg, RGA2_READ_LINE_CNT, scheduler); ++ rga_write(reg, RGA2_READ_LINE_CNT_OFFSET, scheduler); + } + + if (job->pre_intr_info.write_intr_en) { + reg = s_RGA2_WRITE_LINE_SW_INTR_LINE_WR_START(job->pre_intr_info.write_start); + reg = ((reg & (~m_RGA2_WRITE_LINE_SW_INTR_LINE_WR_STEP)) | + (s_RGA2_WRITE_LINE_SW_INTR_LINE_WR_STEP(job->pre_intr_info.write_step))); -+ rga_write(reg, RGA2_WRITE_LINE_CNT, scheduler); ++ rga_write(reg, RGA2_WRITE_LINE_CNT_OFFSET, scheduler); + } + -+ reg = rga_read(RGA2_SYS_CTRL, scheduler); -+ reg = ((reg & (~m_RGA2_SYS_CTRL_HOLD_MODE_EN)) | -+ (s_RGA2_SYS_CTRL_HOLD_MODE_EN(job->pre_intr_info.read_hold_en))); -+ rga_write(reg, RGA2_SYS_CTRL, scheduler); ++ reg = rga_read(RGA2_SYS_CTRL_OFFSET, scheduler); ++ reg = ((reg & (~m_RGA2_SYS_HOLD_MODE_EN)) | ++ (s_RGA2_SYS_HOLD_MODE_EN(job->pre_intr_info.read_hold_en))); ++ rga_write(reg, RGA2_SYS_CTRL_OFFSET, scheduler); + -+ reg = rga_read(RGA2_INT, scheduler); ++ reg = rga_read(RGA2_INT_OFFSET, scheduler); + reg = (reg | s_RGA2_INT_LINE_RD_CLEAR(0x1) | s_RGA2_INT_LINE_WR_CLEAR(0x1)); + reg = ((reg & (~m_RGA2_INT_LINE_RD_EN)) | + (s_RGA2_INT_LINE_RD_EN(job->pre_intr_info.read_intr_en))); + reg = ((reg & (~m_RGA2_INT_LINE_WR_EN)) | + (s_RGA2_INT_LINE_WR_EN(job->pre_intr_info.write_intr_en))); -+ rga_write(reg, RGA2_INT, scheduler); ++ rga_write(reg, RGA2_INT_OFFSET, scheduler); +} + +static void rga2_set_reg_full_csc(struct rga_job *job, struct rga_scheduler_t *scheduler) +{ ++ uint8_t clip_y_max, clip_y_min; ++ uint8_t clip_uv_max, clip_uv_min; ++ ++ clip_y_max = 0xff; ++ clip_y_min = 0x0; ++ clip_uv_max = 0xff; ++ clip_uv_min = 0; ++ + /* full csc coefficient */ + /* Y coefficient */ -+ rga_write(job->full_csc.coe_y.r_v | -+ (job->full_csc_clip.y.max << 16) | (job->full_csc_clip.y.min << 24), -+ RGA2_DST_CSC_00, scheduler); -+ rga_write(job->full_csc.coe_y.g_y | -+ (job->full_csc_clip.uv.max << 16) | (job->full_csc_clip.uv.min << 24), -+ RGA2_DST_CSC_01, scheduler); -+ rga_write(job->full_csc.coe_y.b_u, RGA2_DST_CSC_02, scheduler); -+ rga_write(job->full_csc.coe_y.off, RGA2_DST_CSC_OFF0, scheduler); ++ rga_write(job->full_csc.coe_y.r_v | (clip_y_max << 16) | (clip_y_min << 24), ++ RGA2_DST_CSC_00_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_y.g_y | (clip_uv_max << 16) | (clip_uv_min << 24), ++ RGA2_DST_CSC_01_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_y.b_u, RGA2_DST_CSC_02_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_y.off, RGA2_DST_CSC_OFF0_OFFSET, scheduler); + + /* U coefficient */ -+ rga_write(job->full_csc.coe_u.r_v, RGA2_DST_CSC_10, scheduler); -+ rga_write(job->full_csc.coe_u.g_y, RGA2_DST_CSC_11, scheduler); -+ rga_write(job->full_csc.coe_u.b_u, RGA2_DST_CSC_12, scheduler); -+ rga_write(job->full_csc.coe_u.off, RGA2_DST_CSC_OFF1, scheduler); ++ rga_write(job->full_csc.coe_u.r_v, RGA2_DST_CSC_10_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_u.g_y, RGA2_DST_CSC_11_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_u.b_u, RGA2_DST_CSC_12_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_u.off, RGA2_DST_CSC_OFF1_OFFSET, scheduler); + + /* V coefficient */ -+ rga_write(job->full_csc.coe_v.r_v, RGA2_DST_CSC_20, scheduler); -+ rga_write(job->full_csc.coe_v.g_y, RGA2_DST_CSC_21, scheduler); -+ rga_write(job->full_csc.coe_v.b_u, RGA2_DST_CSC_22, scheduler); -+ rga_write(job->full_csc.coe_v.off, RGA2_DST_CSC_OFF2, scheduler); ++ rga_write(job->full_csc.coe_v.r_v, RGA2_DST_CSC_20_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_v.g_y, RGA2_DST_CSC_21_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_v.b_u, RGA2_DST_CSC_22_OFFSET, scheduler); ++ rga_write(job->full_csc.coe_v.off, RGA2_DST_CSC_OFF2_OFFSET, scheduler); +} + -+static int rga2_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) ++int rga2_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) +{ -+ int i; -+ bool master_mode_en; -+ uint32_t sys_ctrl; + ktime_t now = ktime_get(); -+ -+ /* -+ * Currently there is no iova allocated for storing cmd for the IOMMU device, -+ * so the iommu device needs to use the slave mode. -+ */ -+ if (scheduler->data->mmu != RGA_IOMMU) -+ master_mode_en = true; -+ else -+ master_mode_en = false; ++ int i; + + if (job->pre_intr_info.enable) + rga2_set_pre_intr_reg(job, scheduler); @@ -1685544,7 +1685206,7 @@ index 000000000000..8792e8d64dfc + rga2_set_reg_full_csc(job, scheduler); + + if (DEBUGGER_EN(REG)) { -+ uint32_t *p; ++ int32_t *p; + + rga2_dump_read_back_sys_reg(scheduler); + rga2_dump_read_back_csc_reg(scheduler); @@ -1685559,44 +1685221,42 @@ index 000000000000..8792e8d64dfc + + /* All CMD finish int */ + rga_write(rga_read(RGA2_INT, scheduler) | -+ m_RGA2_INT_ERROR_ENABLE_MASK | m_RGA2_INT_ALL_CMD_DONE_INT_EN, -+ RGA2_INT, scheduler); ++ (0x1 << 10) | (0x1 << 9) | (0x1 << 8), RGA2_INT, scheduler); + + /* sys_reg init */ -+ sys_ctrl = m_RGA2_SYS_CTRL_AUTO_CKG | m_RGA2_SYS_CTRL_AUTO_RST | -+ m_RGA2_SYS_CTRL_RST_PROTECT_P | m_RGA2_SYS_CTRL_DST_WR_OPT_DIS | -+ m_RGA2_SYS_CTRL_SRC0YUV420SP_RD_OPT_DIS; ++ rga_write((0x1 << 2) | (0x1 << 5) | (0x1 << 6) | (0x1 << 11) | (0x1 << 12), ++ RGA2_SYS_CTRL, scheduler); + -+ if (master_mode_en) { ++ if (RGA2_USE_MASTER_MODE) { + /* master mode */ -+ sys_ctrl |= s_RGA2_SYS_CTRL_CMD_MODE(1); ++ rga_write(rga_read(RGA2_SYS_CTRL, scheduler) | (0x1 << 1), ++ RGA2_SYS_CTRL, scheduler); + + /* cmd buffer flush cache to ddr */ + rga_dma_sync_flush_range(&job->cmd_reg[0], &job->cmd_reg[32], scheduler); + + /* set cmd_addr */ + rga_write(virt_to_phys(job->cmd_reg), RGA2_CMD_BASE, scheduler); -+ rga_write(sys_ctrl, RGA2_SYS_CTRL, scheduler); -+ rga_write(m_RGA2_CMD_CTRL_CMD_LINE_ST_P, RGA2_CMD_CTRL, scheduler); ++ ++ rga_write(1, RGA2_CMD_CTRL, scheduler); + } else { + /* slave mode */ -+ sys_ctrl |= s_RGA2_SYS_CTRL_CMD_MODE(0) | m_RGA2_SYS_CTRL_CMD_OP_ST_P; ++ rga_write(rga_read(RGA2_SYS_CTRL, scheduler) | (0x0 << 1), ++ RGA2_SYS_CTRL, scheduler); + + /* set cmd_reg */ + for (i = 0; i <= 32; i++) + rga_write(job->cmd_reg[i], 0x100 + i * 4, scheduler); + -+ rga_write(sys_ctrl, RGA2_SYS_CTRL, scheduler); ++ rga_write(rga_read(RGA2_SYS_CTRL, scheduler) | 0x1, RGA2_SYS_CTRL, scheduler); + } + -+ if (DEBUGGER_EN(REG)) -+ pr_info("sys_ctrl = %x, int = %x\n", ++ if (DEBUGGER_EN(TIME)) { ++ pr_info("sys_ctrl = %x, int = %x, set cmd use time = %lld\n", + rga_read(RGA2_SYS_CTRL, scheduler), -+ rga_read(RGA2_INT, scheduler)); -+ -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], set register cost time %lld us\n", -+ job->request_id, ktime_us_delta(now, job->timestamp)); ++ rga_read(RGA2_INT, scheduler), ++ ktime_us_delta(now, job->timestamp)); ++ } + + job->hw_running_time = now; + job->hw_recoder_time = now; @@ -1685607,7 +1685267,7 @@ index 000000000000..8792e8d64dfc + return 0; +} + -+static int rga2_get_version(struct rga_scheduler_t *scheduler) ++int rga2_get_version(struct rga_scheduler_t *scheduler) +{ + u32 major_version, minor_version, svn_version; + u32 reg_version; @@ -1685638,105 +1685298,12 @@ index 000000000000..8792e8d64dfc + + return 0; +} -+ -+static int rga2_read_back_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) -+{ -+ if (job->rga_command_base.osd_info.enable) { -+ job->rga_command_base.osd_info.cur_flags0 = rga_read(RGA2_OSD_CUR_FLAGS0, -+ scheduler); -+ job->rga_command_base.osd_info.cur_flags1 = rga_read(RGA2_OSD_CUR_FLAGS1, -+ scheduler); -+ } -+ -+ return 0; -+} -+ -+static int rga2_irq(struct rga_scheduler_t *scheduler) -+{ -+ struct rga_job *job = scheduler->running_job; -+ -+ /* The hardware interrupt top-half don't need to lock the scheduler. */ -+ if (job == NULL) -+ return IRQ_HANDLED; -+ -+ if (test_bit(RGA_JOB_STATE_INTR_ERR, &job->state)) -+ return IRQ_WAKE_THREAD; -+ -+ job->intr_status = rga_read(RGA2_INT, scheduler); -+ job->hw_status = rga_read(RGA2_STATUS2, scheduler); -+ job->cmd_status = rga_read(RGA2_STATUS1, scheduler); -+ -+ if (DEBUGGER_EN(INT_FLAG)) -+ pr_info("irq handler, INTR[0x%x], HW_STATUS[0x%x], CMD_STATUS[0x%x]\n", -+ job->intr_status, job->hw_status, job->cmd_status); -+ -+ if (job->intr_status & -+ (m_RGA2_INT_CUR_CMD_DONE_INT_FLAG | m_RGA2_INT_ALL_CMD_DONE_INT_FLAG)) { -+ set_bit(RGA_JOB_STATE_FINISH, &job->state); -+ } else if (job->intr_status & m_RGA2_INT_ERROR_FLAG_MASK) { -+ set_bit(RGA_JOB_STATE_INTR_ERR, &job->state); -+ -+ pr_err("irq handler err! INTR[0x%x], HW_STATUS[0x%x], CMD_STATUS[0x%x]\n", -+ job->intr_status, job->hw_status, job->cmd_status); -+ scheduler->ops->soft_reset(scheduler); -+ } -+ -+ /*clear INTR */ -+ rga_write(rga_read(RGA2_INT, scheduler) | -+ (m_RGA2_INT_ERROR_CLEAR_MASK | -+ m_RGA2_INT_ALL_CMD_DONE_INT_CLEAR | m_RGA2_INT_NOW_CMD_DONE_INT_CLEAR | -+ m_RGA2_INT_LINE_RD_CLEAR | m_RGA2_INT_LINE_WR_CLEAR), -+ RGA2_INT, scheduler); -+ -+ return IRQ_WAKE_THREAD; -+} -+ -+static int rga2_isr_thread(struct rga_job *job, struct rga_scheduler_t *scheduler) -+{ -+ if (DEBUGGER_EN(INT_FLAG)) -+ pr_info("isr thread, INTR[0x%x], HW_STATUS[0x%x], CMD_STATUS[0x%x]\n", -+ rga_read(RGA2_INT, scheduler), -+ rga_read(RGA2_STATUS2, scheduler), -+ rga_read(RGA2_STATUS1, scheduler)); -+ -+ if (test_bit(RGA_JOB_STATE_INTR_ERR, &job->state)) { -+ if (job->hw_status & m_RGA2_STATUS2_RPP_ERROR) -+ pr_err("RGA current status: rpp error!\n"); -+ if (job->hw_status & m_RGA2_STATUS2_BUS_ERROR) -+ pr_err("RGA current status: bus error!\n"); -+ -+ if (job->intr_status & m_RGA2_INT_ERROR_INT_FLAG) { -+ pr_err("RGA bus error intr, please check your configuration and buffer.\n"); -+ job->ret = -EFAULT; -+ } else if (job->intr_status & m_RGA2_INT_MMU_INT_FLAG) { -+ pr_err("mmu failed, please check size of the buffer or whether the buffer has been freed.\n"); -+ job->ret = -EACCES; -+ } -+ -+ if (job->ret == 0) { -+ pr_err("rga intr error[0x%x]!\n", job->intr_status); -+ job->ret = -EFAULT; -+ } -+ } -+ -+ return IRQ_HANDLED; -+} -+ -+const struct rga_backend_ops rga2_ops = { -+ .get_version = rga2_get_version, -+ .set_reg = rga2_set_reg, -+ .init_reg = rga2_init_reg, -+ .soft_reset = rga2_soft_reset, -+ .read_back_reg = rga2_read_back_reg, -+ .irq = rga2_irq, -+ .isr_thread = rga2_isr_thread, -+}; diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c -new file mode 100644 -index 000000000000..2b61833aa4a3 +new file mode 100755 +index 000000000..e065b820c --- /dev/null +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c -@@ -0,0 +1,2191 @@ +@@ -0,0 +1,1989 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1685747,8 +1685314,6 @@ index 000000000000..2b61833aa4a3 +#define pr_fmt(fmt) "rga3_reg: " fmt + +#include "rga3_reg_info.h" -+#include "rga_dma_buf.h" -+#include "rga_iommu.h" +#include "rga_common.h" +#include "rga_debugger.h" +#include "rga_hw_config.h" @@ -1685832,12 +1685397,14 @@ index 000000000000..2b61833aa4a3 + dw = msg->win0.dst_act_w; + dh = msg->win0.dst_act_h; + -+ if (rotate_mode) { -+ sh = msg->win0.src_act_w; -+ sw = msg->win0.src_act_h; -+ } else { -+ sw = msg->win0.src_act_w; -+ sh = msg->win0.src_act_h; ++ if (msg->win0.rotate_mode != 0) { ++ if (rotate_mode) { ++ sh = msg->win0.src_act_w; ++ sw = msg->win0.src_act_h; ++ } else { ++ sw = msg->win0.src_act_w; ++ sh = msg->win0.src_act_h; ++ } + } + + if (sw > dw) { @@ -1686028,7 +1685595,7 @@ index 000000000000..2b61833aa4a3 + } + + /* rotate & mirror */ -+ if (msg->win0.rotate_mode == 1) { ++ if (msg->win1.yrgb_addr == 0) { + reg = + ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT)) | + (s_RGA3_WIN0_RD_CTRL_SW_WIN0_ROT(rotate_mode))); @@ -1686038,23 +1685605,36 @@ index 000000000000..2b61833aa4a3 + reg = + ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR)) | + (s_RGA3_WIN0_RD_CTRL_SW_WIN0_YMIRROR(ymirror))); -+ } + -+ /* scale */ -+ *bRGA3_WIN0_SCL_FAC = param_x | param_y << 16; ++ /* scale */ ++ *bRGA3_WIN0_SCL_FAC = param_x | param_y << 16; + -+ reg = -+ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY)) | -+ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY(x_by))); -+ reg = -+ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP)) | -+ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP(x_up))); -+ reg = -+ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY)) | -+ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY(y_by))); -+ reg = -+ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP)) | -+ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP(y_up))); ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY(x_by))); ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP(x_up))); ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY(y_by))); ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP(y_up))); ++ } else { ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_BY(1))); ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_HOR_UP(0))); ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_BY(1))); ++ reg = ++ ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP)) | ++ (s_RGA3_WIN0_RD_CTRL_SW_WIN0_VER_UP(0))); ++ } + + /* rd_mode */ + reg = @@ -1686083,36 +1685663,19 @@ index 000000000000..2b61833aa4a3 + + *bRGA3_WIN0_RD_CTRL = reg; + -+ switch (msg->win0.rd_mode) { -+ case 0: /* raster */ ++ /* stride need align to 16 */ ++ if (msg->win0.rd_mode != 1) + stride = (((msg->win0.vir_w * pixel_width) + 15) & ~15) >> 2; -+ if (rga_is_yuv420_semi_planar_format(msg->win0.format)) -+ uv_stride = ((msg->win0.vir_w + 15) & ~15) >> 2; -+ else -+ uv_stride = stride; -+ break; -+ -+ case 1: /* fbc */ ++ else + stride = ((msg->win0.vir_w + 15) & ~15) >> 2; -+ if (rga_is_yuv420_semi_planar_format(msg->win0.format)) -+ uv_stride = ((msg->win0.vir_w + 15) & ~15) >> 2; -+ else -+ uv_stride = stride; -+ break; + -+ case 2: /* tile 8*8 */ -+ /* -+ * tile 8*8 mode 8 lines of data are read/written at one time, -+ * so stride needs * 8. YUV420 only has 4 lines of UV data, so -+ * it needs to >>1. -+ */ -+ stride = (((msg->win0.vir_w * pixel_width * 8) + 15) & ~15) >> 2; -+ if (rga_is_yuv420_semi_planar_format(msg->win0.format)) -+ uv_stride = ((((msg->win0.vir_w * 8) + 15) & ~15) >> 1) >> 2; -+ else -+ uv_stride = stride; -+ break; -+ } ++ if (msg->win0.format == RGA_FORMAT_YCbCr_420_SP ++ || msg->win0.format == RGA_FORMAT_YCrCb_420_SP ++ || msg->win0.format == RGA_FORMAT_YCbCr_420_SP_10B ++ || msg->win0.format == RGA_FORMAT_YCrCb_420_SP_10B) ++ uv_stride = ((msg->win0.vir_w + 15) & ~15) >> 2; ++ else ++ uv_stride = stride; + + *bRGA3_WIN0_Y_BASE = (u32) msg->win0.yrgb_addr; + *bRGA3_WIN0_U_BASE = (u32) msg->win0.uv_addr; @@ -1686129,9 +1685692,9 @@ index 000000000000..2b61833aa4a3 + */ + + /* do not use win0 src size except fbcd */ -+ /* in FBCD, src_width needs to be aligned at 16 */ -+ *bRGA3_WIN0_SRC_SIZE = ALIGN(msg->win0.src_act_w + msg->win0.x_offset, 16) | -+ (ALIGN(msg->win0.y_offset + msg->win0.src_act_h, 16) << 16); ++ *bRGA3_WIN0_SRC_SIZE = (msg->win0.src_act_w + ++ msg->win0.x_offset) | ((msg->win0.y_offset + ++ msg->win0.src_act_h) << 16); + *bRGA3_WIN0_ACT_SIZE = + msg->win0.src_act_w | (msg->win0.src_act_h << 16); + *bRGA3_WIN0_DST_SIZE = @@ -1686464,31 +1686027,19 @@ index 000000000000..2b61833aa4a3 + + *bRGA3_WIN1_RD_CTRL = reg; + -+ switch (msg->win1.rd_mode) { -+ case 0: /* raster */ ++ /* stride need align to 16 */ ++ if (msg->win1.rd_mode != 1) + stride = (((msg->win1.vir_w * pixel_width) + 15) & ~15) >> 2; -+ if (rga_is_yuv420_semi_planar_format(msg->win1.format)) -+ uv_stride = ((msg->win1.vir_w + 15) & ~15) >> 2; -+ else -+ uv_stride = stride; -+ break; -+ -+ case 1: /* fbc */ ++ else + stride = ((msg->win1.vir_w + 15) & ~15) >> 2; -+ if (rga_is_yuv420_semi_planar_format(msg->win1.format)) -+ uv_stride = ((msg->win1.vir_w + 15) & ~15) >> 2; -+ else -+ uv_stride = stride; -+ break; + -+ case 2: /* tile 8*8 */ -+ stride = (((msg->win1.vir_w * pixel_width * 8) + 15) & ~15) >> 2; -+ if (rga_is_yuv420_semi_planar_format(msg->win1.format)) -+ uv_stride = ((((msg->win1.vir_w * 8) + 15) & ~15) >> 1) >> 2; -+ else -+ uv_stride = stride; -+ break; -+ } ++ if (msg->win1.format == RGA_FORMAT_YCbCr_420_SP ++ || msg->win1.format == RGA_FORMAT_YCrCb_420_SP ++ || msg->win1.format == RGA_FORMAT_YCbCr_420_SP_10B ++ || msg->win1.format == RGA_FORMAT_YCrCb_420_SP_10B) ++ uv_stride = ((msg->win1.vir_w + 15) & ~15) >> 2; ++ else ++ uv_stride = stride; + + *bRGA3_WIN1_Y_BASE = (u32) msg->win1.yrgb_addr; + *bRGA3_WIN1_U_BASE = (u32) msg->win1.uv_addr; @@ -1686702,20 +1686253,16 @@ index 000000000000..2b61833aa4a3 + *bRGA3_WR_RD_CTRL = reg; + *bRGA3_WR_FBCD_CTRL = fbcd_reg; + -+ switch (msg->wr.rd_mode) { -+ case 0: /* raster */ ++ /* stride need align to 16 */ ++ if (msg->wr.rd_mode != 1) { + stride = (((msg->wr.vir_w * pixel_width) + 15) & ~15) >> 2; -+ uv_stride = ((msg->wr.vir_w + 15) & ~15) >> 2; -+ + *bRGA3_WR_U_BASE = (u32) msg->wr.uv_addr; -+ -+ break; -+ -+ case 1: /* fbc */ ++ uv_stride = ((msg->wr.vir_w + 15) & ~15) >> 2; ++ } else { + stride = ((msg->wr.vir_w + 15) & ~15) >> 2; + /* need to calculate fbcd header size */ + vir_h = ((msg->wr.vir_h + 15) & ~15); -+ ++ *bRGA3_WR_U_BASE = (u32) (msg->wr.uv_addr + ((stride * vir_h)>>2)); + /* RGBA8888 */ + if (wr_format == 0x6) + uv_stride = ((msg->wr.vir_w + 15) & ~15); @@ -1686731,20 +1686278,6 @@ index 000000000000..2b61833aa4a3 + /* yuv422 10bit */ + else if (wr_format == 0x3) + uv_stride = (((msg->wr.vir_w + 15) & ~15) >> 3) * 5; -+ -+ *bRGA3_WR_U_BASE = (u32) (msg->wr.uv_addr + ((stride * vir_h)>>2)); -+ -+ break; -+ -+ case 2: /* tile 8*8 */ -+ stride = (((msg->wr.vir_w * pixel_width * 8) + 15) & ~15) >> 2; -+ if (rga_is_yuv420_semi_planar_format(msg->win0.format)) -+ uv_stride = ((((msg->wr.vir_w * 8) + 15) & ~15) >> 1) >> 2; -+ else -+ uv_stride = stride; -+ -+ *bRGA3_WR_U_BASE = (u32) msg->wr.uv_addr; -+ break; + } + + *bRGA3_WR_Y_BASE = (u32) msg->wr.yrgb_addr; @@ -1686767,9 +1686300,6 @@ index 000000000000..2b61833aa4a3 + u32 *bRGA3_OVLP_OFF; + + u32 reg; -+ union rga3_color_ctrl top_color_ctrl, bottom_color_ctrl; -+ union rga3_alpha_ctrl top_alpha_ctrl, bottom_alpha_ctrl; -+ struct rga_alpha_config *config; + + bRGA_OVERLAP_TOP_CTRL = (u32 *) (base + RGA3_OVLP_TOP_CTRL_OFFSET); + bRGA_OVERLAP_BOT_CTRL = (u32 *) (base + RGA3_OVLP_BOT_CTRL_OFFSET); @@ -1686781,249 +1686311,98 @@ index 000000000000..2b61833aa4a3 + + /* Alpha blend */ + /*bot -> win0(dst), top -> win1(src). */ -+ top_color_ctrl.value = 0; -+ bottom_color_ctrl.value = 0; -+ top_alpha_ctrl.value = 0; -+ bottom_alpha_ctrl.value = 0; -+ config = &msg->alpha_config; -+ -+ if (config->fg_pixel_alpha_en) -+ top_color_ctrl.bits.blend_mode = -+ config->fg_global_alpha_en ? RGA_ALPHA_PER_PIXEL_GLOBAL : -+ RGA_ALPHA_PER_PIXEL; -+ else -+ top_color_ctrl.bits.blend_mode = RGA_ALPHA_GLOBAL; -+ -+ if (config->bg_pixel_alpha_en) -+ bottom_color_ctrl.bits.blend_mode = -+ config->bg_global_alpha_en ? RGA_ALPHA_PER_PIXEL_GLOBAL : -+ RGA_ALPHA_PER_PIXEL; -+ else -+ bottom_color_ctrl.bits.blend_mode = RGA_ALPHA_GLOBAL; -+ -+ /* -+ * Since the hardware uses 256 as 1, the original alpha value needs to -+ * be + (alpha >> 7). -+ */ -+ top_color_ctrl.bits.alpha_cal_mode = RGA_ALPHA_SATURATION; -+ bottom_color_ctrl.bits.alpha_cal_mode = RGA_ALPHA_SATURATION; -+ -+ top_color_ctrl.bits.global_alpha = config->fg_global_alpha_value; -+ bottom_color_ctrl.bits.global_alpha = config->bg_global_alpha_value; -+ -+ /* porter duff alpha enable */ -+ switch (config->mode) { -+ case RGA_ALPHA_BLEND_SRC: -+ /* -+ * SRC mode: -+ * Sf = 1, Df = 0ï¼› -+ * [Rc,Ra] = [Sc,Sa]ï¼› -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_ONE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST: -+ /* -+ * SRC mode: -+ * Sf = 0, Df = 1ï¼› -+ * [Rc,Ra] = [Dc,Da]ï¼› -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_ONE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_OVER: -+ /* -+ * SRC-OVER mode: -+ * Sf = 1, Df = (1 - Sa) -+ * [Rc,Ra] = [ Sc + (1 - Sa) * Dc, Sa + (1 - Sa) * Da ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_ONE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_OVER: -+ /* -+ * DST-OVER mode: -+ * Sf = (1 - Da) , Df = 1 -+ * [Rc,Ra] = [ Sc * (1 - Da) + Dc, Sa * (1 - Da) + Da ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_ONE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_IN: -+ /* -+ * SRC-IN mode: -+ * Sf = Da , Df = 0 -+ * [Rc,Ra] = [ Sc * Da, Sa * Da ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_IN: -+ /* -+ * DST-IN mode: -+ * Sf = 0 , Df = Sa -+ * [Rc,Ra] = [ Dc * Sa, Da * Sa ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_OUT: -+ /* -+ * SRC-OUT mode: -+ * Sf = (1 - Da) , Df = 0 -+ * [Rc,Ra] = [ Sc * (1 - Da), Sa * (1 - Da) ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_OUT: -+ /* -+ * DST-OUT mode: -+ * Sf = 0 , Df = (1 - Sa) -+ * [Rc,Ra] = [ Dc * (1 - Sa), Da * (1 - Sa) ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_SRC_ATOP: -+ /* -+ * SRC-ATOP mode: -+ * Sf = Da , Df = (1 - Sa) -+ * [Rc,Ra] = [ Sc * Da + Dc * (1 - Sa), Sa * Da + Da * (1 - Sa) ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_DST_ATOP: -+ /* -+ * DST-ATOP mode: -+ * Sf = (1 - Da) , Df = Sa -+ * [Rc,Ra] = [ Sc * (1 - Da) + Dc * Sa, Sa * (1 - Da) + Da * Sa ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_XOR: -+ /* -+ * DST-XOR mode: -+ * Sf = (1 - Da) , Df = (1 - Sa) -+ * [Rc,Ra] = [ Sc * (1 - Da) + Dc * (1 - Sa), Sa * (1 - Da) + Da * (1 - Sa) ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; -+ -+ break; -+ -+ case RGA_ALPHA_BLEND_CLEAR: -+ /* -+ * DST-CLEAR mode: -+ * Sf = 0 , Df = 0 -+ * [Rc,Ra] = [ 0, 0 ] -+ */ -+ top_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ top_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ bottom_color_ctrl.bits.alpha_mode = RGA_ALPHA_STRAIGHT; -+ bottom_color_ctrl.bits.factor_mode = RGA_ALPHA_ZERO; -+ -+ break; -+ -+ default: -+ break; -+ } -+ -+ if (!config->enable && msg->abb_alpha_pass) { -+ /* -+ * enabled by default bot_blend_m1 && bot_alpha_cal_m1 for src channel(win0) -+ * In ABB mode, the number will be fetched according to 16*16, so it needs to -+ * be enabled top_blend_m1 && top_alpha_cal_m1 for dst channel(wr). -+ */ -+ top_color_ctrl.bits.color_mode = RGA_ALPHA_PRE_MULTIPLIED; -+ -+ top_alpha_ctrl.bits.blend_mode = RGA_ALPHA_PER_PIXEL; -+ top_alpha_ctrl.bits.alpha_cal_mode = RGA_ALPHA_NO_SATURATION; -+ -+ bottom_color_ctrl.bits.color_mode = RGA_ALPHA_PRE_MULTIPLIED; -+ -+ bottom_alpha_ctrl.bits.blend_mode = RGA_ALPHA_PER_PIXEL; -+ bottom_alpha_ctrl.bits.alpha_cal_mode = RGA_ALPHA_NO_SATURATION; -+ } else { -+ top_color_ctrl.bits.color_mode = -+ config->fg_pre_multiplied ? -+ RGA_ALPHA_PRE_MULTIPLIED : RGA_ALPHA_NO_PRE_MULTIPLIED; ++ reg = 0; ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_CTRL_SW_TOP_COLOR_M0)) | ++ (s_RGA3_OVLP_TOP_CTRL_SW_TOP_COLOR_M0 ++ (msg->alpha_mode_0 >> 7))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_M0)) | ++ (s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_M0 ++ (msg->alpha_mode_0 >> 0))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_CTRL_SW_TOP_BLEND_M0)) | ++ (s_RGA3_OVLP_TOP_CTRL_SW_TOP_BLEND_M0 ++ (msg->alpha_mode_0 >> 1))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_CAL_M0)) | ++ (s_RGA3_OVLP_TOP_CTRL_SW_TOP_ALPHA_CAL_M0 ++ (msg->alpha_mode_0 >> 3))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_CTRL_SW_TOP_FACTOR_M0)) | ++ (s_RGA3_OVLP_TOP_CTRL_SW_TOP_FACTOR_M0 ++ (msg->alpha_mode_0 >> 4))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_CTRL_SW_TOP_GLOBAL_ALPHA)) | ++ (s_RGA3_OVLP_TOP_CTRL_SW_TOP_GLOBAL_ALPHA ++ (msg->win1_a_global_val))); ++ *bRGA_OVERLAP_TOP_CTRL = reg; + -+ top_alpha_ctrl.bits.blend_mode = top_color_ctrl.bits.blend_mode; -+ top_alpha_ctrl.bits.alpha_cal_mode = top_color_ctrl.bits.alpha_cal_mode; -+ top_alpha_ctrl.bits.alpha_mode = top_color_ctrl.bits.alpha_mode; -+ top_alpha_ctrl.bits.factor_mode = top_color_ctrl.bits.factor_mode; ++ reg = 0; ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_CTRL_SW_BOT_COLOR_M0)) | ++ (s_RGA3_OVLP_BOT_CTRL_SW_BOT_COLOR_M0 ++ (msg->alpha_mode_0 >> 15))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_M0)) | ++ (s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_M0 ++ (msg->alpha_mode_0 >> 8))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_CTRL_SW_BOT_BLEND_M0)) | ++ (s_RGA3_OVLP_BOT_CTRL_SW_BOT_BLEND_M0 ++ (msg->alpha_mode_0 >> 9))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_CAL_M0)) | ++ (s_RGA3_OVLP_BOT_CTRL_SW_BOT_ALPHA_CAL_M0 ++ (msg->alpha_mode_0 >> 11))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_CTRL_SW_BOT_FACTOR_M0)) | ++ (s_RGA3_OVLP_BOT_CTRL_SW_BOT_FACTOR_M0 ++ (msg->alpha_mode_0 >> 12))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_CTRL_SW_BOT_GLOBAL_ALPHA)) | ++ (s_RGA3_OVLP_BOT_CTRL_SW_BOT_GLOBAL_ALPHA ++ (msg->win0_a_global_val))); ++ *bRGA_OVERLAP_BOT_CTRL = reg; + -+ bottom_color_ctrl.bits.color_mode = -+ config->bg_pre_multiplied ? -+ RGA_ALPHA_PRE_MULTIPLIED : RGA_ALPHA_NO_PRE_MULTIPLIED; ++ reg = 0; ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_M1)) | ++ (s_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_M1 ++ (msg->alpha_mode_1 >> 0))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_ALPHA_SW_TOP_BLEND_M1)) | ++ (s_RGA3_OVLP_TOP_ALPHA_SW_TOP_BLEND_M1 ++ (msg->alpha_mode_1 >> 1))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1)) | ++ (s_RGA3_OVLP_TOP_ALPHA_SW_TOP_ALPHA_CAL_M1 ++ (msg->alpha_mode_1 >> 3))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1)) | ++ (s_RGA3_OVLP_TOP_ALPHA_SW_TOP_FACTOR_M1 ++ (msg->alpha_mode_1 >> 4))); ++ *bRGA_OVERLAP_TOP_ALPHA = reg; + -+ bottom_alpha_ctrl.bits.blend_mode = bottom_color_ctrl.bits.blend_mode; -+ bottom_alpha_ctrl.bits.alpha_cal_mode = bottom_color_ctrl.bits.alpha_cal_mode; -+ bottom_alpha_ctrl.bits.alpha_mode = bottom_color_ctrl.bits.alpha_mode; -+ bottom_alpha_ctrl.bits.factor_mode = bottom_color_ctrl.bits.factor_mode; -+ } ++ reg = 0; ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_M1)) | ++ (s_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_M1 ++ (msg->alpha_mode_1 >> 8))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_ALPHA_SW_BOT_BLEND_M1)) | ++ (s_RGA3_OVLP_BOT_ALPHA_SW_BOT_BLEND_M1 ++ (msg->alpha_mode_1 >> 9))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1)) | ++ (s_RGA3_OVLP_BOT_ALPHA_SW_BOT_ALPHA_CAL_M1 ++ (msg->alpha_mode_1 >> 11))); ++ reg = ++ ((reg & (~m_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1)) | ++ (s_RGA3_OVLP_BOT_ALPHA_SW_BOT_FACTOR_M1 ++ (msg->alpha_mode_1 >> 12))); + -+ *bRGA_OVERLAP_TOP_CTRL = top_color_ctrl.value; -+ *bRGA_OVERLAP_BOT_CTRL = bottom_color_ctrl.value; -+ *bRGA_OVERLAP_TOP_ALPHA = top_alpha_ctrl.value; -+ *bRGA_OVERLAP_BOT_ALPHA = bottom_alpha_ctrl.value; ++ *bRGA_OVERLAP_BOT_ALPHA = reg; + + /* set RGA_OVERLAP_CTRL */ + reg = 0; @@ -1687059,15 +1686438,16 @@ index 000000000000..2b61833aa4a3 + * warning: if m1 & m0 need config split,need to redesign + * this judge, which consider RGBA8888 format + */ -+ reg = ((reg & (~m_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN)) | -+ (s_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN(config->enable))); ++ if (msg->alpha_mode_1 > 0 && msg->alpha_mode_0 > 0) ++ reg = ((reg & (~m_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN)) | ++ (s_RGA3_OVLP_CTRL_SW_TOP_ALPHA_EN(1))); + + *bRGA_OVERLAP_CTRL = reg; + + *bRGA3_OVLP_OFF = msg->wr.x_offset | (msg->wr.y_offset << 16); +} + -+static int rga3_gen_reg_info(u8 *base, struct rga3_req *msg) ++int rga3_gen_reg_info(u8 *base, struct rga3_req *msg) +{ + switch (msg->render_mode) { + case BITBLT_MODE: @@ -1687151,8 +1686531,9 @@ index 000000000000..2b61833aa4a3 +} + +/* TODO: common part */ -+static void rga_cmd_to_rga3_cmd(struct rga_req *req_rga, struct rga3_req *req) ++void rga_cmd_to_rga3_cmd(struct rga_req *req_rga, struct rga3_req *req) +{ ++ u16 alpha_mode_0, alpha_mode_1; + struct rga_img_info_t tmp; + + req->render_mode = BITBLT_MODE; @@ -1687215,8 +1686596,8 @@ index 000000000000..2b61833aa4a3 + if (!(req_rga->alpha_rop_flag & 1)) { + if (!rga_is_alpha_format(req_rga->src.format) && + rga_is_alpha_format(req_rga->dst.format)) { -+ req->alpha_config.fg_global_alpha_value = 0xff; -+ req->alpha_config.bg_global_alpha_value = 0xff; ++ req->win0_a_global_val = 0xff; ++ req->win1_a_global_val = 0xff; + } + } + @@ -1687236,7 +1686617,7 @@ index 000000000000..2b61833aa4a3 + * be enabled top_blend_m1 && top_alpha_cal_m1 for dst channel(wr). + */ + if (rga_is_alpha_format(req_rga->src.format)) -+ req->abb_alpha_pass = true; ++ req->alpha_mode_1 = 0x0a0a; + + set_win_info(&req->win0, &req_rga->src); + @@ -1687266,7 +1686647,7 @@ index 000000000000..2b61833aa4a3 + * be enabled bot_blend_m1 && bot_alpha_cal_m1 for src1/dst channel(win0). + */ + if (rga_is_alpha_format(req_rga->src.format)) -+ req->abb_alpha_pass = true; ++ req->alpha_mode_1 = 0x0a0a; + + if (req_rga->pat.yrgb_addr != 0) { + if (req_rga->src.yrgb_addr == req_rga->dst.yrgb_addr) { @@ -1687310,18 +1686691,18 @@ index 000000000000..2b61833aa4a3 + if (req->win0.x_offset || req->win0.y_offset) { + req->win0.src_act_w = req->win0.src_act_w + req->win0.x_offset; + req->win0.src_act_h = req->win0.src_act_h + req->win0.y_offset; -+ req->win0.dst_act_w = req_rga->dst.act_w + req->win0.x_offset; -+ req->win0.dst_act_h = req_rga->dst.act_h + req->win0.y_offset; ++ req->win0.dst_act_w = req_rga->pat.act_w + req->win0.x_offset; ++ req->win0.dst_act_h = req_rga->pat.act_h + req->win0.y_offset; + + req->win0.x_offset = 0; + req->win0.y_offset = 0; + } else { -+ req->win0.dst_act_w = req_rga->dst.act_w; -+ req->win0.dst_act_h = req_rga->dst.act_h; ++ req->win0.dst_act_w = req_rga->pat.act_w; ++ req->win0.dst_act_h = req_rga->pat.act_h; + } + /* set win1 dst size */ -+ req->win1.dst_act_w = req_rga->dst.act_w; -+ req->win1.dst_act_h = req_rga->dst.act_h; ++ req->win1.dst_act_w = req_rga->pat.act_w; ++ req->win1.dst_act_h = req_rga->pat.act_h; + } else { + /* A+B->B mode */ + set_win_info(&req->win0, &req_rga->dst); @@ -1687369,43 +1686750,103 @@ index 000000000000..2b61833aa4a3 + /* Alpha blend mode */ + if (((req_rga->alpha_rop_flag) & 1)) { + if ((req_rga->alpha_rop_flag >> 3) & 1) { -+ req->alpha_config.enable = true; -+ ++ /* porter duff alpha enable */ ++ switch (req_rga->PD_mode) { ++ /* dst = 0 */ ++ case 0: ++ break; ++ /* dst = src */ ++ case 1: ++ req->alpha_mode_0 = 0x0212; ++ req->alpha_mode_1 = 0x0212; ++ break; ++ /* dst = dst */ ++ case 2: ++ req->alpha_mode_0 = 0x1202; ++ req->alpha_mode_1 = 0x1202; ++ break; ++ /* dst = (256*sc + (256 - sa)*dc) >> 8 */ ++ case 3: ++ if ((req_rga->alpha_rop_mode & 3) == 0) { ++ /* both use globalAlpha. */ ++ alpha_mode_0 = 0x3010; ++ alpha_mode_1 = 0x3010; ++ } else if ((req_rga->alpha_rop_mode & 3) == 1) { ++ /* Do not use globalAlpha. */ ++ alpha_mode_0 = 0x3212; ++ alpha_mode_1 = 0x3212; ++ } else if ((req_rga->alpha_rop_mode & 3) == 2) { ++ /* ++ * dst use globalAlpha, ++ * and dst has pixelAlpha. ++ */ ++ alpha_mode_0 = 0x3014; ++ alpha_mode_1 = 0x3014; ++ } else { ++ /* ++ * dst use globalAlpha, ++ * and dst does not have pixelAlpha. ++ */ ++ alpha_mode_0 = 0x3012; ++ alpha_mode_1 = 0x3012; ++ } ++ req->alpha_mode_0 = alpha_mode_0; ++ req->alpha_mode_1 = alpha_mode_1; ++ break; ++ /* dst = (sc*(256-da) + 256*dc) >> 8 */ ++ case 4: ++ /* Do not use globalAlpha. */ ++ req->alpha_mode_0 = 0x1232; ++ req->alpha_mode_1 = 0x1232; ++ break; ++ /* dst = (da*sc) >> 8 */ ++ case 5: ++ break; ++ /* dst = (sa*dc) >> 8 */ ++ case 6: ++ break; ++ /* dst = ((256-da)*sc) >> 8 */ ++ case 7: ++ break; ++ /* dst = ((256-sa)*dc) >> 8 */ ++ case 8: ++ break; ++ /* dst = (da*sc + (256-sa)*dc) >> 8 */ ++ case 9: ++ req->alpha_mode_0 = 0x3040; ++ req->alpha_mode_1 = 0x3040; ++ break; ++ /* dst = ((256-da)*sc + (sa*dc)) >> 8 */ ++ case 10: ++ break; ++ /* dst = ((256-da)*sc + (256-sa)*dc) >> 8 */ ++ case 11: ++ break; ++ case 12: ++ req->alpha_mode_0 = 0x0010; ++ req->alpha_mode_1 = 0x0820; ++ break; ++ default: ++ break; ++ } ++ /* Real color mode */ + if ((req_rga->alpha_rop_flag >> 9) & 1) { -+ req->alpha_config.fg_pre_multiplied = false; -+ req->alpha_config.bg_pre_multiplied = false; -+ } else { -+ req->alpha_config.fg_pre_multiplied = true; -+ req->alpha_config.bg_pre_multiplied = true; ++ if (req->alpha_mode_0 & (0x01 << 1)) ++ req->alpha_mode_0 |= (1 << 7); ++ if (req->alpha_mode_0 & (0x01 << 9)) ++ req->alpha_mode_0 |= (1 << 15); + } -+ -+ req->alpha_config.fg_pixel_alpha_en = rga_is_alpha_format(req->win1.format); -+ req->alpha_config.bg_pixel_alpha_en = rga_is_alpha_format(req->win0.format); -+ -+ if (req_rga->feature.global_alpha_en) { -+ if (req_rga->fg_global_alpha < 0xff) { -+ req->alpha_config.fg_global_alpha_en = true; -+ req->alpha_config.fg_global_alpha_value = -+ req_rga->fg_global_alpha; -+ } else if (!req->alpha_config.fg_pixel_alpha_en) { -+ req->alpha_config.fg_global_alpha_en = true; -+ req->alpha_config.fg_global_alpha_value = 0xff; -+ } -+ -+ if (req_rga->bg_global_alpha < 0xff) { -+ req->alpha_config.bg_global_alpha_en = true; -+ req->alpha_config.bg_global_alpha_value = -+ req_rga->bg_global_alpha; -+ } else if (!req->alpha_config.bg_pixel_alpha_en) { -+ req->alpha_config.bg_global_alpha_en = true; -+ req->alpha_config.bg_global_alpha_value = 0xff; -+ } -+ } else { -+ req->alpha_config.bg_global_alpha_value = 0xff; -+ req->alpha_config.bg_global_alpha_value = 0xff; ++ } else { ++ if ((req_rga->alpha_rop_mode & 3) == 0) { ++ req->alpha_mode_0 = 0x3040; ++ req->alpha_mode_1 = 0x3040; ++ } else if ((req_rga->alpha_rop_mode & 3) == 1) { ++ req->alpha_mode_0 = 0x3042; ++ req->alpha_mode_1 = 0x3242; ++ } else if ((req_rga->alpha_rop_mode & 3) == 2) { ++ req->alpha_mode_0 = 0x3044; ++ req->alpha_mode_1 = 0x3044; + } -+ -+ req->alpha_config.mode = req_rga->PD_mode; + } + } + @@ -1687454,39 +1686895,54 @@ index 000000000000..2b61833aa4a3 + } +} + -+static void rga3_soft_reset(struct rga_scheduler_t *scheduler) ++void rga3_soft_reset(struct rga_scheduler_t *scheduler) +{ + u32 i; -+ u32 iommu_dte_addr = 0; ++ u32 reg; ++ u32 mmu_addr; ++ ++ mmu_addr = rga_read(0xf00, scheduler); ++ ++ rga_write((1 << 3) | (1 << 4), RGA3_SYS_CTRL, scheduler); + -+ if (scheduler->data->mmu == RGA_IOMMU) -+ iommu_dte_addr = rga_read(RGA_IOMMU_DTE_ADDR, scheduler); ++ pr_err("soft reset sys_ctrl = %x, ro_rest = %x", ++ rga_read(RGA3_SYS_CTRL, scheduler), ++ rga_read(RGA3_RO_SRST, scheduler)); + -+ rga_write(s_RGA3_SYS_CTRL_CCLK_SRESET(1) | s_RGA3_SYS_CTRL_ACLK_SRESET(1), -+ RGA3_SYS_CTRL, scheduler); ++ mdelay(20); ++ ++ pr_err("soft reset sys_ctrl = %x, ro_rest = %x", ++ rga_read(RGA3_SYS_CTRL, scheduler), ++ rga_read(RGA3_RO_SRST, scheduler)); ++ ++ rga_write((0 << 3) | (0 << 4), RGA3_SYS_CTRL, scheduler); ++ ++ pr_err("soft after reset sys_ctrl = %x, ro_rest = %x", ++ rga_read(RGA3_SYS_CTRL, scheduler), ++ rga_read(RGA3_RO_SRST, scheduler)); ++ ++ rga_write(1, RGA3_INT_CLR, scheduler); ++ ++ rga_write(mmu_addr, 0xf00, scheduler); ++ rga_write(0, 0xf08, scheduler); ++ ++ if (DEBUGGER_EN(INT_FLAG)) ++ pr_info("irq INT[%x], STATS0[%x], STATS1[%x]\n", ++ rga_read(RGA3_INT_RAW, scheduler), ++ rga_read(RGA3_STATUS0, scheduler), ++ rga_read(RGA3_STATUS1, scheduler)); + + for (i = 0; i < RGA_RESET_TIMEOUT; i++) { -+ if (rga_read(RGA3_RO_SRST, scheduler) & m_RGA3_RO_SRST_RO_RST_DONE) ++ reg = rga_read(RGA3_SYS_CTRL, scheduler) & 1; ++ ++ if (reg == 0) + break; + + udelay(1); + } + -+ rga_write(s_RGA3_SYS_CTRL_CCLK_SRESET(0) | s_RGA3_SYS_CTRL_ACLK_SRESET(0), -+ RGA3_SYS_CTRL, scheduler); -+ -+ if (scheduler->data->mmu == RGA_IOMMU) { -+ rga_write(iommu_dte_addr, RGA_IOMMU_DTE_ADDR, scheduler); -+ /* enable iommu */ -+ rga_write(RGA_IOMMU_CMD_ENABLE_PAGING, RGA_IOMMU_COMMAND, scheduler); -+ } -+ + if (i == RGA_RESET_TIMEOUT) -+ pr_err("RGA3 core[%d] soft reset timeout. SYS_CTRL[0x%x], RO_SRST[0x%x]\n", -+ scheduler->core, rga_read(RGA3_SYS_CTRL, scheduler), -+ rga_read(RGA3_RO_SRST, scheduler)); -+ else -+ pr_info("RGA3 core[%d] soft reset complete.\n", scheduler->core); ++ pr_err("soft reset timeout.\n"); +} + +static int rga3_scale_check(const struct rga3_req *req) @@ -1687653,14 +1687109,11 @@ index 000000000000..2b61833aa4a3 + pr_info("mmu: win0 = %.2x win1 = %.2x wr = %.2x\n", + req->mmu_info.src0_mmu_flag, req->mmu_info.src1_mmu_flag, + req->mmu_info.dst_mmu_flag); -+ pr_info("alpha: flag %x mode=%s\n", -+ req->alpha_rop_flag, rga_get_blend_mode_str(req->alpha_config.mode)); -+ pr_info("alpha: pre_multi=[%d,%d] pixl=[%d,%d] glb=[%d,%d]\n", -+ req->alpha_config.fg_pre_multiplied, req->alpha_config.bg_pre_multiplied, -+ req->alpha_config.fg_pixel_alpha_en, req->alpha_config.bg_pixel_alpha_en, -+ req->alpha_config.fg_global_alpha_en, req->alpha_config.bg_global_alpha_en); -+ pr_info("alpha: fg_global_alpha=%x bg_global_alpha=%x\n", -+ req->alpha_config.fg_global_alpha_value, req->alpha_config.bg_global_alpha_value); ++ pr_info("alpha: flag %x mode0=%x mode1=%x\n", req->alpha_rop_flag, ++ req->alpha_mode_0, req->alpha_mode_1); ++ pr_info("blend mode is %s\n", ++ rga_get_blend_mode_str(req->alpha_rop_flag, req->alpha_mode_0, ++ req->alpha_mode_1)); + pr_info("yuv2rgb mode is %x\n", req->yuv2rgb_mode); +} + @@ -1687689,12 +1687142,11 @@ index 000000000000..2b61833aa4a3 + return 0; +} + -+static int rga3_init_reg(struct rga_job *job) ++int rga3_init_reg(struct rga_job *job) +{ + struct rga3_req req; + int ret = 0; + struct rga_scheduler_t *scheduler = NULL; -+ ktime_t timestamp = ktime_get(); + + scheduler = job->scheduler; + if (unlikely(scheduler == NULL)) { @@ -1687724,10 +1687176,6 @@ index 000000000000..2b61833aa4a3 + return -EINVAL; + } + -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], generate register cost time %lld us\n", -+ job->request_id, ktime_us_delta(ktime_get(), timestamp)); -+ + return ret; +} + @@ -1687751,24 +1687199,29 @@ index 000000000000..2b61833aa4a3 + cmd_reg[2 + i * 4], cmd_reg[3 + i * 4]); +} + -+static int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) ++int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) +{ -+ int i; -+ bool master_mode_en; -+ uint32_t sys_ctrl; + ktime_t now = ktime_get(); + -+ /* -+ * Currently there is no iova allocated for storing cmd for the IOMMU device, -+ * so the iommu device needs to use the slave mode. -+ */ -+ if (scheduler->data->mmu != RGA_IOMMU) -+ master_mode_en = true; -+ else -+ master_mode_en = false; ++ //rga_dma_flush_range(&job->cmd_reg[0], &job->cmd_reg[50], scheduler); ++ ++ rga_write(0x0, RGA3_SYS_CTRL, scheduler); ++ ++#if 0 ++ /* CMD buff */ ++ rga_write(virt_to_phys(job->cmd_reg), RGA3_CMD_ADDR, scheduler); ++#else ++ { ++ int32_t m, *cmd; ++ ++ cmd = job->cmd_reg; ++ for (m = 0; m <= 50; m++) ++ rga_write(cmd[m], 0x100 + m * 4, scheduler); ++ } ++#endif + + if (DEBUGGER_EN(REG)) { -+ uint32_t *p; ++ int32_t i, *p; + + p = job->cmd_reg; + pr_info("CMD_REG\n"); @@ -1687778,55 +1687231,44 @@ index 000000000000..2b61833aa4a3 + p[2 + i * 4], p[3 + i * 4]); + } + -+ /* All CMD finish int */ -+ rga_write(m_RGA3_INT_FRM_DONE | m_RGA3_INT_CMD_LINE_FINISH | m_RGA3_INT_ERROR_MASK, -+ RGA3_INT_EN, scheduler); -+ -+ if (master_mode_en) { -+ /* master mode */ -+ sys_ctrl = s_RGA3_SYS_CTRL_CMD_MODE(1); -+ -+ /* cmd buffer flush cache to ddr */ -+ rga_dma_sync_flush_range(&job->cmd_reg[0], &job->cmd_reg[50], scheduler); -+ -+ rga_write(virt_to_phys(job->cmd_reg), RGA3_CMD_ADDR, scheduler); -+ rga_write(sys_ctrl, RGA3_SYS_CTRL, scheduler); -+ rga_write(m_RGA3_CMD_CTRL_CMD_LINE_ST_P, RGA3_CMD_CTRL, scheduler); -+ } else { -+ /* slave mode */ -+ sys_ctrl = s_RGA3_SYS_CTRL_CMD_MODE(0) | m_RGA3_SYS_CTRL_RGA_SART; -+ -+ for (i = 0; i <= 50; i++) -+ rga_write(job->cmd_reg[i], 0x100 + i * 4, scheduler); ++#if 0 ++ /* master mode */ ++ rga_write((0x1 << 1) | (0x1 << 2) | (0x1 << 5) | (0x1 << 6), ++ RGA3_SYS_CTRL, scheduler); ++#else ++ /* slave mode */ ++ //rga_write(1, 0xf08, scheduler); ++#endif + -+ rga_write(sys_ctrl, RGA3_SYS_CTRL, scheduler); -+ } ++ /* All CMD finish int */ ++ rga_write(1, RGA3_INT_EN, scheduler); + -+ if (DEBUGGER_EN(REG)) { -+ pr_info("sys_ctrl = 0x%x, int_en = 0x%x, int_raw = 0x%x\n", ++ if (DEBUGGER_EN(MSG)) { ++ pr_info("sys_ctrl = %x, int_en = %x, int_raw = %x\n", + rga_read(RGA3_SYS_CTRL, scheduler), + rga_read(RGA3_INT_EN, scheduler), + rga_read(RGA3_INT_RAW, scheduler)); + -+ pr_info("hw_status = 0x%x, cmd_status = 0x%x\n", ++ pr_info("status0 = %x, status1 = %x\n", + rga_read(RGA3_STATUS0, scheduler), -+ rga_read(RGA3_CMD_STATE, scheduler)); ++ rga_read(RGA3_STATUS1, scheduler)); + } + + if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], set register cost time %lld us\n", -+ job->request_id, ktime_us_delta(now, job->timestamp)); ++ pr_info("set cmd use time = %lld\n", ktime_us_delta(now, job->timestamp)); + + job->hw_running_time = now; + job->hw_recoder_time = now; + ++ rga_write(1, RGA3_SYS_CTRL, scheduler); ++ + if (DEBUGGER_EN(REG)) + rga3_dump_read_back_reg(scheduler); + + return 0; +} + -+static int rga3_get_version(struct rga_scheduler_t *scheduler) ++int rga3_get_version(struct rga_scheduler_t *scheduler) +{ + u32 major_version, minor_version, svn_version; + u32 reg_version; @@ -1687851,89 +1687293,12 @@ index 000000000000..2b61833aa4a3 + + return 0; +} -+ -+static int rga3_irq(struct rga_scheduler_t *scheduler) -+{ -+ struct rga_job *job = scheduler->running_job; -+ -+ if (job == NULL) -+ return IRQ_HANDLED; -+ -+ if (test_bit(RGA_JOB_STATE_INTR_ERR, &job->state)) -+ return IRQ_WAKE_THREAD; -+ -+ job->intr_status = rga_read(RGA3_INT_RAW, scheduler); -+ job->hw_status = rga_read(RGA3_STATUS0, scheduler); -+ job->cmd_status = rga_read(RGA3_CMD_STATE, scheduler); -+ -+ if (DEBUGGER_EN(INT_FLAG)) -+ pr_info("irq handler, INTR[0x%x], HW_STATUS[0x%x], CMD_STATUS[0x%x]\n", -+ job->intr_status, job->hw_status, job->cmd_status); -+ -+ if (job->intr_status & (m_RGA3_INT_FRM_DONE | m_RGA3_INT_CMD_LINE_FINISH)) { -+ set_bit(RGA_JOB_STATE_FINISH, &job->state); -+ } else if (job->intr_status & m_RGA3_INT_ERROR_MASK) { -+ set_bit(RGA_JOB_STATE_INTR_ERR, &job->state); -+ -+ pr_err("irq handler err! INTR[0x%x], HW_STATUS[0x%x], CMD_STATUS[0x%x]\n", -+ job->intr_status, job->hw_status, job->cmd_status); -+ scheduler->ops->soft_reset(scheduler); -+ } -+ -+ /*clear INTR */ -+ rga_write(m_RGA3_INT_FRM_DONE | m_RGA3_INT_CMD_LINE_FINISH | m_RGA3_INT_ERROR_MASK, -+ RGA3_INT_CLR, scheduler); -+ -+ return IRQ_WAKE_THREAD; -+} -+ -+static int rga3_isr_thread(struct rga_job *job, struct rga_scheduler_t *scheduler) -+{ -+ if (DEBUGGER_EN(INT_FLAG)) -+ pr_info("isr thread, INTR[0x%x], HW_STATUS[0x%x], CMD_STATUS[0x%x]\n", -+ rga_read(RGA3_INT_RAW, scheduler), -+ rga_read(RGA3_STATUS0, scheduler), -+ rga_read(RGA3_CMD_STATE, scheduler)); -+ -+ if (test_bit(RGA_JOB_STATE_INTR_ERR, &job->state)) { -+ if (job->intr_status & m_RGA3_INT_RAG_MI_RD_BUS_ERR) { -+ pr_err("DMA read bus error, please check size of the input_buffer or whether the buffer has been freed.\n"); -+ job->ret = -EFAULT; -+ } else if (job->intr_status & m_RGA3_INT_WIN0_FBCD_DEC_ERR) { -+ pr_err("win0 FBC decoder error, please check the fbc image of the source.\n"); -+ job->ret = -EFAULT; -+ } else if (job->intr_status & m_RGA3_INT_WIN1_FBCD_DEC_ERR) { -+ pr_err("win1 FBC decoder error, please check the fbc image of the source.\n"); -+ job->ret = -EFAULT; -+ } else if (job->intr_status & m_RGA3_INT_RGA_MI_WR_BUS_ERR) { -+ pr_err("wr buss error, please check size of the output_buffer or whether the buffer has been freed.\n"); -+ job->ret = -EFAULT; -+ } -+ -+ if (job->ret == 0) { -+ pr_err("rga intr error[0x%x]!\n", job->intr_status); -+ job->ret = -EFAULT; -+ } -+ } -+ -+ return IRQ_HANDLED; -+} -+ -+const struct rga_backend_ops rga3_ops = { -+ .get_version = rga3_get_version, -+ .set_reg = rga3_set_reg, -+ .init_reg = rga3_init_reg, -+ .soft_reset = rga3_soft_reset, -+ .read_back_reg = NULL, -+ .irq = rga3_irq, -+ .isr_thread = rga3_isr_thread, -+}; diff --git a/drivers/video/rockchip/rga3/rga_common.c b/drivers/video/rockchip/rga3/rga_common.c -new file mode 100644 -index 000000000000..80d4821fb321 +new file mode 100755 +index 000000000..a96e9fba0 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_common.c -@@ -0,0 +1,772 @@ +@@ -0,0 +1,664 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1688043,30 +1687408,6 @@ index 000000000000..80d4821fb321 + } +} + -+bool rga_is_yuv420_planar_format(uint32_t format) -+{ -+ switch (format) { -+ case RGA_FORMAT_YCbCr_420_P: -+ case RGA_FORMAT_YCrCb_420_P: -+ return true; -+ default: -+ return false; -+ } -+} -+ -+bool rga_is_yuv420_semi_planar_format(uint32_t format) -+{ -+ switch (format) { -+ case RGA_FORMAT_YCbCr_420_SP: -+ case RGA_FORMAT_YCrCb_420_SP: -+ case RGA_FORMAT_YCbCr_420_SP_10B: -+ case RGA_FORMAT_YCrCb_420_SP_10B: -+ return true; -+ default: -+ return false; -+ } -+} -+ +bool rga_is_yuv422_packed_format(uint32_t format) +{ + switch (format) { @@ -1688080,30 +1687421,6 @@ index 000000000000..80d4821fb321 + } +} + -+bool rga_is_yuv422_planar_format(uint32_t format) -+{ -+ switch (format) { -+ case RGA_FORMAT_YCbCr_422_P: -+ case RGA_FORMAT_YCrCb_422_P: -+ return true; -+ default: -+ return false; -+ } -+} -+ -+bool rga_is_yuv422_semi_planar_format(uint32_t format) -+{ -+ switch (format) { -+ case RGA_FORMAT_YCbCr_422_SP: -+ case RGA_FORMAT_YCrCb_422_SP: -+ case RGA_FORMAT_YCbCr_422_SP_10B: -+ case RGA_FORMAT_YCrCb_422_SP_10B: -+ return true; -+ default: -+ return false; -+ } -+} -+ +bool rga_is_yuv8bit_format(uint32_t format) +{ + switch (format) { @@ -1688465,49 +1687782,20 @@ index 000000000000..80d4821fb321 + } +} + -+const char *rga_get_blend_mode_str(enum rga_alpha_blend_mode mode) ++const char *rga_get_blend_mode_str(uint16_t alpha_rop_flag, ++ uint16_t alpha_mode_0, ++ uint16_t alpha_mode_1) +{ -+ switch (mode) { -+ case RGA_ALPHA_NONE: ++ if (alpha_rop_flag == 0) { + return "no blend"; -+ -+ case RGA_ALPHA_BLEND_SRC: -+ return "src"; -+ -+ case RGA_ALPHA_BLEND_DST: -+ return "dst"; -+ -+ case RGA_ALPHA_BLEND_SRC_OVER: -+ return "src-over"; -+ -+ case RGA_ALPHA_BLEND_DST_OVER: -+ return "dst-over"; -+ -+ case RGA_ALPHA_BLEND_SRC_IN: -+ return "src-in"; -+ -+ case RGA_ALPHA_BLEND_DST_IN: -+ return "dst-in"; -+ -+ case RGA_ALPHA_BLEND_SRC_OUT: -+ return "src-out"; -+ -+ case RGA_ALPHA_BLEND_DST_OUT: -+ return "dst-out"; -+ -+ case RGA_ALPHA_BLEND_SRC_ATOP: -+ return "src-atop"; -+ -+ case RGA_ALPHA_BLEND_DST_ATOP: -+ return "dst-atop"; -+ -+ case RGA_ALPHA_BLEND_XOR: -+ return "xor"; -+ -+ case RGA_ALPHA_BLEND_CLEAR: -+ return "clear"; -+ -+ default: ++ } else if (alpha_rop_flag == 0x9) { ++ if (alpha_mode_0 == 0x381A && alpha_mode_1 == 0x381A) ++ return "105 src + (1-src.a)*dst"; ++ else if (alpha_mode_0 == 0x483A && alpha_mode_1 == 0x483A) ++ return "405 src.a * src + (1-src.a) * dst"; ++ else ++ return "check reg for more imformation"; ++ } else { + return "check reg for more imformation"; + } +} @@ -1688540,20 +1687828,6 @@ index 000000000000..80d4821fb321 + } +} + -+const char *rga_get_core_name(enum RGA_SCHEDULER_CORE core) -+{ -+ switch (core) { -+ case RGA_SCHEDULER_RGA3_CORE0: -+ return "RGA3_core0"; -+ case RGA_SCHEDULER_RGA3_CORE1: -+ return "RGA3_core1"; -+ case RGA_SCHEDULER_RGA2_CORE0: -+ return "RGA2_core0"; -+ default: -+ return "unknown_core"; -+ } -+} -+ +void rga_convert_addr(struct rga_img_info_t *img, bool before_vir_get_channel) +{ + /* @@ -1688646,9 +1687920,6 @@ index 000000000000..80d4821fb321 + /* YUV FORMAT */ + case RGA_FORMAT_YCbCr_422_SP: + case RGA_FORMAT_YCrCb_422_SP: -+ /* 10bit format stride is externally configured. */ -+ case RGA_FORMAT_YCbCr_422_SP_10B: -+ case RGA_FORMAT_YCrCb_422_SP_10B: + yrgb = w * h; + uv = w * h; + break; @@ -1688692,26 +1687963,12 @@ index 000000000000..80d4821fb321 + + return (yrgb + uv + v); +} -+ -+void rga_dump_memory_parm(struct rga_memory_parm *parm) -+{ -+ pr_info("memory param: w = %d, h = %d, f = %s(0x%x), size = %d\n", -+ parm->width, parm->height, rga_get_format_name(parm->format), -+ parm->format, parm->size); -+} -+ -+void rga_dump_external_buffer(struct rga_external_buffer *buffer) -+{ -+ pr_info("external: memory = 0x%lx, type = %s\n", -+ (unsigned long)buffer->memory, rga_get_memory_type_str(buffer->type)); -+ rga_dump_memory_parm(&buffer->memory_parm); -+} diff --git a/drivers/video/rockchip/rga3/rga_debugger.c b/drivers/video/rockchip/rga3/rga_debugger.c -new file mode 100644 -index 000000000000..fe2103147845 +new file mode 100755 +index 000000000..068e0ccf5 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_debugger.c -@@ -0,0 +1,970 @@ +@@ -0,0 +1,963 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1689335,11 +1688592,7 @@ index 000000000000..fe2103147845 +#ifdef CONFIG_ROCKCHIP_RGA_PROC_FS +static int rga_procfs_open(struct inode *inode, struct file *file) +{ -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ struct rga_debugger_node *node = pde_data(inode); -+#else + struct rga_debugger_node *node = PDE_DATA(inode); -+#endif + + return single_open(file, node->info_ent->show, node); +} @@ -1689544,6 +1688797,16 @@ index 000000000000..fe2103147845 + req->core, req->priority, req->in_fence_fd); +} + ++void rga_dump_external_buffer(struct rga_external_buffer *buffer) ++{ ++ pr_info("external: memory = 0x%lx, type = %s\n", ++ (unsigned long)buffer->memory, rga_get_memory_type_str(buffer->type)); ++ pr_info("param: w = %d, h = %d, f = %s, size = %d\n", ++ buffer->memory_parm.width, buffer->memory_parm.height, ++ rga_get_format_name(buffer->memory_parm.format), ++ buffer->memory_parm.size); ++} ++ +#ifdef CONFIG_NO_GKI +static int rga_dump_image_to_file(struct rga_internal_buffer *dump_buffer, + const char *channel_name, @@ -1689554,10 +1688817,6 @@ index 000000000000..fe2103147845 + struct file *file; + size_t size = 0; + loff_t pos = 0; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ int ret; -+ struct iosys_map map; -+#endif + void *kvaddr = NULL; + void *kvaddr_origin = NULL; + @@ -1689570,12 +1688829,7 @@ index 000000000000..fe2103147845 + return -EINVAL; + } + -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ ret = dma_buf_vmap(dump_buffer->dma_buffer->dma_buf, &map); -+ kvaddr = ret ? NULL : map.vaddr; -+#else + kvaddr = dma_buf_vmap(dump_buffer->dma_buffer->dma_buf); -+#endif + if (!kvaddr) { + pr_err("can't vmap the dma buffer!\n"); + return -EINVAL; @@ -1689645,11 +1688899,7 @@ index 000000000000..fe2103147845 + switch (dump_buffer->type) { + case RGA_DMA_BUFFER: + case RGA_DMA_BUFFER_PTR: -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ dma_buf_vunmap(dump_buffer->dma_buffer->dma_buf, &map); -+#else + dma_buf_vunmap(dump_buffer->dma_buffer->dma_buf, kvaddr_origin); -+#endif + break; + case RGA_VIRTUAL_ADDRESS: + vunmap(kvaddr_origin); @@ -1689683,11 +1688933,11 @@ index 000000000000..fe2103147845 +} +#endif /* #ifdef CONFIG_NO_GKI */ diff --git a/drivers/video/rockchip/rga3/rga_dma_buf.c b/drivers/video/rockchip/rga3/rga_dma_buf.c -new file mode 100644 -index 000000000000..db34db5af86c +new file mode 100755 +index 000000000..b5b0dd068 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_dma_buf.c -@@ -0,0 +1,546 @@ +@@ -0,0 +1,534 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1689893,14 +1689143,15 @@ index 000000000000..db34db5af86c + size_t size, u64 dma_limit, + struct device *dev) +{ -+ struct rga_iommu_dma_cookie *cookie = (void *)domain->iova_cookie; ++ struct rga_iommu_dma_cookie *cookie = domain->iova_cookie; + struct iova_domain *iovad = &cookie->iovad; + unsigned long shift, iova_len, iova = 0; ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0)) ++ dma_addr_t limit; ++#endif + + shift = iova_shift(iovad); + iova_len = size >> shift; -+ -+#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0)) + /* + * Freeing non-power-of-two-sized allocations back into the IOVA caches + * will come back to bite us badly, so we have to waste a bit of space @@ -1689909,7 +1689160,6 @@ index 000000000000..db34db5af86c + */ + if (iova_len < (1 << (IOVA_RANGE_CACHE_MAX_SIZE - 1))) + iova_len = roundup_pow_of_two(iova_len); -+#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) + dma_limit = min_not_zero(dma_limit, dev->bus_dma_limit); @@ -1689921,13 +1689171,12 @@ index 000000000000..db34db5af86c + if (domain->geometry.force_aperture) + dma_limit = min(dma_limit, (u64)domain->geometry.aperture_end); + -+#if (LINUX_VERSION_CODE > KERNEL_VERSION(4, 19, 111) && \ -+ LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0)) -+ iova = alloc_iova_fast(iovad, iova_len, -+ min_t(dma_addr_t, dma_limit >> shift, iovad->end_pfn), -+ true); -+#else ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)) + iova = alloc_iova_fast(iovad, iova_len, dma_limit >> shift, true); ++#else ++ limit = min_t(dma_addr_t, dma_limit >> shift, iovad->end_pfn); ++ ++ iova = alloc_iova_fast(iovad, iova_len, limit, true); +#endif + + return (dma_addr_t)iova << shift; @@ -1689936,7 +1689185,7 @@ index 000000000000..db34db5af86c +static void rga_iommu_dma_free_iova(struct iommu_domain *domain, + dma_addr_t iova, size_t size) +{ -+ struct rga_iommu_dma_cookie *cookie = (void *)domain->iova_cookie; ++ struct rga_iommu_dma_cookie *cookie = domain->iova_cookie; + struct iova_domain *iovad = &cookie->iovad; + + free_iova_fast(iovad, iova_pfn(iovad, iova), size >> iova_shift(iovad)); @@ -1689975,7 +1689224,7 @@ index 000000000000..db34db5af86c + } + + domain = rga_iommu_get_dma_domain(rga_dev); -+ cookie = (void *)domain->iova_cookie; ++ cookie = domain->iova_cookie; + iovad = &cookie->iovad; + align_size = iova_align(iovad, size); + @@ -1690020,7 +1689269,7 @@ index 000000000000..db34db5af86c + } + + domain = rga_iommu_get_dma_domain(rga_dev); -+ cookie = (void *)domain->iova_cookie; ++ cookie = domain->iova_cookie; + iovad = &cookie->iovad; + align_size = iova_align(iovad, size); + @@ -1690084,20 +1689333,12 @@ index 000000000000..db34db5af86c +{ + int ret = 0; + void *vaddr; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ struct iosys_map map; -+#endif + struct dma_buf *dma_buf; + + dma_buf = rga_dma_buffer->dma_buf; + + if (!IS_ERR_OR_NULL(dma_buf)) { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ ret = dma_buf_vmap(dma_buf, &map); -+ vaddr = ret ? NULL : map.vaddr; -+#else + vaddr = dma_buf_vmap(dma_buf); -+#endif + if (vaddr) { + ret = rga_virtual_memory_check(vaddr, img->vir_w, + img->vir_h, img->format, img->yrgb_addr); @@ -1690105,11 +1689346,8 @@ index 000000000000..db34db5af86c + pr_err("can't vmap the dma buffer!\n"); + return -EINVAL; + } -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ dma_buf_vunmap(dma_buf, &map); -+#else ++ + dma_buf_vunmap(dma_buf, vaddr); -+#endif + } + + return ret; @@ -1690126,21 +1689364,21 @@ index 000000000000..db34db5af86c + if (dma_buf != NULL) { + get_dma_buf(dma_buf); + } else { -+ pr_err("dma_buf is invalid[%p]\n", dma_buf); ++ pr_err("dma_buf is Invalid[%p]\n", dma_buf); + return -EINVAL; + } + + attach = dma_buf_attach(dma_buf, rga_dev); + if (IS_ERR(attach)) { -+ ret = PTR_ERR(attach); -+ pr_err("Failed to attach dma_buf, ret[%d]\n", ret); ++ pr_err("Failed to attach dma_buf\n"); ++ ret = -EINVAL; + goto err_get_attach; + } + + sgt = dma_buf_map_attachment(attach, dir); + if (IS_ERR(sgt)) { -+ ret = PTR_ERR(sgt); -+ pr_err("Failed to map attachment, ret[%d]\n", ret); ++ pr_err("Failed to map src attachment\n"); ++ ret = -EINVAL; + goto err_get_sgt; + } + @@ -1690176,22 +1689414,22 @@ index 000000000000..db34db5af86c + + dma_buf = dma_buf_get(fd); + if (IS_ERR(dma_buf)) { -+ ret = PTR_ERR(dma_buf); -+ pr_err("Fail to get dma_buf from fd[%d], ret[%d]\n", fd, ret); ++ pr_err("dma_buf_get fail fd[%d]\n", fd); ++ ret = -EINVAL; + return ret; + } + + attach = dma_buf_attach(dma_buf, rga_dev); + if (IS_ERR(attach)) { -+ ret = PTR_ERR(attach); -+ pr_err("Failed to attach dma_buf, ret[%d]\n", ret); ++ pr_err("Failed to attach dma_buf\n"); ++ ret = -EINVAL; + goto err_get_attach; + } + + sgt = dma_buf_map_attachment(attach, dir); + if (IS_ERR(sgt)) { -+ ret = PTR_ERR(sgt); -+ pr_err("Failed to map attachment, ret[%d]\n", ret); ++ pr_err("Failed to map src attachment\n"); ++ ret = -EINVAL; + goto err_get_sgt; + } + @@ -1690235,11 +1689473,11 @@ index 000000000000..db34db5af86c + pend - pstart, DMA_TO_DEVICE); +} diff --git a/drivers/video/rockchip/rga3/rga_drv.c b/drivers/video/rockchip/rga3/rga_drv.c -new file mode 100644 -index 000000000000..ec3c3451d76c +new file mode 100755 +index 000000000..5b809d143 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_drv.c -@@ -0,0 +1,1614 @@ +@@ -0,0 +1,1709 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1690268,6 +1689506,20 @@ index 000000000000..ec3c3451d76c +static struct hrtimer timer; +static ktime_t kt; + ++static const struct rga_backend_ops rga3_ops = { ++ .get_version = rga3_get_version, ++ .set_reg = rga3_set_reg, ++ .init_reg = rga3_init_reg, ++ .soft_reset = rga3_soft_reset ++}; ++ ++static const struct rga_backend_ops rga2_ops = { ++ .get_version = rga2_get_version, ++ .set_reg = rga2_set_reg, ++ .init_reg = rga2_init_reg, ++ .soft_reset = rga2_soft_reset ++}; ++ +static struct rga_session *rga_session_init(void); +static int rga_session_deinit(struct rga_session *session); + @@ -1690277,7 +1689529,6 @@ index 000000000000..ec3c3451d76c +{ + struct rga_external_buffer buffer; + -+ memset(&buffer, 0x0, sizeof(buffer)); + buffer.memory = (unsigned long)dma_buf; + buffer.type = RGA_DMA_BUFFER_PTR; + buffer.memory_parm.width = channel_info->vir_w; @@ -1690499,8 +1689750,8 @@ index 000000000000..ec3c3451d76c + struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager; + + session = rga_session_init(); -+ if (IS_ERR(session)) -+ return PTR_ERR(session); ++ if (!session) ++ return -ENOMEM; + + request_id = rga_request_alloc(0, session); + if (request_id < 0) { @@ -1690790,38 +1690041,22 @@ index 000000000000..ec3c3451d76c + +static struct rga_session *rga_session_init(void) +{ -+ int new_id; -+ + struct rga_session_manager *session_manager = NULL; -+ struct rga_session *session = NULL; ++ struct rga_session *session = kzalloc(sizeof(*session), GFP_KERNEL); + + session_manager = rga_drvdata->session_manager; + if (session_manager == NULL) { + pr_err("rga_session_manager is null!\n"); -+ return ERR_PTR(-EFAULT); -+ } -+ -+ session = kzalloc(sizeof(*session), GFP_KERNEL); -+ if (!session) { -+ pr_err("rga_session alloc failed\n"); -+ return ERR_PTR(-ENOMEM); ++ kfree(session); ++ return NULL; + } + + mutex_lock(&session_manager->lock); + + idr_preload(GFP_KERNEL); -+ new_id = idr_alloc_cyclic(&session_manager->ctx_id_idr, session, 1, 0, GFP_NOWAIT); -+ idr_preload_end(); -+ if (new_id < 0) { -+ mutex_unlock(&session_manager->lock); -+ -+ pr_err("rga_session alloc id failed!\n"); -+ kfree(session); -+ return ERR_PTR(new_id); -+ } -+ -+ session->id = new_id; ++ session->id = idr_alloc(&session_manager->ctx_id_idr, session, 1, 0, GFP_ATOMIC); + session_manager->session_cnt++; ++ idr_preload_end(); + + mutex_unlock(&session_manager->lock); + @@ -1690833,7 +1690068,29 @@ index 000000000000..ec3c3451d76c + +static int rga_session_deinit(struct rga_session *session) +{ -+ rga_request_session_destroy_abort(session); ++ pid_t pid; ++ int request_id; ++ struct rga_pending_request_manager *request_manager; ++ struct rga_request *request; ++ ++ pid = current->pid; ++ ++ request_manager = rga_drvdata->pend_request_manager; ++ ++ mutex_lock(&request_manager->lock); ++ ++ idr_for_each_entry(&request_manager->request_idr, request, request_id) { ++ ++ if (session == request->session) { ++ pr_err("[pid:%d] destroy request[%d] when the user exits", ++ pid, request->id); ++ rga_request_put(request); ++ } ++ } ++ ++ mutex_unlock(&request_manager->lock); ++ ++ rga_job_session_destroy(session); + rga_mm_session_release_buffer(session); + + rga_session_free_remove_idr(session); @@ -1690892,10 +1690149,9 @@ index 000000000000..ec3c3451d76c + } + + ret = rga_mm_import_buffer(&external_buffer[i], session); -+ if (ret <= 0) { -+ pr_err("buffer[%d] mm import buffer failed! memory = 0x%lx, type = %s(0x%x)\n", ++ if (ret == 0) { ++ pr_err("buffer[%d] mm import buffer failed! memory = 0x%lx, type = 0x%x\n", + i, (unsigned long)external_buffer[i].memory, -+ rga_get_memory_type_str(external_buffer[i].type), + external_buffer[i].type); + + goto err_free_external_buffer; @@ -1690965,8 +1690221,7 @@ index 000000000000..ec3c3451d76c + + ret = rga_mm_release_buffer(external_buffer[i].handle); + if (ret < 0) { -+ pr_err("buffer[%d] mm release buffer failed! handle = %d\n", -+ i, external_buffer[i].handle); ++ pr_err("buffer[%d] mm release buffer failed!\n", i); + + goto err_free_external_buffer; + } @@ -1691127,6 +1690382,11 @@ index 000000000000..ec3c3451d76c + /* In the BLIT_SYNC/BLIT_ASYNC command, in_fence_fd needs to be set. */ + request->acquire_fence_fd = rga_req->in_fence_fd; + ++ if (DEBUGGER_EN(MSG)) { ++ pr_info("Blit mode: request id = %d", user_request.id); ++ rga_cmd_print_debug_info(rga_req); ++ } ++ + ret = rga_request_submit(request); + if (ret < 0) { + pr_err("request[%d] submit failed!\n", user_request.id); @@ -1691360,8 +1690620,8 @@ index 000000000000..ec3c3451d76c + struct rga_session *session = NULL; + + session = rga_session_init(); -+ if (IS_ERR(session)) -+ return PTR_ERR(session); ++ if (!session) ++ return -ENOMEM; + + file->private_data = (void *)session; + @@ -1691377,39 +1690637,97 @@ index 000000000000..ec3c3451d76c + return 0; +} + -+static irqreturn_t rga_irq_handler(int irq, void *data) ++static irqreturn_t rga3_irq_handler(int irq, void *data) +{ -+ irqreturn_t irq_ret = IRQ_NONE; + struct rga_scheduler_t *scheduler = data; + -+ if (scheduler->ops->irq) -+ irq_ret = scheduler->ops->irq(scheduler); ++ if (DEBUGGER_EN(INT_FLAG)) ++ pr_info("irqthread INT[%x],STATS0[%x], STATS1[%x]\n", ++ rga_read(RGA3_INT_RAW, scheduler), ++ rga_read(RGA3_STATUS0, scheduler), ++ rga_read(RGA3_STATUS1, scheduler)); ++ ++ /* TODO: if error interrupt then soft reset hardware */ ++ //scheduler->ops->soft_reset(job->core); + -+ return irq_ret; ++ /*clear INT */ ++ rga_write(1, RGA3_INT_CLR, scheduler); ++ ++ return IRQ_WAKE_THREAD; +} + -+static irqreturn_t rga_isr_thread(int irq, void *data) ++static irqreturn_t rga3_irq_thread(int irq, void *data) +{ -+ irqreturn_t irq_ret = IRQ_NONE; + struct rga_scheduler_t *scheduler = data; + struct rga_job *job; + -+ job = rga_job_done(scheduler); -+ if (job == NULL) { -+ pr_err("isr thread invalid job!\n"); ++ job = scheduler->running_job; ++ ++ if (!job) { ++ pr_err("running job is invaild on irq thread\n"); + return IRQ_HANDLED; + } + -+ if (scheduler->ops->isr_thread) -+ irq_ret = scheduler->ops->isr_thread(job, scheduler); ++ if (DEBUGGER_EN(INT_FLAG)) ++ pr_info("irq INT[%x], STATS0[%x], STATS1[%x]\n", ++ rga_read(RGA3_INT_RAW, scheduler), ++ rga_read(RGA3_STATUS0, scheduler), ++ rga_read(RGA3_STATUS1, scheduler)); + -+ rga_request_release_signal(scheduler, job); ++ rga_job_done(scheduler, 0); + -+ rga_job_next(scheduler); ++ return IRQ_HANDLED; ++} + -+ rga_power_disable(scheduler); ++static irqreturn_t rga2_irq_handler(int irq, void *data) ++{ ++ struct rga_scheduler_t *scheduler = data; + -+ return irq_ret; ++ if (DEBUGGER_EN(INT_FLAG)) ++ pr_info("irqthread INT[%x],STATS0[%x]\n", ++ rga_read(RGA2_INT, scheduler), rga_read(RGA2_STATUS, ++ scheduler)); ++ ++ /*if error interrupt then soft reset hardware */ ++ //warning ++ if (rga_read(RGA2_INT, scheduler) & 0x01) { ++ pr_err("err irq! INT[%x],STATS0[%x]\n", ++ rga_read(RGA2_INT, scheduler), ++ rga_read(RGA2_STATUS, scheduler)); ++ scheduler->ops->soft_reset(scheduler); ++ } ++ ++ /*clear INT */ ++ rga_write(rga_read(RGA2_INT, scheduler) | ++ (0x1 << 4) | (0x1 << 5) | (0x1 << 6) | (0x1 << 7) | ++ (0x1 << 15) | (0x1 << 16), RGA2_INT, scheduler); ++ ++ return IRQ_WAKE_THREAD; ++} ++ ++static irqreturn_t rga2_irq_thread(int irq, void *data) ++{ ++ struct rga_scheduler_t *scheduler = data; ++ struct rga_job *job; ++ ++ job = scheduler->running_job; ++ ++ if (!job) ++ return IRQ_HANDLED; ++ ++ if (DEBUGGER_EN(INT_FLAG)) ++ pr_info("irq INT[%x], STATS0[%x]\n", ++ rga_read(RGA2_INT, scheduler), rga_read(RGA2_STATUS, ++ scheduler)); ++ ++ job->rga_command_base.osd_info.cur_flags0 = rga_read(RGA2_OSD_CUR_FLAGS0_OFFSET, ++ scheduler); ++ job->rga_command_base.osd_info.cur_flags1 = rga_read(RGA2_OSD_CUR_FLAGS1_OFFSET, ++ scheduler); ++ ++ rga_job_done(scheduler, 0); ++ ++ return IRQ_HANDLED; +} + +const struct file_operations rga_fops = { @@ -1691452,24 +1690770,44 @@ index 000000000000..ec3c3451d76c + "clk_rga3_1", +}; + ++static const struct rga_irqs_data_t single_rga2_irqs[] = { ++ {"rga2_irq", rga2_irq_handler, rga2_irq_thread} ++}; ++ ++static const struct rga_irqs_data_t rga3_core0_irqs[] = { ++ {"rga3_core0_irq", rga3_irq_handler, rga3_irq_thread} ++}; ++ ++static const struct rga_irqs_data_t rga3_core1_irqs[] = { ++ {"rga3_core1_irq", rga3_irq_handler, rga3_irq_thread} ++}; ++ +static const struct rga_match_data_t old_rga2_match_data = { + .clks = old_rga2_clks, + .num_clks = ARRAY_SIZE(old_rga2_clks), ++ .irqs = single_rga2_irqs, ++ .num_irqs = ARRAY_SIZE(single_rga2_irqs) +}; + +static const struct rga_match_data_t rk3588_rga2_match_data = { + .clks = rk3588_rga2_clks, + .num_clks = ARRAY_SIZE(rk3588_rga2_clks), ++ .irqs = single_rga2_irqs, ++ .num_irqs = ARRAY_SIZE(single_rga2_irqs) +}; + +static const struct rga_match_data_t rga3_core0_match_data = { + .clks = rga3_core_0_clks, + .num_clks = ARRAY_SIZE(rga3_core_0_clks), ++ .irqs = rga3_core0_irqs, ++ .num_irqs = ARRAY_SIZE(rga3_core0_irqs) +}; + +static const struct rga_match_data_t rga3_core1_match_data = { + .clks = rga3_core_1_clks, + .num_clks = ARRAY_SIZE(rga3_core_1_clks), ++ .irqs = rga3_core1_irqs, ++ .num_irqs = ARRAY_SIZE(rga3_core1_irqs) +}; + +static const struct of_device_id rga3_core0_dt_ids[] = { @@ -1691581,21 +1690919,21 @@ index 000000000000..ec3c3451d76c + /* there are irq names in dts */ + irq = platform_get_irq(pdev, 0); + if (irq < 0) { -+ dev_err(dev, "no irq %s in dts\n", dev_driver_string(dev)); ++ dev_err(dev, "no irq %s in dts\n", match_data->irqs[0].name); + return irq; + } + + scheduler->irq = irq; + -+ pr_info("%s, irq = %d, match scheduler\n", dev_driver_string(dev), irq); ++ pr_info("%s, irq = %d, match scheduler\n", match_data->irqs[0].name, irq); + + ret = devm_request_threaded_irq(dev, irq, -+ rga_irq_handler, -+ rga_isr_thread, ++ match_data->irqs[0].irq_hdl, ++ match_data->irqs[0].irq_thread, + IRQF_SHARED, + dev_driver_string(dev), scheduler); + if (ret < 0) { -+ pr_err("request irq name: %s failed: %d\n", dev_driver_string(dev), ret); ++ pr_err("request irq name: %s failed: %d\n", match_data->irqs[0].name, ret); + return ret; + } + @@ -1691644,9 +1690982,6 @@ index 000000000000..ec3c3451d76c + } else if (scheduler->core == RGA2_SCHEDULER_CORE0) { + if (!strcmp(scheduler->version.str, "3.3.87975")) + scheduler->data = &rga2e_1106_data; -+ else if (!strcmp(scheduler->version.str, "3.6.92812") || -+ !strcmp(scheduler->version.str, "3.7.93215")) -+ scheduler->data = &rga2e_iommu_data; + else + scheduler->data = &rga2e_data; + } @@ -1691837,8 +1691172,6 @@ index 000000000000..ec3c3451d76c +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) +#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT +module_init(rga_init); -+#elif defined CONFIG_VIDEO_REVERSE_IMAGE -+fs_initcall(rga_init); +#else +late_initcall(rga_init); +#endif @@ -1691855,11 +1691188,11 @@ index 000000000000..ec3c3451d76c +MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver); +#endif diff --git a/drivers/video/rockchip/rga3/rga_fence.c b/drivers/video/rockchip/rga3/rga_fence.c -new file mode 100644 -index 000000000000..7d831d55d15d +new file mode 100755 +index 000000000..0e1f58fed --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_fence.c -@@ -0,0 +1,146 @@ +@@ -0,0 +1,144 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1691946,10 +1691279,8 @@ index 000000000000..7d831d55d15d + return fence_fd; + + sync_file = sync_file_create(fence); -+ if (!sync_file) { -+ put_unused_fd(fence_fd); ++ if (!sync_file) + return -ENOMEM; -+ } + + fd_install(fence_fd, sync_file->file); + @@ -1692007,11 +1691338,11 @@ index 000000000000..7d831d55d15d + return ret; +} diff --git a/drivers/video/rockchip/rga3/rga_hw_config.c b/drivers/video/rockchip/rga3/rga_hw_config.c -new file mode 100644 -index 000000000000..0cf2599b931e +new file mode 100755 +index 000000000..797ab676b --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_hw_config.c -@@ -0,0 +1,352 @@ +@@ -0,0 +1,327 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1692189,12 +1691520,12 @@ index 000000000000..0cf2599b931e +const struct rga_win_data rga3_win_data[] = { + { + .name = "rga3-win0", -+ .formats[RGA_RASTER_INDEX] = rga3_input_raster_format, -+ .formats_count[RGA_RASTER_INDEX] = ARRAY_SIZE(rga3_input_raster_format), -+ .formats[RGA_AFBC16x16_INDEX] = rga3_fbcd_format, -+ .formats_count[RGA_AFBC16x16_INDEX] = ARRAY_SIZE(rga3_fbcd_format), -+ .formats[RGA_TILE8x8_INDEX] = rga3_tile_format, -+ .formats_count[RGA_TILE8x8_INDEX] = ARRAY_SIZE(rga3_tile_format), ++ .raster_formats = rga3_input_raster_format, ++ .num_of_raster_formats = ARRAY_SIZE(rga3_input_raster_format), ++ .fbc_formats = rga3_fbcd_format, ++ .num_of_fbc_formats = ARRAY_SIZE(rga3_fbcd_format), ++ .tile_formats = rga3_tile_format, ++ .num_of_tile_formats = ARRAY_SIZE(rga3_tile_format), + .supported_rotations = RGA_MODE_ROTATE_MASK, + .scale_up_mode = RGA_SCALE_UP_BIC, + .scale_down_mode = RGA_SCALE_DOWN_AVG, @@ -1692204,12 +1691535,12 @@ index 000000000000..0cf2599b931e + + { + .name = "rga3-win1", -+ .formats[RGA_RASTER_INDEX] = rga3_input_raster_format, -+ .formats_count[RGA_RASTER_INDEX] = ARRAY_SIZE(rga3_input_raster_format), -+ .formats[RGA_AFBC16x16_INDEX] = rga3_fbcd_format, -+ .formats_count[RGA_AFBC16x16_INDEX] = ARRAY_SIZE(rga3_fbcd_format), -+ .formats[RGA_TILE8x8_INDEX] = rga3_tile_format, -+ .formats_count[RGA_TILE8x8_INDEX] = ARRAY_SIZE(rga3_tile_format), ++ .raster_formats = rga3_input_raster_format, ++ .num_of_raster_formats = ARRAY_SIZE(rga3_input_raster_format), ++ .fbc_formats = rga3_fbcd_format, ++ .num_of_fbc_formats = ARRAY_SIZE(rga3_fbcd_format), ++ .tile_formats = rga3_tile_format, ++ .num_of_tile_formats = ARRAY_SIZE(rga3_tile_format), + .supported_rotations = RGA_MODE_ROTATE_MASK, + .scale_up_mode = RGA_SCALE_UP_BIC, + .scale_down_mode = RGA_SCALE_DOWN_AVG, @@ -1692219,12 +1691550,12 @@ index 000000000000..0cf2599b931e + + { + .name = "rga3-wr", -+ .formats[RGA_RASTER_INDEX] = rga3_output_raster_format, -+ .formats_count[RGA_RASTER_INDEX] = ARRAY_SIZE(rga3_output_raster_format), -+ .formats[RGA_AFBC16x16_INDEX] = rga3_fbcd_format, -+ .formats_count[RGA_AFBC16x16_INDEX] = ARRAY_SIZE(rga3_fbcd_format), -+ .formats[RGA_TILE8x8_INDEX] = rga3_tile_format, -+ .formats_count[RGA_TILE8x8_INDEX] = ARRAY_SIZE(rga3_tile_format), ++ .raster_formats = rga3_output_raster_format, ++ .num_of_raster_formats = ARRAY_SIZE(rga3_output_raster_format), ++ .fbc_formats = rga3_fbcd_format, ++ .num_of_fbc_formats = ARRAY_SIZE(rga3_fbcd_format), ++ .tile_formats = rga3_tile_format, ++ .num_of_tile_formats = ARRAY_SIZE(rga3_tile_format), + .supported_rotations = 0, + .scale_up_mode = RGA_SCALE_UP_NONE, + .scale_down_mode = RGA_SCALE_DOWN_NONE, @@ -1692236,8 +1691567,8 @@ index 000000000000..0cf2599b931e +const struct rga_win_data rga2e_win_data[] = { + { + .name = "rga2e-src0", -+ .formats[RGA_RASTER_INDEX] = rga2e_input_raster_format, -+ .formats_count[RGA_RASTER_INDEX] = ARRAY_SIZE(rga2e_input_raster_format), ++ .raster_formats = rga2e_input_raster_format, ++ .num_of_raster_formats = ARRAY_SIZE(rga2e_input_raster_format), + .supported_rotations = RGA_MODE_ROTATE_MASK, + .scale_up_mode = RGA_SCALE_UP_BIC, + .scale_down_mode = RGA_SCALE_DOWN_AVG, @@ -1692247,8 +1691578,8 @@ index 000000000000..0cf2599b931e + + { + .name = "rga2e-src1", -+ .formats[RGA_RASTER_INDEX] = rga2e_input_raster_format, -+ .formats_count[RGA_RASTER_INDEX] = ARRAY_SIZE(rga2e_input_raster_format), ++ .raster_formats = rga2e_input_raster_format, ++ .num_of_raster_formats = ARRAY_SIZE(rga2e_input_raster_format), + .supported_rotations = RGA_MODE_ROTATE_MASK, + .scale_up_mode = RGA_SCALE_UP_BIC, + .scale_down_mode = RGA_SCALE_DOWN_AVG, @@ -1692258,8 +1691589,8 @@ index 000000000000..0cf2599b931e + + { + .name = "rga2-dst", -+ .formats[RGA_RASTER_INDEX] = rga2e_output_raster_format, -+ .formats_count[RGA_RASTER_INDEX] = ARRAY_SIZE(rga2e_output_raster_format), ++ .raster_formats = rga2e_output_raster_format, ++ .num_of_raster_formats = ARRAY_SIZE(rga2e_output_raster_format), + .supported_rotations = 0, + .scale_up_mode = RGA_SCALE_UP_NONE, + .scale_down_mode = RGA_SCALE_DOWN_NONE, @@ -1692306,8 +1691637,9 @@ index 000000000000..0cf2599b931e + + .feature = RGA_COLOR_FILL | RGA_COLOR_PALETTE | + RGA_COLOR_KEY | RGA_ROP_CALCULATE | -+ RGA_NN_QUANTIZE | RGA_DITHER | RGA_FULL_CSC, -+ .csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F, ++ RGA_NN_QUANTIZE | RGA_DITHER, ++ .csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | ++ RGA_MODE_CSC_BT709, + .csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | + RGA_MODE_CSC_BT709, + .mmu = RGA_MMU, @@ -1692331,45 +1691663,19 @@ index 000000000000..0cf2599b931e + RGA_COLOR_KEY | RGA_ROP_CALCULATE | + RGA_NN_QUANTIZE | RGA_DITHER | RGA_MOSAIC | + RGA_YIN_YOUT | RGA_YUV_HDS | RGA_YUV_VDS | -+ RGA_OSD | RGA_PRE_INTR | RGA_FULL_CSC, ++ RGA_OSD | RGA_PRE_INTR, + .csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | + RGA_MODE_CSC_BT709, + .csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | + RGA_MODE_CSC_BT709, + .mmu = RGA_NONE_MMU, +}; -+ -+const struct rga_hw_data rga2e_iommu_data = { -+ .version = 0, -+ .input_range = {{2, 2}, {8192, 8192}}, -+ .output_range = {{2, 2}, {4096, 4096}}, -+ -+ .win = rga2e_win_data, -+ .win_size = ARRAY_SIZE(rga2e_win_data), -+ /* 1 << factor mean real factor */ -+ .max_upscale_factor = 4, -+ .max_downscale_factor = 4, -+ -+ .byte_stride_align = 4, -+ .max_byte_stride = WORD_TO_BYTE(8192), -+ -+ .feature = RGA_COLOR_FILL | RGA_COLOR_PALETTE | -+ RGA_COLOR_KEY | RGA_ROP_CALCULATE | -+ RGA_NN_QUANTIZE | RGA_DITHER | RGA_MOSAIC | -+ RGA_YIN_YOUT | RGA_YUV_HDS | RGA_YUV_VDS | -+ RGA_OSD | RGA_PRE_INTR | RGA_FULL_CSC, -+ .csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | -+ RGA_MODE_CSC_BT709, -+ .csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | -+ RGA_MODE_CSC_BT709, -+ .mmu = RGA_IOMMU, -+}; diff --git a/drivers/video/rockchip/rga3/rga_iommu.c b/drivers/video/rockchip/rga3/rga_iommu.c -new file mode 100644 -index 000000000000..6ef9cbc0d5d2 +new file mode 100755 +index 000000000..3b7a4ef88 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_iommu.c -@@ -0,0 +1,425 @@ +@@ -0,0 +1,378 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1692377,7 +1691683,7 @@ index 000000000000..6ef9cbc0d5d2 + * Author: Huang Lee + */ + -+#define pr_fmt(fmt) "rga_iommu: " fmt ++#define pr_fmt(fmt) "rga2_mmu: " fmt + +#include "rga_iommu.h" +#include "rga_dma_buf.h" @@ -1692542,12 +1691848,6 @@ index 000000000000..6ef9cbc0d5d2 + * size * channel_num * address_size + */ + order = get_order(size * 3 * sizeof(*mmu_base->buf_virtual)); -+ if (order >= MAX_ORDER) { -+ pr_err("Can not alloc pages with order[%d] for mmu_page_table, max_order = %d\n", -+ order, MAX_ORDER); -+ goto err_free_mmu_base; -+ } -+ + mmu_base->buf_virtual = (uint32_t *) __get_free_pages(GFP_KERNEL | GFP_DMA32, order); + if (mmu_base->buf_virtual == NULL) { + pr_err("Can not alloc pages for mmu_page_table\n"); @@ -1692556,12 +1691856,6 @@ index 000000000000..6ef9cbc0d5d2 + mmu_base->buf_order = order; + + order = get_order(size * sizeof(*mmu_base->pages)); -+ if (order >= MAX_ORDER) { -+ pr_err("Can not alloc pages with order[%d] for mmu_base->pages, max_order = %d\n", -+ order, MAX_ORDER); -+ goto err_free_buf_virtual; -+ } -+ + mmu_base->pages = (struct page **)__get_free_pages(GFP_KERNEL | GFP_DMA32, order); + if (mmu_base->pages == NULL) { + pr_err("Can not alloc pages for mmu_base->pages\n"); @@ -1692605,38 +1691899,6 @@ index 000000000000..6ef9cbc0d5d2 + *mmu_base = NULL; +} + -+static int rga_iommu_intr_fault_handler(struct iommu_domain *iommu, struct device *iommu_dev, -+ unsigned long iova, int status, void *arg) -+{ -+ struct rga_scheduler_t *scheduler = (struct rga_scheduler_t *)arg; -+ struct rga_job *job = scheduler->running_job; -+ -+ if (job == NULL) -+ return 0; -+ -+ pr_err("IOMMU intr fault, IOVA[0x%lx], STATUS[0x%x]\n", iova, status); -+ if (scheduler->ops->irq) -+ scheduler->ops->irq(scheduler); -+ -+ /* iommu interrupts on rga2 do not affect rga2 itself. */ -+ if (!test_bit(RGA_JOB_STATE_INTR_ERR, &job->state)) { -+ set_bit(RGA_JOB_STATE_INTR_ERR, &job->state); -+ scheduler->ops->soft_reset(scheduler); -+ } -+ -+ if (status & RGA_IOMMU_IRQ_PAGE_FAULT) { -+ pr_err("RGA IOMMU: page fault! Please check the memory size.\n"); -+ job->ret = -EACCES; -+ } else if (status & RGA_IOMMU_IRQ_BUS_ERROR) { -+ pr_err("RGA IOMMU: bus error! Please check if the memory is invalid or has been freed.\n"); -+ job->ret = -EACCES; -+ } else { -+ pr_err("RGA IOMMU: Wrong IOMMU interrupt signal!\n"); -+ } -+ -+ return 0; -+} -+ +int rga_iommu_detach(struct rga_iommu_info *info) +{ + if (!info) @@ -1692722,9 +1691984,6 @@ index 000000000000..6ef9cbc0d5d2 + if (main_iommu == NULL) { + main_iommu = scheduler->iommu_info; + main_iommu_index = i; -+ iommu_set_fault_handler(main_iommu->domain, -+ rga_iommu_intr_fault_handler, -+ (void *)scheduler); + } else { + scheduler->iommu_info->domain = main_iommu->domain; + scheduler->iommu_info->default_dev = main_iommu->default_dev; @@ -1692796,11 +1692055,11 @@ index 000000000000..6ef9cbc0d5d2 + rga_drvdata->map_scheduler_index = -1; +} diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c -new file mode 100644 -index 000000000000..fae613bbf716 +new file mode 100755 +index 000000000..47bb908c8 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_job.c -@@ -0,0 +1,1423 @@ +@@ -0,0 +1,1284 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1692816,41 +1692075,85 @@ index 000000000000..fae613bbf716 +#include "rga_mm.h" +#include "rga_iommu.h" +#include "rga_debugger.h" -+#include "rga_common.h" + -+static void rga_job_free(struct rga_job *job) ++struct rga_job * ++rga_scheduler_get_pending_job_list(struct rga_scheduler_t *scheduler) +{ -+ free_page((unsigned long)job); ++ unsigned long flags; ++ struct rga_job *job; ++ ++ spin_lock_irqsave(&scheduler->irq_lock, flags); ++ ++ job = list_first_entry_or_null(&scheduler->todo_list, ++ struct rga_job, head); ++ ++ spin_unlock_irqrestore(&scheduler->irq_lock, flags); ++ ++ return job; +} + -+static void rga_job_kref_release(struct kref *ref) ++struct rga_job * ++rga_scheduler_get_running_job(struct rga_scheduler_t *scheduler) +{ ++ unsigned long flags; + struct rga_job *job; + -+ job = container_of(ref, struct rga_job, refcount); ++ spin_lock_irqsave(&scheduler->irq_lock, flags); + -+ rga_job_free(job); ++ job = scheduler->running_job; ++ ++ spin_unlock_irqrestore(&scheduler->irq_lock, flags); ++ ++ return job; +} + -+static int rga_job_put(struct rga_job *job) ++struct rga_scheduler_t *rga_job_get_scheduler(struct rga_job *job) +{ -+ return kref_put(&job->refcount, rga_job_kref_release); ++ return job->scheduler; +} + -+static void rga_job_get(struct rga_job *job) ++static void rga_job_free(struct rga_job *job) +{ -+ kref_get(&job->refcount); ++ free_page((unsigned long)job); +} + -+static int rga_job_cleanup(struct rga_job *job) ++void rga_job_session_destroy(struct rga_session *session) +{ -+ rga_job_put(job); ++ struct rga_scheduler_t *scheduler = NULL; ++ struct rga_job *job_pos, *job_q; ++ int i; ++ ++ unsigned long flags; ++ ++ for (i = 0; i < rga_drvdata->num_of_scheduler; i++) { ++ scheduler = rga_drvdata->scheduler[i]; ++ ++ spin_lock_irqsave(&scheduler->irq_lock, flags); ++ ++ list_for_each_entry_safe(job_pos, job_q, &scheduler->todo_list, head) { ++ if (session == job_pos->session) { ++ list_del(&job_pos->head); ++ ++ spin_unlock_irqrestore(&scheduler->irq_lock, flags); ++ ++ rga_job_free(job_pos); ++ ++ spin_lock_irqsave(&scheduler->irq_lock, flags); ++ } ++ } ++ ++ spin_unlock_irqrestore(&scheduler->irq_lock, flags); ++ } ++} + ++static int rga_job_cleanup(struct rga_job *job) ++{ + if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], job cleanup total cost time %lld us\n", -+ job->request_id, ++ pr_err("(pid:%d) job clean use time = %lld\n", job->pid, + ktime_us_delta(ktime_get(), job->timestamp)); + ++ rga_job_free(job); ++ + return 0; +} + @@ -1692924,7 +1692227,6 @@ index 000000000000..fae613bbf716 + return NULL; + + INIT_LIST_HEAD(&job->head); -+ kref_init(&job->refcount); + + job->timestamp = ktime_get(); + job->pid = current->pid; @@ -1692992,18 +1692294,16 @@ index 000000000000..fae613bbf716 + return ret; + } + -+ set_bit(RGA_JOB_STATE_RUNNING, &job->state); -+ + /* for debug */ + if (DEBUGGER_EN(MSG)) + rga_job_dump_info(job); + + return ret; ++ +} + -+void rga_job_next(struct rga_scheduler_t *scheduler) ++static void rga_job_next(struct rga_scheduler_t *scheduler) +{ -+ int ret; + struct rga_job *job = NULL; + unsigned long flags; + @@ -1693023,33 +1692323,51 @@ index 000000000000..fae613bbf716 + scheduler->job_count--; + + scheduler->running_job = job; -+ set_bit(RGA_JOB_STATE_PREPARE, &job->state); -+ rga_job_get(job); + + spin_unlock_irqrestore(&scheduler->irq_lock, flags); + -+ ret = rga_job_run(job, scheduler); ++ job->ret = rga_job_run(job, scheduler); + /* If some error before hw run */ -+ if (ret < 0) { -+ pr_err("some error on rga_job_run before hw start, %s(%d)\n", __func__, __LINE__); ++ if (job->ret < 0) { ++ pr_err("some error on rga_job_run before hw start, %s(%d)\n", ++ __func__, __LINE__); + + spin_lock_irqsave(&scheduler->irq_lock, flags); + + scheduler->running_job = NULL; -+ rga_job_put(job); + + spin_unlock_irqrestore(&scheduler->irq_lock, flags); + -+ job->ret = ret; + rga_request_release_signal(scheduler, job); + + goto next_job; + } ++} ++ ++static void rga_job_finish_and_next(struct rga_scheduler_t *scheduler, ++ struct rga_job *job, int ret) ++{ ++ ktime_t now; ++ ++ job->ret = ret; ++ ++ if (DEBUGGER_EN(TIME)) { ++ now = ktime_get(); ++ pr_info("hw use time = %lld\n", ktime_us_delta(now, job->hw_running_time)); ++ pr_info("(pid:%d) job done use time = %lld\n", job->pid, ++ ktime_us_delta(now, job->timestamp)); ++ } ++ ++ rga_mm_unmap_job_info(job); ++ ++ rga_request_release_signal(scheduler, job); ++ ++ rga_job_next(scheduler); + -+ rga_job_put(job); ++ rga_power_disable(scheduler); +} + -+struct rga_job *rga_job_done(struct rga_scheduler_t *scheduler) ++void rga_job_done(struct rga_scheduler_t *scheduler, int ret) +{ + struct rga_job *job; + unsigned long flags; @@ -1693058,34 +1692376,16 @@ index 000000000000..fae613bbf716 + spin_lock_irqsave(&scheduler->irq_lock, flags); + + job = scheduler->running_job; -+ if (job == NULL) { -+ pr_err("core[0x%x] running job has been cleanup.\n", scheduler->core); -+ -+ spin_unlock_irqrestore(&scheduler->irq_lock, flags); -+ return NULL; -+ } + scheduler->running_job = NULL; + + scheduler->timer.busy_time += ktime_us_delta(now, job->hw_recoder_time); -+ set_bit(RGA_JOB_STATE_DONE, &job->state); + + spin_unlock_irqrestore(&scheduler->irq_lock, flags); + -+ if (scheduler->ops->read_back_reg) -+ scheduler->ops->read_back_reg(job, scheduler); -+ + if (DEBUGGER_EN(DUMP_IMAGE)) + rga_dump_job_image(job); + -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], hardware[%s] cost time %lld us\n", -+ job->request_id, -+ rga_get_core_name(scheduler->core), -+ ktime_us_delta(now, job->hw_running_time)); -+ -+ rga_mm_unmap_job_info(job); -+ -+ return job; ++ rga_job_finish_and_next(scheduler, job, ret); +} + +static void rga_job_scheduler_timeout_clean(struct rga_scheduler_t *scheduler) @@ -1693153,21 +1692453,14 @@ index 000000000000..fae613bbf716 + } + + scheduler->job_count++; -+ set_bit(RGA_JOB_STATE_PENDING, &job->state); + + spin_unlock_irqrestore(&scheduler->irq_lock, flags); +} + +static struct rga_scheduler_t *rga_job_schedule(struct rga_job *job) +{ -+ int i; + struct rga_scheduler_t *scheduler = NULL; + -+ for (i = 0; i < rga_drvdata->num_of_scheduler; i++) { -+ scheduler = rga_drvdata->scheduler[i]; -+ rga_job_scheduler_timeout_clean(scheduler); -+ } -+ + if (rga_drvdata->num_of_scheduler > 1) { + job->core = rga_job_assign(job); + if (job->core <= 0) { @@ -1693180,13 +1692473,15 @@ index 000000000000..fae613bbf716 + job->scheduler = rga_drvdata->scheduler[0]; + } + -+ scheduler = job->scheduler; ++ scheduler = rga_job_get_scheduler(job); + if (scheduler == NULL) { + pr_err("failed to get scheduler, %s(%d)\n", __func__, __LINE__); + job->ret = -EFAULT; + return NULL; + } + ++ rga_job_scheduler_timeout_clean(scheduler); ++ + return scheduler; +} + @@ -1693297,7 +1692592,7 @@ index 000000000000..fae613bbf716 + return false; +} + -+static struct mm_struct *rga_request_get_current_mm(struct rga_request *request) ++static int rga_request_get_current_mm(struct rga_request *request) +{ + int i; + @@ -1693305,30 +1692600,45 @@ index 000000000000..fae613bbf716 + if (rga_is_need_current_mm(&(request->task_list[i]))) { + mmgrab(current->mm); + mmget(current->mm); ++ request->current_mm = current->mm; + -+ return current->mm; ++ break; + } + } + -+ return NULL; ++ return 0; +} + -+static void rga_request_put_current_mm(struct mm_struct *mm) ++static void rga_request_put_current_mm(struct rga_request *request) +{ -+ if (mm == NULL) ++ if (request->current_mm == NULL) + return; + -+ mmput(mm); -+ mmdrop(mm); ++ mmput(request->current_mm); ++ mmdrop(request->current_mm); ++ request->current_mm = NULL; +} + -+static int rga_request_add_acquire_fence_callback(int acquire_fence_fd, -+ struct rga_request *request, ++static int rga_request_alloc_release_fence(struct dma_fence **release_fence) ++{ ++ struct dma_fence *fence; ++ ++ fence = rga_dma_fence_alloc(); ++ if (IS_ERR(fence)) { ++ pr_err("Can not alloc release fence!\n"); ++ return IS_ERR(fence); ++ } ++ ++ *release_fence = fence; ++ ++ return rga_dma_fence_get_fd(fence); ++} ++ ++static int rga_request_add_acquire_fence_callback(int acquire_fence_fd, void *private, + dma_fence_func_t cb_func) +{ + int ret; + struct dma_fence *acquire_fence = NULL; -+ struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager; + + if (DEBUGGER_EN(MSG)) + pr_info("acquire_fence_fd = %d", acquire_fence_fd); @@ -1693339,48 +1692649,20 @@ index 000000000000..fae613bbf716 + __func__, acquire_fence_fd); + return -EINVAL; + } -+ -+ if (!request->feature.user_close_fence) { -+ /* close acquire fence fd */ -+#ifdef CONFIG_NO_GKI -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) -+ close_fd(acquire_fence_fd); -+#else -+ ksys_close(acquire_fence_fd); -+#endif -+#else -+ pr_err("Please update the driver to v1.2.28 to prevent acquire_fence_fd leaks."); -+ return -EFAULT; -+#endif -+ } -+ ++ /* close acquire fence fd */ ++ ksys_close(acquire_fence_fd); + + ret = rga_dma_fence_get_status(acquire_fence); -+ if (ret < 0) { -+ pr_err("%s: Current acquire fence unexpectedly has error status before signal\n", -+ __func__); -+ return ret; -+ } else if (ret > 0) { -+ /* has been signaled */ -+ return ret; -+ } -+ -+ /* -+ * Ensure that the request will not be free early when -+ * the callback is called. -+ */ -+ mutex_lock(&request_manager->lock); -+ rga_request_get(request); -+ mutex_unlock(&request_manager->lock); ++ if (ret == 0) { ++ ret = rga_dma_fence_add_callback(acquire_fence, cb_func, private); ++ if (ret < 0) { ++ if (ret == -ENOENT) ++ return 1; + -+ ret = rga_dma_fence_add_callback(acquire_fence, cb_func, (void *)request); -+ if (ret < 0) { -+ if (ret != -ENOENT) + pr_err("%s: failed to add fence callback\n", __func__); -+ -+ mutex_lock(&request_manager->lock); -+ rga_request_put(request); -+ mutex_unlock(&request_manager->lock); ++ return ret; ++ } ++ } else { + return ret; + } + @@ -1693462,8 +1692744,7 @@ index 000000000000..fae613bbf716 + scheduler->ops->soft_reset(scheduler); + } + -+ pr_err("reset core[%d] by request[%d] abort", -+ scheduler->core, request->id); ++ pr_err("reset core[%d] by request abort", scheduler->core); + running_abort_count++; + } + } @@ -1693496,7 +1692777,6 @@ index 000000000000..fae613bbf716 +static void rga_request_release_abort(struct rga_request *request, int err_code) +{ + unsigned long flags; -+ struct mm_struct *current_mm; + struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager; + + if (rga_request_scheduler_job_abort(request) > 0) @@ -1693511,12 +1692791,10 @@ index 000000000000..fae613bbf716 + + request->is_running = false; + request->is_done = false; -+ current_mm = request->current_mm; -+ request->current_mm = NULL; + -+ spin_unlock_irqrestore(&request->lock, flags); ++ rga_request_put_current_mm(request); + -+ rga_request_put_current_mm(current_mm); ++ spin_unlock_irqrestore(&request->lock, flags); + + rga_dma_fence_signal(request->release_fence, err_code); + @@ -1693526,71 +1692804,6 @@ index 000000000000..fae613bbf716 + mutex_unlock(&request_manager->lock); +} + -+void rga_request_session_destroy_abort(struct rga_session *session) -+{ -+ int request_id; -+ struct rga_request *request; -+ struct rga_pending_request_manager *request_manager; -+ -+ request_manager = rga_drvdata->pend_request_manager; -+ if (request_manager == NULL) { -+ pr_err("rga_pending_request_manager is null!\n"); -+ return; -+ } -+ -+ mutex_lock(&request_manager->lock); -+ -+ idr_for_each_entry(&request_manager->request_idr, request, request_id) { -+ if (session == request->session) { -+ pr_err("[tgid:%d pid:%d] destroy request[%d] when the user exits", -+ session->tgid, current->pid, request->id); -+ rga_request_put(request); -+ } -+ } -+ -+ mutex_unlock(&request_manager->lock); -+} -+ -+static int rga_request_timeout_query_state(struct rga_request *request) -+{ -+ int i; -+ unsigned long flags; -+ struct rga_scheduler_t *scheduler = NULL; -+ struct rga_job *job = NULL; -+ -+ for (i = 0; i < rga_drvdata->num_of_scheduler; i++) { -+ scheduler = rga_drvdata->scheduler[i]; -+ -+ spin_lock_irqsave(&scheduler->irq_lock, flags); -+ -+ if (scheduler->running_job) { -+ job = scheduler->running_job; -+ if (request->id == job->request_id) { -+ if (test_bit(RGA_JOB_STATE_DONE, &job->state) && -+ test_bit(RGA_JOB_STATE_FINISH, &job->state)) { -+ spin_unlock_irqrestore(&scheduler->irq_lock, flags); -+ return request->ret; -+ } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) && -+ test_bit(RGA_JOB_STATE_FINISH, &job->state)) { -+ spin_unlock_irqrestore(&scheduler->irq_lock, flags); -+ pr_err("request[%d] hardware has finished, but the software has timeout!\n", -+ request->id); -+ return -EBUSY; -+ } else if (!test_bit(RGA_JOB_STATE_DONE, &job->state) && -+ !test_bit(RGA_JOB_STATE_FINISH, &job->state)) { -+ spin_unlock_irqrestore(&scheduler->irq_lock, flags); -+ pr_err("request[%d] hardware has timeout.\n", request->id); -+ return -EBUSY; -+ } -+ } -+ } -+ -+ spin_unlock_irqrestore(&scheduler->irq_lock, flags); -+ } -+ -+ return request->ret; -+} -+ +static int rga_request_wait(struct rga_request *request) +{ + int left_time; @@ -1693601,7 +1692814,8 @@ index 000000000000..fae613bbf716 + + switch (left_time) { + case 0: -+ ret = rga_request_timeout_query_state(request); ++ pr_err("%s timeout", __func__); ++ ret = -EBUSY; + goto err_request_abort; + case -ERESTARTSYS: + ret = -ERESTARTSYS; @@ -1693626,14 +1692840,7 @@ index 000000000000..fae613bbf716 + struct rga_job *job; + + for (i = 0; i < request->task_count; i++) { -+ struct rga_req *req = &(request->task_list[i]); -+ -+ if (DEBUGGER_EN(MSG)) { -+ pr_info("commit request[%d] task[%d]:\n", request->id, i); -+ rga_cmd_print_debug_info(req); -+ } -+ -+ job = rga_job_commit(req, request); ++ job = rga_job_commit(&(request->task_list[i]), request); + if (IS_ERR(job)) { + pr_err("request[%d] task[%d] job_commit failed.\n", request->id, i); + rga_request_release_abort(request, PTR_ERR(job)); @@ -1693654,38 +1692861,10 @@ index 000000000000..fae613bbf716 +static void rga_request_acquire_fence_signaled_cb(struct dma_fence *fence, + struct dma_fence_cb *_waiter) +{ -+ int ret; -+ unsigned long flags; -+ struct mm_struct *current_mm; + struct rga_fence_waiter *waiter = (struct rga_fence_waiter *)_waiter; -+ struct rga_request *request = (struct rga_request *)waiter->private; -+ struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager; -+ -+ ret = rga_request_commit(request); -+ if (ret < 0) { -+ pr_err("acquire_fence callback: rga request[%d] commit failed!\n", request->id); -+ -+ spin_lock_irqsave(&request->lock, flags); -+ -+ request->is_running = false; -+ current_mm = request->current_mm; -+ request->current_mm = NULL; + -+ spin_unlock_irqrestore(&request->lock, flags); -+ -+ rga_request_put_current_mm(current_mm); -+ -+ /* -+ * Since the callback is called while holding &dma_fence.lock, -+ * the _locked API is used here. -+ */ -+ if (dma_fence_get_status_locked(request->release_fence) == 0) -+ dma_fence_signal_locked(request->release_fence); -+ } -+ -+ mutex_lock(&request_manager->lock); -+ rga_request_put(request); -+ mutex_unlock(&request_manager->lock); ++ if (rga_request_commit((struct rga_request *)waiter->private)) ++ pr_err("rga request commit failed!\n"); + + kfree(waiter); +} @@ -1693694,9 +1692873,7 @@ index 000000000000..fae613bbf716 +{ + struct rga_pending_request_manager *request_manager; + struct rga_request *request; -+ struct mm_struct *current_mm; + int finished_count, failed_count; -+ bool is_finished = false; + unsigned long flags; + + request_manager = rga_drvdata->pend_request_manager; @@ -1693717,6 +1692894,8 @@ index 000000000000..fae613bbf716 + rga_request_get(request); + mutex_unlock(&request_manager->lock); + ++ rga_job_cleanup(job); ++ + spin_lock_irqsave(&request->lock, flags); + + if (job->ret < 0) { @@ -1693736,16 +1692915,14 @@ index 000000000000..fae613bbf716 + + request->is_running = false; + request->is_done = true; -+ current_mm = request->current_mm; -+ request->current_mm = NULL; + -+ spin_unlock_irqrestore(&request->lock, flags); ++ rga_request_put_current_mm(request); + -+ rga_request_put_current_mm(current_mm); ++ spin_unlock_irqrestore(&request->lock, flags); + + rga_dma_fence_signal(request->release_fence, request->ret); + -+ is_finished = true; ++ wake_up(&request->finished_wq); + + if (DEBUGGER_EN(MSG)) + pr_info("request[%d] finished %d failed %d\n", @@ -1693758,21 +1692935,9 @@ index 000000000000..fae613bbf716 + } + + mutex_lock(&request_manager->lock); -+ -+ if (is_finished) -+ wake_up(&request->finished_wq); -+ + rga_request_put(request); -+ + mutex_unlock(&request_manager->lock); + -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], job done total cost time %lld us\n", -+ job->request_id, -+ ktime_us_delta(ktime_get(), job->timestamp)); -+ -+ rga_job_cleanup(job); -+ + return 0; +} + @@ -1693824,7 +1692989,6 @@ index 000000000000..fae613bbf716 + request->sync_mode = user_request->sync_mode; + request->mpi_config_flags = user_request->mpi_config_flags; + request->acquire_fence_fd = user_request->acquire_fence_fd; -+ request->feature = task_list[0].feature; + + spin_unlock_irqrestore(&request->lock, flags); + @@ -1693901,27 +1693065,19 @@ index 000000000000..fae613bbf716 +{ + int ret = 0; + unsigned long flags; -+ struct dma_fence *release_fence; -+ struct mm_struct *current_mm; -+ -+ current_mm = rga_request_get_current_mm(request); + + spin_lock_irqsave(&request->lock, flags); + + if (request->is_running) { ++ pr_err("can not re-config when request is running"); + spin_unlock_irqrestore(&request->lock, flags); -+ -+ pr_err("can not re-config when request is running\n"); -+ ret = -EFAULT; -+ goto err_put_current_mm; ++ return -EFAULT; + } + + if (request->task_list == NULL) { ++ pr_err("can not find task list from id[%d]", request->id); + spin_unlock_irqrestore(&request->lock, flags); -+ -+ pr_err("can not find task list from id[%d]\n", request->id); -+ ret = -EINVAL; -+ goto err_put_current_mm; ++ return -EINVAL; + } + + /* Reset */ @@ -1693929,76 +1693085,49 @@ index 000000000000..fae613bbf716 + request->is_done = false; + request->finished_task_count = 0; + request->failed_task_count = 0; -+ request->current_mm = current_mm; + -+ /* Unlock after ensuring that the current request will not be resubmitted. */ ++ rga_request_get_current_mm(request); ++ + spin_unlock_irqrestore(&request->lock, flags); + + if (request->sync_mode == RGA_BLIT_ASYNC) { -+ release_fence = rga_dma_fence_alloc(); -+ if (IS_ERR(release_fence)) { -+ pr_err("Can not alloc release fence!\n"); -+ ret = IS_ERR(release_fence); -+ goto err_reset_request; ++ ret = rga_request_alloc_release_fence(&request->release_fence); ++ if (ret < 0) { ++ pr_err("Failed to alloc release fence fd!\n"); ++ return ret; + } -+ request->release_fence = release_fence; ++ request->release_fence_fd = ret; + + if (request->acquire_fence_fd > 0) { + ret = rga_request_add_acquire_fence_callback( -+ request->acquire_fence_fd, request, ++ request->acquire_fence_fd, ++ (void *)request, + rga_request_acquire_fence_signaled_cb); + if (ret == 0) { -+ /* acquire fence active */ -+ goto export_release_fence_fd; -+ } else if (ret > 0) { -+ /* acquire fence has been signaled */ ++ return ret; ++ } else if (ret == 1) { + goto request_commit; + } else { + pr_err("Failed to add callback with acquire fence fd[%d]!\n", + request->acquire_fence_fd); -+ goto err_put_release_fence; ++ goto error_release_fence_put; + } + } ++ + } + +request_commit: + ret = rga_request_commit(request); + if (ret < 0) { -+ pr_err("rga request[%d] commit failed!\n", request->id); -+ goto err_put_release_fence; -+ } -+ -+export_release_fence_fd: -+ if (request->release_fence != NULL) { -+ ret = rga_dma_fence_get_fd(request->release_fence); -+ if (ret < 0) { -+ pr_err("Failed to alloc release fence fd!\n"); -+ rga_request_release_abort(request, ret); -+ return ret; -+ } -+ -+ request->release_fence_fd = ret; ++ pr_err("rga request commit failed!\n"); ++ goto error_release_fence_put; + } + + return 0; + -+err_put_release_fence: -+ if (request->release_fence != NULL) { -+ rga_dma_fence_put(request->release_fence); -+ request->release_fence = NULL; -+ } -+ -+err_reset_request: -+ spin_lock_irqsave(&request->lock, flags); -+ -+ request->current_mm = NULL; -+ request->is_running = false; -+ -+ spin_unlock_irqrestore(&request->lock, flags); -+ -+err_put_current_mm: -+ rga_request_put_current_mm(current_mm); -+ ++error_release_fence_put: ++ rga_dma_fence_put(request->release_fence); ++ request->release_fence = NULL; + return ret; +} + @@ -1694087,32 +1693216,24 @@ index 000000000000..fae613bbf716 +static void rga_request_kref_release(struct kref *ref) +{ + struct rga_request *request; -+ struct mm_struct *current_mm; + unsigned long flags; + + request = container_of(ref, struct rga_request, refcount); + + if (rga_dma_fence_get_status(request->release_fence) == 0) -+ rga_dma_fence_signal(request->release_fence, -EFAULT); ++ rga_dma_fence_signal(request->release_fence, -EEXIST); + + spin_lock_irqsave(&request->lock, flags); + + rga_dma_fence_put(request->release_fence); -+ current_mm = request->current_mm; -+ request->current_mm = NULL; + + if (!request->is_running || request->is_done) { + spin_unlock_irqrestore(&request->lock, flags); -+ -+ rga_request_put_current_mm(current_mm); -+ + goto free_request; + } + + spin_unlock_irqrestore(&request->lock, flags); + -+ rga_request_put_current_mm(current_mm); -+ + rga_request_scheduler_job_abort(request); + +free_request: @@ -1694129,7 +1693250,6 @@ index 000000000000..fae613bbf716 + +int rga_request_alloc(uint32_t flags, struct rga_session *session) +{ -+ int new_id; + struct rga_pending_request_manager *request_manager; + struct rga_request *request; + @@ -1694160,17 +1693280,17 @@ index 000000000000..fae613bbf716 + mutex_lock(&request_manager->lock); + + idr_preload(GFP_KERNEL); -+ new_id = idr_alloc_cyclic(&request_manager->request_idr, request, 1, 0, GFP_NOWAIT); ++ request->id = idr_alloc(&request_manager->request_idr, request, 1, 0, GFP_KERNEL); + idr_preload_end(); -+ if (new_id < 0) { -+ pr_err("request alloc id failed!\n"); ++ ++ if (request->id <= 0) { ++ pr_err("alloc request_id failed!\n"); + + mutex_unlock(&request_manager->lock); + kfree(request); -+ return new_id; ++ return -EFAULT; + } + -+ request->id = new_id; + request_manager->request_count++; + + mutex_unlock(&request_manager->lock); @@ -1694225,11 +1693345,11 @@ index 000000000000..fae613bbf716 + return 0; +} diff --git a/drivers/video/rockchip/rga3/rga_mm.c b/drivers/video/rockchip/rga3/rga_mm.c -new file mode 100644 -index 000000000000..de7e9a6fd7fa +new file mode 100755 +index 000000000..7d59472d0 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_mm.c -@@ -0,0 +1,2229 @@ +@@ -0,0 +1,2026 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1694285,14 +1693405,14 @@ index 000000000000..de7e9a6fd7fa + for (i = 0; i < pageCount; i++) { + vma = find_vma(current_mm, (Memory + i) << PAGE_SHIFT); + if (!vma) { -+ pr_err("page[%d] failed to get vma\n", i); ++ pr_err("failed to get vma\n"); + ret = RGA_OUT_OF_RESOURCES; + break; + } + + pgd = pgd_offset(current_mm, (Memory + i) << PAGE_SHIFT); + if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd))) { -+ pr_err("page[%d] failed to get pgd\n", i); ++ pr_err("failed to get pgd\n"); + ret = RGA_OUT_OF_RESOURCES; + break; + } @@ -1694303,7 +1693423,7 @@ index 000000000000..de7e9a6fd7fa + */ + p4d = p4d_offset(pgd, (Memory + i) << PAGE_SHIFT); + if (p4d_none(*p4d) || unlikely(p4d_bad(*p4d))) { -+ pr_err("page[%d] failed to get p4d\n", i); ++ pr_err("failed to get p4d\n"); + ret = RGA_OUT_OF_RESOURCES; + break; + } @@ -1694314,20 +1693434,20 @@ index 000000000000..de7e9a6fd7fa +#endif + + if (pud_none(*pud) || unlikely(pud_bad(*pud))) { -+ pr_err("page[%d] failed to get pud\n", i); ++ pr_err("failed to get pud\n"); + ret = RGA_OUT_OF_RESOURCES; + break; + } + pmd = pmd_offset(pud, (Memory + i) << PAGE_SHIFT); + if (pmd_none(*pmd) || unlikely(pmd_bad(*pmd))) { -+ pr_err("page[%d] failed to get pmd\n", i); ++ pr_err("failed to get pmd\n"); + ret = RGA_OUT_OF_RESOURCES; + break; + } + pte = pte_offset_map_lock(current_mm, pmd, + (Memory + i) << PAGE_SHIFT, &ptl); + if (pte_none(*pte)) { -+ pr_err("page[%d] failed to get pte\n", i); ++ pr_err("failed to get pte\n"); + pte_unmap_unlock(pte, ptl); + ret = RGA_OUT_OF_RESOURCES; + break; @@ -1694338,10 +1693458,6 @@ index 000000000000..de7e9a6fd7fa + pte_unmap_unlock(pte, ptl); + } + -+ if (ret == RGA_OUT_OF_RESOURCES && i > 0) -+ pr_err("Only get buffer %d byte from vma, but current image required %d byte", -+ (int)(i * PAGE_SIZE), (int)(pageCount * PAGE_SIZE)); -+ + return ret; +} + @@ -1694380,9 +1693496,9 @@ index 000000000000..de7e9a6fd7fa + put_page(pages[i]); + + ret = rga_get_user_pages_from_vma(pages, Memory, pageCount, current_mm); -+ if (ret < 0 && result > 0) { -+ pr_err("Only get buffer %d byte from user pages, but current image required %d byte\n", -+ (int)(result * PAGE_SIZE), (int)(pageCount * PAGE_SIZE)); ++ if (ret < 0) { ++ pr_err("Can not get user pages from vma, result = %d, pagecount = %d\n", ++ result, pageCount); + } + } + @@ -1694413,12 +1693529,9 @@ index 000000000000..de7e9a6fd7fa + } + + /* get sg form pages. */ -+ /* iova requires minimum page alignment, so sgt cannot have offset */ -+ ret = sg_alloc_table_from_pages(sgt, -+ virt_addr->pages, ++ ret = sg_alloc_table_from_pages(sgt, virt_addr->pages, + virt_addr->page_count, -+ 0, -+ virt_addr->size, ++ 0, virt_addr->size, + GFP_KERNEL); + if (ret) { + pr_err("sg_alloc_table_from_pages failed"); @@ -1694484,29 +1693597,21 @@ index 000000000000..de7e9a6fd7fa + if (!size) { + pr_err("failed to calculating buffer size! size = %ld, count = %d, offset = %ld\n", + size, count, (unsigned long)offset); -+ rga_dump_memory_parm(memory_parm); + return -EFAULT; + } + + /* alloc pages and page_table */ + order = get_order(count * sizeof(struct page *)); -+ if (order >= MAX_ORDER) { -+ pr_err("Can not alloc pages with order[%d] for viraddr pages, max_order = %d\n", -+ order, MAX_ORDER); -+ return -ENOMEM; -+ } -+ + pages = (struct page **)__get_free_pages(GFP_KERNEL, order); + if (pages == NULL) { -+ pr_err("%s can not alloc pages for viraddr pages\n", __func__); ++ pr_err("%s can not alloc pages for pages\n", __func__); + return -ENOMEM; + } + + /* get pages from virtual address. */ + ret = rga_get_user_pages(pages, viraddr >> PAGE_SHIFT, count, writeFlag, mm); + if (ret < 0) { -+ pr_err("failed to get pages from virtual adrees: 0x%lx\n", -+ (unsigned long)viraddr); ++ pr_err("failed to get pages"); + ret = -EINVAL; + goto out_free_pages; + } else if (ret > 0) { @@ -1694548,7 +1693653,7 @@ index 000000000000..de7e9a6fd7fa + + if (scheduler->data->mmu == RGA_MMU && + !(mm_flag & RGA_MEM_UNDER_4G)) { -+ pr_err("%s unsupported memory larger than 4G!\n", ++ pr_err("%s unsupported Memory larger than 4G!\n", + rga_get_mmu_type_str(scheduler->data->mmu)); + return false; + } @@ -1694605,7 +1693710,6 @@ index 000000000000..de7e9a6fd7fa + struct rga_job *job) +{ + int ret; -+ int ex_buffer_size; + uint32_t mm_flag = 0; + phys_addr_t phys_addr = 0; + struct rga_dma_buffer *buffer; @@ -1694619,19 +1693723,6 @@ index 000000000000..de7e9a6fd7fa + return -EINVAL; + } + -+ if (external_buffer->memory_parm.size) -+ ex_buffer_size = external_buffer->memory_parm.size; -+ else -+ ex_buffer_size = rga_image_size_cal(external_buffer->memory_parm.width, -+ external_buffer->memory_parm.height, -+ external_buffer->memory_parm.format, -+ NULL, NULL, NULL); -+ if (ex_buffer_size <= 0) { -+ pr_err("failed to calculating buffer size!\n"); -+ rga_dump_memory_parm(&external_buffer->memory_parm); -+ return ex_buffer_size == 0 ? -EINVAL : ex_buffer_size; -+ } -+ + /* + * dma-buf api needs to use default_domain of main dev, + * and not IOMMU for devices without iommu_info ptr. @@ -1694665,15 +1693756,6 @@ index 000000000000..de7e9a6fd7fa + goto free_buffer; + } + -+ if (buffer->size < ex_buffer_size) { -+ pr_err("Only get buffer %ld byte from %s = 0x%lx, but current image required %d byte\n", -+ buffer->size, rga_get_memory_type_str(external_buffer->type), -+ (unsigned long)external_buffer->memory, ex_buffer_size); -+ rga_dump_memory_parm(&external_buffer->memory_parm); -+ ret = -EINVAL; -+ goto unmap_buffer; -+ } -+ + buffer->scheduler = scheduler; + + if (rga_mm_check_range_sgt(buffer->sgt)) @@ -1694687,7 +1693769,6 @@ index 000000000000..de7e9a6fd7fa + phys_addr = sg_phys(buffer->sgt->sgl); + if (phys_addr == 0) { + pr_err("%s get physical address error!", __func__); -+ ret = -EFAULT; + goto unmap_buffer; + } + @@ -1694804,20 +1693885,12 @@ index 000000000000..de7e9a6fd7fa + phys_addr = sg_phys(sgt->sgl); + if (phys_addr == 0) { + pr_err("%s get physical address error!", __func__); -+ ret = -EFAULT; + goto free_sgt; + } + + mm_flag |= RGA_MEM_PHYSICAL_CONTIGUOUS; + } + -+ /* -+ * Some userspace virtual addresses do not have an -+ * interface for flushing the cache, so it is mandatory -+ * to flush the cache when the virtual address is used. -+ */ -+ mm_flag |= RGA_MEM_FORCE_FLUSH_CACHE; -+ + if (!rga_mm_check_memory_limit(scheduler, mm_flag)) { + pr_err("scheduler core[%d] unsupported mm_flag[0x%x]!\n", + scheduler->core, mm_flag); @@ -1694855,9 +1693928,8 @@ index 000000000000..de7e9a6fd7fa + if (mm_flag & RGA_MEM_PHYSICAL_CONTIGUOUS) + break; + -+ pr_err("Current %s[%d] cannot support physically discontinuous virtual address!\n", -+ rga_get_mmu_type_str(scheduler->data->mmu), scheduler->data->mmu); -+ ret = -EOPNOTSUPP; ++ pr_err("Current RGA mmu[%d] cannot support virtual address!\n", ++ scheduler->data->mmu); + goto free_dma_buffer; + } + @@ -1694869,7 +1693941,7 @@ index 000000000000..de7e9a6fd7fa + internal_buffer->virt_addr = virt_addr; + internal_buffer->dma_buffer = buffer; + internal_buffer->mm_flag = mm_flag; -+ internal_buffer->phys_addr = phys_addr ? phys_addr + virt_addr->offset : 0; ++ internal_buffer->phys_addr = phys_addr ? phys_addr : 0; + + return 0; + @@ -1694929,8 +1694001,7 @@ index 000000000000..de7e9a6fd7fa + internal_buffer->memory_parm.format, + NULL, NULL, NULL); + if (buffer_size <= 0) { -+ pr_err("Failed to get phys addr size!\n"); -+ rga_dump_memory_parm(&internal_buffer->memory_parm); ++ pr_err("Fault to get phys addr size!\n"); + return buffer_size == 0 ? -EINVAL : buffer_size; + } + @@ -1694955,7 +1694026,7 @@ index 000000000000..de7e9a6fd7fa + ret = rga_iommu_map(phys_addr, buffer_size, buffer, scheduler->dev); + if (ret < 0) { + pr_err("%s core[%d] map phys_addr error!\n", __func__, scheduler->core); -+ goto free_dma_buffer; ++ return ret; + } + } + @@ -1694967,11 +1694038,6 @@ index 000000000000..de7e9a6fd7fa + internal_buffer->dma_buffer = buffer; + + return 0; -+ -+free_dma_buffer: -+ kfree(buffer); -+ -+ return ret; +} + +static int rga_mm_unmap_buffer(struct rga_internal_buffer *internal_buffer) @@ -1695024,7 +1694090,7 @@ index 000000000000..de7e9a6fd7fa + + ret = rga_mm_map_virt_addr(external_buffer, internal_buffer, job, write_flag); + if (ret < 0) { -+ pr_err("%s map virtual address error!\n", __func__); ++ pr_err("%s iommu_map virtual address error!\n", __func__); + return ret; + } + @@ -1695037,7 +1694103,7 @@ index 000000000000..de7e9a6fd7fa + + ret = rga_mm_map_phys_addr(external_buffer, internal_buffer, job); + if (ret < 0) { -+ pr_err("%s map physical address error!\n", __func__); ++ pr_err("%s iommu_map physical address error!\n", __func__); + return ret; + } + @@ -1695075,15 +1694141,9 @@ index 000000000000..de7e9a6fd7fa + return 0; +} + -+static void rga_mm_buffer_destroy(struct rga_internal_buffer *buffer) -+{ -+ rga_mm_kref_release_buffer(&buffer->refcount); -+} -+ +static struct rga_internal_buffer * +rga_mm_lookup_external(struct rga_mm *mm_session, -+ struct rga_external_buffer *external_buffer, -+ struct mm_struct *current_mm) ++ struct rga_external_buffer *external_buffer) +{ + int id; + struct dma_buf *dma_buf = NULL; @@ -1695116,12 +1694176,8 @@ index 000000000000..de7e9a6fd7fa + continue; + + if (temp_buffer->virt_addr->addr == external_buffer->memory) { -+ if (temp_buffer->current_mm == current_mm) { -+ output_buffer = temp_buffer; -+ break; -+ } -+ -+ continue; ++ output_buffer = temp_buffer; ++ break; + } + } + @@ -1695426,15 +1694482,9 @@ index 000000000000..de7e9a6fd7fa + + if (job->flags & RGA_JOB_USE_HANDLE) { + order = get_order(page_count * sizeof(uint32_t *)); -+ if (order >= MAX_ORDER) { -+ pr_err("Can not alloc pages with order[%d] for page_table, max_order = %d\n", -+ order, MAX_ORDER); -+ return -ENOMEM; -+ } -+ + page_table = (uint32_t *)__get_free_pages(GFP_KERNEL | GFP_DMA32, order); + if (page_table == NULL) { -+ pr_err("%s can not alloc pages for page_table, order = %d\n", ++ pr_err("%s can not alloc pages for pages, order = %d\n", + __func__, order); + return -ENOMEM; + } @@ -1695491,15 +1694541,9 @@ index 000000000000..de7e9a6fd7fa + + if (job->flags & RGA_JOB_USE_HANDLE) { + order = get_order(page_count * sizeof(uint32_t *)); -+ if (order >= MAX_ORDER) { -+ pr_err("Can not alloc pages with order[%d] for page_table, max_order = %d\n", -+ order, MAX_ORDER); -+ return -ENOMEM; -+ } -+ + page_table = (uint32_t *)__get_free_pages(GFP_KERNEL | GFP_DMA32, order); + if (page_table == NULL) { -+ pr_err("%s can not alloc pages for page_table, order = %d\n", ++ pr_err("%s can not alloc pages for pages, order = %d\n", + __func__, order); + return -ENOMEM; + } @@ -1695547,6 +1694591,13 @@ index 000000000000..de7e9a6fd7fa + struct sg_table *sgt; + struct rga_scheduler_t *scheduler; + ++ sgt = rga_mm_lookup_sgt(buffer); ++ if (sgt == NULL) { ++ pr_err("%s(%d), failed to get sgt, core = 0x%x\n", ++ __func__, __LINE__, job->core); ++ return -EINVAL; ++ } ++ + scheduler = buffer->dma_buffer->scheduler; + if (scheduler == NULL) { + pr_err("%s(%d), failed to get scheduler, core = 0x%x\n", @@ -1695554,19 +1694605,7 @@ index 000000000000..de7e9a6fd7fa + return -EFAULT; + } + -+ if (buffer->mm_flag & RGA_MEM_PHYSICAL_CONTIGUOUS && -+ scheduler->data->mmu != RGA_IOMMU) { -+ dma_sync_single_for_device(scheduler->dev, buffer->phys_addr, buffer->size, dir); -+ } else { -+ sgt = rga_mm_lookup_sgt(buffer); -+ if (sgt == NULL) { -+ pr_err("%s(%d), failed to get sgt, core = 0x%x\n", -+ __func__, __LINE__, job->core); -+ return -EINVAL; -+ } -+ -+ dma_sync_sg_for_device(scheduler->dev, sgt->sgl, sgt->orig_nents, dir); -+ } ++ dma_sync_sg_for_device(scheduler->dev, sgt->sgl, sgt->orig_nents, dir); + + return 0; +} @@ -1695578,6 +1694617,13 @@ index 000000000000..de7e9a6fd7fa + struct sg_table *sgt; + struct rga_scheduler_t *scheduler; + ++ sgt = rga_mm_lookup_sgt(buffer); ++ if (sgt == NULL) { ++ pr_err("%s(%d), failed to get sgt, core = 0x%x\n", ++ __func__, __LINE__, job->core); ++ return -EINVAL; ++ } ++ + scheduler = buffer->dma_buffer->scheduler; + if (scheduler == NULL) { + pr_err("%s(%d), failed to get scheduler, core = 0x%x\n", @@ -1695585,19 +1694631,7 @@ index 000000000000..de7e9a6fd7fa + return -EFAULT; + } + -+ if (buffer->mm_flag & RGA_MEM_PHYSICAL_CONTIGUOUS && -+ scheduler->data->mmu != RGA_IOMMU) { -+ dma_sync_single_for_cpu(scheduler->dev, buffer->phys_addr, buffer->size, dir); -+ } else { -+ sgt = rga_mm_lookup_sgt(buffer); -+ if (sgt == NULL) { -+ pr_err("%s(%d), failed to get sgt, core = 0x%x\n", -+ __func__, __LINE__, job->core); -+ return -EINVAL; -+ } -+ -+ dma_sync_sg_for_cpu(scheduler->dev, sgt->sgl, sgt->orig_nents, dir); -+ } ++ dma_sync_sg_for_cpu(scheduler->dev, sgt->sgl, sgt->orig_nents, dir); + + return 0; +} @@ -1695652,7 +1694686,6 @@ index 000000000000..de7e9a6fd7fa + uint64_t handle, + uint64_t *channel_addr, + struct rga_internal_buffer **buf, -+ int require_size, + enum dma_data_direction dir) +{ + int ret = 0; @@ -1695688,15 +1694721,7 @@ index 000000000000..de7e9a6fd7fa + return ret; + } + -+ if (internal_buffer->size < require_size) { -+ ret = -EINVAL; -+ pr_err("Only get buffer %ld byte from handle[%ld], but current required %d byte\n", -+ internal_buffer->size, (unsigned long)handle, require_size); -+ -+ goto put_internal_buffer; -+ } -+ -+ if (internal_buffer->mm_flag & RGA_MEM_FORCE_FLUSH_CACHE) { ++ if (internal_buffer->type == RGA_VIRTUAL_ADDRESS) { + /* + * Some userspace virtual addresses do not have an + * interface for flushing the cache, so it is mandatory @@ -1695705,19 +1694730,11 @@ index 000000000000..de7e9a6fd7fa + ret = rga_mm_sync_dma_sg_for_device(internal_buffer, job, dir); + if (ret < 0) { + pr_err("sync sgt for device error!\n"); -+ goto put_internal_buffer; ++ return ret; + } + } + + return 0; -+ -+put_internal_buffer: -+ mutex_lock(&mm->lock); -+ kref_put(&internal_buffer->refcount, rga_mm_kref_release_buffer); -+ mutex_unlock(&mm->lock); -+ -+ return ret; -+ +} + +static void rga_mm_put_buffer(struct rga_mm *mm, @@ -1695725,36 +1694742,15 @@ index 000000000000..de7e9a6fd7fa + struct rga_internal_buffer *internal_buffer, + enum dma_data_direction dir) +{ -+ if (internal_buffer->mm_flag & RGA_MEM_FORCE_FLUSH_CACHE && dir != DMA_NONE) ++ if (internal_buffer->type == RGA_VIRTUAL_ADDRESS && dir != DMA_NONE) + if (rga_mm_sync_dma_sg_for_cpu(internal_buffer, job, dir)) + pr_err("sync sgt for cpu error!\n"); + -+ if (DEBUGGER_EN(MM)) { -+ pr_info("handle[%d] put info:\n", (int)internal_buffer->handle); -+ rga_mm_dump_buffer(internal_buffer); -+ } -+ + mutex_lock(&mm->lock); + kref_put(&internal_buffer->refcount, rga_mm_kref_release_buffer); + mutex_unlock(&mm->lock); +} + -+static void rga_mm_put_channel_handle_info(struct rga_mm *mm, -+ struct rga_job *job, -+ struct rga_job_buffer *job_buf, -+ enum dma_data_direction dir) -+{ -+ if (job_buf->y_addr) -+ rga_mm_put_buffer(mm, job, job_buf->y_addr, dir); -+ if (job_buf->uv_addr) -+ rga_mm_put_buffer(mm, job, job_buf->uv_addr, dir); -+ if (job_buf->v_addr) -+ rga_mm_put_buffer(mm, job, job_buf->v_addr, dir); -+ -+ if (job_buf->page_table) -+ free_pages((unsigned long)job_buf->page_table, job_buf->order); -+} -+ +static int rga_mm_get_channel_handle_info(struct rga_mm *mm, + struct rga_job *job, + struct rga_img_info_t *img, @@ -1695763,24 +1694759,15 @@ index 000000000000..de7e9a6fd7fa +{ + int ret = 0; + int handle = 0; -+ int img_size, yrgb_size, uv_size, v_size; -+ -+ img_size = rga_image_size_cal(img->vir_w, img->vir_h, img->format, -+ &yrgb_size, &uv_size, &v_size); -+ if (img_size <= 0) { -+ pr_err("Image size cal error! width = %d, height = %d, format = %s\n", -+ img->vir_w, img->vir_h, rga_get_format_name(img->format)); -+ return -EINVAL; -+ } + + /* using third-address */ + if (img->uv_addr > 0) { + handle = img->yrgb_addr; + if (handle > 0) { + ret = rga_mm_get_buffer(mm, job, handle, &img->yrgb_addr, -+ &job_buf->y_addr, yrgb_size, dir); ++ &job_buf->y_addr, dir); + if (ret < 0) { -+ pr_err("handle[%d] Can't get y/rgb address info!\n", handle); ++ pr_err("handle[%d] Can't get src y/rgb address info!\n", handle); + return ret; + } + } @@ -1695788,9 +1694775,9 @@ index 000000000000..de7e9a6fd7fa + handle = img->uv_addr; + if (handle > 0) { + ret = rga_mm_get_buffer(mm, job, handle, &img->uv_addr, -+ &job_buf->uv_addr, uv_size, dir); ++ &job_buf->uv_addr, dir); + if (ret < 0) { -+ pr_err("handle[%d] Can't get uv address info!\n", handle); ++ pr_err("handle[%d] Can't get src uv address info!\n", handle); + return ret; + } + } @@ -1695798,9 +1694785,9 @@ index 000000000000..de7e9a6fd7fa + handle = img->v_addr; + if (handle > 0) { + ret = rga_mm_get_buffer(mm, job, handle, &img->v_addr, -+ &job_buf->v_addr, v_size, dir); ++ &job_buf->v_addr, dir); + if (ret < 0) { -+ pr_err("handle[%d] Can't get uv address info!\n", handle); ++ pr_err("handle[%d] Can't get src uv address info!\n", handle); + return ret; + } + } @@ -1695808,9 +1694795,9 @@ index 000000000000..de7e9a6fd7fa + handle = img->yrgb_addr; + if (handle > 0) { + ret = rga_mm_get_buffer(mm, job, handle, &img->yrgb_addr, -+ &job_buf->addr, img_size, dir); ++ &job_buf->addr, dir); + if (ret < 0) { -+ pr_err("handle[%d] Can't get y/rgb address info!\n", handle); ++ pr_err("handle[%d] Can't get src y/rgb address info!\n", handle); + return ret; + } + } @@ -1695823,8 +1694810,6 @@ index 000000000000..de7e9a6fd7fa + ret = rga_mm_set_mmu_base(job, img, job_buf); + if (ret < 0) { + pr_err("Can't set RGA2 MMU_BASE from handle!\n"); -+ -+ rga_mm_put_channel_handle_info(mm, job, job_buf, dir); + return ret; + } + } @@ -1695832,6 +1694817,22 @@ index 000000000000..de7e9a6fd7fa + return 0; +} + ++static void rga_mm_put_channel_handle_info(struct rga_mm *mm, ++ struct rga_job *job, ++ struct rga_job_buffer *job_buf, ++ enum dma_data_direction dir) ++{ ++ if (job_buf->y_addr) ++ rga_mm_put_buffer(mm, job, job_buf->y_addr, dir); ++ if (job_buf->uv_addr) ++ rga_mm_put_buffer(mm, job, job_buf->uv_addr, dir); ++ if (job_buf->v_addr) ++ rga_mm_put_buffer(mm, job, job_buf->v_addr, dir); ++ ++ if (job_buf->page_table) ++ free_pages((unsigned long)job_buf->page_table, job_buf->order); ++} ++ +static int rga_mm_get_handle_info(struct rga_job *job) +{ + int ret = 0; @@ -1695842,59 +1694843,12 @@ index 000000000000..de7e9a6fd7fa + req = &job->rga_command_base; + mm = rga_drvdata->mm; + -+ switch (req->render_mode) { -+ case BITBLT_MODE: -+ case COLOR_PALETTE_MODE: -+ if (unlikely(req->src.yrgb_addr <= 0)) { -+ pr_err("render_mode[0x%x] src0 channel handle[%ld] must is valid!", -+ req->render_mode, (unsigned long)req->src.yrgb_addr); -+ return -EINVAL; -+ } -+ -+ if (unlikely(req->dst.yrgb_addr <= 0)) { -+ pr_err("render_mode[0x%x] dst channel handle[%ld] must is valid!", -+ req->render_mode, (unsigned long)req->dst.yrgb_addr); -+ return -EINVAL; -+ } -+ -+ if (req->bsfilter_flag) { -+ if (unlikely(req->pat.yrgb_addr <= 0)) { -+ pr_err("render_mode[0x%x] src1/pat channel handle[%ld] must is valid!", -+ req->render_mode, (unsigned long)req->pat.yrgb_addr); -+ return -EINVAL; -+ } -+ } -+ -+ break; -+ case COLOR_FILL_MODE: -+ if (unlikely(req->dst.yrgb_addr <= 0)) { -+ pr_err("render_mode[0x%x] dst channel handle[%ld] must is valid!", -+ req->render_mode, (unsigned long)req->dst.yrgb_addr); -+ return -EINVAL; -+ } -+ -+ break; -+ -+ case UPDATE_PALETTE_TABLE_MODE: -+ case UPDATE_PATTEN_BUF_MODE: -+ if (unlikely(req->pat.yrgb_addr <= 0)) { -+ pr_err("render_mode[0x%x] lut/pat channel handle[%ld] must is valid!, req->render_mode", -+ req->render_mode, (unsigned long)req->pat.yrgb_addr); -+ return -EINVAL; -+ } -+ -+ break; -+ default: -+ pr_err("%s, unknown render mode!\n", __func__); -+ break; -+ } -+ + if (likely(req->src.yrgb_addr > 0)) { + ret = rga_mm_get_channel_handle_info(mm, job, &req->src, + &job->src_buffer, + DMA_TO_DEVICE); + if (ret < 0) { -+ pr_err("Can't get src buffer info from handle!\n"); ++ pr_err("Can't get src buffer third info!\n"); + return ret; + } + } @@ -1695904,7 +1694858,7 @@ index 000000000000..de7e9a6fd7fa + &job->dst_buffer, + DMA_TO_DEVICE); + if (ret < 0) { -+ pr_err("Can't get dst buffer info from handle!\n"); ++ pr_err("Can't get dst buffer third info!\n"); + return ret; + } + } @@ -1695926,7 +1694880,7 @@ index 000000000000..de7e9a6fd7fa + DMA_BIDIRECTIONAL); + } + if (ret < 0) { -+ pr_err("Can't get pat buffer info from handle!\n"); ++ pr_err("Can't get pat buffer third info!\n"); + return ret; + } + } @@ -1696079,7 +1695033,7 @@ index 000000000000..de7e9a6fd7fa + struct rga_job_buffer *job_buffer, + enum dma_data_direction dir) +{ -+ if (job_buffer->addr->mm_flag & RGA_MEM_FORCE_FLUSH_CACHE && dir != DMA_NONE) ++ if (job_buffer->addr->type == RGA_VIRTUAL_ADDRESS && dir != DMA_NONE) + if (rga_mm_sync_dma_sg_for_cpu(job_buffer->addr, job, dir)) + pr_err("sync sgt for cpu error!\n"); + @@ -1696116,7 +1695070,12 @@ index 000000000000..de7e9a6fd7fa + goto error_unmap_buffer; + } + -+ if (buffer->mm_flag & RGA_MEM_FORCE_FLUSH_CACHE) { ++ if (buffer->type == RGA_VIRTUAL_ADDRESS) { ++ /* ++ * Some userspace virtual addresses do not have an ++ * interface for flushing the cache, so it is mandatory ++ * to flush the cache when the virtual address is used. ++ */ + ret = rga_mm_sync_dma_sg_for_device(buffer, job, dir); + if (ret < 0) { + pr_err("sync sgt for device error!\n"); @@ -1696233,7 +1695192,6 @@ index 000000000000..de7e9a6fd7fa +int rga_mm_map_job_info(struct rga_job *job) +{ + int ret; -+ ktime_t timestamp = ktime_get(); + + if (job->flags & RGA_JOB_USE_HANDLE) { + ret = rga_mm_get_handle_info(job); @@ -1696241,20 +1695199,12 @@ index 000000000000..de7e9a6fd7fa + pr_err("failed to get buffer from handle\n"); + return ret; + } -+ -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], get buffer_handle info cost %lld us\n", -+ job->request_id, ktime_us_delta(ktime_get(), timestamp)); + } else { + ret = rga_mm_map_buffer_info(job); + if (ret < 0) { + pr_err("failed to map buffer\n"); + return ret; + } -+ -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], map buffer cost %lld us\n", -+ job->request_id, ktime_us_delta(ktime_get(), timestamp)); + } + + return 0; @@ -1696262,60 +1695212,33 @@ index 000000000000..de7e9a6fd7fa + +void rga_mm_unmap_job_info(struct rga_job *job) +{ -+ ktime_t timestamp = ktime_get(); -+ -+ if (job->flags & RGA_JOB_USE_HANDLE) { ++ if (job->flags & RGA_JOB_USE_HANDLE) + rga_mm_put_handle_info(job); -+ -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], put buffer_handle info cost %lld us\n", -+ job->request_id, ktime_us_delta(ktime_get(), timestamp)); -+ } else { ++ else + rga_mm_unmap_buffer_info(job); -+ -+ if (DEBUGGER_EN(TIME)) -+ pr_info("request[%d], unmap buffer cost %lld us\n", -+ job->request_id, ktime_us_delta(ktime_get(), timestamp)); -+ } +} + -+/* -+ * rga_mm_import_buffer - Importing external buffer into the RGA driver -+ * -+ * @external_buffer: [in] Parameters of external buffer -+ * @session: [in] Session of the current process -+ * -+ * returns: -+ * if return value > 0, the buffer import is successful and is the generated -+ * buffer-handle, negative error code on failure. -+ */ -+int rga_mm_import_buffer(struct rga_external_buffer *external_buffer, -+ struct rga_session *session) ++uint32_t rga_mm_import_buffer(struct rga_external_buffer *external_buffer, ++ struct rga_session *session) +{ -+ int ret = 0, new_id; ++ int ret = 0; + struct rga_mm *mm; + struct rga_internal_buffer *internal_buffer; + + mm = rga_drvdata->mm; + if (mm == NULL) { + pr_err("rga mm is null!\n"); -+ return -EFAULT; ++ return 0; + } + + mutex_lock(&mm->lock); + + /* first, Check whether to rga_mm */ -+ internal_buffer = rga_mm_lookup_external(mm, external_buffer, current->mm); ++ internal_buffer = rga_mm_lookup_external(mm, external_buffer); + if (!IS_ERR_OR_NULL(internal_buffer)) { + kref_get(&internal_buffer->refcount); + + mutex_unlock(&mm->lock); -+ -+ if (DEBUGGER_EN(MM)) { -+ pr_info("import existing buffer:\n"); -+ rga_mm_dump_buffer(internal_buffer); -+ } -+ + return internal_buffer->handle; + } + @@ -1696325,7 +1695248,7 @@ index 000000000000..de7e9a6fd7fa + pr_err("%s alloc internal_buffer error!\n", __func__); + + mutex_unlock(&mm->lock); -+ return -ENOMEM; ++ return 0; + } + + ret = rga_mm_map_buffer(external_buffer, internal_buffer, NULL, true); @@ -1696340,15 +1695263,9 @@ index 000000000000..de7e9a6fd7fa + * allocation under our spinlock. + */ + idr_preload(GFP_KERNEL); -+ new_id = idr_alloc_cyclic(&mm->memory_idr, internal_buffer, 1, 0, GFP_NOWAIT); ++ internal_buffer->handle = idr_alloc(&mm->memory_idr, internal_buffer, 1, 0, GFP_KERNEL); + idr_preload_end(); -+ if (new_id < 0) { -+ pr_err("internal_buffer alloc id failed!\n"); -+ ret = new_id; -+ goto FREE_INTERNAL_BUFFER; -+ } + -+ internal_buffer->handle = new_id; + mm->buffer_count++; + + if (DEBUGGER_EN(MM)) { @@ -1696363,7 +1695280,7 @@ index 000000000000..de7e9a6fd7fa + mutex_unlock(&mm->lock); + kfree(internal_buffer); + -+ return ret; ++ return 0; +} + +int rga_mm_release_buffer(uint32_t handle) @@ -1696415,9 +1695332,9 @@ index 000000000000..de7e9a6fd7fa + + idr_for_each_entry(&mm->memory_idr, buffer, i) { + if (session == buffer->session) { -+ pr_err("[tgid:%d] Destroy handle[%d] when the user exits\n", ++ pr_err("[tgid:%d] Decrement the reference of handle[%d] when the user exits\n", + session->tgid, buffer->handle); -+ rga_mm_buffer_destroy(buffer); ++ kref_put(&buffer->refcount, rga_mm_kref_release_buffer); + } + } + @@ -1696460,11 +1695377,11 @@ index 000000000000..de7e9a6fd7fa + return 0; +} diff --git a/drivers/video/rockchip/rga3/rga_policy.c b/drivers/video/rockchip/rga3/rga_policy.c -new file mode 100644 -index 000000000000..c87ce1881cff +new file mode 100755 +index 000000000..493083655 --- /dev/null +++ b/drivers/video/rockchip/rga3/rga_policy.c -@@ -0,0 +1,426 @@ +@@ -0,0 +1,352 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Rockchip Electronics Co., Ltd. @@ -1696482,7 +1695399,7 @@ index 000000000000..c87ce1881cff +#define GET_GCD(n1, n2) \ + ({ \ + int i; \ -+ int gcd = 1; \ ++ int gcd = 0; \ + for (i = 1; i <= (n1) && i <= (n2); i++) { \ + if ((n1) % i == 0 && (n2) % i == 0) \ + gcd = i; \ @@ -1696513,53 +1695430,6 @@ index 000000000000..c87ce1881cff + return feature; +} + -+static bool rga_check_csc_constant(const struct rga_hw_data *data, struct rga_req *rga_base, -+ uint32_t mode, uint32_t flag) -+{ -+ if (mode & flag) -+ return true; -+ -+ if ((rga_base->full_csc.flag & 0x1) && (data->feature & RGA_FULL_CSC)) -+ return true; -+ -+ return false; -+} -+ -+static bool rga_check_csc(const struct rga_hw_data *data, struct rga_req *rga_base) -+{ -+ switch (rga_base->yuv2rgb_mode) { -+ case 0x1: -+ return rga_check_csc_constant(data, rga_base, -+ data->csc_y2r_mode, RGA_MODE_CSC_BT601L); -+ case 0x2: -+ return rga_check_csc_constant(data, rga_base, -+ data->csc_y2r_mode, RGA_MODE_CSC_BT601F); -+ case 0x3: -+ return rga_check_csc_constant(data, rga_base, -+ data->csc_y2r_mode, RGA_MODE_CSC_BT709); -+ case 0x1 << 2: -+ return rga_check_csc_constant(data, rga_base, -+ data->csc_r2y_mode, RGA_MODE_CSC_BT601F); -+ case 0x2 << 2: -+ return rga_check_csc_constant(data, rga_base, -+ data->csc_r2y_mode, RGA_MODE_CSC_BT601L); -+ case 0x3 << 2: -+ return rga_check_csc_constant(data, rga_base, -+ data->csc_r2y_mode, RGA_MODE_CSC_BT709); -+ default: -+ break; -+ } -+ -+ if ((rga_base->full_csc.flag & 0x1)) { -+ if (data->feature & RGA_FULL_CSC) -+ return true; -+ else -+ return false; -+ } -+ -+ return true; -+} -+ +static bool rga_check_resolution(const struct rga_rect_range *range, int width, int height) +{ + if (width > range->max.width || height > range->max.height) @@ -1696575,34 +1695445,32 @@ index 000000000000..c87ce1881cff + int rd_mode, int format, int win_num) +{ + int i; -+ const uint32_t *formats; -+ uint32_t format_count; ++ bool matched = false; + -+ switch (rd_mode) { -+ case RGA_RASTER_MODE: -+ formats = data->win[win_num].formats[RGA_RASTER_INDEX]; -+ format_count = data->win[win_num].formats_count[RGA_RASTER_INDEX]; -+ break; -+ case RGA_FBC_MODE: -+ formats = data->win[win_num].formats[RGA_AFBC16x16_INDEX]; -+ format_count = data->win[win_num].formats_count[RGA_AFBC16x16_INDEX]; -+ break; -+ case RGA_TILE_MODE: -+ formats = data->win[win_num].formats[RGA_TILE8x8_INDEX]; -+ format_count = data->win[win_num].formats_count[RGA_TILE8x8_INDEX]; -+ break; -+ default: -+ return false; ++ if (rd_mode == RGA_RASTER_MODE) { ++ for (i = 0; i < data->win[win_num].num_of_raster_formats; i++) { ++ if (format == data->win[win_num].raster_formats[i]) { ++ matched = true; ++ break; ++ } ++ } ++ } else if (rd_mode == RGA_FBC_MODE) { ++ for (i = 0; i < data->win[win_num].num_of_fbc_formats; i++) { ++ if (format == data->win[win_num].fbc_formats[i]) { ++ matched = true; ++ break; ++ } ++ } ++ } else if (rd_mode == RGA_TILE_MODE) { ++ for (i = 0; i < data->win[win_num].num_of_tile_formats; i++) { ++ if (format == data->win[win_num].tile_formats[i]) { ++ matched = true; ++ break; ++ } ++ } + } + -+ if (formats == NULL || format_count == 0) -+ return false; -+ -+ for (i = 0; i < format_count; i++) -+ if (format == formats[i]) -+ return true; -+ -+ return false; ++ return matched; +} + +static bool rga_check_align(uint32_t byte_stride_align, uint32_t format, uint16_t w_stride) @@ -1696634,12 +1695502,6 @@ index 000000000000..c87ce1881cff + if (!rga_check_resolution(&data->input_range, src0->act_w, src0->act_h)) + return false; + -+ if (data == &rga3_data && -+ !rga_check_resolution(&data->input_range, -+ src0->act_w + src0->x_offset, -+ src0->act_h + src0->y_offset)) -+ return false; -+ + if (!rga_check_format(data, src0->rd_mode, src0->format, 0)) + return false; + @@ -1696655,12 +1695517,6 @@ index 000000000000..c87ce1881cff + if (!rga_check_resolution(&data->input_range, src1->act_w, src1->act_h)) + return false; + -+ if (data == &rga3_data && -+ !rga_check_resolution(&data->input_range, -+ src1->act_w + src1->x_offset, -+ src1->act_h + src1->y_offset)) -+ return false; -+ + if (!rga_check_format(data, src1->rd_mode, src1->format, 1)) + return false; + @@ -1696676,12 +1695532,6 @@ index 000000000000..c87ce1881cff + if (!rga_check_resolution(&data->output_range, dst->act_w, dst->act_h)) + return false; + -+ if (data == &rga3_data && -+ !rga_check_resolution(&data->output_range, -+ dst->act_w + dst->x_offset, -+ dst->act_h + dst->y_offset)) -+ return false; -+ + if (!rga_check_format(data, dst->rd_mode, dst->format, 2)) + return false; + @@ -1696776,7 +1695626,7 @@ index 000000000000..c87ce1881cff + job->flags & RGA_JOB_UNSUPPORT_RGA_MMU) { + if (DEBUGGER_EN(MSG)) + pr_info("RGA2 only support under 4G memory!\n"); -+ continue; ++ continue; + } + + if (feature > 0) { @@ -1696840,13 +1695690,6 @@ index 000000000000..c87ce1881cff + continue; + } + -+ if (!rga_check_csc(data, rga_base)) { -+ if (DEBUGGER_EN(MSG)) -+ pr_info("core = %d, break on rga_check_csc", -+ scheduler->core); -+ continue; -+ } -+ + optional_cores |= scheduler->core; + } + @@ -1696891,9 +1695734,10 @@ index 000000000000..c87ce1881cff + + return core; +} +\ No newline at end of file diff --git a/drivers/video/rockchip/rve/Kconfig b/drivers/video/rockchip/rve/Kconfig new file mode 100644 -index 000000000000..d28b9d0599cf +index 000000000..d28b9d059 --- /dev/null +++ b/drivers/video/rockchip/rve/Kconfig @@ -0,0 +1,29 @@ @@ -1696928,7 +1695772,7 @@ index 000000000000..d28b9d0599cf +endif diff --git a/drivers/video/rockchip/rve/Makefile b/drivers/video/rockchip/rve/Makefile new file mode 100644 -index 000000000000..e475b7717510 +index 000000000..e475b7717 --- /dev/null +++ b/drivers/video/rockchip/rve/Makefile @@ -0,0 +1,9 @@ @@ -1696943,7 +1695787,7 @@ index 000000000000..e475b7717510 +obj-$(CONFIG_ROCKCHIP_RVE) += rve.o diff --git a/drivers/video/rockchip/rve/include/rve.h b/drivers/video/rockchip/rve/include/rve.h new file mode 100644 -index 000000000000..922e9e3bfb47 +index 000000000..922e9e3bf --- /dev/null +++ b/drivers/video/rockchip/rve/include/rve.h @@ -0,0 +1,72 @@ @@ -1697021,7 +1695865,7 @@ index 000000000000..922e9e3bfb47 +#endif /*_RVE_DRIVER_H_*/ diff --git a/drivers/video/rockchip/rve/include/rve_debugger.h b/drivers/video/rockchip/rve/include/rve_debugger.h new file mode 100644 -index 000000000000..8dbb46850532 +index 000000000..8dbb46850 --- /dev/null +++ b/drivers/video/rockchip/rve/include/rve_debugger.h @@ -0,0 +1,132 @@ @@ -1697159,7 +1696003,7 @@ index 000000000000..8dbb46850532 + diff --git a/drivers/video/rockchip/rve/include/rve_drv.h b/drivers/video/rockchip/rve/include/rve_drv.h new file mode 100644 -index 000000000000..8d9f188c93e2 +index 000000000..8d9f188c9 --- /dev/null +++ b/drivers/video/rockchip/rve/include/rve_drv.h @@ -0,0 +1,332 @@ @@ -1697497,7 +1696341,7 @@ index 000000000000..8d9f188c93e2 +#endif /* __LINUX_RVE_FENCE_H_ */ diff --git a/drivers/video/rockchip/rve/include/rve_fence.h b/drivers/video/rockchip/rve/include/rve_fence.h new file mode 100644 -index 000000000000..e70b6ac0442b +index 000000000..e70b6ac04 --- /dev/null +++ b/drivers/video/rockchip/rve/include/rve_fence.h @@ -0,0 +1,32 @@ @@ -1697535,7 +1696379,7 @@ index 000000000000..e70b6ac0442b +#endif /* __LINUX_RVE_FENCE_H_ */ diff --git a/drivers/video/rockchip/rve/include/rve_job.h b/drivers/video/rockchip/rve/include/rve_job.h new file mode 100644 -index 000000000000..b2a86f317e5f +index 000000000..b2a86f317 --- /dev/null +++ b/drivers/video/rockchip/rve/include/rve_job.h @@ -0,0 +1,53 @@ @@ -1697594,7 +1696438,7 @@ index 000000000000..b2a86f317e5f +#endif /* __LINUX_RKRVE_JOB_H_ */ diff --git a/drivers/video/rockchip/rve/include/rve_reg.h b/drivers/video/rockchip/rve/include/rve_reg.h new file mode 100644 -index 000000000000..05df28037a83 +index 000000000..05df28037 --- /dev/null +++ b/drivers/video/rockchip/rve/include/rve_reg.h @@ -0,0 +1,88 @@ @@ -1697688,7 +1696532,7 @@ index 000000000000..05df28037a83 + diff --git a/drivers/video/rockchip/rve/rve_debugger.c b/drivers/video/rockchip/rve/rve_debugger.c new file mode 100644 -index 000000000000..f156435405cf +index 000000000..f15643540 --- /dev/null +++ b/drivers/video/rockchip/rve/rve_debugger.c @@ -0,0 +1,566 @@ @@ -1698260,7 +1697104,7 @@ index 000000000000..f156435405cf + diff --git a/drivers/video/rockchip/rve/rve_drv.c b/drivers/video/rockchip/rve/rve_drv.c new file mode 100644 -index 000000000000..b4b460437b65 +index 000000000..b4b460437 --- /dev/null +++ b/drivers/video/rockchip/rve/rve_drv.c @@ -0,0 +1,897 @@ @@ -1699163,7 +1698007,7 @@ index 000000000000..b4b460437b65 +MODULE_LICENSE("GPL"); diff --git a/drivers/video/rockchip/rve/rve_fence.c b/drivers/video/rockchip/rve/rve_fence.c new file mode 100644 -index 000000000000..8d48f8033fa7 +index 000000000..8d48f8033 --- /dev/null +++ b/drivers/video/rockchip/rve/rve_fence.c @@ -0,0 +1,136 @@ @@ -1699305,7 +1698149,7 @@ index 000000000000..8d48f8033fa7 +} diff --git a/drivers/video/rockchip/rve/rve_job.c b/drivers/video/rockchip/rve/rve_job.c new file mode 100644 -index 000000000000..36b6ab63e36f +index 000000000..36b6ab63e --- /dev/null +++ b/drivers/video/rockchip/rve/rve_job.c @@ -0,0 +1,1028 @@ @@ -1700339,7 +1699183,7 @@ index 000000000000..36b6ab63e36f +} diff --git a/drivers/video/rockchip/rve/rve_reg.c b/drivers/video/rockchip/rve/rve_reg.c new file mode 100644 -index 000000000000..44b305cce0db +index 000000000..44b305cce --- /dev/null +++ b/drivers/video/rockchip/rve/rve_reg.c @@ -0,0 +1,277 @@ @@ -1700622,7 +1699466,7 @@ index 000000000000..44b305cce0db +} diff --git a/drivers/video/rockchip/vehicle/Kconfig b/drivers/video/rockchip/vehicle/Kconfig new file mode 100644 -index 000000000000..e61c864842f2 +index 000000000..e61c86484 --- /dev/null +++ b/drivers/video/rockchip/vehicle/Kconfig @@ -0,0 +1,41 @@ @@ -1700669,7 +1699513,7 @@ index 000000000000..e61c864842f2 +endif diff --git a/drivers/video/rockchip/vehicle/Makefile b/drivers/video/rockchip/vehicle/Makefile new file mode 100644 -index 000000000000..7da28b30548a +index 000000000..7da28b305 --- /dev/null +++ b/drivers/video/rockchip/vehicle/Makefile @@ -0,0 +1,26 @@ @@ -1700701,7 +1699545,7 @@ index 000000000000..7da28b30548a + vehicle_ad_7181.o diff --git a/drivers/video/rockchip/vehicle/vehicle-csi2-dphy-common.h b/drivers/video/rockchip/vehicle/vehicle-csi2-dphy-common.h new file mode 100644 -index 000000000000..8f7ac2429bef +index 000000000..8f7ac2429 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle-csi2-dphy-common.h @@ -0,0 +1,381 @@ @@ -1701088,7 +1699932,7 @@ index 000000000000..8f7ac2429bef +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_ad.h b/drivers/video/rockchip/vehicle/vehicle_ad.h new file mode 100644 -index 000000000000..a83233b791e0 +index 000000000..a83233b79 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad.h @@ -0,0 +1,83 @@ @@ -1701177,7 +1700021,7 @@ index 000000000000..a83233b791e0 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_7181.c b/drivers/video/rockchip/vehicle/vehicle_ad_7181.c new file mode 100644 -index 000000000000..9547e887031a +index 000000000..9547e8870 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_7181.c @@ -0,0 +1,608 @@ @@ -1701791,7 +1700635,7 @@ index 000000000000..9547e887031a + diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_7181.h b/drivers/video/rockchip/vehicle/vehicle_ad_7181.h new file mode 100644 -index 000000000000..b4e572ed0ef8 +index 000000000..b4e572ed0 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_7181.h @@ -0,0 +1,19 @@ @@ -1701816,7 +1700660,7 @@ index 000000000000..b4e572ed0ef8 + diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_gc2145.c b/drivers/video/rockchip/vehicle/vehicle_ad_gc2145.c new file mode 100644 -index 000000000000..a015f0d7a204 +index 000000000..a015f0d7a --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_gc2145.c @@ -0,0 +1,1149 @@ @@ -1702971,7 +1701815,7 @@ index 000000000000..a015f0d7a204 + diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_gc2145.h b/drivers/video/rockchip/vehicle/vehicle_ad_gc2145.h new file mode 100644 -index 000000000000..1934bc2172ad +index 000000000..1934bc217 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_gc2145.h @@ -0,0 +1,18 @@ @@ -1702995,7 +1701839,7 @@ index 000000000000..1934bc2172ad +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_max96714.c b/drivers/video/rockchip/vehicle/vehicle_ad_max96714.c new file mode 100644 -index 000000000000..e3926a5139ae +index 000000000..e3926a513 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_max96714.c @@ -0,0 +1,539 @@ @@ -1703540,7 +1702384,7 @@ index 000000000000..e3926a5139ae +} diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_max96714.h b/drivers/video/rockchip/vehicle/vehicle_ad_max96714.h new file mode 100644 -index 000000000000..5f1ce6fcda6a +index 000000000..5f1ce6fcd --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_max96714.h @@ -0,0 +1,18 @@ @@ -1703564,7 +1702408,7 @@ index 000000000000..5f1ce6fcda6a +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_nvp6188.c b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6188.c new file mode 100644 -index 000000000000..3c67848320d8 +index 000000000..3c6784832 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6188.c @@ -0,0 +1,1206 @@ @@ -1704776,7 +1703620,7 @@ index 000000000000..3c67848320d8 +} diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_nvp6188.h b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6188.h new file mode 100644 -index 000000000000..4e9c6a61ed61 +index 000000000..4e9c6a61e --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6188.h @@ -0,0 +1,18 @@ @@ -1704800,7 +1703644,7 @@ index 000000000000..4e9c6a61ed61 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c new file mode 100644 -index 000000000000..af9274dd35e7 +index 000000000..af9274dd3 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.c @@ -0,0 +1,2238 @@ @@ -1707044,7 +1705888,7 @@ index 000000000000..af9274dd35e7 +} diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.h b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.h new file mode 100644 -index 000000000000..b28780737969 +index 000000000..b28780737 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_nvp6324.h @@ -0,0 +1,18 @@ @@ -1707068,7 +1705912,7 @@ index 000000000000..b28780737969 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_tp2825.c b/drivers/video/rockchip/vehicle/vehicle_ad_tp2825.c new file mode 100644 -index 000000000000..08888dbe6c1b +index 000000000..08888dbe6 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_tp2825.c @@ -0,0 +1,1039 @@ @@ -1708113,7 +1706957,7 @@ index 000000000000..08888dbe6c1b + diff --git a/drivers/video/rockchip/vehicle/vehicle_ad_tp2825.h b/drivers/video/rockchip/vehicle/vehicle_ad_tp2825.h new file mode 100644 -index 000000000000..451912580de8 +index 000000000..451912580 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_ad_tp2825.h @@ -0,0 +1,18 @@ @@ -1708137,7 +1706981,7 @@ index 000000000000..451912580de8 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_cfg.h b/drivers/video/rockchip/vehicle/vehicle_cfg.h new file mode 100644 -index 000000000000..96241b7b5128 +index 000000000..96241b7b5 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_cfg.h @@ -0,0 +1,145 @@ @@ -1708288,7 +1707132,7 @@ index 000000000000..96241b7b5128 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_cif.c b/drivers/video/rockchip/vehicle/vehicle_cif.c new file mode 100644 -index 000000000000..96c2bfb95785 +index 000000000..96c2bfb95 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_cif.c @@ -0,0 +1,5332 @@ @@ -1713626,7 +1712470,7 @@ index 000000000000..96c2bfb95785 +} diff --git a/drivers/video/rockchip/vehicle/vehicle_cif.h b/drivers/video/rockchip/vehicle/vehicle_cif.h new file mode 100644 -index 000000000000..3c75694acd89 +index 000000000..3c75694ac --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_cif.h @@ -0,0 +1,189 @@ @@ -1713821,7 +1712665,7 @@ index 000000000000..3c75694acd89 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_cif_regs.h b/drivers/video/rockchip/vehicle/vehicle_cif_regs.h new file mode 100644 -index 000000000000..08e1b1f892d2 +index 000000000..08e1b1f89 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_cif_regs.h @@ -0,0 +1,19 @@ @@ -1713846,7 +1712690,7 @@ index 000000000000..08e1b1f892d2 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_dev.c b/drivers/video/rockchip/vehicle/vehicle_dev.c new file mode 100644 -index 000000000000..29c0f67111ed +index 000000000..29c0f6711 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_dev.c @@ -0,0 +1,116 @@ @@ -1713968,7 +1712812,7 @@ index 000000000000..29c0f67111ed +MODULE_LICENSE("GPL"); diff --git a/drivers/video/rockchip/vehicle/vehicle_flinger.c b/drivers/video/rockchip/vehicle/vehicle_flinger.c new file mode 100644 -index 000000000000..e2c0e676ba85 +index 000000000..e2c0e676b --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_flinger.c @@ -0,0 +1,1552 @@ @@ -1715526,7 +1714370,7 @@ index 000000000000..e2c0e676ba85 +} diff --git a/drivers/video/rockchip/vehicle/vehicle_flinger.h b/drivers/video/rockchip/vehicle/vehicle_flinger.h new file mode 100644 -index 000000000000..4b6cf8f3d5b2 +index 000000000..4b6cf8f3d --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_flinger.h @@ -0,0 +1,115 @@ @@ -1715647,7 +1714491,7 @@ index 000000000000..4b6cf8f3d5b2 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_generic_sensor.c b/drivers/video/rockchip/vehicle/vehicle_generic_sensor.c new file mode 100644 -index 000000000000..ccb45fd01051 +index 000000000..ccb45fd01 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_generic_sensor.c @@ -0,0 +1,441 @@ @@ -1716094,7 +1714938,7 @@ index 000000000000..ccb45fd01051 +} diff --git a/drivers/video/rockchip/vehicle/vehicle_gpio.c b/drivers/video/rockchip/vehicle/vehicle_gpio.c new file mode 100644 -index 000000000000..baab6aa28e34 +index 000000000..baab6aa28 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_gpio.c @@ -0,0 +1,178 @@ @@ -1716278,7 +1715122,7 @@ index 000000000000..baab6aa28e34 +} diff --git a/drivers/video/rockchip/vehicle/vehicle_gpio.h b/drivers/video/rockchip/vehicle/vehicle_gpio.h new file mode 100644 -index 000000000000..6c36392cd6b7 +index 000000000..6c36392cd --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_gpio.h @@ -0,0 +1,33 @@ @@ -1716317,7 +1715161,7 @@ index 000000000000..6c36392cd6b7 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_main.c b/drivers/video/rockchip/vehicle/vehicle_main.c new file mode 100644 -index 000000000000..a3ffdd1e3f8a +index 000000000..a3ffdd1e3 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_main.c @@ -0,0 +1,502 @@ @@ -1716825,7 +1715669,7 @@ index 000000000000..a3ffdd1e3f8a +subsys_initcall_sync(vehicle_system_start); diff --git a/drivers/video/rockchip/vehicle/vehicle_main.h b/drivers/video/rockchip/vehicle/vehicle_main.h new file mode 100644 -index 000000000000..4d66db14a978 +index 000000000..4d66db14a --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_main.h @@ -0,0 +1,19 @@ @@ -1716850,7 +1715694,7 @@ index 000000000000..4d66db14a978 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_samsung_dcphy_common.h b/drivers/video/rockchip/vehicle/vehicle_samsung_dcphy_common.h new file mode 100644 -index 000000000000..65189b720a02 +index 000000000..65189b720 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_samsung_dcphy_common.h @@ -0,0 +1,246 @@ @@ -1717102,7 +1715946,7 @@ index 000000000000..65189b720a02 +#endif diff --git a/drivers/video/rockchip/vehicle/vehicle_version.h b/drivers/video/rockchip/vehicle/vehicle_version.h new file mode 100644 -index 000000000000..9e5da4de3c75 +index 000000000..9e5da4de3 --- /dev/null +++ b/drivers/video/rockchip/vehicle/vehicle_version.h @@ -0,0 +1,78 @@ @@ -1717186,7 +1716030,7 @@ index 000000000000..9e5da4de3c75 +#endif diff --git a/drivers/video/rockchip/vtunnel/Kconfig b/drivers/video/rockchip/vtunnel/Kconfig new file mode 100644 -index 000000000000..49ad2a592bb0 +index 000000000..49ad2a592 --- /dev/null +++ b/drivers/video/rockchip/vtunnel/Kconfig @@ -0,0 +1,12 @@ @@ -1717204,7 +1716048,7 @@ index 000000000000..49ad2a592bb0 +endmenu diff --git a/drivers/video/rockchip/vtunnel/Makefile b/drivers/video/rockchip/vtunnel/Makefile new file mode 100644 -index 000000000000..fdfd79a1c0a2 +index 000000000..fdfd79a1c --- /dev/null +++ b/drivers/video/rockchip/vtunnel/Makefile @@ -0,0 +1,3 @@ @@ -1717213,7 +1716057,7 @@ index 000000000000..fdfd79a1c0a2 +obj-$(CONFIG_ROCKCHIP_VIDEO_TUNNEL) += rkvtunnel.o diff --git a/drivers/video/rockchip/vtunnel/rkvtunnel.c b/drivers/video/rockchip/vtunnel/rkvtunnel.c new file mode 100644 -index 000000000000..2a879ab5f83d +index 000000000..2a879ab5f --- /dev/null +++ b/drivers/video/rockchip/vtunnel/rkvtunnel.c @@ -0,0 +1,1527 @@ @@ -1718746,7 +1717590,7 @@ index 000000000000..2a879ab5f83d +MODULE_DESCRIPTION("ROCKCHIP videotunnel driver"); diff --git a/drivers/video/rockchip/vtunnel/rkvtunnel.h b/drivers/video/rockchip/vtunnel/rkvtunnel.h new file mode 100644 -index 000000000000..1781aa785bc0 +index 000000000..1781aa785 --- /dev/null +++ b/drivers/video/rockchip/vtunnel/rkvtunnel.h @@ -0,0 +1,81 @@ @@ -1718832,7 +1717676,7 @@ index 000000000000..1781aa785bc0 + +#endif diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c -index f0d51dd21c9e..c81fbe355adc 100644 +index f0d51dd21..c81fbe355 100644 --- a/fs/ubifs/recovery.c +++ b/fs/ubifs/recovery.c @@ -662,10 +662,43 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum, @@ -1718884,7 +1717728,7 @@ index f0d51dd21c9e..c81fbe355adc 100644 ret, lnum, offs); break; diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c -index b3ac7c98fe8c..929ed3bc5619 100644 +index b3ac7c98f..929ed3bc5 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -802,7 +802,6 @@ xfs_ialloc( @@ -1718921,7 +1717765,7 @@ index b3ac7c98fe8c..929ed3bc5619 100644 /* diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix_dp.h -index b0dcc07334a1..09f0dfeff6e8 100644 +index b0dcc0733..09f0dfeff 100644 --- a/include/drm/bridge/analogix_dp.h +++ b/include/drm/bridge/analogix_dp.h @@ -8,6 +8,7 @@ @@ -1719007,7 +1717851,7 @@ index b0dcc07334a1..09f0dfeff6e8 100644 + #endif /* _ANALOGIX_DP_H_ */ diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h -index ea34ca146b82..aca7ae836796 100644 +index ea34ca146..aca7ae836 100644 --- a/include/drm/bridge/dw_hdmi.h +++ b/include/drm/bridge/dw_hdmi.h @@ -6,12 +6,16 @@ @@ -1719243,7 +1718087,7 @@ index ea34ca146b82..aca7ae836796 100644 #endif /* __IMX_HDMI_H__ */ diff --git a/include/drm/bridge/dw_mipi_dsi.h b/include/drm/bridge/dw_mipi_dsi.h -index bda8aa7c2280..3b86b7d8b009 100644 +index bda8aa7c2..3b86b7d8b 100644 --- a/include/drm/bridge/dw_mipi_dsi.h +++ b/include/drm/bridge/dw_mipi_dsi.h @@ -55,6 +55,7 @@ struct dw_mipi_dsi_plat_data { @@ -1719262,7 +1718106,7 @@ index bda8aa7c2280..3b86b7d8b009 100644 #endif /* __DW_MIPI_DSI__ */ diff --git a/include/drm/drm_auth.h b/include/drm/drm_auth.h -index f99d3417f304..6bf8b2b78991 100644 +index f99d3417f..6bf8b2b78 100644 --- a/include/drm/drm_auth.h +++ b/include/drm/drm_auth.h @@ -107,7 +107,6 @@ struct drm_master { @@ -1719274,7 +1718118,7 @@ index f99d3417f304..6bf8b2b78991 100644 bool drm_is_current_master(struct drm_file *fpriv); diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h -index 928136556174..f8cd5d8e58ee 100644 +index 03d39532c..70795101e 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -175,6 +175,48 @@ struct drm_scdc { @@ -1719345,7 +1718189,7 @@ index 928136556174..f8cd5d8e58ee 100644 /** diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h -index 59b51a09cae6..3a3d9d887cad 100644 +index 59b51a09c..3a3d9d887 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -287,7 +287,16 @@ struct drm_crtc_state { @@ -1719367,7 +1718211,7 @@ index 59b51a09cae6..3a3d9d887cad 100644 * @target_vblank: * diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h -index e57d0440f00f..e395d1fc186e 100644 +index e57d0440f..e395d1fc1 100644 --- a/include/drm/drm_drv.h +++ b/include/drm/drm_drv.h @@ -29,6 +29,7 @@ @@ -1719395,7 +1718239,7 @@ index e57d0440f00f..e395d1fc186e 100644 * @dumb_create: * diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h -index 4526b6a1e583..6f082761e245 100644 +index 4526b6a1e..6f082761e 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -229,6 +229,38 @@ struct detailed_timing { @@ -1719438,7 +1718282,7 @@ index 4526b6a1e583..6f082761e245 100644 #define DRM_ELD_HEADER_BLOCK_SIZE 4 diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h -index 42d04607d091..b81b3bfb08c8 100644 +index 42d04607d..b81b3bfb0 100644 --- a/include/drm/drm_file.h +++ b/include/drm/drm_file.h @@ -226,27 +226,15 @@ struct drm_file { @@ -1719483,7 +1718327,7 @@ index 42d04607d091..b81b3bfb08c8 100644 struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags); diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h -index 31ba85a4110a..05592c17da0c 100644 +index 31ba85a41..05592c17d 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -19,12 +19,18 @@ struct drm_dsc_picture_parameter_set; @@ -1719526,7 +1718370,7 @@ index 31ba85a4110a..05592c17da0c 100644 enum mipi_dsi_pixel_format { MIPI_DSI_FMT_RGB888, diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h -index a18f73eb3cf6..76d114569484 100644 +index a18f73eb3..76d114569 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -794,6 +794,19 @@ struct drm_mode_config { @@ -1719550,7 +1718394,7 @@ index a18f73eb3cf6..76d114569484 100644 * @suggested_x_property: Optional connector property with a hint for * the position of the output on the host's screen. diff --git a/include/drm/drm_mode_object.h b/include/drm/drm_mode_object.h -index c34a3e8030e1..6292fa663844 100644 +index c34a3e803..6292fa663 100644 --- a/include/drm/drm_mode_object.h +++ b/include/drm/drm_mode_object.h @@ -60,7 +60,7 @@ struct drm_mode_object { @@ -1719563,7 +1718407,7 @@ index c34a3e8030e1..6292fa663844 100644 * struct drm_object_properties - property tracking for &drm_mode_object */ diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h -index 0f69f9fbf12c..a9d0c6b0854e 100644 +index 0f69f9fbf..a9d0c6b08 100644 --- a/include/drm/drm_prime.h +++ b/include/drm/drm_prime.h @@ -107,5 +107,6 @@ void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); @@ -1719575,7 +1718419,7 @@ index 0f69f9fbf12c..a9d0c6b0854e 100644 #endif /* __DRM_PRIME_H__ */ diff --git a/include/drm/drm_sync_helper.h b/include/drm/drm_sync_helper.h new file mode 100755 -index 000000000000..a5586c674fec +index 000000000..a5586c674 --- /dev/null +++ b/include/drm/drm_sync_helper.h @@ -0,0 +1,156 @@ @@ -1719736,7 +1718580,7 @@ index 000000000000..a5586c674fec + +#endif diff --git a/include/dt-bindings/clock/px30-cru.h b/include/dt-bindings/clock/px30-cru.h -index 5b1416fcde6f..33eac20e9ad4 100644 +index 5b1416fcd..33eac20e9 100644 --- a/include/dt-bindings/clock/px30-cru.h +++ b/include/dt-bindings/clock/px30-cru.h @@ -87,6 +87,8 @@ @@ -1719750,7 +1718594,7 @@ index 5b1416fcde6f..33eac20e9ad4 100644 #define DCLK_VOPB 150 diff --git a/include/dt-bindings/clock/rk1808-cru.h b/include/dt-bindings/clock/rk1808-cru.h new file mode 100755 -index 000000000000..994896d111f1 +index 000000000..994896d11 --- /dev/null +++ b/include/dt-bindings/clock/rk1808-cru.h @@ -0,0 +1,473 @@ @@ -1720228,7 +1719072,7 @@ index 000000000000..994896d111f1 + +#endif diff --git a/include/dt-bindings/clock/rk3036-cru.h b/include/dt-bindings/clock/rk3036-cru.h -index 35a5a01f9697..ec8c3e748463 100644 +index 35a5a01f9..ec8c3e748 100644 --- a/include/dt-bindings/clock/rk3036-cru.h +++ b/include/dt-bindings/clock/rk3036-cru.h @@ -43,6 +43,8 @@ @@ -1720257,7 +1719101,7 @@ index 35a5a01f9697..ec8c3e748463 100644 #define HCLK_SDIO 457 #define HCLK_EMMC 459 diff --git a/include/dt-bindings/clock/rk3128-cru.h b/include/dt-bindings/clock/rk3128-cru.h -index 6a47825dac5d..e5269025da79 100644 +index 6a47825da..e5269025d 100644 --- a/include/dt-bindings/clock/rk3128-cru.h +++ b/include/dt-bindings/clock/rk3128-cru.h @@ -118,6 +118,7 @@ @@ -1720269,7 +1719113,7 @@ index 6a47825dac5d..e5269025da79 100644 #define HCLK_GPS 441 #define HCLK_USBHOST 442 diff --git a/include/dt-bindings/clock/rk3188-cru-common.h b/include/dt-bindings/clock/rk3188-cru-common.h -index afad90680fce..a5de0f65fe06 100644 +index afad90680..a5de0f65f 100644 --- a/include/dt-bindings/clock/rk3188-cru-common.h +++ b/include/dt-bindings/clock/rk3188-cru-common.h @@ -67,6 +67,7 @@ @@ -1720294,7 +1719138,7 @@ index afad90680fce..a5de0f65fe06 100644 #define HCLK_HSIC 458 #define HCLK_HSADC 459 diff --git a/include/dt-bindings/clock/rk3288-cru.h b/include/dt-bindings/clock/rk3288-cru.h -index 33819acbfc56..7c94bc10baae 100644 +index 33819acbf..7c94bc10b 100644 --- a/include/dt-bindings/clock/rk3288-cru.h +++ b/include/dt-bindings/clock/rk3288-cru.h @@ -161,6 +161,10 @@ @@ -1720309,7 +1719153,7 @@ index 33819acbfc56..7c94bc10baae 100644 /* hclk gates */ #define HCLK_GPS 448 diff --git a/include/dt-bindings/clock/rk3368-cru.h b/include/dt-bindings/clock/rk3368-cru.h -index 0a06c5f514d7..7f2d1882ed31 100644 +index 0a06c5f51..7f2d1882e 100644 --- a/include/dt-bindings/clock/rk3368-cru.h +++ b/include/dt-bindings/clock/rk3368-cru.h @@ -101,6 +101,7 @@ @@ -1720321,7 +1719165,7 @@ index 0a06c5f514d7..7f2d1882ed31 100644 /* pclk gates */ #define PCLK_GPIO0 320 diff --git a/include/dt-bindings/clock/rk3399-cru.h b/include/dt-bindings/clock/rk3399-cru.h -index 44e0a319f077..a06e18ebc4dd 100644 +index 44e0a319f..a06e18ebc 100644 --- a/include/dt-bindings/clock/rk3399-cru.h +++ b/include/dt-bindings/clock/rk3399-cru.h @@ -7,6 +7,8 @@ @@ -1720382,7 +1719226,7 @@ index 44e0a319f077..a06e18ebc4dd 100644 #define SRST_PVTM_CORE_B 47 diff --git a/include/dt-bindings/clock/rk3568-cru.h b/include/dt-bindings/clock/rk3568-cru.h new file mode 100755 -index 000000000000..aecfdd4ce084 +index 000000000..aecfdd4ce --- /dev/null +++ b/include/dt-bindings/clock/rk3568-cru.h @@ -0,0 +1,932 @@ @@ -1721320,7 +1720164,7 @@ index 000000000000..aecfdd4ce084 +#endif diff --git a/include/dt-bindings/clock/rk618-cru.h b/include/dt-bindings/clock/rk618-cru.h new file mode 100755 -index 000000000000..72ae0aef1378 +index 000000000..72ae0aef1 --- /dev/null +++ b/include/dt-bindings/clock/rk618-cru.h @@ -0,0 +1,38 @@ @@ -1721364,7 +1720208,7 @@ index 000000000000..72ae0aef1378 +#endif diff --git a/include/dt-bindings/clock/rk628-cgu.h b/include/dt-bindings/clock/rk628-cgu.h new file mode 100755 -index 000000000000..d1690907d208 +index 000000000..d1690907d --- /dev/null +++ b/include/dt-bindings/clock/rk628-cgu.h @@ -0,0 +1,50 @@ @@ -1721420,7 +1720264,7 @@ index 000000000000..d1690907d208 +#endif diff --git a/include/dt-bindings/clock/rockchip,rk3036.h b/include/dt-bindings/clock/rockchip,rk3036.h new file mode 100755 -index 000000000000..019550c7d0c1 +index 000000000..019550c7d --- /dev/null +++ b/include/dt-bindings/clock/rockchip,rk3036.h @@ -0,0 +1,155 @@ @@ -1721581,7 +1720425,7 @@ index 000000000000..019550c7d0c1 +#endif /* _DT_BINDINGS_CLOCK_ROCKCHIP_RK3036_H */ diff --git a/include/dt-bindings/clock/rockchip,rk312x.h b/include/dt-bindings/clock/rockchip,rk312x.h new file mode 100755 -index 000000000000..0af5abca3470 +index 000000000..0af5abca3 --- /dev/null +++ b/include/dt-bindings/clock/rockchip,rk312x.h @@ -0,0 +1,167 @@ @@ -1721754,7 +1720598,7 @@ index 000000000000..0af5abca3470 +#endif /* _DT_BINDINGS_CLOCK_ROCKCHIP_RK3128_H */ diff --git a/include/dt-bindings/clock/rockchip,rk3188.h b/include/dt-bindings/clock/rockchip,rk3188.h new file mode 100755 -index 000000000000..b8c57e1cfed8 +index 000000000..b8c57e1cf --- /dev/null +++ b/include/dt-bindings/clock/rockchip,rk3188.h @@ -0,0 +1,13 @@ @@ -1721773,7 +1720617,7 @@ index 000000000000..b8c57e1cfed8 +#endif /* _DT_BINDINGS_CLOCK_ROCKCHIP_RK3188_H */ diff --git a/include/dt-bindings/clock/rockchip,rk3228.h b/include/dt-bindings/clock/rockchip,rk3228.h new file mode 100755 -index 000000000000..b86e44536722 +index 000000000..b86e44536 --- /dev/null +++ b/include/dt-bindings/clock/rockchip,rk3228.h @@ -0,0 +1,167 @@ @@ -1721946,7 +1720790,7 @@ index 000000000000..b86e44536722 +#endif /* _DT_BINDINGS_CLOCK_ROCKCHIP_RK3228_H */ diff --git a/include/dt-bindings/clock/rockchip,rk3288.h b/include/dt-bindings/clock/rockchip,rk3288.h new file mode 100755 -index 000000000000..1a2803c4f168 +index 000000000..1a2803c4f --- /dev/null +++ b/include/dt-bindings/clock/rockchip,rk3288.h @@ -0,0 +1,220 @@ @@ -1722172,7 +1721016,7 @@ index 000000000000..1a2803c4f168 +#endif /* _DT_BINDINGS_CLOCK_ROCKCHIP_RK3288_H */ diff --git a/include/dt-bindings/clock/rockchip,rk3368.h b/include/dt-bindings/clock/rockchip,rk3368.h new file mode 100755 -index 000000000000..76630794b4d9 +index 000000000..76630794b --- /dev/null +++ b/include/dt-bindings/clock/rockchip,rk3368.h @@ -0,0 +1,263 @@ @@ -1722441,7 +1721285,7 @@ index 000000000000..76630794b4d9 +#endif /* _DT_BINDINGS_CLOCK_ROCKCHIP_RK3368_H */ diff --git a/include/dt-bindings/clock/rockchip-ddr.h b/include/dt-bindings/clock/rockchip-ddr.h new file mode 100755 -index 000000000000..b065432e7793 +index 000000000..b065432e7 --- /dev/null +++ b/include/dt-bindings/clock/rockchip-ddr.h @@ -0,0 +1,63 @@ @@ -1722510,7 +1721354,7 @@ index 000000000000..b065432e7793 +#endif diff --git a/include/dt-bindings/clock/rockchip.h b/include/dt-bindings/clock/rockchip.h new file mode 100755 -index 000000000000..b438f7bd4083 +index 000000000..b438f7bd4 --- /dev/null +++ b/include/dt-bindings/clock/rockchip.h @@ -0,0 +1,101 @@ @@ -1722617,7 +1721461,7 @@ index 000000000000..b438f7bd4083 +#endif /* _DT_BINDINGS_CLOCK_ROCKCHIP_H */ diff --git a/include/dt-bindings/clock/rv1126-cru.h b/include/dt-bindings/clock/rv1126-cru.h new file mode 100755 -index 000000000000..474bcbc546af +index 000000000..474bcbc54 --- /dev/null +++ b/include/dt-bindings/clock/rv1126-cru.h @@ -0,0 +1,633 @@ @@ -1723256,7 +1722100,7 @@ index 000000000000..474bcbc546af +#endif diff --git a/include/dt-bindings/display/drm_mipi_dsi.h b/include/dt-bindings/display/drm_mipi_dsi.h new file mode 100755 -index 000000000000..bc24ce4ddd08 +index 000000000..bc24ce4dd --- /dev/null +++ b/include/dt-bindings/display/drm_mipi_dsi.h @@ -0,0 +1,53 @@ @@ -1723315,7 +1722159,7 @@ index 000000000000..bc24ce4ddd08 +#endif /* __DRM_MIPI_DSI__ */ diff --git a/include/dt-bindings/display/media-bus-format.h b/include/dt-bindings/display/media-bus-format.h new file mode 100755 -index 000000000000..b8e9a1bb3f95 +index 000000000..b8e9a1bb3 --- /dev/null +++ b/include/dt-bindings/display/media-bus-format.h @@ -0,0 +1,152 @@ @@ -1723473,7 +1722317,7 @@ index 000000000000..b8e9a1bb3f95 +#endif /* __LINUX_MEDIA_BUS_FORMAT_H */ diff --git a/include/dt-bindings/display/mipi_dsi.h b/include/dt-bindings/display/mipi_dsi.h new file mode 100755 -index 000000000000..38aeee0ed51d +index 000000000..38aeee0ed --- /dev/null +++ b/include/dt-bindings/display/mipi_dsi.h @@ -0,0 +1,106 @@ @@ -1723585,7 +1722429,7 @@ index 000000000000..38aeee0ed51d +#endif /* end of MIPI_DSI_H_ */ diff --git a/include/dt-bindings/display/rockchip_vop.h b/include/dt-bindings/display/rockchip_vop.h new file mode 100644 -index 000000000000..3e14128e7ab1 +index 000000000..3e14128e7 --- /dev/null +++ b/include/dt-bindings/display/rockchip_vop.h @@ -0,0 +1,21 @@ @@ -1723612,7 +1722456,7 @@ index 000000000000..3e14128e7ab1 +#endif diff --git a/include/dt-bindings/dram/rockchip,rk322x.h b/include/dt-bindings/dram/rockchip,rk322x.h new file mode 100755 -index 000000000000..1ab3317d700e +index 000000000..1ab3317d7 --- /dev/null +++ b/include/dt-bindings/dram/rockchip,rk322x.h @@ -0,0 +1,90 @@ @@ -1723708,7 +1722552,7 @@ index 000000000000..1ab3317d700e +#endif /* _DT_BINDINGS_DRAM_ROCKCHIP_RK322X_H */ diff --git a/include/dt-bindings/dram/rockchip,rk3368.h b/include/dt-bindings/dram/rockchip,rk3368.h new file mode 100755 -index 000000000000..993f1eed9816 +index 000000000..993f1eed9 --- /dev/null +++ b/include/dt-bindings/dram/rockchip,rk3368.h @@ -0,0 +1,80 @@ @@ -1723794,7 +1722638,7 @@ index 000000000000..993f1eed9816 +#endif /*_DT_BINDINGS_DRAM_ROCKCHIP_RK3368_H*/ diff --git a/include/dt-bindings/input/rk-input.h b/include/dt-bindings/input/rk-input.h new file mode 100755 -index 000000000000..00b412927890 +index 000000000..00b412927 --- /dev/null +++ b/include/dt-bindings/input/rk-input.h @@ -0,0 +1,814 @@ @@ -1724614,7 +1723458,7 @@ index 000000000000..00b412927890 +#define FF_STATUS_MAX 0x01 diff --git a/include/dt-bindings/memory/px30-dram.h b/include/dt-bindings/memory/px30-dram.h new file mode 100755 -index 000000000000..17d799d802d9 +index 000000000..17d799d80 --- /dev/null +++ b/include/dt-bindings/memory/px30-dram.h @@ -0,0 +1,132 @@ @@ -1724752,7 +1723596,7 @@ index 000000000000..17d799d802d9 +#endif /*_DT_BINDINGS_DRAM_ROCKCHIP_PX30_H*/ diff --git a/include/dt-bindings/memory/rk1808-dram.h b/include/dt-bindings/memory/rk1808-dram.h new file mode 100755 -index 000000000000..522bd75a4a55 +index 000000000..522bd75a4 --- /dev/null +++ b/include/dt-bindings/memory/rk1808-dram.h @@ -0,0 +1,180 @@ @@ -1724938,7 +1723782,7 @@ index 000000000000..522bd75a4a55 +#endif /*_DT_BINDINGS_DRAM_ROCKCHIP_RK1808_H*/ diff --git a/include/dt-bindings/memory/rk3128-dram.h b/include/dt-bindings/memory/rk3128-dram.h new file mode 100755 -index 000000000000..2598ac98e525 +index 000000000..2598ac98e --- /dev/null +++ b/include/dt-bindings/memory/rk3128-dram.h @@ -0,0 +1,95 @@ @@ -1725039,7 +1723883,7 @@ index 000000000000..2598ac98e525 +#endif /* _DT_BINDINGS_DRAM_ROCKCHIP_RK3128_H */ diff --git a/include/dt-bindings/memory/rk3288-dram.h b/include/dt-bindings/memory/rk3288-dram.h new file mode 100755 -index 000000000000..1c531dca755c +index 000000000..1c531dca7 --- /dev/null +++ b/include/dt-bindings/memory/rk3288-dram.h @@ -0,0 +1,127 @@ @@ -1725172,7 +1724016,7 @@ index 000000000000..1c531dca755c +#endif /*_DT_BINDINGS_DRAM_ROCKCHIP_RK3288_H*/ diff --git a/include/dt-bindings/memory/rk3328-dram.h b/include/dt-bindings/memory/rk3328-dram.h new file mode 100755 -index 000000000000..171f41c256d3 +index 000000000..171f41c25 --- /dev/null +++ b/include/dt-bindings/memory/rk3328-dram.h @@ -0,0 +1,159 @@ @@ -1725337,7 +1724181,7 @@ index 000000000000..171f41c256d3 +#endif /*_DT_BINDINGS_DRAM_ROCKCHIP_RK3328_H*/ diff --git a/include/dt-bindings/memory/rk3368-dram.h b/include/dt-bindings/memory/rk3368-dram.h new file mode 100755 -index 000000000000..c1f23d32d987 +index 000000000..c1f23d32d --- /dev/null +++ b/include/dt-bindings/memory/rk3368-dram.h @@ -0,0 +1,109 @@ @@ -1725452,7 +1724296,7 @@ index 000000000000..c1f23d32d987 +#endif /*_DT_BINDINGS_DRAM_ROCKCHIP_RK3368_H*/ diff --git a/include/dt-bindings/memory/rk3399-dram.h b/include/dt-bindings/memory/rk3399-dram.h new file mode 100755 -index 000000000000..44abb0aafb05 +index 000000000..44abb0aaf --- /dev/null +++ b/include/dt-bindings/memory/rk3399-dram.h @@ -0,0 +1,107 @@ @@ -1725565,7 +1724409,7 @@ index 000000000000..44abb0aafb05 +#endif /* _DT_BINDINGS_DRAM_ROCKCHIP_RK3399_H */ diff --git a/include/dt-bindings/memory/rk3568-dram.h b/include/dt-bindings/memory/rk3568-dram.h new file mode 100755 -index 000000000000..c05eae7fe32e +index 000000000..c05eae7fe --- /dev/null +++ b/include/dt-bindings/memory/rk3568-dram.h @@ -0,0 +1,111 @@ @@ -1725682,7 +1724526,7 @@ index 000000000000..c05eae7fe32e +#endif /* _DT_BINDINGS_DRAM_ROCKCHIP_RK3568_H */ diff --git a/include/dt-bindings/memory/rockchip-dram.h b/include/dt-bindings/memory/rockchip-dram.h new file mode 100755 -index 000000000000..17e5e34b05c5 +index 000000000..17e5e34b0 --- /dev/null +++ b/include/dt-bindings/memory/rockchip-dram.h @@ -0,0 +1,94 @@ @@ -1725782,7 +1724626,7 @@ index 000000000000..17e5e34b05c5 +#endif /* _DT_BINDINGS_DRAM_ROCKCHIP_H */ diff --git a/include/dt-bindings/memory/rv1126-dram.h b/include/dt-bindings/memory/rv1126-dram.h new file mode 100755 -index 000000000000..208227825044 +index 000000000..208227825 --- /dev/null +++ b/include/dt-bindings/memory/rv1126-dram.h @@ -0,0 +1,161 @@ @@ -1725949,7 +1724793,7 @@ index 000000000000..208227825044 +#endif /*_DT_BINDINGS_DRAM_ROCKCHIP_RV1126_H*/ diff --git a/include/dt-bindings/phy/phy-snps-pcie3.h b/include/dt-bindings/phy/phy-snps-pcie3.h new file mode 100755 -index 000000000000..5006947f2285 +index 000000000..5006947f2 --- /dev/null +++ b/include/dt-bindings/phy/phy-snps-pcie3.h @@ -0,0 +1,21 @@ @@ -1725976,7 +1724820,7 @@ index 000000000000..5006947f2285 +#endif /* _DT_BINDINGS_PHY_SNPS_PCIE3 */ diff --git a/include/dt-bindings/pinctrl/rockchip-rk3036.h b/include/dt-bindings/pinctrl/rockchip-rk3036.h new file mode 100755 -index 000000000000..553c33579065 +index 000000000..553c33579 --- /dev/null +++ b/include/dt-bindings/pinctrl/rockchip-rk3036.h @@ -0,0 +1,267 @@ @@ -1726249,7 +1725093,7 @@ index 000000000000..553c33579065 +#endif diff --git a/include/dt-bindings/pinctrl/rockchip-rk312x.h b/include/dt-bindings/pinctrl/rockchip-rk312x.h new file mode 100755 -index 000000000000..e0fa5976c18f +index 000000000..e0fa5976c --- /dev/null +++ b/include/dt-bindings/pinctrl/rockchip-rk312x.h @@ -0,0 +1,384 @@ @@ -1726639,7 +1725483,7 @@ index 000000000000..e0fa5976c18f +#endif diff --git a/include/dt-bindings/pinctrl/rockchip-rk3188.h b/include/dt-bindings/pinctrl/rockchip-rk3188.h new file mode 100755 -index 000000000000..58bba225d1de +index 000000000..58bba225d --- /dev/null +++ b/include/dt-bindings/pinctrl/rockchip-rk3188.h @@ -0,0 +1,457 @@ @@ -1727102,7 +1725946,7 @@ index 000000000000..58bba225d1de +#endif diff --git a/include/dt-bindings/pinctrl/rockchip-rk3288.h b/include/dt-bindings/pinctrl/rockchip-rk3288.h new file mode 100755 -index 000000000000..97aa66e2b329 +index 000000000..97aa66e2b --- /dev/null +++ b/include/dt-bindings/pinctrl/rockchip-rk3288.h @@ -0,0 +1,666 @@ @@ -1727774,7 +1726618,7 @@ index 000000000000..97aa66e2b329 +#endif diff --git a/include/dt-bindings/power/rk1808-power.h b/include/dt-bindings/power/rk1808-power.h new file mode 100755 -index 000000000000..32342c1e7ded +index 000000000..32342c1e7 --- /dev/null +++ b/include/dt-bindings/power/rk1808-power.h @@ -0,0 +1,20 @@ @@ -1727800,7 +1726644,7 @@ index 000000000000..32342c1e7ded +#endif diff --git a/include/dt-bindings/power/rk3528-power.h b/include/dt-bindings/power/rk3528-power.h new file mode 100644 -index 000000000000..4f7c978651b5 +index 000000000..4f7c97865 --- /dev/null +++ b/include/dt-bindings/power/rk3528-power.h @@ -0,0 +1,18 @@ @@ -1727824,7 +1726668,7 @@ index 000000000000..4f7c978651b5 +#endif diff --git a/include/dt-bindings/power/rk3562-power.h b/include/dt-bindings/power/rk3562-power.h new file mode 100644 -index 000000000000..94b26b5bea5f +index 000000000..94b26b5be --- /dev/null +++ b/include/dt-bindings/power/rk3562-power.h @@ -0,0 +1,32 @@ @@ -1727862,7 +1726706,7 @@ index 000000000000..94b26b5bea5f +#endif diff --git a/include/dt-bindings/power/rk3568-power.h b/include/dt-bindings/power/rk3568-power.h new file mode 100755 -index 000000000000..6cc1af1a9d26 +index 000000000..6cc1af1a9 --- /dev/null +++ b/include/dt-bindings/power/rk3568-power.h @@ -0,0 +1,32 @@ @@ -1727900,7 +1726744,7 @@ index 000000000000..6cc1af1a9d26 +#endif diff --git a/include/dt-bindings/power/rk3588-power.h b/include/dt-bindings/power/rk3588-power.h new file mode 100755 -index 000000000000..69f7e9060250 +index 000000000..69f7e9060 --- /dev/null +++ b/include/dt-bindings/power/rk3588-power.h @@ -0,0 +1,69 @@ @@ -1727975,7 +1726819,7 @@ index 000000000000..69f7e9060250 +#endif diff --git a/include/dt-bindings/power/rv1126-power.h b/include/dt-bindings/power/rv1126-power.h new file mode 100755 -index 000000000000..3e210103646f +index 000000000..3e2101036 --- /dev/null +++ b/include/dt-bindings/power/rv1126-power.h @@ -0,0 +1,34 @@ @@ -1728015,7 +1726859,7 @@ index 000000000000..3e210103646f +#endif diff --git a/include/dt-bindings/reset/rk628-rgu.h b/include/dt-bindings/reset/rk628-rgu.h new file mode 100755 -index 000000000000..e0c714bef00c +index 000000000..e0c714bef --- /dev/null +++ b/include/dt-bindings/reset/rk628-rgu.h @@ -0,0 +1,43 @@ @@ -1728064,7 +1726908,7 @@ index 000000000000..e0c714bef00c +#endif diff --git a/include/dt-bindings/sensor-dev.h b/include/dt-bindings/sensor-dev.h new file mode 100755 -index 000000000000..e03f0027d325 +index 000000000..e03f0027d --- /dev/null +++ b/include/dt-bindings/sensor-dev.h @@ -0,0 +1,18 @@ @@ -1728087,7 +1726931,7 @@ index 000000000000..e03f0027d325 + +#endif diff --git a/include/dt-bindings/soc/rockchip,boot-mode.h b/include/dt-bindings/soc/rockchip,boot-mode.h -index 4b0914c0989d..a0f63a040613 100644 +index 4b0914c09..a0f63a040 100644 --- a/include/dt-bindings/soc/rockchip,boot-mode.h +++ b/include/dt-bindings/soc/rockchip,boot-mode.h @@ -10,7 +10,19 @@ @@ -1728113,7 +1726957,7 @@ index 4b0914c0989d..a0f63a040613 100644 #endif diff --git a/include/dt-bindings/soc/rockchip-amp.h b/include/dt-bindings/soc/rockchip-amp.h new file mode 100644 -index 000000000000..0681e92ef4da +index 000000000..0681e92ef --- /dev/null +++ b/include/dt-bindings/soc/rockchip-amp.h @@ -0,0 +1,7 @@ @@ -1728126,7 +1726970,7 @@ index 000000000000..0681e92ef4da +#endif diff --git a/include/dt-bindings/soc/rockchip-csu.h b/include/dt-bindings/soc/rockchip-csu.h new file mode 100644 -index 000000000000..8b0442533c3f +index 000000000..8b0442533 --- /dev/null +++ b/include/dt-bindings/soc/rockchip-csu.h @@ -0,0 +1,15 @@ @@ -1728147,7 +1726991,7 @@ index 000000000000..8b0442533c3f +#endif diff --git a/include/dt-bindings/soc/rockchip-system-status.h b/include/dt-bindings/soc/rockchip-system-status.h new file mode 100755 -index 000000000000..6a0d198a2e6e +index 000000000..6a0d198a2 --- /dev/null +++ b/include/dt-bindings/soc/rockchip-system-status.h @@ -0,0 +1,59 @@ @@ -1728212,7 +1727056,7 @@ index 000000000000..6a0d198a2e6e +#endif diff --git a/include/dt-bindings/suspend/rockchip-px30.h b/include/dt-bindings/suspend/rockchip-px30.h new file mode 100755 -index 000000000000..4362028f677c +index 000000000..4362028f6 --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-px30.h @@ -0,0 +1,53 @@ @@ -1728271,7 +1727115,7 @@ index 000000000000..4362028f677c +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk1808.h b/include/dt-bindings/suspend/rockchip-rk1808.h new file mode 100755 -index 000000000000..3d565faabf4d +index 000000000..3d565faab --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk1808.h @@ -0,0 +1,46 @@ @@ -1728323,7 +1727167,7 @@ index 000000000000..3d565faabf4d +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk322x.h b/include/dt-bindings/suspend/rockchip-rk322x.h new file mode 100755 -index 000000000000..882ae053fa22 +index 000000000..882ae053f --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk322x.h @@ -0,0 +1,57 @@ @@ -1728386,7 +1727230,7 @@ index 000000000000..882ae053fa22 +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk3288.h b/include/dt-bindings/suspend/rockchip-rk3288.h new file mode 100755 -index 000000000000..d07cced43877 +index 000000000..d07cced43 --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk3288.h @@ -0,0 +1,59 @@ @@ -1728451,7 +1727295,7 @@ index 000000000000..d07cced43877 +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk3308.h b/include/dt-bindings/suspend/rockchip-rk3308.h new file mode 100755 -index 000000000000..a3e015e2209a +index 000000000..a3e015e22 --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk3308.h @@ -0,0 +1,104 @@ @@ -1728561,7 +1727405,7 @@ index 000000000000..a3e015e2209a +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk3328.h b/include/dt-bindings/suspend/rockchip-rk3328.h new file mode 100755 -index 000000000000..972f8bb5e281 +index 000000000..972f8bb5e --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk3328.h @@ -0,0 +1,19 @@ @@ -1728586,7 +1727430,7 @@ index 000000000000..972f8bb5e281 +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk3368.h b/include/dt-bindings/suspend/rockchip-rk3368.h new file mode 100755 -index 000000000000..9873f8236a8b +index 000000000..9873f8236 --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk3368.h @@ -0,0 +1,56 @@ @@ -1728648,7 +1727492,7 @@ index 000000000000..9873f8236a8b +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk3399.h b/include/dt-bindings/suspend/rockchip-rk3399.h new file mode 100755 -index 000000000000..176c7cfcd989 +index 000000000..176c7cfcd --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk3399.h @@ -0,0 +1,61 @@ @@ -1728715,7 +1727559,7 @@ index 000000000000..176c7cfcd989 +#endif diff --git a/include/dt-bindings/suspend/rockchip-rk3568.h b/include/dt-bindings/suspend/rockchip-rk3568.h new file mode 100755 -index 000000000000..91e89f64a067 +index 000000000..91e89f64a --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rk3568.h @@ -0,0 +1,57 @@ @@ -1728778,7 +1727622,7 @@ index 000000000000..91e89f64a067 +#endif diff --git a/include/dt-bindings/suspend/rockchip-rv1126.h b/include/dt-bindings/suspend/rockchip-rv1126.h new file mode 100755 -index 000000000000..7c28c2bd7619 +index 000000000..7c28c2bd7 --- /dev/null +++ b/include/dt-bindings/suspend/rockchip-rv1126.h @@ -0,0 +1,46 @@ @@ -1728830,7 +1727674,7 @@ index 000000000000..7c28c2bd7619 +#endif diff --git a/include/linux/android_kabi.h b/include/linux/android_kabi.h new file mode 100755 -index 000000000000..efa52953fe35 +index 000000000..efa52953f --- /dev/null +++ b/include/linux/android_kabi.h @@ -0,0 +1,113 @@ @@ -1728948,7 +1727792,7 @@ index 000000000000..efa52953fe35 + +#endif /* _ANDROID_KABI_H */ diff --git a/include/linux/bpf.h b/include/linux/bpf.h -index a75abe994918..e49f608096dd 100644 +index 4feaf6f92..92c17022a 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -173,7 +173,7 @@ struct bpf_map { @@ -1728969,10 +1727813,10 @@ index a75abe994918..e49f608096dd 100644 int generic_map_lookup_batch(struct bpf_map *map, const union bpf_attr *attr, diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h -index 03a5de5f99f4..d9897d0b10a2 100644 +index aa8cbf882..1172d3594 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h -@@ -599,6 +599,7 @@ struct clk_divider { +@@ -613,6 +613,7 @@ struct clk_divider { u8 shift; u8 width; u8 flags; @@ -1728980,7 +1727824,7 @@ index 03a5de5f99f4..d9897d0b10a2 100644 const struct clk_div_table *table; spinlock_t *lock; }; -@@ -936,6 +937,8 @@ void clk_hw_unregister_fixed_factor(struct clk_hw *hw); +@@ -958,6 +959,8 @@ void clk_hw_unregister_fixed_factor(struct clk_hw *hw); * CLK_FRAC_DIVIDER_BIG_ENDIAN - By default little endian register accesses are * used for the divider register. Setting this flag makes the register * accesses big endian. @@ -1728989,7 +1727833,7 @@ index 03a5de5f99f4..d9897d0b10a2 100644 */ struct clk_fractional_divider { struct clk_hw hw; -@@ -947,6 +950,7 @@ struct clk_fractional_divider { +@@ -969,6 +972,7 @@ struct clk_fractional_divider { u8 nwidth; u32 nmask; u8 flags; @@ -1728997,7 +1727841,7 @@ index 03a5de5f99f4..d9897d0b10a2 100644 void (*approximation)(struct clk_hw *hw, unsigned long rate, unsigned long *parent_rate, unsigned long *m, unsigned long *n); -@@ -957,6 +961,7 @@ struct clk_fractional_divider { +@@ -979,6 +983,7 @@ struct clk_fractional_divider { #define CLK_FRAC_DIVIDER_ZERO_BASED BIT(0) #define CLK_FRAC_DIVIDER_BIG_ENDIAN BIT(1) @@ -1729005,7 +1727849,7 @@ index 03a5de5f99f4..d9897d0b10a2 100644 extern const struct clk_ops clk_fractional_divider_ops; struct clk *clk_register_fractional_divider(struct device *dev, -@@ -1017,6 +1022,9 @@ extern const struct clk_ops clk_multiplier_ops; +@@ -1039,6 +1044,9 @@ extern const struct clk_ops clk_multiplier_ops; * @mux_hw: handle between composite and hardware-specific mux clock * @rate_hw: handle between composite and hardware-specific rate clock * @gate_hw: handle between composite and hardware-specific gate clock @@ -1729015,7 +1727859,7 @@ index 03a5de5f99f4..d9897d0b10a2 100644 * @mux_ops: clock ops for mux * @rate_ops: clock ops for rate * @gate_ops: clock ops for gate -@@ -1028,6 +1036,7 @@ struct clk_composite { +@@ -1050,6 +1058,7 @@ struct clk_composite { struct clk_hw *mux_hw; struct clk_hw *rate_hw; struct clk_hw *gate_hw; @@ -1729025,7 +1727869,7 @@ index 03a5de5f99f4..d9897d0b10a2 100644 const struct clk_ops *rate_ops; diff --git a/include/linux/clk/rockchip.h b/include/linux/clk/rockchip.h new file mode 100755 -index 000000000000..07c563a42c60 +index 000000000..07c563a42 --- /dev/null +++ b/include/linux/clk/rockchip.h @@ -0,0 +1,18 @@ @@ -1729048,7 +1727892,7 @@ index 000000000000..07c563a42c60 + +#endif /* __LINUX_CLK_ROCKCHIP_H_ */ diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h -index 04c20de66afc..047f449d3658 100644 +index b70224370..730e69bb5 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h @@ -15,6 +15,7 @@ @@ -1729059,7 +1727903,7 @@ index 04c20de66afc..047f449d3658 100644 #include #ifdef CONFIG_CPUSETS -@@ -162,6 +163,8 @@ static inline void set_mems_allowed(nodemask_t nodemask) +@@ -164,6 +165,8 @@ static inline void set_mems_allowed(nodemask_t nodemask) task_unlock(current); } @@ -1729068,7 +1727912,7 @@ index 04c20de66afc..047f449d3658 100644 #else /* !CONFIG_CPUSETS */ static inline bool cpusets_enabled(void) { return false; } -@@ -184,7 +187,7 @@ static inline void cpuset_read_unlock(void) { } +@@ -188,7 +191,7 @@ static inline void cpuset_unlock(void) { } static inline void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask) { @@ -1729077,7 +1727921,7 @@ index 04c20de66afc..047f449d3658 100644 } static inline void cpuset_cpus_allowed_fallback(struct task_struct *p) -@@ -280,6 +283,8 @@ static inline bool read_mems_allowed_retry(unsigned int seq) +@@ -284,6 +287,8 @@ static inline bool read_mems_allowed_retry(unsigned int seq) return false; } @@ -1729088,7 +1727932,7 @@ index 04c20de66afc..047f449d3658 100644 #endif /* _LINUX_CPUSET_H */ diff --git a/include/linux/dma-buf-cache.h b/include/linux/dma-buf-cache.h new file mode 100755 -index 000000000000..d97545560990 +index 000000000..d97545560 --- /dev/null +++ b/include/linux/dma-buf-cache.h @@ -0,0 +1,32 @@ @@ -1729125,7 +1727969,7 @@ index 000000000000..d97545560990 + +#endif /* _LINUX_DMA_BUF_CACHE_H */ diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h -index 0c5706abb7fe..f635c237d109 100644 +index 0c5706abb..f635c237d 100644 --- a/include/linux/dma-buf.h +++ b/include/linux/dma-buf.h @@ -209,6 +209,41 @@ struct dma_buf_ops { @@ -1729315,7 +1728159,7 @@ index 0c5706abb7fe..f635c237d109 100644 #ifdef CONFIG_DMABUF_PROCESS_INFO /** diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h -index 09e23adb351d..9f12efaaa93a 100644 +index 09e23adb3..9f12efaaa 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -372,6 +372,9 @@ static inline void __dma_fence_might_wait(void) {} @@ -1729329,7 +1728173,7 @@ index 09e23adb351d..9f12efaaa93a 100644 bool intr, signed long timeout); int dma_fence_add_callback(struct dma_fence *fence, diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h -index 83b8cfb2d760..e8f0e92c27dd 100644 +index 83b8cfb2d..e8f0e92c2 100644 --- a/include/linux/dma-heap.h +++ b/include/linux/dma-heap.h @@ -16,15 +16,17 @@ struct dma_heap; @@ -1729420,7 +1728264,7 @@ index 83b8cfb2d760..e8f0e92c27dd 100644 + unsigned int heap_flags); #endif /* _DMA_HEAPS_H */ diff --git a/include/linux/dma-iommu.h b/include/linux/dma-iommu.h -index 2112f21f73d8..f51561eda33b 100644 +index 2112f21f7..f51561eda 100644 --- a/include/linux/dma-iommu.h +++ b/include/linux/dma-iommu.h @@ -37,6 +37,11 @@ void iommu_dma_compose_msi_msg(struct msi_desc *desc, @@ -1729453,7 +1728297,7 @@ index 2112f21f73d8..f51561eda33b 100644 #endif /* CONFIG_IOMMU_DMA */ #endif /* __DMA_IOMMU_H */ diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h -index a5f89fc4d6df..84c14dbcdb66 100644 +index 22e3bfebd..b9a8549f9 100644 --- a/include/linux/dma-map-ops.h +++ b/include/linux/dma-map-ops.h @@ -8,6 +8,7 @@ @@ -1729476,7 +1728320,7 @@ index a5f89fc4d6df..84c14dbcdb66 100644 }; #ifdef CONFIG_DMA_OPS -@@ -258,6 +264,14 @@ void arch_dma_free(struct device *dev, size_t size, void *cpu_addr, +@@ -261,6 +267,14 @@ void arch_dma_free(struct device *dev, size_t size, void *cpu_addr, #define pgprot_dmacoherent(prot) pgprot_noncached(prot) #endif @@ -1729492,7 +1728336,7 @@ index a5f89fc4d6df..84c14dbcdb66 100644 #else static inline pgprot_t dma_pgprot(struct device *dev, pgprot_t prot, diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h -index a7d70cdee25e..7270f12e2c78 100644 +index a7d70cdee..7270f12e2 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -61,6 +61,23 @@ @@ -1729520,7 +1728364,7 @@ index a7d70cdee25e..7270f12e2c78 100644 * A dma_addr_t can hold any valid DMA or bus address for the platform. It can * be given to a device to use as a DMA source or target. It is specific to a diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h -index dd357a747780..493a047ed0a2 100644 +index dd357a747..493a047ed 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -418,6 +418,9 @@ enum dma_slave_buswidth { @@ -1729543,7 +1728387,7 @@ index dd357a747780..493a047ed0a2 100644 /** diff --git a/include/linux/energy_model.h b/include/linux/energy_model.h -index 5f04a2b35e80..9ca1ea02fa72 100644 +index 5f04a2b35..9ca1ea02f 100644 --- a/include/linux/energy_model.h +++ b/include/linux/energy_model.h @@ -29,6 +29,8 @@ struct em_perf_state { @@ -1729594,7 +1728438,7 @@ index 5f04a2b35e80..9ca1ea02fa72 100644 return -EINVAL; } diff --git a/include/linux/extcon.h b/include/linux/extcon.h -index fa1e431ee6d9..6f851be8cb25 100644 +index fa1e431ee..6f851be8c 100644 --- a/include/linux/extcon.h +++ b/include/linux/extcon.h @@ -37,6 +37,7 @@ @@ -1729606,7 +1728450,7 @@ index fa1e431ee6d9..6f851be8cb25 100644 /* * Charging external connector diff --git a/include/linux/freezer.h b/include/linux/freezer.h -index 27828145ca09..f753c307b8b3 100644 +index 27828145c..f753c307b 100644 --- a/include/linux/freezer.h +++ b/include/linux/freezer.h @@ -27,6 +27,11 @@ static inline bool frozen(struct task_struct *p) @@ -1729631,7 +1728475,7 @@ index 27828145ca09..f753c307b8b3 100644 diff --git a/include/linux/initramfs.h b/include/linux/initramfs.h new file mode 100755 -index 000000000000..26953171620f +index 000000000..269531716 --- /dev/null +++ b/include/linux/initramfs.h @@ -0,0 +1,40 @@ @@ -1729676,7 +1728520,7 @@ index 000000000000..26953171620f + +#endif /* _LINUX_INITRAMFS_H */ diff --git a/include/linux/iommu.h b/include/linux/iommu.h -index e90c267e7f3e..f94cfde78201 100644 +index e90c267e7..f94cfde78 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -31,6 +31,26 @@ @@ -1729766,7 +1728610,7 @@ index e90c267e7f3e..f94cfde78201 100644 /** diff --git a/include/linux/iova.h b/include/linux/iova.h -index 6c19b09e9663..0b6e1fb344d4 100644 +index 6c19b09e9..0b6e1fb34 100644 --- a/include/linux/iova.h +++ b/include/linux/iova.h @@ -95,6 +95,7 @@ struct iova_domain { @@ -1729778,7 +1728622,7 @@ index 6c19b09e9663..0b6e1fb344d4 100644 static inline unsigned long iova_size(struct iova *iova) diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h -index f6d092fdb93d..ffb0a87055b1 100644 +index f6d092fdb..ffb0a8705 100644 --- a/include/linux/irqchip/arm-gic-v3.h +++ b/include/linux/irqchip/arm-gic-v3.h @@ -708,6 +708,8 @@ static inline bool gic_enable_sre(void) @@ -1729791,7 +1728635,7 @@ index f6d092fdb93d..ffb0a87055b1 100644 #endif diff --git a/include/linux/irqchip/arm-gic-v4.h b/include/linux/irqchip/arm-gic-v4.h -index 6976b8331b60..943c3411ca10 100644 +index 6976b8331..943c3411c 100644 --- a/include/linux/irqchip/arm-gic-v4.h +++ b/include/linux/irqchip/arm-gic-v4.h @@ -39,6 +39,8 @@ struct its_vpe { @@ -1729820,7 +1728664,7 @@ index 6976b8331b60..943c3411ca10 100644 int its_map_vlpi(int irq, struct its_vlpi_map *map); int its_get_vlpi(int irq, struct its_vlpi_map *map); diff --git a/include/linux/memblock.h b/include/linux/memblock.h -index 3baea2ef33fb..2b770134cc97 100644 +index 3baea2ef3..2b770134c 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -25,6 +25,10 @@ extern unsigned long max_pfn; @@ -1729918,7 +1728762,7 @@ index 3baea2ef33fb..2b770134cc97 100644 } diff --git a/include/linux/memory_group_manager.h b/include/linux/memory_group_manager.h new file mode 100755 -index 000000000000..786e3b995f29 +index 000000000..786e3b995 --- /dev/null +++ b/include/linux/memory_group_manager.h @@ -0,0 +1,223 @@ @@ -1730146,7 +1728990,7 @@ index 000000000000..786e3b995f29 + +#endif /* _MEMORY_GROUP_MANAGER_H_ */ diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h -index e07f6e61cd38..7cdc5dfa4fce 100644 +index e07f6e61c..7cdc5dfa4 100644 --- a/include/linux/mfd/rk808.h +++ b/include/linux/mfd/rk808.h @@ -113,6 +113,235 @@ enum rk808_reg { @@ -1730698,7 +1729542,7 @@ index e07f6e61cd38..7cdc5dfa4fce 100644 }; #endif /* __LINUX_REGULATOR_RK808_H */ diff --git a/include/linux/mm.h b/include/linux/mm.h -index 9ed1be47c8cb..9d52a0c60677 100644 +index 9ed1be47c..9d52a0c60 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2944,6 +2944,8 @@ extern bool page_poisoning_enabled(void); @@ -1730711,7 +1729555,7 @@ index 9ed1be47c8cb..9d52a0c60677 100644 int enable) { } #endif diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h -index 40d7e98fc990..819f6119dff3 100644 +index fb08b86ac..96ac20fb5 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -141,6 +141,7 @@ struct mmc_host_ops { @@ -1730722,7 +1729566,7 @@ index 40d7e98fc990..819f6119dff3 100644 /* The tuning command opcode value is different for SD and eMMC cards */ int (*execute_tuning)(struct mmc_host *host, u32 opcode); -@@ -483,6 +484,9 @@ void mmc_free_host(struct mmc_host *); +@@ -485,6 +486,9 @@ void mmc_free_host(struct mmc_host *); int mmc_of_parse(struct mmc_host *host); int mmc_of_parse_voltage(struct device_node *np, u32 *mask); @@ -1730733,7 +1729577,7 @@ index 40d7e98fc990..819f6119dff3 100644 { return (void *)host->private; diff --git a/include/linux/mmu_context.h b/include/linux/mmu_context.h -index 03dee12d2b61..bc4ac3c525e6 100644 +index 03dee12d2..bc4ac3c52 100644 --- a/include/linux/mmu_context.h +++ b/include/linux/mmu_context.h @@ -14,4 +14,12 @@ @@ -1730751,7 +1729595,7 @@ index 03dee12d2b61..bc4ac3c525e6 100644 #endif diff --git a/include/linux/phy/pcie.h b/include/linux/phy/pcie.h new file mode 100755 -index 000000000000..93c997f520fe +index 000000000..93c997f52 --- /dev/null +++ b/include/linux/phy/pcie.h @@ -0,0 +1,12 @@ @@ -1730769,7 +1729613,7 @@ index 000000000000..93c997f520fe +#endif diff --git a/include/linux/phy/phy-rockchip-typec.h b/include/linux/phy/phy-rockchip-typec.h new file mode 100755 -index 000000000000..1d6af83d3b89 +index 000000000..1d6af83d3 --- /dev/null +++ b/include/linux/phy/phy-rockchip-typec.h @@ -0,0 +1,34 @@ @@ -1730809,7 +1729653,7 @@ index 000000000000..1d6af83d3b89 +#endif diff --git a/include/linux/power/bq25700-charge.h b/include/linux/power/bq25700-charge.h new file mode 100755 -index 000000000000..5e7d3e40d2ea +index 000000000..5e7d3e40d --- /dev/null +++ b/include/linux/power/bq25700-charge.h @@ -0,0 +1,20 @@ @@ -1730835,7 +1729679,7 @@ index 000000000000..5e7d3e40d2ea +#endif /* __CHARGER_BQ25700_H_ */ diff --git a/include/linux/power/cw2015_battery.h b/include/linux/power/cw2015_battery.h new file mode 100755 -index 000000000000..8e6b1fc7e344 +index 000000000..8e6b1fc7e --- /dev/null +++ b/include/linux/power/cw2015_battery.h @@ -0,0 +1,119 @@ @@ -1730960,7 +1729804,7 @@ index 000000000000..8e6b1fc7e344 +#endif diff --git a/include/linux/power/rk_usbbc.h b/include/linux/power/rk_usbbc.h new file mode 100755 -index 000000000000..45f7128b3a69 +index 000000000..45f7128b3 --- /dev/null +++ b/include/linux/power/rk_usbbc.h @@ -0,0 +1,44 @@ @@ -1731009,7 +1729853,7 @@ index 000000000000..45f7128b3a69 + +#endif diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h -index e6fe2f581bda..26ca45b7b9b9 100644 +index e6fe2f581..26ca45b7b 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -49,6 +49,12 @@ enum { @@ -1731067,7 +1729911,7 @@ index e6fe2f581bda..26ca45b7b9b9 100644 extern void power_supply_external_power_changed(struct power_supply *psy); diff --git a/include/linux/priority_control_manager.h b/include/linux/priority_control_manager.h new file mode 100644 -index 000000000000..a6b151916b37 +index 000000000..a6b151916 --- /dev/null +++ b/include/linux/priority_control_manager.h @@ -0,0 +1,77 @@ @@ -1731149,7 +1729993,7 @@ index 000000000000..a6b151916b37 + +#endif /* _PRIORITY_CONTROL_MANAGER_H_ */ diff --git a/include/linux/pwm.h b/include/linux/pwm.h -index a13ff383fa1d..6b2a7fb80de8 100644 +index c0cf66133..296573c4a 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -59,6 +59,9 @@ struct pwm_state { @@ -1731163,7 +1730007,7 @@ index a13ff383fa1d..6b2a7fb80de8 100644 }; diff --git a/include/linux/reboot.h b/include/linux/reboot.h -index 3734cd8f38a8..1c8d7856c559 100644 +index 3734cd8f3..1c8d7856c 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h @@ -49,6 +49,26 @@ extern int register_restart_handler(struct notifier_block *); @@ -1731194,7 +1730038,7 @@ index 3734cd8f38a8..1c8d7856c559 100644 * Architecture-specific implementations of sys_reboot commands. */ diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h -index 633e7a2ab01d..521e48c34d07 100644 +index 633e7a2ab..521e48c34 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h @@ -223,6 +223,8 @@ enum regulator_type { @@ -1731215,7 +1730059,7 @@ index 633e7a2ab01d..521e48c34d07 100644 int (*of_parse_cb)(struct device_node *, const struct regulator_desc *, diff --git a/include/linux/regulator/fan53555.h b/include/linux/regulator/fan53555.h -index ce8df21863f0..e8703b6fc13d 100644 +index ce8df2186..e8703b6fc 100644 --- a/include/linux/regulator/fan53555.h +++ b/include/linux/regulator/fan53555.h @@ -52,6 +52,8 @@ struct fan53555_platform_data { @@ -1731229,7 +1730073,7 @@ index ce8df21863f0..e8703b6fc13d 100644 #endif /* __FAN53555_H__ */ diff --git a/include/linux/rfkill-bt.h b/include/linux/rfkill-bt.h new file mode 100755 -index 000000000000..c4174b156580 +index 000000000..c4174b156 --- /dev/null +++ b/include/linux/rfkill-bt.h @@ -0,0 +1,73 @@ @@ -1731308,7 +1730152,7 @@ index 000000000000..c4174b156580 + diff --git a/include/linux/rfkill-wlan.h b/include/linux/rfkill-wlan.h new file mode 100755 -index 000000000000..431e71a7a844 +index 000000000..431e71a7a --- /dev/null +++ b/include/linux/rfkill-wlan.h @@ -0,0 +1,62 @@ @@ -1731376,7 +1730220,7 @@ index 000000000000..431e71a7a844 +#endif diff --git a/include/linux/rk_keys.h b/include/linux/rk_keys.h new file mode 100755 -index 000000000000..aee656daf2c8 +index 000000000..aee656daf --- /dev/null +++ b/include/linux/rk_keys.h @@ -0,0 +1,19 @@ @@ -1731401,7 +1730245,7 @@ index 000000000000..aee656daf2c8 +#endif diff --git a/include/linux/rockchip-iovmm.h b/include/linux/rockchip-iovmm.h new file mode 100755 -index 000000000000..3005c745e5b8 +index 000000000..3005c745e --- /dev/null +++ b/include/linux/rockchip-iovmm.h @@ -0,0 +1,91 @@ @@ -1731498,7 +1730342,7 @@ index 000000000000..3005c745e5b8 +#endif /*__ASM_PLAT_IOVMM_H*/ diff --git a/include/linux/rockchip/cpu.h b/include/linux/rockchip/cpu.h new file mode 100755 -index 000000000000..beaaf923f9ec +index 000000000..beaaf923f --- /dev/null +++ b/include/linux/rockchip/cpu.h @@ -0,0 +1,272 @@ @@ -1731776,7 +1730620,7 @@ index 000000000000..beaaf923f9ec +#endif diff --git a/include/linux/rockchip/grf.h b/include/linux/rockchip/grf.h new file mode 100755 -index 000000000000..fae51232297c +index 000000000..fae512322 --- /dev/null +++ b/include/linux/rockchip/grf.h @@ -0,0 +1,700 @@ @@ -1732482,7 +1731326,7 @@ index 000000000000..fae51232297c +#endif diff --git a/include/linux/rockchip/nvmem.h b/include/linux/rockchip/nvmem.h new file mode 100644 -index 000000000000..741887856e33 +index 000000000..741887856 --- /dev/null +++ b/include/linux/rockchip/nvmem.h @@ -0,0 +1,26 @@ @@ -1732514,7 +1731358,7 @@ index 000000000000..741887856e33 +#endif diff --git a/include/linux/rockchip/psci.h b/include/linux/rockchip/psci.h new file mode 100755 -index 000000000000..870da27edf65 +index 000000000..870da27ed --- /dev/null +++ b/include/linux/rockchip/psci.h @@ -0,0 +1,76 @@ @@ -1732596,7 +1731440,7 @@ index 000000000000..870da27edf65 +#endif /* __ROCKCHIP_PSCI_H */ diff --git a/include/linux/rockchip/rockchip_pm_config.h b/include/linux/rockchip/rockchip_pm_config.h new file mode 100644 -index 000000000000..2c95b04b092d +index 000000000..2c95b04b0 --- /dev/null +++ b/include/linux/rockchip/rockchip_pm_config.h @@ -0,0 +1,32 @@ @@ -1732634,7 +1731478,7 @@ index 000000000000..2c95b04b092d +#endif /* __ROCKCHIP_PM_CONFIG_H */ diff --git a/include/linux/rockchip/rockchip_sip.h b/include/linux/rockchip/rockchip_sip.h new file mode 100755 -index 000000000000..70b1493ef697 +index 000000000..70b1493ef --- /dev/null +++ b/include/linux/rockchip/rockchip_sip.h @@ -0,0 +1,549 @@ @@ -1733189,7 +1732033,7 @@ index 000000000000..70b1493ef697 +#endif diff --git a/include/linux/rockchip_ion.h b/include/linux/rockchip_ion.h new file mode 100755 -index 000000000000..39c497774fb0 +index 000000000..39c497774 --- /dev/null +++ b/include/linux/rockchip_ion.h @@ -0,0 +1,41 @@ @@ -1733235,7 +1732079,7 @@ index 000000000000..39c497774fb0 + +#endif diff --git a/include/linux/sched.h b/include/linux/sched.h -index d590141f04d1..b5d9a9ce8d86 100644 +index 05dc5bae4..4627f2e34 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1369,7 +1369,7 @@ struct task_struct { @@ -1733248,7 +1732092,7 @@ index d590141f04d1..b5d9a9ce8d86 100644 #endif diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h -index ae60f838ebb9..9a0e2a1d626c 100644 +index 2c634010c..ce76124a2 100644 --- a/include/linux/sched/signal.h +++ b/include/linux/sched/signal.h @@ -12,6 +12,7 @@ @@ -1733260,7 +1732104,7 @@ index ae60f838ebb9..9a0e2a1d626c 100644 /* * Types defining task->signal and task->sighand and APIs using them: diff --git a/include/linux/sched/xacct.h b/include/linux/sched/xacct.h -index c078f0a94cec..9544c9d9d534 100644 +index c078f0a94..9544c9d9d 100644 --- a/include/linux/sched/xacct.h +++ b/include/linux/sched/xacct.h @@ -28,6 +28,11 @@ static inline void inc_syscw(struct task_struct *tsk) @@ -1733288,7 +1732132,7 @@ index c078f0a94cec..9544c9d9d534 100644 #endif /* _LINUX_SCHED_XACCT_H */ diff --git a/include/linux/sensor-dev.h b/include/linux/sensor-dev.h new file mode 100755 -index 000000000000..6ae9c16e67a3 +index 000000000..6ae9c16e6 --- /dev/null +++ b/include/linux/sensor-dev.h @@ -0,0 +1,350 @@ @@ -1733644,7 +1732488,7 @@ index 000000000000..6ae9c16e67a3 + diff --git a/include/linux/soc/rockchip/pvtm.h b/include/linux/soc/rockchip/pvtm.h new file mode 100755 -index 000000000000..3d2495cfd6e5 +index 000000000..3d2495cfd --- /dev/null +++ b/include/linux/soc/rockchip/pvtm.h @@ -0,0 +1,17 @@ @@ -1733667,7 +1732511,7 @@ index 000000000000..3d2495cfd6e5 +#endif /* __SOC_ROCKCHIP_PVTM_H */ diff --git a/include/linux/soc/rockchip/rk_sdmmc.h b/include/linux/soc/rockchip/rk_sdmmc.h new file mode 100644 -index 000000000000..14f70f72e383 +index 000000000..14f70f72e --- /dev/null +++ b/include/linux/soc/rockchip/rk_sdmmc.h @@ -0,0 +1,13 @@ @@ -1733686,7 +1732530,7 @@ index 000000000000..14f70f72e383 +#endif diff --git a/include/linux/soc/rockchip/rk_vendor_storage.h b/include/linux/soc/rockchip/rk_vendor_storage.h new file mode 100755 -index 000000000000..d30b775e6a5f +index 000000000..d30b775e6 --- /dev/null +++ b/include/linux/soc/rockchip/rk_vendor_storage.h @@ -0,0 +1,96 @@ @@ -1733788,7 +1732632,7 @@ index 000000000000..d30b775e6a5f +#endif diff --git a/include/linux/soc/rockchip/rockchip_decompress.h b/include/linux/soc/rockchip/rockchip_decompress.h new file mode 100755 -index 000000000000..120ae907c2aa +index 000000000..120ae907c --- /dev/null +++ b/include/linux/soc/rockchip/rockchip_decompress.h @@ -0,0 +1,42 @@ @@ -1733836,7 +1732680,7 @@ index 000000000000..120ae907c2aa +#endif diff --git a/include/linux/soc/rockchip/rockchip_thunderboot_crypto.h b/include/linux/soc/rockchip/rockchip_thunderboot_crypto.h new file mode 100755 -index 000000000000..2fe176649409 +index 000000000..2fe176649 --- /dev/null +++ b/include/linux/soc/rockchip/rockchip_thunderboot_crypto.h @@ -0,0 +1,9 @@ @@ -1733851,7 +1732695,7 @@ index 000000000000..2fe176649409 +#endif diff --git a/include/linux/soc/rockchip/rockchip_thunderboot_service.h b/include/linux/soc/rockchip/rockchip_thunderboot_service.h new file mode 100644 -index 000000000000..d0a08a07c21d +index 000000000..d0a08a07c --- /dev/null +++ b/include/linux/soc/rockchip/rockchip_thunderboot_service.h @@ -0,0 +1,37 @@ @@ -1733893,10 +1732737,10 @@ index 000000000000..d0a08a07c21d +#endif +#endif diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h -index abf7b8ec1fb6..bf41c178e22e 100644 +index 184d7a814..45c2cbe60 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h -@@ -183,6 +183,7 @@ struct plat_stmmacenet_data { +@@ -182,6 +182,7 @@ struct plat_stmmacenet_data { void (*serdes_powerdown)(struct net_device *ndev, void *priv); int (*init)(struct platform_device *pdev, void *priv); void (*exit)(struct platform_device *pdev, void *priv); @@ -1733905,7 +1732749,7 @@ index abf7b8ec1fb6..bf41c178e22e 100644 void *bsp_priv; struct clk *stmmac_clk; diff --git a/include/linux/thermal.h b/include/linux/thermal.h -index 7097d4dcfdd0..781e5bfbb9b4 100644 +index 7097d4dcf..781e5bfbb 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -399,6 +399,7 @@ void thermal_cdev_update(struct thermal_cooling_device *); @@ -1733934,7 +1732778,7 @@ diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h old mode 100644 new mode 100755 diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h -index a2d229ab63ba..4d352204e819 100644 +index a2d229ab6..4d352204e 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h @@ -525,6 +525,8 @@ extern struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev, @@ -1733956,7 +1732800,7 @@ index a2d229ab63ba..4d352204e819 100644 void (*free_func_inst)(struct usb_function_instance *inst); diff --git a/include/linux/usb/f_accessory.h b/include/linux/usb/f_accessory.h new file mode 100755 -index 000000000000..ebe3c4d59309 +index 000000000..ebe3c4d59 --- /dev/null +++ b/include/linux/usb/f_accessory.h @@ -0,0 +1,23 @@ @@ -1733986,7 +1732830,7 @@ index 000000000000..ebe3c4d59309 diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h old mode 100644 new mode 100755 -index e7351d64f11f..daf43d1af134 +index 11df3d5b4..daf43d1af --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -217,6 +217,7 @@ struct usb_ep_caps { @@ -1734041,7 +1732885,7 @@ index e7351d64f11f..daf43d1af134 const char *name; struct device dev; diff --git a/include/linux/usb/pd.h b/include/linux/usb/pd.h -index 433040ff840a..96b7ff66f074 100644 +index 433040ff8..96b7ff66f 100644 --- a/include/linux/usb/pd.h +++ b/include/linux/usb/pd.h @@ -225,6 +225,7 @@ enum pd_pdo_type { @@ -1734081,7 +1732925,7 @@ index 433040ff840a..96b7ff66f074 100644 + #endif /* __LINUX_USB_PD_H */ diff --git a/include/linux/usb/pd_ext_sdb.h b/include/linux/usb/pd_ext_sdb.h -index 0eb83ce19597..b517ebc8f0ff 100644 +index 0eb83ce19..b517ebc8f 100644 --- a/include/linux/usb/pd_ext_sdb.h +++ b/include/linux/usb/pd_ext_sdb.h @@ -24,8 +24,4 @@ enum usb_pd_ext_sdb_fields { @@ -1734094,7 +1732938,7 @@ index 0eb83ce19597..b517ebc8f0ff 100644 - #endif /* __LINUX_USB_PD_EXT_SDB_H */ diff --git a/include/linux/usb/pd_vdo.h b/include/linux/usb/pd_vdo.h -index 68bdc4e2f5a9..7f5e330a68a6 100644 +index 68bdc4e2f..7f5e330a6 100644 --- a/include/linux/usb/pd_vdo.h +++ b/include/linux/usb/pd_vdo.h @@ -21,22 +21,24 @@ @@ -1734537,7 +1733381,7 @@ index 68bdc4e2f5a9..7f5e330a68a6 100644 * SVDM Discover SVIDs request -> response * diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h -index 5e4c497f54d6..6567f7445c2d 100644 +index 5e4c497f5..6567f7445 100644 --- a/include/linux/usb/quirks.h +++ b/include/linux/usb/quirks.h @@ -72,4 +72,7 @@ @@ -1734549,7 +1733393,7 @@ index 5e4c497f54d6..6567f7445c2d 100644 + #endif /* __LINUX_USB_QUIRKS_H */ diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h -index 09762d26fa0c..cb69546f87af 100644 +index 09762d26f..cb69546f8 100644 --- a/include/linux/usb/tcpm.h +++ b/include/linux/usb/tcpm.h @@ -19,6 +19,10 @@ enum typec_cc_status { @@ -1734661,7 +1733505,7 @@ index 09762d26fa0c..cb69546f87af 100644 diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h old mode 100644 new mode 100755 -index 6be558045942..a5e685dd6dad +index 6be558045..a5e685dd6 --- a/include/linux/usb/typec.h +++ b/include/linux/usb/typec.h @@ -17,6 +17,7 @@ struct typec_partner; @@ -1734782,7 +1733626,7 @@ index 6be558045942..a5e685dd6dad +int typec_get_negotiated_svdm_version(struct typec_port *port); #endif /* __LINUX_USB_TYPEC_H */ diff --git a/include/linux/usb/typec_altmode.h b/include/linux/usb/typec_altmode.h -index 5e0a7b7647c3..65933cbe9129 100644 +index 22b8ee8f0..c33a8bc62 100644 --- a/include/linux/usb/typec_altmode.h +++ b/include/linux/usb/typec_altmode.h @@ -132,6 +132,16 @@ typec_altmode_get_orientation(struct typec_altmode *altmode) @@ -1734803,7 +1733647,7 @@ index 5e0a7b7647c3..65933cbe9129 100644 * struct typec_altmode_driver - USB Type-C alternate mode device driver * @id_table: Null terminated array of SVIDs diff --git a/include/linux/usb/typec_tbt.h b/include/linux/usb/typec_tbt.h -index 47c2d501ddce..63dd44b72e0c 100644 +index 47c2d501d..63dd44b72 100644 --- a/include/linux/usb/typec_tbt.h +++ b/include/linux/usb/typec_tbt.h @@ -39,12 +39,16 @@ struct typec_thunderbolt_data { @@ -1734825,7 +1733669,7 @@ index 47c2d501ddce..63dd44b72e0c 100644 /* TBT3 Device Enter Mode VDO bits */ #define TBT_ENTER_MODE_CABLE_SPEED(s) TBT_SET_CABLE_SPEED(s) diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h -index 8110c29fab42..2e4f7721fc4e 100644 +index 8110c29fa..2e4f7721f 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h @@ -83,8 +83,6 @@ struct usbnet { @@ -1734839,7 +1733683,7 @@ index 8110c29fab42..2e4f7721fc4e 100644 static inline struct usb_driver *driver_of(struct usb_interface *intf) diff --git a/include/linux/version_compat_defs.h b/include/linux/version_compat_defs.h new file mode 100644 -index 000000000000..c9b1f62684d1 +index 000000000..c9b1f6268 --- /dev/null +++ b/include/linux/version_compat_defs.h @@ -0,0 +1,79 @@ @@ -1734924,7 +1733768,7 @@ index 000000000000..c9b1f62684d1 +#endif /* _VERSION_COMPAT_DEFS_H_ */ diff --git a/include/linux/wakelock.h b/include/linux/wakelock.h new file mode 100755 -index 000000000000..7b4825ba9521 +index 000000000..7b4825ba9 --- /dev/null +++ b/include/linux/wakelock.h @@ -0,0 +1,76 @@ @@ -1735006,7 +1733850,7 @@ index 000000000000..7b4825ba9521 +#endif diff --git a/include/linux/wakeup_reason.h b/include/linux/wakeup_reason.h new file mode 100755 -index 000000000000..54f5caaa5cde +index 000000000..54f5caaa5 --- /dev/null +++ b/include/linux/wakeup_reason.h @@ -0,0 +1,37 @@ @@ -1735048,7 +1733892,7 @@ index 000000000000..54f5caaa5cde + +#endif /* _LINUX_WAKEUP_REASON_H */ diff --git a/include/media/v4l2-async.h b/include/media/v4l2-async.h -index 92cd9f038fed..03b43b0f706e 100644 +index 92cd9f038..03b43b0f7 100644 --- a/include/media/v4l2-async.h +++ b/include/media/v4l2-async.h @@ -266,6 +266,21 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, @@ -1735075,7 +1733919,7 @@ index 92cd9f038fed..03b43b0f706e 100644 * asynchronous notifier diff --git a/include/soc/rockchip/android-version.h b/include/soc/rockchip/android-version.h new file mode 100755 -index 000000000000..e0d865bab335 +index 000000000..e0d865bab --- /dev/null +++ b/include/soc/rockchip/android-version.h @@ -0,0 +1,17 @@ @@ -1735098,7 +1733942,7 @@ index 000000000000..e0d865bab335 +#endif diff --git a/include/soc/rockchip/pm_domains.h b/include/soc/rockchip/pm_domains.h new file mode 100755 -index 000000000000..0e1fadd3d52e +index 000000000..0e1fadd3d --- /dev/null +++ b/include/soc/rockchip/pm_domains.h @@ -0,0 +1,61 @@ @@ -1735165,7 +1734009,7 @@ index 000000000000..0e1fadd3d52e +#endif diff --git a/include/soc/rockchip/rk_minidump.h b/include/soc/rockchip/rk_minidump.h new file mode 100644 -index 000000000000..c9e9efd2222b +index 000000000..c9e9efd22 --- /dev/null +++ b/include/soc/rockchip/rk_minidump.h @@ -0,0 +1,75 @@ @@ -1735246,7 +1734090,7 @@ index 000000000000..c9e9efd2222b +#endif /* __RK_MINIDUMP_H */ diff --git a/include/soc/rockchip/rkfb_dmc.h b/include/soc/rockchip/rkfb_dmc.h new file mode 100755 -index 000000000000..5e82b3194dd3 +index 000000000..5e82b3194 --- /dev/null +++ b/include/soc/rockchip/rkfb_dmc.h @@ -0,0 +1,11 @@ @@ -1735263,7 +1734107,7 @@ index 000000000000..5e82b3194dd3 +#endif diff --git a/include/soc/rockchip/rockchip-mailbox.h b/include/soc/rockchip/rockchip-mailbox.h new file mode 100644 -index 000000000000..e3698b9e10fe +index 000000000..e3698b9e1 --- /dev/null +++ b/include/soc/rockchip/rockchip-mailbox.h @@ -0,0 +1,30 @@ @@ -1735299,7 +1734143,7 @@ index 000000000000..e3698b9e10fe +#endif /* __SOC_ROCKCHIP_MAILBOX_H__ */ diff --git a/include/soc/rockchip/rockchip-system-status.h b/include/soc/rockchip/rockchip-system-status.h new file mode 100755 -index 000000000000..5eb53ff2f3f3 +index 000000000..5eb53ff2f --- /dev/null +++ b/include/soc/rockchip/rockchip-system-status.h @@ -0,0 +1,55 @@ @@ -1735360,7 +1734204,7 @@ index 000000000000..5eb53ff2f3f3 +#endif diff --git a/include/soc/rockchip/rockchip_amp.h b/include/soc/rockchip/rockchip_amp.h new file mode 100644 -index 000000000000..851c0f47d54a +index 000000000..851c0f47d --- /dev/null +++ b/include/soc/rockchip/rockchip_amp.h @@ -0,0 +1,48 @@ @@ -1735414,7 +1734258,7 @@ index 000000000000..851c0f47d54a +#endif /* _ROCKCHIP_AMP */ diff --git a/include/soc/rockchip/rockchip_csu.h b/include/soc/rockchip/rockchip_csu.h new file mode 100644 -index 000000000000..4338d68359f7 +index 000000000..4338d6835 --- /dev/null +++ b/include/soc/rockchip/rockchip_csu.h @@ -0,0 +1,46 @@ @@ -1735466,7 +1734310,7 @@ index 000000000000..4338d68359f7 +#endif diff --git a/include/soc/rockchip/rockchip_dmc.h b/include/soc/rockchip/rockchip_dmc.h new file mode 100755 -index 000000000000..f115cdcec291 +index 000000000..f115cdcec --- /dev/null +++ b/include/soc/rockchip/rockchip_dmc.h @@ -0,0 +1,131 @@ @@ -1735603,7 +1734447,7 @@ index 000000000000..f115cdcec291 +#endif diff --git a/include/soc/rockchip/rockchip_dvbm.h b/include/soc/rockchip/rockchip_dvbm.h new file mode 100644 -index 000000000000..19596f1bd4c6 +index 000000000..19596f1bd --- /dev/null +++ b/include/soc/rockchip/rockchip_dvbm.h @@ -0,0 +1,161 @@ @@ -1735770,7 +1734614,7 @@ index 000000000000..19596f1bd4c6 +#endif diff --git a/include/soc/rockchip/rockchip_iommu.h b/include/soc/rockchip/rockchip_iommu.h new file mode 100755 -index 000000000000..191a2fda8f1a +index 000000000..191a2fda8 --- /dev/null +++ b/include/soc/rockchip/rockchip_iommu.h @@ -0,0 +1,52 @@ @@ -1735828,7 +1734672,7 @@ index 000000000000..191a2fda8f1a +#endif diff --git a/include/soc/rockchip/rockchip_ipa.h b/include/soc/rockchip/rockchip_ipa.h new file mode 100755 -index 000000000000..cb333f463c7b +index 000000000..cb333f463 --- /dev/null +++ b/include/soc/rockchip/rockchip_ipa.h @@ -0,0 +1,40 @@ @@ -1735874,7 +1734718,7 @@ index 000000000000..cb333f463c7b +#endif diff --git a/include/soc/rockchip/rockchip_opp_select.h b/include/soc/rockchip/rockchip_opp_select.h new file mode 100755 -index 000000000000..e7669f29cbd5 +index 000000000..e7669f29c --- /dev/null +++ b/include/soc/rockchip/rockchip_opp_select.h @@ -0,0 +1,286 @@ @@ -1736166,7 +1735010,7 @@ index 000000000000..e7669f29cbd5 +#endif diff --git a/include/soc/rockchip/rockchip_performance.h b/include/soc/rockchip/rockchip_performance.h new file mode 100644 -index 000000000000..c080fb65c7a5 +index 000000000..c080fb65c --- /dev/null +++ b/include/soc/rockchip/rockchip_performance.h @@ -0,0 +1,33 @@ @@ -1736205,7 +1735049,7 @@ index 000000000000..c080fb65c7a5 +#endif diff --git a/include/soc/rockchip/rockchip_rockit.h b/include/soc/rockchip/rockchip_rockit.h new file mode 100644 -index 000000000000..760a864d24bc +index 000000000..760a864d2 --- /dev/null +++ b/include/soc/rockchip/rockchip_rockit.h @@ -0,0 +1,187 @@ @@ -1736397,7 +1735241,7 @@ index 000000000000..760a864d24bc + +#endif diff --git a/include/soc/rockchip/rockchip_sip.h b/include/soc/rockchip/rockchip_sip.h -index c46a9ae2a2ab..269cf14c38fb 100644 +index c46a9ae2a..269cf14c3 100644 --- a/include/soc/rockchip/rockchip_sip.h +++ b/include/soc/rockchip/rockchip_sip.h @@ -15,6 +15,14 @@ @@ -1736418,7 +1735262,7 @@ index c46a9ae2a2ab..269cf14c38fb 100644 #endif diff --git a/include/soc/rockchip/rockchip_system_monitor.h b/include/soc/rockchip/rockchip_system_monitor.h new file mode 100755 -index 000000000000..0ca822d1041f +index 000000000..0ca822d10 --- /dev/null +++ b/include/soc/rockchip/rockchip_system_monitor.h @@ -0,0 +1,237 @@ @@ -1736660,7 +1735504,7 @@ index 000000000000..0ca822d1041f + +#endif diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h -index b55970859a13..4fc733c8c570 100644 +index b55970859..4fc733c8c 100644 --- a/include/sound/hdmi-codec.h +++ b/include/sound/hdmi-codec.h @@ -34,6 +34,11 @@ struct hdmi_codec_daifmt { @@ -1736700,7 +1735544,7 @@ index b55970859a13..4fc733c8c570 100644 * Shuts down the audio stream. * Mandatory diff --git a/include/trace/events/cpuhp.h b/include/trace/events/cpuhp.h -index ad16f77310c6..f302ab6dbfb8 100644 +index ad16f7731..f302ab6db 100644 --- a/include/trace/events/cpuhp.h +++ b/include/trace/events/cpuhp.h @@ -89,6 +89,28 @@ TRACE_EVENT(cpuhp_exit, @@ -1736733,7 +1735577,7 @@ index ad16f77310c6..f302ab6dbfb8 100644 /* This part must be outside protection */ diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h -index dd5fff2bb1b2..6c6a23b4b3c1 100644 +index dd5fff2bb..6c6a23b4b 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h @@ -203,6 +203,7 @@ TRACE_EVENT(sched_migrate_task, @@ -1736762,7 +1735606,7 @@ index dd5fff2bb1b2..6c6a23b4b3c1 100644 DECLARE_EVENT_CLASS(sched_process_template, diff --git a/include/trace/events/thermal_ipa_power.h b/include/trace/events/thermal_ipa_power.h new file mode 100755 -index 000000000000..a3a932c75d6a +index 000000000..a3a932c75 --- /dev/null +++ b/include/trace/events/thermal_ipa_power.h @@ -0,0 +1,47 @@ @@ -1736814,7 +1735658,7 @@ index 000000000000..a3a932c75d6a +/* This part must be outside protection */ +#include diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h -index dad9d3b4a97a..1c10ff522c6d 100644 +index dad9d3b4a..1c10ff522 100644 --- a/include/uapi/drm/drm_fourcc.h +++ b/include/uapi/drm/drm_fourcc.h @@ -242,6 +242,8 @@ extern "C" { @@ -1736881,7 +1735725,7 @@ index dad9d3b4a97a..1c10ff522c6d 100644 #endif diff --git a/include/uapi/drm/rockchip_drm.h b/include/uapi/drm/rockchip_drm.h new file mode 100755 -index 000000000000..2ac71b43dba0 +index 000000000..2ac71b43d --- /dev/null +++ b/include/uapi/drm/rockchip_drm.h @@ -0,0 +1,139 @@ @@ -1737026,7 +1735870,7 @@ index 000000000000..2ac71b43dba0 +#endif /* _UAPI_ROCKCHIP_DRM_H */ diff --git a/include/uapi/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.h b/include/uapi/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.h new file mode 100644 -index 000000000000..a44da7beb041 +index 000000000..a44da7beb --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/backend/gpu/mali_kbase_model_dummy.h @@ -0,0 +1,77 @@ @@ -1737109,7 +1735953,7 @@ index 000000000000..a44da7beb041 +#endif /* _UAPI_KBASE_MODEL_DUMMY_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.h b/include/uapi/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.h new file mode 100644 -index 000000000000..c83cedd6a775 +index 000000000..c83cedd6a --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/backend/gpu/mali_kbase_model_linux.h @@ -0,0 +1,36 @@ @@ -1737151,7 +1735995,7 @@ index 000000000000..c83cedd6a775 +#endif /* _UAPI_KBASE_MODEL_LINUX_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/csf/mali_base_csf_kernel.h b/include/uapi/gpu/arm/bifrost/csf/mali_base_csf_kernel.h new file mode 100644 -index 000000000000..c18c6fc8a7ae +index 000000000..c18c6fc8a --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/csf/mali_base_csf_kernel.h @@ -0,0 +1,613 @@ @@ -1737770,7 +1736614,7 @@ index 000000000000..c18c6fc8a7ae +#endif /* _UAPI_BASE_CSF_KERNEL_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/csf/mali_kbase_csf_errors_dumpfault.h b/include/uapi/gpu/arm/bifrost/csf/mali_kbase_csf_errors_dumpfault.h new file mode 100644 -index 000000000000..f49ab0036fc3 +index 000000000..f49ab0036 --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/csf/mali_kbase_csf_errors_dumpfault.h @@ -0,0 +1,81 @@ @@ -1737857,7 +1736701,7 @@ index 000000000000..f49ab0036fc3 +#endif /* _UAPI_KBASE_CSF_ERRORS_DUMPFAULT_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/csf/mali_kbase_csf_ioctl.h b/include/uapi/gpu/arm/bifrost/csf/mali_kbase_csf_ioctl.h new file mode 100644 -index 000000000000..7c37cfc077f8 +index 000000000..7c37cfc07 --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/csf/mali_kbase_csf_ioctl.h @@ -0,0 +1,614 @@ @@ -1738477,7 +1737321,7 @@ index 000000000000..7c37cfc077f8 +#endif /* _UAPI_KBASE_CSF_IOCTL_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_csf.h b/include/uapi/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_csf.h new file mode 100644 -index 000000000000..0ca5d902f174 +index 000000000..0ca5d902f --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_csf.h @@ -0,0 +1,41 @@ @@ -1738524,7 +1737368,7 @@ index 000000000000..0ca5d902f174 +#endif /* _UAPI_KBASE_GPU_REGMAP_CSF_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_jm.h b/include/uapi/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_jm.h new file mode 100644 -index 000000000000..9bfd6d2fc529 +index 000000000..9bfd6d2fc --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/gpu/backend/mali_kbase_gpu_regmap_jm.h @@ -0,0 +1,50 @@ @@ -1738580,7 +1737424,7 @@ index 000000000000..9bfd6d2fc529 +#endif /* _UAPI_KBASE_GPU_REGMAP_JM_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_coherency.h b/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_coherency.h new file mode 100644 -index 000000000000..83d84137a034 +index 000000000..83d84137a --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_coherency.h @@ -0,0 +1,30 @@ @@ -1738616,7 +1737460,7 @@ index 000000000000..83d84137a034 +#endif /* _UAPI_KBASE_GPU_COHERENCY_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_id.h b/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_id.h new file mode 100644 -index 000000000000..784e09a7edc2 +index 000000000..784e09a7e --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_id.h @@ -0,0 +1,145 @@ @@ -1738767,7 +1737611,7 @@ index 000000000000..784e09a7edc2 +#endif /* _UAPI_KBASE_GPU_ID_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_regmap.h b/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_regmap.h new file mode 100644 -index 000000000000..1f331671b6b4 +index 000000000..1f331671b --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_regmap.h @@ -0,0 +1,98 @@ @@ -1738871,7 +1737715,7 @@ index 000000000000..1f331671b6b4 +#endif /* _UAPI_KBASE_GPU_REGMAP_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/jm/mali_base_jm_kernel.h b/include/uapi/gpu/arm/bifrost/jm/mali_base_jm_kernel.h new file mode 100644 -index 000000000000..1a3098d6cad8 +index 000000000..1a3098d6c --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/jm/mali_base_jm_kernel.h @@ -0,0 +1,1055 @@ @@ -1739932,7 +1738776,7 @@ index 000000000000..1a3098d6cad8 +#endif /* _UAPI_BASE_JM_KERNEL_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/jm/mali_kbase_jm_ioctl.h b/include/uapi/gpu/arm/bifrost/jm/mali_kbase_jm_ioctl.h new file mode 100644 -index 000000000000..ac6affe8c76c +index 000000000..ac6affe8c --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/jm/mali_kbase_jm_ioctl.h @@ -0,0 +1,247 @@ @@ -1740185,7 +1739029,7 @@ index 000000000000..ac6affe8c76c +#endif /* _UAPI_KBASE_JM_IOCTL_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/mali_base_common_kernel.h b/include/uapi/gpu/arm/bifrost/mali_base_common_kernel.h new file mode 100644 -index 000000000000..f8378146aceb +index 000000000..f8378146a --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/mali_base_common_kernel.h @@ -0,0 +1,231 @@ @@ -1740422,7 +1739266,7 @@ index 000000000000..f8378146aceb +#endif /* _UAPI_BASE_COMMON_KERNEL_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/mali_base_kernel.h b/include/uapi/gpu/arm/bifrost/mali_base_kernel.h new file mode 100644 -index 000000000000..e6cac0eb2a1a +index 000000000..e6cac0eb2 --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/mali_base_kernel.h @@ -0,0 +1,643 @@ @@ -1741071,7 +1739915,7 @@ index 000000000000..e6cac0eb2a1a +#endif /* _UAPI_BASE_KERNEL_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/mali_base_mem_priv.h b/include/uapi/gpu/arm/bifrost/mali_base_mem_priv.h new file mode 100644 -index 000000000000..70f5b0977520 +index 000000000..70f5b0977 --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/mali_base_mem_priv.h @@ -0,0 +1,57 @@ @@ -1741134,7 +1739978,7 @@ index 000000000000..70f5b0977520 +#endif /* _UAPI_BASE_MEM_PRIV_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/mali_kbase_hwcnt_reader.h b/include/uapi/gpu/arm/bifrost/mali_kbase_hwcnt_reader.h new file mode 100644 -index 000000000000..5089bf249528 +index 000000000..5089bf249 --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/mali_kbase_hwcnt_reader.h @@ -0,0 +1,503 @@ @@ -1741643,7 +1740487,7 @@ index 000000000000..5089bf249528 +#endif /* _UAPI_KBASE_HWCNT_READER_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/mali_kbase_ioctl.h b/include/uapi/gpu/arm/bifrost/mali_kbase_ioctl.h new file mode 100644 -index 000000000000..c8a54f91165e +index 000000000..c8a54f911 --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/mali_kbase_ioctl.h @@ -0,0 +1,789 @@ @@ -1742438,7 +1741282,7 @@ index 000000000000..c8a54f91165e +#endif /* _UAPI_KBASE_IOCTL_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/mali_kbase_kinstr_jm_reader.h b/include/uapi/gpu/arm/bifrost/mali_kbase_kinstr_jm_reader.h new file mode 100644 -index 000000000000..72e1b9dbf245 +index 000000000..72e1b9dbf --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/mali_kbase_kinstr_jm_reader.h @@ -0,0 +1,69 @@ @@ -1742513,7 +1741357,7 @@ index 000000000000..72e1b9dbf245 +#endif /* _UAPI_KBASE_KINSTR_JM_READER_H_ */ diff --git a/include/uapi/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs_buf_size.h b/include/uapi/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs_buf_size.h new file mode 100644 -index 000000000000..329845005341 +index 000000000..329845005 --- /dev/null +++ b/include/uapi/gpu/arm/bifrost/mali_kbase_mem_profile_debugfs_buf_size.h @@ -0,0 +1,35 @@ @@ -1742553,7 +1741397,7 @@ index 000000000000..329845005341 + +#endif /*_UAPI_KBASE_MEM_PROFILE_DEBUGFS_BUF_SIZE_H_*/ diff --git a/include/uapi/linux/cec.h b/include/uapi/linux/cec.h -index 7d1a06c52469..ebbcb9b0104a 100644 +index 7d1a06c52..ebbcb9b01 100644 --- a/include/uapi/linux/cec.h +++ b/include/uapi/linux/cec.h @@ -516,6 +516,12 @@ struct cec_event { @@ -1742571,7 +1741415,7 @@ index 7d1a06c52469..ebbcb9b0104a 100644 * The format matters since it the cec-ctl utility parses it to generate diff --git a/include/uapi/linux/fec-config.h b/include/uapi/linux/fec-config.h new file mode 100755 -index 000000000000..2b3f97fb2a3e +index 000000000..2b3f97fb2 --- /dev/null +++ b/include/uapi/linux/fec-config.h @@ -0,0 +1,33 @@ @@ -1742609,7 +1741453,7 @@ index 000000000000..2b3f97fb2a3e + +#endif diff --git a/include/uapi/linux/media-bus-format.h b/include/uapi/linux/media-bus-format.h -index 84fa53ffb13f..f16dff5b49cc 100644 +index 84fa53ffb..f16dff5b4 100644 --- a/include/uapi/linux/media-bus-format.h +++ b/include/uapi/linux/media-bus-format.h @@ -34,7 +34,7 @@ @@ -1742635,7 +1741479,7 @@ index 84fa53ffb13f..f16dff5b49cc 100644 #define MEDIA_BUS_FMT_Y8_1X8 0x2001 diff --git a/include/uapi/linux/rk-camera-module.h b/include/uapi/linux/rk-camera-module.h new file mode 100755 -index 000000000000..68e57c0a9e41 +index 000000000..68e57c0a9 --- /dev/null +++ b/include/uapi/linux/rk-camera-module.h @@ -0,0 +1,813 @@ @@ -1743454,7 +1742298,7 @@ index 000000000000..68e57c0a9e41 +#endif /* _UAPI_RKMODULE_CAMERA_H */ diff --git a/include/uapi/linux/rk-decom.h b/include/uapi/linux/rk-decom.h new file mode 100644 -index 000000000000..b7a7fd1ddb3b +index 000000000..b7a7fd1dd --- /dev/null +++ b/include/uapi/linux/rk-decom.h @@ -0,0 +1,34 @@ @@ -1743494,7 +1742338,7 @@ index 000000000000..b7a7fd1ddb3b +#endif diff --git a/include/uapi/linux/rk-dma-heap.h b/include/uapi/linux/rk-dma-heap.h new file mode 100644 -index 000000000000..4e83d71811ce +index 000000000..4e83d7181 --- /dev/null +++ b/include/uapi/linux/rk-dma-heap.h @@ -0,0 +1,55 @@ @@ -1743555,7 +1742399,7 @@ index 000000000000..4e83d71811ce +#endif /* _UAPI_LINUX_DMABUF_POOL_H */ diff --git a/include/uapi/linux/rk-iomux.h b/include/uapi/linux/rk-iomux.h new file mode 100644 -index 000000000000..58da85c9cb2e +index 000000000..58da85c9c --- /dev/null +++ b/include/uapi/linux/rk-iomux.h @@ -0,0 +1,20 @@ @@ -1743581,7 +1742425,7 @@ index 000000000000..58da85c9cb2e +#endif diff --git a/include/uapi/linux/rk-isp1-config.h b/include/uapi/linux/rk-isp1-config.h new file mode 100644 -index 000000000000..72b8755dd707 +index 000000000..72b8755dd --- /dev/null +++ b/include/uapi/linux/rk-isp1-config.h @@ -0,0 +1,872 @@ @@ -1744459,7 +1743303,7 @@ index 000000000000..72b8755dd707 +#endif /* _UAPI_RK_ISP1_CONFIG_H */ diff --git a/include/uapi/linux/rk-isp2-config.h b/include/uapi/linux/rk-isp2-config.h new file mode 100644 -index 000000000000..50949e0752bc +index 000000000..50949e075 --- /dev/null +++ b/include/uapi/linux/rk-isp2-config.h @@ -0,0 +1,2018 @@ @@ -1746483,7 +1745327,7 @@ index 000000000000..50949e0752bc +#endif /* _UAPI_RK_ISP2_CONFIG_H */ diff --git a/include/uapi/linux/rk-isp21-config.h b/include/uapi/linux/rk-isp21-config.h new file mode 100644 -index 000000000000..aad8fbad705c +index 000000000..aad8fbad7 --- /dev/null +++ b/include/uapi/linux/rk-isp21-config.h @@ -0,0 +1,813 @@ @@ -1747302,7 +1746146,7 @@ index 000000000000..aad8fbad705c +#endif /* _UAPI_RK_ISP21_CONFIG_H */ diff --git a/include/uapi/linux/rk-isp3-config.h b/include/uapi/linux/rk-isp3-config.h new file mode 100644 -index 000000000000..e14492674b3e +index 000000000..e14492674 --- /dev/null +++ b/include/uapi/linux/rk-isp3-config.h @@ -0,0 +1,1077 @@ @@ -1748385,7 +1747229,7 @@ index 000000000000..e14492674b3e +#endif /* _UAPI_RK_ISP3_CONFIG_H */ diff --git a/include/uapi/linux/rk-isp32-config.h b/include/uapi/linux/rk-isp32-config.h new file mode 100644 -index 000000000000..ecd4eaef2cd3 +index 000000000..ecd4eaef2 --- /dev/null +++ b/include/uapi/linux/rk-isp32-config.h @@ -0,0 +1,1528 @@ @@ -1749919,7 +1748763,7 @@ index 000000000000..ecd4eaef2cd3 +#endif /* _UAPI_RK_ISP32_CONFIG_H */ diff --git a/include/uapi/linux/rk-ispp-config.h b/include/uapi/linux/rk-ispp-config.h new file mode 100644 -index 000000000000..616ddff9ed64 +index 000000000..616ddff9e --- /dev/null +++ b/include/uapi/linux/rk-ispp-config.h @@ -0,0 +1,422 @@ @@ -1750347,7 +1749191,7 @@ index 000000000000..616ddff9ed64 +#endif diff --git a/include/uapi/linux/rk-led-flash.h b/include/uapi/linux/rk-led-flash.h new file mode 100755 -index 000000000000..c679cb9eb39a +index 000000000..c679cb9eb --- /dev/null +++ b/include/uapi/linux/rk-led-flash.h @@ -0,0 +1,9 @@ @@ -1750362,7 +1749206,7 @@ index 000000000000..c679cb9eb39a +#endif diff --git a/include/uapi/linux/rk-mpp.h b/include/uapi/linux/rk-mpp.h new file mode 100644 -index 000000000000..9a24407001ec +index 000000000..9a2440700 --- /dev/null +++ b/include/uapi/linux/rk-mpp.h @@ -0,0 +1,82 @@ @@ -1750450,7 +1749294,7 @@ index 000000000000..9a24407001ec +#endif /* _UAPI_RK_MPP_H */ diff --git a/include/uapi/linux/rk-pcie-dma.h b/include/uapi/linux/rk-pcie-dma.h new file mode 100755 -index 000000000000..bf4a96b5eea7 +index 000000000..bf4a96b5e --- /dev/null +++ b/include/uapi/linux/rk-pcie-dma.h @@ -0,0 +1,57 @@ @@ -1750513,7 +1749357,7 @@ index 000000000000..bf4a96b5eea7 +#endif diff --git a/include/uapi/linux/rk-pcie-ep.h b/include/uapi/linux/rk-pcie-ep.h new file mode 100644 -index 000000000000..d89748eed925 +index 000000000..d89748eed --- /dev/null +++ b/include/uapi/linux/rk-pcie-ep.h @@ -0,0 +1,122 @@ @@ -1750641,7 +1749485,7 @@ index 000000000000..d89748eed925 +#endif diff --git a/include/uapi/linux/rk-preisp.h b/include/uapi/linux/rk-preisp.h new file mode 100755 -index 000000000000..4cd51a84ada8 +index 000000000..4cd51a84a --- /dev/null +++ b/include/uapi/linux/rk-preisp.h @@ -0,0 +1,118 @@ @@ -1750765,7 +1749609,7 @@ index 000000000000..4cd51a84ada8 +#endif /* _UAPI_RKPREISP_H */ diff --git a/include/uapi/linux/rk-video-format.h b/include/uapi/linux/rk-video-format.h new file mode 100755 -index 000000000000..938d5adff737 +index 000000000..938d5adff --- /dev/null +++ b/include/uapi/linux/rk-video-format.h @@ -0,0 +1,37 @@ @@ -1750808,7 +1749652,7 @@ index 000000000000..938d5adff737 +#endif /* _UAPI_RK_VIDEO_FORMAT_H */ diff --git a/include/uapi/linux/rk803.h b/include/uapi/linux/rk803.h new file mode 100755 -index 000000000000..448468da9e8d +index 000000000..448468da9 --- /dev/null +++ b/include/uapi/linux/rk803.h @@ -0,0 +1,16 @@ @@ -1750830,7 +1749674,7 @@ index 000000000000..448468da9e8d +#endif /* _UAPI_RK803_H */ diff --git a/include/uapi/linux/rk_cryptodev.h b/include/uapi/linux/rk_cryptodev.h new file mode 100644 -index 000000000000..571488235471 +index 000000000..571488235 --- /dev/null +++ b/include/uapi/linux/rk_cryptodev.h @@ -0,0 +1,85 @@ @@ -1750921,7 +1749765,7 @@ index 000000000000..571488235471 +#endif diff --git a/include/uapi/linux/rk_hdmirx_config.h b/include/uapi/linux/rk_hdmirx_config.h new file mode 100644 -index 000000000000..26dcea790013 +index 000000000..26dcea790 --- /dev/null +++ b/include/uapi/linux/rk_hdmirx_config.h @@ -0,0 +1,88 @@ @@ -1751015,7 +1749859,7 @@ index 000000000000..26dcea790013 +#endif /* _UAPI_RK_HDMIRX_CONFIG_H */ diff --git a/include/uapi/linux/rk_vcm_head.h b/include/uapi/linux/rk_vcm_head.h new file mode 100755 -index 000000000000..4e663ae260d8 +index 000000000..4e663ae26 --- /dev/null +++ b/include/uapi/linux/rk_vcm_head.h @@ -0,0 +1,137 @@ @@ -1751158,7 +1750002,7 @@ index 000000000000..4e663ae260d8 + diff --git a/include/uapi/linux/rkcif-config.h b/include/uapi/linux/rkcif-config.h new file mode 100755 -index 000000000000..c9b9bbf0d301 +index 000000000..c9b9bbf0d --- /dev/null +++ b/include/uapi/linux/rkcif-config.h @@ -0,0 +1,91 @@ @@ -1751255,7 +1750099,7 @@ index 000000000000..c9b9bbf0d301 +#endif diff --git a/include/uapi/linux/rkisp1-config.h b/include/uapi/linux/rkisp1-config.h new file mode 100755 -index 000000000000..c26d4bb69261 +index 000000000..c26d4bb69 --- /dev/null +++ b/include/uapi/linux/rkisp1-config.h @@ -0,0 +1,872 @@ @@ -1752133,7 +1750977,7 @@ index 000000000000..c26d4bb69261 +#endif /* _UAPI_RKISP1_CONFIG_H */ diff --git a/include/uapi/linux/rkisp2-config.h b/include/uapi/linux/rkisp2-config.h new file mode 100755 -index 000000000000..9d41f9e8a097 +index 000000000..9d41f9e8a --- /dev/null +++ b/include/uapi/linux/rkisp2-config.h @@ -0,0 +1,1853 @@ @@ -1753992,7 +1752836,7 @@ index 000000000000..9d41f9e8a097 +#endif /* _UAPI_RKISP2_CONFIG_H */ diff --git a/include/uapi/linux/rkisp21-config.h b/include/uapi/linux/rkisp21-config.h new file mode 100755 -index 000000000000..203022b62361 +index 000000000..203022b62 --- /dev/null +++ b/include/uapi/linux/rkisp21-config.h @@ -0,0 +1,804 @@ @@ -1754802,7 +1753646,7 @@ index 000000000000..203022b62361 +#endif /* _UAPI_RKISP21_CONFIG_H */ diff --git a/include/uapi/linux/rkisp3-config.h b/include/uapi/linux/rkisp3-config.h new file mode 100755 -index 000000000000..25bbe1a9a146 +index 000000000..25bbe1a9a --- /dev/null +++ b/include/uapi/linux/rkisp3-config.h @@ -0,0 +1,1072 @@ @@ -1755880,7 +1754724,7 @@ index 000000000000..25bbe1a9a146 +#endif /* _UAPI_RKISP3_CONFIG_H */ diff --git a/include/uapi/linux/rkispp-config.h b/include/uapi/linux/rkispp-config.h new file mode 100755 -index 000000000000..b4a27f74f9c9 +index 000000000..b4a27f74f --- /dev/null +++ b/include/uapi/linux/rkispp-config.h @@ -0,0 +1,370 @@ @@ -1756255,7 +1755099,7 @@ index 000000000000..b4a27f74f9c9 + +#endif diff --git a/include/uapi/linux/serial_reg.h b/include/uapi/linux/serial_reg.h -index f51bc8f36813..7e3fe68af328 100644 +index f51bc8f36..7e3fe68af 100644 --- a/include/uapi/linux/serial_reg.h +++ b/include/uapi/linux/serial_reg.h @@ -30,6 +30,7 @@ @@ -1756268,7 +1755112,7 @@ index f51bc8f36813..7e3fe68af328 100644 #define UART_IIR_NO_INT 0x01 /* No interrupts pending */ diff --git a/include/uapi/linux/usb/f_accessory.h b/include/uapi/linux/usb/f_accessory.h new file mode 100755 -index 000000000000..0baeb7d0d74c +index 000000000..0baeb7d0d --- /dev/null +++ b/include/uapi/linux/usb/f_accessory.h @@ -0,0 +1,146 @@ @@ -1756419,7 +1755263,7 @@ index 000000000000..0baeb7d0d74c + +#endif /* _UAPI_LINUX_USB_F_ACCESSORY_H */ diff --git a/include/uapi/linux/usb/g_uvc.h b/include/uapi/linux/usb/g_uvc.h -index 652f169a019e..428926e35973 100644 +index 652f169a0..428926e35 100644 --- a/include/uapi/linux/usb/g_uvc.h +++ b/include/uapi/linux/usb/g_uvc.h @@ -19,7 +19,9 @@ @@ -1756434,7 +1755278,7 @@ index 652f169a019e..428926e35973 100644 struct uvc_request_data { __s32 length; diff --git a/include/uapi/linux/usb/video.h b/include/uapi/linux/usb/video.h -index c58854fb7d94..d160d5bdd730 100644 +index c58854fb7..d160d5bdd 100644 --- a/include/uapi/linux/usb/video.h +++ b/include/uapi/linux/usb/video.h @@ -597,5 +597,63 @@ struct UVC_FRAME_MJPEG(n) { \ @@ -1756502,7 +1755346,7 @@ index c58854fb7d94..d160d5bdd730 100644 #endif /* __LINUX_USB_VIDEO_H */ diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h -index b28817c59fdf..622e97c1060f 100644 +index 55b8c4b82..6f937714d 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -689,6 +689,7 @@ struct v4l2_pix_format { @@ -1756515,7 +1755359,7 @@ index b28817c59fdf..622e97c1060f 100644 #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */ diff --git a/include/uapi/misc/rkflash_vendor_storage.h b/include/uapi/misc/rkflash_vendor_storage.h new file mode 100644 -index 000000000000..c217380d1713 +index 000000000..c217380d1 --- /dev/null +++ b/include/uapi/misc/rkflash_vendor_storage.h @@ -0,0 +1,22 @@ @@ -1756542,7 +1755386,7 @@ index 000000000000..c217380d1713 + +#endif diff --git a/init/Kconfig b/init/Kconfig -index 70bd7f69076a..4ce9ca666ce7 100644 +index 70bd7f690..4ce9ca666 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1365,6 +1365,12 @@ if BLK_DEV_INITRD @@ -1756559,7 +1755403,7 @@ index 70bd7f69076a..4ce9ca666ce7 100644 config BOOT_CONFIG diff --git a/init/initramfs.c b/init/initramfs.c -index 55b74d7e5260..f4c4e2404dfd 100644 +index 4534c6611..6bcb2a20e 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -12,6 +12,7 @@ @@ -1756570,7 +1755414,7 @@ index 55b74d7e5260..f4c4e2404dfd 100644 #include static ssize_t __init xwrite(struct file *file, const char *p, size_t count, -@@ -465,6 +466,9 @@ static char * __init unpack_to_rootfs(char *buf, unsigned long len) +@@ -480,6 +481,9 @@ static char * __init unpack_to_rootfs(char *buf, unsigned long len) state = Start; this_header = 0; message = NULL; @@ -1756580,7 +1755424,7 @@ index 55b74d7e5260..f4c4e2404dfd 100644 while (!message && len) { loff_t saved_offset = this_header; if (*buf == '0' && !(this_header & 3)) { -@@ -639,4 +643,23 @@ static int __init populate_rootfs(void) +@@ -654,4 +658,23 @@ static int __init populate_rootfs(void) flush_delayed_fput(); return 0; } @@ -1756605,10 +1755449,10 @@ index 55b74d7e5260..f4c4e2404dfd 100644 rootfs_initcall(populate_rootfs); +#endif diff --git a/init/main.c b/init/main.c -index 30d6afeae932..bc383f09d3c6 100644 +index 124d586f2..04d33abd9 100644 --- a/init/main.c +++ b/init/main.c -@@ -1524,6 +1524,10 @@ static noinline void __init kernel_init_freeable(void) +@@ -1515,6 +1515,10 @@ static noinline void __init kernel_init_freeable(void) smp_init(); sched_init_smp(); @@ -1756619,7 +1755463,7 @@ index 30d6afeae932..bc383f09d3c6 100644 padata_init(); page_alloc_init_late(); /* Initialize page ext after all struct pages are initialized. */ -@@ -1533,6 +1537,10 @@ static noinline void __init kernel_init_freeable(void) +@@ -1524,6 +1528,10 @@ static noinline void __init kernel_init_freeable(void) kunit_run_all_tests(); @@ -1756631,7 +1755475,7 @@ index 30d6afeae932..bc383f09d3c6 100644 /* diff --git a/ipc/msg.c b/ipc/msg.c -index 8ded6b8f10a2..6e6c8e0c9380 100644 +index 8ded6b8f1..6e6c8e0c9 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -147,7 +147,7 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params) @@ -1756644,7 +1755488,7 @@ index 8ded6b8f10a2..6e6c8e0c9380 100644 return -ENOMEM; diff --git a/ipc/sem.c b/ipc/sem.c -index 916f7a90be31..d735cecd9c1d 100644 +index 916f7a90b..d735cecd9 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -511,7 +511,7 @@ static struct sem_array *sem_alloc(size_t nsems) @@ -1756675,7 +1755519,7 @@ index 916f7a90be31..d735cecd9c1d 100644 ipc_rcu_putref(&sma->sem_perm, sem_rcu_free); return ERR_PTR(-ENOMEM); diff --git a/ipc/shm.c b/ipc/shm.c -index b418731d66e8..471ac3e7498d 100644 +index b418731d6..471ac3e74 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -711,7 +711,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params) @@ -1756688,7 +1755532,7 @@ index b418731d66e8..471ac3e7498d 100644 return -ENOMEM; diff --git a/ipc/util.c b/ipc/util.c -index 7c3601dad9bd..bbb5190af6d9 100644 +index 7c3601dad..bbb5190af 100644 --- a/ipc/util.c +++ b/ipc/util.c @@ -754,13 +754,21 @@ struct pid_namespace *ipc_seq_pid_ns(struct seq_file *s) @@ -1756718,7 +1755562,7 @@ index 7c3601dad9bd..bbb5190af6d9 100644 if (ipc != NULL) { rcu_read_lock(); diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c -index aaad2dce2be6..22d4909597d0 100644 +index 657bca73c..2a92d9dbf 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -128,21 +128,6 @@ static struct bpf_map *find_and_alloc_map(union bpf_attr *attr) @@ -1756838,7 +1755682,7 @@ index aaad2dce2be6..22d4909597d0 100644 err = -EBUSY; goto err_put; } -@@ -3996,9 +3982,6 @@ static int bpf_map_do_batch(const union bpf_attr *attr, +@@ -4008,9 +3994,6 @@ static int bpf_map_do_batch(const union bpf_attr *attr, union bpf_attr __user *uattr, int cmd) { @@ -1756848,7 +1755692,7 @@ index aaad2dce2be6..22d4909597d0 100644 struct bpf_map *map; int err, ufd; struct fd f; -@@ -4011,13 +3994,16 @@ static int bpf_map_do_batch(const union bpf_attr *attr, +@@ -4023,13 +4006,16 @@ static int bpf_map_do_batch(const union bpf_attr *attr, map = __bpf_map_get(f); if (IS_ERR(map)) return PTR_ERR(map); @@ -1756869,7 +1755713,7 @@ index aaad2dce2be6..22d4909597d0 100644 err = -EPERM; goto err_put; } -@@ -4030,9 +4016,8 @@ static int bpf_map_do_batch(const union bpf_attr *attr, +@@ -4042,9 +4028,8 @@ static int bpf_map_do_batch(const union bpf_attr *attr, BPF_DO_BATCH(map->ops->map_update_batch); else BPF_DO_BATCH(map->ops->map_delete_batch); @@ -1756881,10 +1755725,10 @@ index aaad2dce2be6..22d4909597d0 100644 return err; } diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c -index f1deefc9bdcd..a27746e4b7c9 100644 +index f90788362..7df908f68 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c -@@ -3577,22 +3577,7 @@ static void coerce_reg_to_size(struct bpf_reg_state *reg, int size) +@@ -3724,22 +3724,7 @@ static void coerce_reg_to_size(struct bpf_reg_state *reg, int size) static bool bpf_map_is_rdonly(const struct bpf_map *map) { @@ -1756909,10 +1755753,10 @@ index f1deefc9bdcd..a27746e4b7c9 100644 static int bpf_map_direct_read(struct bpf_map *map, int off, int size, u64 *val) diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c -index 1592411cbdd5..3090a66cc509 100644 +index 715582c18..4ba47bd3a 100644 --- a/kernel/cgroup/cgroup-v1.c +++ b/kernel/cgroup/cgroup-v1.c -@@ -520,7 +520,8 @@ static ssize_t __cgroup1_procs_write(struct kernfs_open_file *of, +@@ -519,7 +519,8 @@ static ssize_t __cgroup1_procs_write(struct kernfs_open_file *of, if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) && #endif !uid_eq(cred->euid, tcred->uid) && @@ -1756923,7 +1755767,7 @@ index 1592411cbdd5..3090a66cc509 100644 put_cred(tcred); if (ret) diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c -index b68de0d09632..cbab2f812db6 100644 +index f2284aeac..54274e61b 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -374,9 +374,9 @@ static DEFINE_SPINLOCK(callback_lock); @@ -1757131,7 +1755975,7 @@ index b68de0d09632..cbab2f812db6 100644 /* diff --git a/kernel/cgroup/legacy_freezer.c b/kernel/cgroup/legacy_freezer.c -index 08236798d173..081d026f13db 100644 +index 08236798d..081d026f1 100644 --- a/kernel/cgroup/legacy_freezer.c +++ b/kernel/cgroup/legacy_freezer.c @@ -479,3 +479,4 @@ struct cgroup_subsys freezer_cgrp_subsys = { @@ -1757140,7 +1755984,7 @@ index 08236798d173..081d026f13db 100644 }; +EXPORT_SYMBOL_GPL(freezer_cgrp_subsys); diff --git a/kernel/cpu.c b/kernel/cpu.c -index 2cda6a3efd76..356baa1b6c9d 100644 +index 2cda6a3ef..356baa1b6 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -40,6 +40,8 @@ @@ -1757176,7 +1756020,7 @@ index 2cda6a3efd76..356baa1b6c9d 100644 if (!cpu_present(cpu)) diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c -index e2999a070a99..79cb6d063b80 100644 +index 4195e7ad1..5e7b66e32 100644 --- a/kernel/irq/generic-chip.c +++ b/kernel/irq/generic-chip.c @@ -200,6 +200,7 @@ int irq_gc_set_wake(struct irq_data *d, unsigned int on) @@ -1757188,7 +1756032,7 @@ index e2999a070a99..79cb6d063b80 100644 static u32 irq_readl_be(void __iomem *addr) { diff --git a/kernel/power/Makefile b/kernel/power/Makefile -index 5899260a8bef..97705757f9c6 100644 +index 5899260a8..97705757f 100644 --- a/kernel/power/Makefile +++ b/kernel/power/Makefile @@ -17,4 +17,5 @@ obj-$(CONFIG_PM_WAKELOCKS) += wakelock.o @@ -1757198,7 +1756042,7 @@ index 5899260a8bef..97705757f9c6 100644 +obj-$(CONFIG_SUSPEND) += wakeup_reason.o obj-$(CONFIG_ENERGY_MODEL) += energy_model.o diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c -index 334173fe6940..c2c858c6d56d 100644 +index 334173fe6..c2c858c6d 100644 --- a/kernel/power/energy_model.c +++ b/kernel/power/energy_model.c @@ -52,6 +52,17 @@ static int em_debug_cpus_show(struct seq_file *s, void *unused) @@ -1757264,7 +1756108,7 @@ index 334173fe6940..c2c858c6d56d 100644 dev_info(dev, "EM: created perf domain\n"); diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c -index 59a1b126c369..b6875ebd184d 100644 +index 59a1b126c..b6875ebd1 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -326,7 +326,7 @@ static int create_image(int platform_mode) @@ -1757277,7 +1756121,7 @@ index 59a1b126c369..b6875ebd184d 100644 platform_leave(platform_mode); diff --git a/kernel/power/power.h b/kernel/power/power.h -index 24f12d534515..778bf431ec02 100644 +index 24f12d534..778bf431e 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h @@ -106,7 +106,7 @@ extern int create_basic_memory_bitmaps(void); @@ -1757290,7 +1756134,7 @@ index 24f12d534515..778bf431ec02 100644 /** * Auxiliary structure used for reading the snapshot image data and diff --git a/kernel/power/process.c b/kernel/power/process.c -index b9faa363c46a..41053c3b4ead 100644 +index b9faa363c..41053c3b4 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -85,18 +85,21 @@ static int try_to_freeze_tasks(bool user_only) @@ -1757321,7 +1756165,7 @@ index b9faa363c46a..41053c3b4ead 100644 for_each_process_thread(g, p) { if (p != current && !freezer_should_skip(p) diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c -index f5dccd445d36..c60ed74e3cc7 100644 +index c1bdaae07..6a1d97bc5 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c @@ -1137,7 +1137,15 @@ void free_basic_memory_bitmaps(void) @@ -1757357,7 +1756201,7 @@ index f5dccd445d36..c60ed74e3cc7 100644 pfn = memory_bm_next_pfn(bm); } diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c -index 4aa4d5d3947f..b776c3db6828 100644 +index 4aa4d5d39..b776c3db6 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -30,6 +30,7 @@ @@ -1757450,7 +1756294,7 @@ index 4aa4d5d3947f..b776c3db6828 100644 suspend_stats.fail++; diff --git a/kernel/power/wakeup_reason.c b/kernel/power/wakeup_reason.c new file mode 100755 -index 000000000000..8fefaa3fdba2 +index 000000000..8fefaa3fd --- /dev/null +++ b/kernel/power/wakeup_reason.c @@ -0,0 +1,438 @@ @@ -1757893,7 +1756737,7 @@ index 000000000000..8fefaa3fdba2 + +late_initcall(wakeup_reason_init); diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h -index 251a9af3709a..52cf14bff824 100644 +index 251a9af37..52cf14bff 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h @@ -15,6 +15,7 @@ @@ -1757914,10 +1756758,10 @@ index 251a9af3709a..52cf14bff824 100644 rcu_force_quiescent_state(); /* Kick them all. */ diff --git a/kernel/reboot.c b/kernel/reboot.c -index af6f23d8bea1..bce629531d2a 100644 +index e297b35fc..2c4470fa9 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c -@@ -215,6 +215,27 @@ void do_kernel_restart(char *cmd) +@@ -216,6 +216,27 @@ void do_kernel_restart(char *cmd) atomic_notifier_call_chain(&restart_handler_list, reboot_mode, cmd); } @@ -1757946,7 +1756790,7 @@ index af6f23d8bea1..bce629531d2a 100644 { /* The boot cpu is always logical cpu 0 */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 9afa1dd0f7e2..867ee64a35a3 100644 +index 576e7a576..e16bc9fb7 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -50,6 +50,13 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(sched_overutilized_tp); @@ -1758063,7 +1756907,7 @@ index 9afa1dd0f7e2..867ee64a35a3 100644 return try_to_wake_up(curr->private, mode, wake_flags); } EXPORT_SYMBOL(default_wake_function); -@@ -5722,16 +5764,19 @@ int sched_setscheduler(struct task_struct *p, int policy, +@@ -5730,16 +5772,19 @@ int sched_setscheduler(struct task_struct *p, int policy, { return _sched_setscheduler(p, policy, param, true); } @@ -1758083,7 +1756927,7 @@ index 9afa1dd0f7e2..867ee64a35a3 100644 /** * sched_setscheduler_nocheck - change the scheduling policy and/or RT priority of a thread from kernelspace. -@@ -5751,6 +5796,7 @@ int sched_setscheduler_nocheck(struct task_struct *p, int policy, +@@ -5759,6 +5804,7 @@ int sched_setscheduler_nocheck(struct task_struct *p, int policy, { return _sched_setscheduler(p, policy, param, false); } @@ -1758091,7 +1756935,7 @@ index 9afa1dd0f7e2..867ee64a35a3 100644 /* * SCHED_FIFO is a broken scheduler model; that is, it is fundamentally -@@ -7058,6 +7104,11 @@ void migrate_tasks(struct rq *dead_rq, struct rq_flags *rf, +@@ -7053,6 +7099,11 @@ void migrate_tasks(struct rq *dead_rq, struct rq_flags *rf, */ update_rq_clock(rq); @@ -1758104,7 +1756948,7 @@ index 9afa1dd0f7e2..867ee64a35a3 100644 /* * There's this thread running, bail when that's the only diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index e5e72262e2ef..6ea17f110de9 100644 +index 9a701e968..f485a2e19 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -86,6 +86,7 @@ enum sched_tunable_scaling sysctl_sched_tunable_scaling = SCHED_TUNABLESCALING_L @@ -1758139,7 +1756983,7 @@ index e5e72262e2ef..6ea17f110de9 100644 /* Spare idle load balancing on CPUs that don't want to be disturbed: */ if (!housekeeping_cpu(cpu, HK_FLAG_SCHED)) diff --git a/kernel/sched/loadavg.c b/kernel/sched/loadavg.c -index d2a655643a02..b5837e27718e 100644 +index d2a655643..b5837e277 100644 --- a/kernel/sched/loadavg.c +++ b/kernel/sched/loadavg.c @@ -75,6 +75,7 @@ void get_avenrun(unsigned long *loads, unsigned long offset, int shift) @@ -1758151,7 +1756995,7 @@ index d2a655643a02..b5837e27718e 100644 long calc_load_fold_active(struct rq *this_rq, long adjust) { diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c -index 2c613e1cff3a..e2890b677e43 100644 +index 2c613e1cf..e2890b677 100644 --- a/kernel/sched/pelt.c +++ b/kernel/sched/pelt.c @@ -28,6 +28,42 @@ @@ -1758207,7 +1757051,7 @@ index 2c613e1cff3a..e2890b677e43 100644 } diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c -index 15b4cc7b8f7a..dce6e444ce86 100644 +index 15b4cc7b8..dce6e444c 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1393,6 +1393,27 @@ static void dequeue_rt_entity(struct sched_rt_entity *rt_se, unsigned int flags) @@ -1758294,7 +1757138,7 @@ index 15b4cc7b8f7a..dce6e444ce86 100644 int target = find_lowest_rq(p); diff --git a/kernel/sched/sched-pelt.h b/kernel/sched/sched-pelt.h -index c529706bed11..92a6875bc2d3 100644 +index c529706be..92a6875bc 100644 --- a/kernel/sched/sched-pelt.h +++ b/kernel/sched/sched-pelt.h @@ -1,7 +1,7 @@ @@ -1758330,7 +1757174,7 @@ index c529706bed11..92a6875bc2d3 100644 +#define LOAD_AVG_PERIOD pelt_load_avg_period +#define LOAD_AVG_MAX pelt_load_avg_max diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index 23cd54413f2e..9e264d895775 100644 +index 8da63d4e4..d57c4c8d5 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1915,6 +1915,8 @@ extern const int sched_latency_to_weight[40]; @@ -1758343,7 +1757187,7 @@ index 23cd54413f2e..9e264d895775 100644 struct sched_class { diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c -index 9191e5daaa3c..58d840c624d7 100644 +index 9191e5daa..58d840c62 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -5,6 +5,9 @@ @@ -1758357,7 +1757201,7 @@ index 9191e5daaa3c..58d840c624d7 100644 /* Protected by sched_domains_mutex: */ static cpumask_var_t sched_domains_tmpmask; diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c -index a55642aa3f68..6911bbca018c 100644 +index a55642aa3..6911bbca0 100644 --- a/kernel/sched/wait.c +++ b/kernel/sched/wait.c @@ -396,7 +396,8 @@ void finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_en @@ -1758389,9 +1757233,40 @@ index a55642aa3f68..6911bbca018c 100644 { /* Pairs with the smp_store_mb() in wait_woken(). */ smp_mb(); /* C */ +diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c +index 3ff88eb28..e2c7300c7 100644 +--- a/kernel/trace/trace.c ++++ b/kernel/trace/trace.c +@@ -9385,7 +9385,7 @@ static struct notifier_block trace_module_nb = { + }; + #endif /* CONFIG_MODULES */ + +-static __init int tracer_init_tracefs(void) ++static int tracefs_init(void * data) + { + int ret; + +@@ -9435,6 +9435,17 @@ static __init int tracer_init_tracefs(void) + return 0; + } + ++static __init int tracer_init_tracefs(void) ++{ ++ struct task_struct *thread; ++ ++ thread = kthread_run(tracefs_init, NULL, "tracefs_init"); ++ if (IS_ERR(thread)) ++ return PTR_ERR(thread); ++ ++ return 0; ++} ++ + static int trace_panic_handler(struct notifier_block *this, + unsigned long event, void *unused) + { diff --git a/make-boot.sh b/make-boot.sh new file mode 100755 -index 000000000000..f4cd4c4524b5 +index 000000000..f4cd4c452 --- /dev/null +++ b/make-boot.sh @@ -0,0 +1,31 @@ @@ -1758428,7 +1757303,7 @@ index 000000000000..f4cd4c4524b5 +cp ${BOOT_LINUX}/boot_linux.img ${OUT_IMAGE} diff --git a/make-ohos.sh b/make-ohos.sh new file mode 100755 -index 000000000000..70ad2c5ccf41 +index 000000000..a9e22dc69 --- /dev/null +++ b/make-ohos.sh @@ -0,0 +1,148 @@ @@ -1758581,7 +1757456,7 @@ index 000000000000..70ad2c5ccf41 + fi +done diff --git a/mm/hugetlb.c b/mm/hugetlb.c -index feac38090a9e..2738f5741696 100644 +index feac38090..2738f5741 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -3932,7 +3932,6 @@ void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma, @@ -1758629,7 +1757504,7 @@ index feac38090a9e..2738f5741696 100644 void __unmap_hugepage_range_final(struct mmu_gather *tlb, diff --git a/mm/memblock.c b/mm/memblock.c -index f72d53957033..ba21b5b13f39 100644 +index f72d53957..ba21b5b13 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -97,6 +97,26 @@ struct pglist_data __refdata contig_page_data; @@ -1758705,7 +1757580,7 @@ index f72d53957033..ba21b5b13f39 100644 return end_pfn - start_pfn; diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 6993c6b27dcf..3078e59b72af 100644 +index fabeabbb1..b63375b3f 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1445,9 +1445,15 @@ static void free_one_page(struct zone *zone, @@ -1758783,7 +1757658,7 @@ index 6993c6b27dcf..3078e59b72af 100644 pgcnt++; } diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c -index 756523e5402a..f0a4377c3b7d 100644 +index 4493fc68e..763c50aed 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c @@ -1539,9 +1539,6 @@ static void l2cap_sock_close_cb(struct l2cap_chan *chan) @@ -1758819,10 +1757694,10 @@ index 756523e5402a..f0a4377c3b7d 100644 if (l2cap_pi(sk)->rx_busy_skb) { kfree_skb(l2cap_pi(sk)->rx_busy_skb); diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c -index 081d1ee3ddb8..8244d3ae185b 100644 +index f9a2993fd..656601ab7 100644 --- a/net/bluetooth/sco.c +++ b/net/bluetooth/sco.c -@@ -93,10 +93,10 @@ static void sco_sock_timeout(struct work_struct *work) +@@ -97,10 +97,10 @@ static void sco_sock_timeout(struct work_struct *work) BT_DBG("sock %p state %d", sk, sk->sk_state); @@ -1758835,7 +1757710,7 @@ index 081d1ee3ddb8..8244d3ae185b 100644 sock_put(sk); } -@@ -193,10 +193,10 @@ static void sco_conn_del(struct hci_conn *hcon, int err) +@@ -197,10 +197,10 @@ static void sco_conn_del(struct hci_conn *hcon, int err) if (sk) { sock_hold(sk); @@ -1758848,7 +1757723,7 @@ index 081d1ee3ddb8..8244d3ae185b 100644 sock_put(sk); } -@@ -1103,10 +1103,10 @@ static void sco_conn_ready(struct sco_conn *conn) +@@ -1104,10 +1104,10 @@ static void sco_conn_ready(struct sco_conn *conn) if (sk) { sco_sock_clear_timer(sk); @@ -1758861,7 +1757736,7 @@ index 081d1ee3ddb8..8244d3ae185b 100644 } else { sco_conn_lock(conn); -@@ -1121,12 +1121,12 @@ static void sco_conn_ready(struct sco_conn *conn) +@@ -1122,12 +1122,12 @@ static void sco_conn_ready(struct sco_conn *conn) return; } @@ -1758876,7 +1757751,7 @@ index 081d1ee3ddb8..8244d3ae185b 100644 sco_conn_unlock(conn); return; } -@@ -1147,7 +1147,7 @@ static void sco_conn_ready(struct sco_conn *conn) +@@ -1148,7 +1148,7 @@ static void sco_conn_ready(struct sco_conn *conn) /* Wake up parent */ parent->sk_data_ready(parent); @@ -1758886,7 +1757761,7 @@ index 081d1ee3ddb8..8244d3ae185b 100644 sco_conn_unlock(conn); } diff --git a/net/rfkill/Kconfig b/net/rfkill/Kconfig -index 83a7af8982bb..33ab1f7a3cc0 100644 +index 83a7af898..33ab1f7a3 100644 --- a/net/rfkill/Kconfig +++ b/net/rfkill/Kconfig @@ -32,3 +32,12 @@ config RFKILL_GPIO @@ -1758903,7 +1757778,7 @@ index 83a7af8982bb..33ab1f7a3cc0 100644 + help + Rockchip rfkill driver for rk29/rk3X diff --git a/net/rfkill/Makefile b/net/rfkill/Makefile -index dc47b6174ec5..beed5b506307 100644 +index dc47b6174..beed5b506 100644 --- a/net/rfkill/Makefile +++ b/net/rfkill/Makefile @@ -7,3 +7,5 @@ rfkill-y += core.o @@ -1758914,7 +1757789,7 @@ index dc47b6174ec5..beed5b506307 100644 +obj-$(CONFIG_RFKILL_RK) += rfkill-rk.o diff --git a/net/rfkill/rfkill-bt.c b/net/rfkill/rfkill-bt.c new file mode 100755 -index 000000000000..7c943871a379 +index 000000000..7c943871a --- /dev/null +++ b/net/rfkill/rfkill-bt.c @@ -0,0 +1,827 @@ @@ -1759747,7 +1758622,7 @@ index 000000000000..7c943871a379 +MODULE_LICENSE("GPL"); diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c new file mode 100755 -index 000000000000..6a581c847a68 +index 000000000..6a581c847 --- /dev/null +++ b/net/rfkill/rfkill-wlan.c @@ -0,0 +1,979 @@ @@ -1760731,7 +1759606,7 @@ index 000000000000..6a581c847a68 +MODULE_AUTHOR("gwl@rock-chips.com"); +MODULE_LICENSE("GPL"); diff --git a/scripts/Makefile b/scripts/Makefile -index 9adb6d247818..b7b7ad5475e6 100644 +index 9adb6d247..b7b7ad547 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -9,6 +9,7 @@ CRYPTO_CFLAGS = $(shell pkg-config --cflags libcrypto 2> /dev/null) @@ -1760743,7 +1759618,7 @@ index 9adb6d247818..b7b7ad5475e6 100644 hostprogs-always-$(CONFIG_ASN1) += asn1_compiler hostprogs-always-$(CONFIG_MODULE_SIG_FORMAT) += sign-file diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib -index 53aa3e18ce8a..7ca0ddfa6e19 100644 +index 53aa3e18c..7ca0ddfa6 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -318,8 +318,9 @@ $(obj)/%.dtb.S: $(obj)/%.dtb FORCE @@ -1760760,7 +1759635,7 @@ index 53aa3e18ce8a..7ca0ddfa6e19 100644 cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) diff --git a/scripts/clang-wrapper.py b/scripts/clang-wrapper.py new file mode 100755 -index 000000000000..5486902f1f76 +index 000000000..5486902f1 --- /dev/null +++ b/scripts/clang-wrapper.py @@ -0,0 +1,102 @@ @@ -1760867,7 +1759742,7 @@ index 000000000000..5486902f1f76 + status = run_clang() + sys.exit(status) diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c -index 17cb6890d45a..913fb08af475 100644 +index 17cb6890d..913fb08af 100644 --- a/scripts/dtc/checks.c +++ b/scripts/dtc/checks.c @@ -649,6 +649,24 @@ static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti, @@ -1760897,7 +1759772,7 @@ index 17cb6890d45a..913fb08af475 100644 diff --git a/scripts/mkimg b/scripts/mkimg new file mode 100755 -index 000000000000..63e3da6f402c +index 000000000..63e3da6f4 --- /dev/null +++ b/scripts/mkimg @@ -0,0 +1,235 @@ @@ -1761138,7 +1760013,7 @@ index 000000000000..63e3da6f402c +fi diff --git a/scripts/repack-bootimg b/scripts/repack-bootimg new file mode 100755 -index 000000000000..69065d28e0ea +index 000000000..69065d28e --- /dev/null +++ b/scripts/repack-bootimg @@ -0,0 +1,153 @@ @@ -1761297,7 +1760172,7 @@ index 000000000000..69065d28e0ea +--output $output diff --git a/scripts/resource_tool.c b/scripts/resource_tool.c new file mode 100755 -index 000000000000..8465c578b2d7 +index 000000000..8465c578b --- /dev/null +++ b/scripts/resource_tool.c @@ -0,0 +1,1575 @@ @@ -1762877,7 +1761752,7 @@ index 000000000000..8465c578b2d7 + +/************pack code end****************/ diff --git a/security/Kconfig.hardening b/security/Kconfig.hardening -index b54eb7177a31..b02e64e8461a 100644 +index b54eb7177..b02e64e84 100644 --- a/security/Kconfig.hardening +++ b/security/Kconfig.hardening @@ -39,7 +39,7 @@ choice @@ -1762898,7 +1761773,7 @@ index b54eb7177a31..b02e64e8461a 100644 This has the effect of setting "init_on_alloc=1" on the kernel command line. This can be disabled with "init_on_alloc=0". diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c -index fb45a32d99cd..0ec5bf47d96e 100644 +index fb45a32d9..0ec5bf47d 100644 --- a/sound/drivers/aloop.c +++ b/sound/drivers/aloop.c @@ -37,6 +37,7 @@ MODULE_SUPPORTED_DEVICE("{{ALSA,Loopback soundcard}}"); @@ -1762977,7 +1761852,7 @@ index fb45a32d99cd..0ec5bf47d96e 100644 } diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig -index f1c9e563994b..d3f815d7c867 100644 +index 04a7070c7..7ff1aa8db 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -89,11 +89,16 @@ config SND_SOC_ALL_CODECS @@ -1763117,7 +1761992,7 @@ index f1c9e563994b..d3f815d7c867 100644 config SND_SOC_RT5659 diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile -index 11ce98c25d6c..d94d074c18ad 100644 +index 11ce98c25..d94d074c1 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -84,12 +84,19 @@ snd-soc-da7219-objs := da7219.o da7219-aad.o @@ -1763189,7 +1762064,7 @@ index 11ce98c25d6c..d94d074c18ad 100644 obj-$(CONFIG_SND_SOC_RL6347A) += snd-soc-rl6347a.o obj-$(CONFIG_SND_SOC_RT1011) += snd-soc-rt1011.o diff --git a/sound/soc/codecs/bt-sco.c b/sound/soc/codecs/bt-sco.c -index 4d286844e3c8..2be7ba425ee4 100644 +index 4d286844e..2be7ba425 100644 --- a/sound/soc/codecs/bt-sco.c +++ b/sound/soc/codecs/bt-sco.c @@ -26,14 +26,14 @@ static struct snd_soc_dai_driver bt_sco_dai[] = { @@ -1763228,7 +1762103,7 @@ index 4d286844e3c8..2be7ba425ee4 100644 }, diff --git a/sound/soc/codecs/dummy-codec.c b/sound/soc/codecs/dummy-codec.c new file mode 100755 -index 000000000000..35756c753357 +index 000000000..35756c753 --- /dev/null +++ b/sound/soc/codecs/dummy-codec.c @@ -0,0 +1,115 @@ @@ -1763349,7 +1762224,7 @@ index 000000000000..35756c753357 +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/es7202.c b/sound/soc/codecs/es7202.c new file mode 100755 -index 000000000000..49035e8ca52d +index 000000000..49035e8ca --- /dev/null +++ b/sound/soc/codecs/es7202.c @@ -0,0 +1,1170 @@ @@ -1764525,7 +1763400,7 @@ index 000000000000..49035e8ca52d +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/es7202.h b/sound/soc/codecs/es7202.h new file mode 100755 -index 000000000000..fb8643c0a3b2 +index 000000000..fb8643c0a --- /dev/null +++ b/sound/soc/codecs/es7202.h @@ -0,0 +1,95 @@ @@ -1764626,7 +1763501,7 @@ index 000000000000..fb8643c0a3b2 +#endif diff --git a/sound/soc/codecs/es7210.c b/sound/soc/codecs/es7210.c new file mode 100755 -index 000000000000..dfb0e24e23c7 +index 000000000..dfb0e24e2 --- /dev/null +++ b/sound/soc/codecs/es7210.c @@ -0,0 +1,1754 @@ @@ -1766386,7 +1765261,7 @@ index 000000000000..dfb0e24e23c7 +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/es7210.h b/sound/soc/codecs/es7210.h new file mode 100755 -index 000000000000..234a365c398e +index 000000000..234a365c3 --- /dev/null +++ b/sound/soc/codecs/es7210.h @@ -0,0 +1,76 @@ @@ -1766468,7 +1765343,7 @@ index 000000000000..234a365c398e +#endif /* _ES7210_H_ */ diff --git a/sound/soc/codecs/es7243e.c b/sound/soc/codecs/es7243e.c new file mode 100755 -index 000000000000..e2bf03c526d8 +index 000000000..e2bf03c52 --- /dev/null +++ b/sound/soc/codecs/es7243e.c @@ -0,0 +1,2671 @@ @@ -1769145,7 +1768020,7 @@ index 000000000000..e2bf03c526d8 +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/es7243e_usr_cfg.h b/sound/soc/codecs/es7243e_usr_cfg.h new file mode 100755 -index 000000000000..1d9760ada940 +index 000000000..1d9760ada --- /dev/null +++ b/sound/soc/codecs/es7243e_usr_cfg.h @@ -0,0 +1,274 @@ @@ -1769425,7 +1768300,7 @@ index 000000000000..1d9760ada940 +#define VDDA_VOLTAGE VDDA_3V3 diff --git a/sound/soc/codecs/es8311.c b/sound/soc/codecs/es8311.c new file mode 100755 -index 000000000000..b13ece8be069 +index 000000000..b13ece8be --- /dev/null +++ b/sound/soc/codecs/es8311.c @@ -0,0 +1,756 @@ @@ -1770187,7 +1769062,7 @@ index 000000000000..b13ece8be069 +MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/es8311.h b/sound/soc/codecs/es8311.h new file mode 100755 -index 000000000000..94d8472bd5de +index 000000000..94d8472bd --- /dev/null +++ b/sound/soc/codecs/es8311.h @@ -0,0 +1,69 @@ @@ -1770262,7 +1769137,7 @@ index 000000000000..94d8472bd5de +#endif diff --git a/sound/soc/codecs/es8323.c b/sound/soc/codecs/es8323.c new file mode 100755 -index 000000000000..636510849a6d +index 000000000..636510849 --- /dev/null +++ b/sound/soc/codecs/es8323.c @@ -0,0 +1,998 @@ @@ -1771266,7 +1770141,7 @@ index 000000000000..636510849a6d +MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/es8323.h b/sound/soc/codecs/es8323.h new file mode 100755 -index 000000000000..355a6a7d3149 +index 000000000..355a6a7d3 --- /dev/null +++ b/sound/soc/codecs/es8323.h @@ -0,0 +1,151 @@ @@ -1771422,7 +1770297,7 @@ index 000000000000..355a6a7d3149 + +#endif diff --git a/sound/soc/codecs/es8328.c b/sound/soc/codecs/es8328.c -index 081b5f189632..3e2de70340cc 100644 +index 081b5f189..3e2de7034 100644 --- a/sound/soc/codecs/es8328.c +++ b/sound/soc/codecs/es8328.c @@ -36,6 +36,16 @@ static const struct snd_pcm_hw_constraint_list constraints_12288 = { @@ -1771459,7 +1770334,7 @@ index 081b5f189632..3e2de70340cc 100644 } diff --git a/sound/soc/codecs/es8396.c b/sound/soc/codecs/es8396.c new file mode 100755 -index 000000000000..4cd7916b026f +index 000000000..4cd7916b0 --- /dev/null +++ b/sound/soc/codecs/es8396.c @@ -0,0 +1,3207 @@ @@ -1774672,7 +1773547,7 @@ index 000000000000..4cd7916b026f +MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/es8396.h b/sound/soc/codecs/es8396.h new file mode 100755 -index 000000000000..e6f2f390707d +index 000000000..e6f2f3907 --- /dev/null +++ b/sound/soc/codecs/es8396.h @@ -0,0 +1,354 @@ @@ -1775032,7 +1773907,7 @@ index 000000000000..e6f2f390707d +#endif diff --git a/sound/soc/codecs/rk1000_codec.c b/sound/soc/codecs/rk1000_codec.c new file mode 100755 -index 000000000000..9cabd0977813 +index 000000000..9cabd0977 --- /dev/null +++ b/sound/soc/codecs/rk1000_codec.c @@ -0,0 +1,580 @@ @@ -1775618,7 +1774493,7 @@ index 000000000000..9cabd0977813 +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/rk1000_codec.h b/sound/soc/codecs/rk1000_codec.h new file mode 100755 -index 000000000000..0c9169cd6fb7 +index 000000000..0c9169cd6 --- /dev/null +++ b/sound/soc/codecs/rk1000_codec.h @@ -0,0 +1,320 @@ @@ -1775944,7 +1774819,7 @@ index 000000000000..0c9169cd6fb7 +#endif diff --git a/sound/soc/codecs/rk312x_codec.c b/sound/soc/codecs/rk312x_codec.c new file mode 100755 -index 000000000000..0e3ac4008962 +index 000000000..0e3ac4008 --- /dev/null +++ b/sound/soc/codecs/rk312x_codec.c @@ -0,0 +1,2526 @@ @@ -1778476,7 +1777351,7 @@ index 000000000000..0e3ac4008962 +MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/rk312x_codec.h b/sound/soc/codecs/rk312x_codec.h new file mode 100755 -index 000000000000..0924088681ba +index 000000000..092408868 --- /dev/null +++ b/sound/soc/codecs/rk312x_codec.h @@ -0,0 +1,566 @@ @@ -1779048,7 +1777923,7 @@ index 000000000000..0924088681ba +#endif /* __RK312x_CODEC_H__ */ diff --git a/sound/soc/codecs/rk3228_codec.c b/sound/soc/codecs/rk3228_codec.c new file mode 100755 -index 000000000000..d82eec871ac8 +index 000000000..d82eec871 --- /dev/null +++ b/sound/soc/codecs/rk3228_codec.c @@ -0,0 +1,543 @@ @@ -1779597,7 +1778472,7 @@ index 000000000000..d82eec871ac8 +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/rk3228_codec.h b/sound/soc/codecs/rk3228_codec.h new file mode 100755 -index 000000000000..7283d0ba86e8 +index 000000000..7283d0ba8 --- /dev/null +++ b/sound/soc/codecs/rk3228_codec.h @@ -0,0 +1,218 @@ @@ -1779821,7 +1778696,7 @@ index 000000000000..7283d0ba86e8 +#endif diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c new file mode 100755 -index 000000000000..a6ce7f061d73 +index 000000000..a6ce7f061 --- /dev/null +++ b/sound/soc/codecs/rk3308_codec.c @@ -0,0 +1,5128 @@ @@ -1784955,7 +1783830,7 @@ index 000000000000..a6ce7f061d73 +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/rk3308_codec.h b/sound/soc/codecs/rk3308_codec.h new file mode 100755 -index 000000000000..93e089dae081 +index 000000000..93e089dae --- /dev/null +++ b/sound/soc/codecs/rk3308_codec.h @@ -0,0 +1,1069 @@ @@ -1786030,7 +1784905,7 @@ index 000000000000..93e089dae081 +#endif /* __RK3308_CODEC_H__ */ diff --git a/sound/soc/codecs/rk3308_codec_provider.h b/sound/soc/codecs/rk3308_codec_provider.h new file mode 100755 -index 000000000000..34c1ef86a507 +index 000000000..34c1ef86a --- /dev/null +++ b/sound/soc/codecs/rk3308_codec_provider.h @@ -0,0 +1,28 @@ @@ -1786064,7 +1784939,7 @@ index 000000000000..34c1ef86a507 +#endif /* __RK3308_CODEC_PROVIDER_H__ */ diff --git a/sound/soc/codecs/rk817_codec.c b/sound/soc/codecs/rk817_codec.c new file mode 100755 -index 000000000000..453ea4bf5b7f +index 000000000..453ea4bf5 --- /dev/null +++ b/sound/soc/codecs/rk817_codec.c @@ -0,0 +1,1364 @@ @@ -1787434,7 +1786309,7 @@ index 000000000000..453ea4bf5b7f +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/rk817_codec.h b/sound/soc/codecs/rk817_codec.h new file mode 100755 -index 000000000000..a928c323928b +index 000000000..a928c3239 --- /dev/null +++ b/sound/soc/codecs/rk817_codec.h @@ -0,0 +1,215 @@ @@ -1787655,7 +1786530,7 @@ index 000000000000..a928c323928b +#endif /* __RK817_CODEC_H__ */ diff --git a/sound/soc/codecs/rk_codec_digital.c b/sound/soc/codecs/rk_codec_digital.c new file mode 100755 -index 000000000000..ec91b72fa6de +index 000000000..ec91b72fa --- /dev/null +++ b/sound/soc/codecs/rk_codec_digital.c @@ -0,0 +1,1109 @@ @@ -1788770,7 +1787645,7 @@ index 000000000000..ec91b72fa6de +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/codecs/rk_codec_digital.h b/sound/soc/codecs/rk_codec_digital.h new file mode 100755 -index 000000000000..4bb409b8d8bc +index 000000000..4bb409b8d --- /dev/null +++ b/sound/soc/codecs/rk_codec_digital.h @@ -0,0 +1,319 @@ @@ -1789094,7 +1787969,7 @@ index 000000000000..4bb409b8d8bc + +#endif diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c -index a5674c227b3a..0db73e7a0511 100644 +index a5674c227..0db73e7a0 100644 --- a/sound/soc/codecs/rt5640.c +++ b/sound/soc/codecs/rt5640.c @@ -1335,7 +1335,9 @@ static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { @@ -1789109,7 +1787984,7 @@ index a5674c227b3a..0db73e7a0511 100644 {"IN2P", NULL, "LDO2"}, {"IN3P", NULL, "LDO2"}, diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c -index e59fdc81dbd4..2dd8d6d4f87d 100644 +index e59fdc81d..2dd8d6d4f 100644 --- a/sound/soc/codecs/rt5651.c +++ b/sound/soc/codecs/rt5651.c @@ -24,6 +24,9 @@ @@ -1789271,7 +1788146,7 @@ index e59fdc81dbd4..2dd8d6d4f87d 100644 &soc_component_dev_rt5651, rt5651_dai, ARRAY_SIZE(rt5651_dai)); diff --git a/sound/soc/codecs/rt5651.h b/sound/soc/codecs/rt5651.h -index 20c33a3ece37..05739b17813c 100644 +index 20c33a3ec..05739b178 100644 --- a/sound/soc/codecs/rt5651.h +++ b/sound/soc/codecs/rt5651.h @@ -2096,7 +2096,10 @@ struct rt5651_priv { @@ -1789286,7 +1788161,7 @@ index 20c33a3ece37..05739b17813c 100644 #endif /* __RT5651_H__ */ diff --git a/sound/soc/codecs/wm8974.c b/sound/soc/codecs/wm8974.c -index c86231dfcf4f..0827b7e65ac1 100644 +index 600e93d61..49a165515 100644 --- a/sound/soc/codecs/wm8974.c +++ b/sound/soc/codecs/wm8974.c @@ -7,6 +7,7 @@ @@ -1789363,7 +1788238,7 @@ index c86231dfcf4f..0827b7e65ac1 100644 &soc_component_dev_wm8974, &wm8974_dai, 1); diff --git a/sound/soc/rockchip/Kconfig b/sound/soc/rockchip/Kconfig -index d610b553ea3b..2925971bcd55 100644 +index d610b553e..2925971bc 100644 --- a/sound/soc/rockchip/Kconfig +++ b/sound/soc/rockchip/Kconfig @@ -16,6 +16,15 @@ config SND_SOC_ROCKCHIP_I2S @@ -1789434,7 +1788309,7 @@ index d610b553ea3b..2925971bcd55 100644 tristate "ASoC support multiple codecs for Rockchip RK3288 boards" depends on SND_SOC_ROCKCHIP && I2C && GPIOLIB && CLKDEV_LOOKUP diff --git a/sound/soc/rockchip/Makefile b/sound/soc/rockchip/Makefile -index 65e814d46006..ec17d97d0f27 100644 +index 65e814d46..ec17d97d0 100644 --- a/sound/soc/rockchip/Makefile +++ b/sound/soc/rockchip/Makefile @@ -1,20 +1,35 @@ @@ -1789477,7 +1788352,7 @@ index 65e814d46006..ec17d97d0f27 100644 obj-$(CONFIG_SND_SOC_RK3399_GRU_SOUND) += snd-soc-rk3399-gru-sound.o diff --git a/sound/soc/rockchip/rockchip_audio_pwm.c b/sound/soc/rockchip/rockchip_audio_pwm.c new file mode 100644 -index 000000000000..44ca66f1ed95 +index 000000000..44ca66f1e --- /dev/null +++ b/sound/soc/rockchip/rockchip_audio_pwm.c @@ -0,0 +1,372 @@ @@ -1789855,7 +1788730,7 @@ index 000000000000..44ca66f1ed95 +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/rockchip/rockchip_audio_pwm.h b/sound/soc/rockchip/rockchip_audio_pwm.h new file mode 100644 -index 000000000000..ad68660437c2 +index 000000000..ad6866043 --- /dev/null +++ b/sound/soc/rockchip/rockchip_audio_pwm.h @@ -0,0 +1,48 @@ @@ -1789909,7 +1788784,7 @@ index 000000000000..ad68660437c2 +#endif /* _ROCKCHIP_AUDIO_PWM_H */ diff --git a/sound/soc/rockchip/rockchip_cdndp.c b/sound/soc/rockchip/rockchip_cdndp.c new file mode 100644 -index 000000000000..aafeab5b41c7 +index 000000000..aafeab5b4 --- /dev/null +++ b/sound/soc/rockchip/rockchip_cdndp.c @@ -0,0 +1,166 @@ @@ -1790081,7 +1788956,7 @@ index 000000000000..aafeab5b41c7 +MODULE_DEVICE_TABLE(of, rockchip_sound_of_match); diff --git a/sound/soc/rockchip/rockchip_da7219.c b/sound/soc/rockchip/rockchip_da7219.c new file mode 100644 -index 000000000000..bf675defb884 +index 000000000..bf675defb --- /dev/null +++ b/sound/soc/rockchip/rockchip_da7219.c @@ -0,0 +1,235 @@ @@ -1790322,7 +1789197,7 @@ index 000000000000..bf675defb884 +MODULE_DEVICE_TABLE(of, rockchip_da7219_of_match); diff --git a/sound/soc/rockchip/rockchip_hdmi.c b/sound/soc/rockchip/rockchip_hdmi.c new file mode 100644 -index 000000000000..ed107d4d2399 +index 000000000..ed107d4d2 --- /dev/null +++ b/sound/soc/rockchip/rockchip_hdmi.c @@ -0,0 +1,279 @@ @@ -1790607,7 +1789482,7 @@ index 000000000000..ed107d4d2399 +MODULE_ALIAS("platform:" DRV_NAME); diff --git a/sound/soc/rockchip/rockchip_hdmi_analog.c b/sound/soc/rockchip/rockchip_hdmi_analog.c new file mode 100644 -index 000000000000..02a282e8f60a +index 000000000..02a282e8f --- /dev/null +++ b/sound/soc/rockchip/rockchip_hdmi_analog.c @@ -0,0 +1,222 @@ @@ -1790835,7 +1789710,7 @@ index 000000000000..02a282e8f60a +MODULE_ALIAS("platform:" DRV_NAME); diff --git a/sound/soc/rockchip/rockchip_hdmi_dp.c b/sound/soc/rockchip/rockchip_hdmi_dp.c new file mode 100644 -index 000000000000..4db9fb7b7dae +index 000000000..4db9fb7b7 --- /dev/null +++ b/sound/soc/rockchip/rockchip_hdmi_dp.c @@ -0,0 +1,193 @@ @@ -1791033,7 +1789908,7 @@ index 000000000000..4db9fb7b7dae +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" DRV_NAME); diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c -index 785baf98f9da..69336b77df70 100644 +index 785baf98f..69336b77d 100644 --- a/sound/soc/rockchip/rockchip_i2s.c +++ b/sound/soc/rockchip/rockchip_i2s.c @@ -15,11 +15,11 @@ @@ -1791424,7 +1790299,7 @@ index 785baf98f9da..69336b77df70 100644 dev_err(&pdev->dev, "Could not register PCM\n"); goto err_suspend; diff --git a/sound/soc/rockchip/rockchip_i2s.h b/sound/soc/rockchip/rockchip_i2s.h -index fcaae24e40af..251851bf4f2c 100644 +index fcaae24e4..251851bf4 100644 --- a/sound/soc/rockchip/rockchip_i2s.h +++ b/sound/soc/rockchip/rockchip_i2s.h @@ -88,15 +88,17 @@ @@ -1791451,7 +1790326,7 @@ index fcaae24e40af..251851bf4f2c 100644 #define I2S_CKR_MDIV_MASK (0xff << I2S_CKR_MDIV_SHIFT) diff --git a/sound/soc/rockchip/rockchip_i2s_tdm.c b/sound/soc/rockchip/rockchip_i2s_tdm.c new file mode 100644 -index 000000000000..81865dcdb3a4 +index 000000000..81865dcdb --- /dev/null +++ b/sound/soc/rockchip/rockchip_i2s_tdm.c @@ -0,0 +1,1952 @@ @@ -1793409,7 +1792284,7 @@ index 000000000000..81865dcdb3a4 +MODULE_DEVICE_TABLE(of, rockchip_i2s_tdm_match); diff --git a/sound/soc/rockchip/rockchip_i2s_tdm.h b/sound/soc/rockchip/rockchip_i2s_tdm.h new file mode 100644 -index 000000000000..fa41f81429f5 +index 000000000..fa41f8142 --- /dev/null +++ b/sound/soc/rockchip/rockchip_i2s_tdm.h @@ -0,0 +1,393 @@ @@ -1793808,7 +1792683,7 @@ index 000000000000..fa41f81429f5 +#endif /* _ROCKCHIP_I2S_TDM_H */ diff --git a/sound/soc/rockchip/rockchip_multi_dais.c b/sound/soc/rockchip/rockchip_multi_dais.c new file mode 100644 -index 000000000000..7a789c8c7e3a +index 000000000..7a789c8c7 --- /dev/null +++ b/sound/soc/rockchip/rockchip_multi_dais.c @@ -0,0 +1,541 @@ @@ -1794355,7 +1793230,7 @@ index 000000000000..7a789c8c7e3a +MODULE_DEVICE_TABLE(of, rockchip_mdais_match); diff --git a/sound/soc/rockchip/rockchip_multi_dais.h b/sound/soc/rockchip/rockchip_multi_dais.h new file mode 100644 -index 000000000000..5d9a076afb78 +index 000000000..5d9a076af --- /dev/null +++ b/sound/soc/rockchip/rockchip_multi_dais.h @@ -0,0 +1,33 @@ @@ -1794394,7 +1793269,7 @@ index 000000000000..5d9a076afb78 +#endif diff --git a/sound/soc/rockchip/rockchip_multi_dais_pcm.c b/sound/soc/rockchip/rockchip_multi_dais_pcm.c new file mode 100644 -index 000000000000..38f2220eeec1 +index 000000000..38f2220ee --- /dev/null +++ b/sound/soc/rockchip/rockchip_multi_dais_pcm.c @@ -0,0 +1,704 @@ @@ -1795104,7 +1793979,7 @@ index 000000000000..38f2220eeec1 +MODULE_LICENSE("GPL"); diff --git a/sound/soc/rockchip/rockchip_multicodecs.c b/sound/soc/rockchip/rockchip_multicodecs.c new file mode 100644 -index 000000000000..9486a2e5db2d +index 000000000..9486a2e5d --- /dev/null +++ b/sound/soc/rockchip/rockchip_multicodecs.c @@ -0,0 +1,809 @@ @@ -1795918,7 +1794793,7 @@ index 000000000000..9486a2e5db2d +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" DRV_NAME); diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c -index 94cfbc90390b..d2e69dd7651b 100644 +index 94cfbc903..d2e69dd76 100644 --- a/sound/soc/rockchip/rockchip_pdm.c +++ b/sound/soc/rockchip/rockchip_pdm.c @@ -19,11 +19,15 @@ @@ -1796159,7 +1795034,7 @@ index 94cfbc90390b..d2e69dd7651b 100644 if (ret) { dev_err(&pdev->dev, "could not register pcm: %d\n", ret); diff --git a/sound/soc/rockchip/rockchip_pdm.h b/sound/soc/rockchip/rockchip_pdm.h -index 8e5bbafef7bb..cab977272ee6 100644 +index 8e5bbafef..cab977272 100644 --- a/sound/soc/rockchip/rockchip_pdm.h +++ b/sound/soc/rockchip/rockchip_pdm.h @@ -41,6 +41,8 @@ @@ -1796191,7 +1795066,7 @@ index 8e5bbafef7bb..cab977272ee6 100644 #define PDM_HPF_LE BIT(3) diff --git a/sound/soc/rockchip/rockchip_rt5651.c b/sound/soc/rockchip/rockchip_rt5651.c new file mode 100644 -index 000000000000..4dc91c2a1e75 +index 000000000..4dc91c2a1 --- /dev/null +++ b/sound/soc/rockchip/rockchip_rt5651.c @@ -0,0 +1,245 @@ @@ -1796441,7 +1795316,7 @@ index 000000000000..4dc91c2a1e75 +MODULE_ALIAS("platform:" DRV_NAME); +MODULE_DEVICE_TABLE(of, rockchip_sound_of_match); diff --git a/sound/soc/rockchip/rockchip_spdif.c b/sound/soc/rockchip/rockchip_spdif.c -index ccddcd9926af..39d8d8a4a0a0 100644 +index ccddcd992..39d8d8a4a 100644 --- a/sound/soc/rockchip/rockchip_spdif.c +++ b/sound/soc/rockchip/rockchip_spdif.c @@ -41,7 +41,7 @@ struct rk_spdif_dev { @@ -1796574,7 +1795449,7 @@ index ccddcd9926af..39d8d8a4a0a0 100644 diff --git a/sound/soc/rockchip/rockchip_spdifrx.c b/sound/soc/rockchip/rockchip_spdifrx.c new file mode 100644 -index 000000000000..0e457232116d +index 000000000..0e4572321 --- /dev/null +++ b/sound/soc/rockchip/rockchip_spdifrx.c @@ -0,0 +1,415 @@ @@ -1796995,7 +1795870,7 @@ index 000000000000..0e457232116d +MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/rockchip/rockchip_spdifrx.h b/sound/soc/rockchip/rockchip_spdifrx.h new file mode 100644 -index 000000000000..e75b2d5afd04 +index 000000000..e75b2d5af --- /dev/null +++ b/sound/soc/rockchip/rockchip_spdifrx.h @@ -0,0 +1,113 @@ @@ -1797114,7 +1795989,7 @@ index 000000000000..e75b2d5afd04 +#endif /* _ROCKCHIP_SPDIFRX_H */ diff --git a/sound/soc/rockchip/rockchip_vad.c b/sound/soc/rockchip/rockchip_vad.c new file mode 100644 -index 000000000000..d69278aa5317 +index 000000000..d69278aa5 --- /dev/null +++ b/sound/soc/rockchip/rockchip_vad.c @@ -0,0 +1,1316 @@ @@ -1798436,7 +1797311,7 @@ index 000000000000..d69278aa5317 +MODULE_DEVICE_TABLE(of, rockchip_vad_match); diff --git a/sound/soc/rockchip/rockchip_vad.h b/sound/soc/rockchip/rockchip_vad.h new file mode 100644 -index 000000000000..1121e71490e0 +index 000000000..1121e7149 --- /dev/null +++ b/sound/soc/rockchip/rockchip_vad.h @@ -0,0 +1,231 @@ @@ -1798673,7 +1797548,7 @@ index 000000000000..1121e71490e0 +#endif diff --git a/sound/soc/rockchip/vad_preprocess.h b/sound/soc/rockchip/vad_preprocess.h new file mode 100644 -index 000000000000..85e4d1022984 +index 000000000..85e4d1022 --- /dev/null +++ b/sound/soc/rockchip/vad_preprocess.h @@ -0,0 +1,29 @@ @@ -1798708,7 +1797583,7 @@ index 000000000000..85e4d1022984 +#endif diff --git a/sound/soc/rockchip/vad_preprocess_arm.S b/sound/soc/rockchip/vad_preprocess_arm.S new file mode 100644 -index 000000000000..a0d3eabf2ba0 +index 000000000..a0d3eabf2 --- /dev/null +++ b/sound/soc/rockchip/vad_preprocess_arm.S @@ -0,0 +1,348 @@ @@ -1799062,7 +1797937,7 @@ index 000000000000..a0d3eabf2ba0 + .section .note.GNU-stack,"",%progbits diff --git a/sound/soc/rockchip/vad_preprocess_arm64.S b/sound/soc/rockchip/vad_preprocess_arm64.S new file mode 100644 -index 000000000000..823757c1718f +index 000000000..823757c17 --- /dev/null +++ b/sound/soc/rockchip/vad_preprocess_arm64.S @@ -0,0 +1,273 @@ @@ -1799341,7 +1798216,7 @@ index 000000000000..823757c1718f + .section .note.GNU-stack,"",@progbits diff --git a/sound/soc/rockchip/vad_preprocess_thumb.S b/sound/soc/rockchip/vad_preprocess_thumb.S new file mode 100644 -index 000000000000..a105634e60d0 +index 000000000..a105634e6 --- /dev/null +++ b/sound/soc/rockchip/vad_preprocess_thumb.S @@ -0,0 +1,360 @@ @@ -1799706,7 +1798581,7 @@ index 000000000000..a105634e60d0 + .ident "GCC: (GNU) 4.9 20150123 (prerelease)" + .section .note.GNU-stack,"",%progbits diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c -index 752422147fb3..2db51d89fafd 100644 +index 752422147..2db51d89f 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1524,6 +1524,9 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip) @@ -1799730,7 +1798605,7 @@ index 752422147fb3..2db51d89fafd 100644 /* Optoplay sets the sample rate attribute although * it seems not supporting it in fact. diff --git a/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c b/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c -index aaca1f44e788..8643beaf25a1 100644 +index aaca1f44e..8643beaf2 100644 --- a/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c +++ b/tools/usb/ffs-aio-example/multibuff/device_app/aio_multibuff.c @@ -57,16 +57,30 @@ static const struct { @@ -1799825,7 +1798700,7 @@ index aaca1f44e788..8643beaf25a1 100644 #define STR_INTERFACE "AIO Test" diff --git a/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c b/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c -index 1f44a29818bf..51574379ff91 100644 +index 1f44a2981..51574379f 100644 --- a/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c +++ b/tools/usb/ffs-aio-example/simple/device_app/aio_simple.c @@ -55,16 +55,30 @@ static const struct { @@ -1799919,62 +1798794,3 @@ index 1f44a29818bf..51574379ff91 100644 }; #define STR_INTERFACE "AIO Test" -diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c -index 89a8bb8e2..70cd26e8b 100644 ---- a/kernel/trace/trace.c -+++ b/kernel/trace/trace.c -@@ -9401,7 +9401,7 @@ static struct notifier_block trace_module_nb = { - }; - #endif /* CONFIG_MODULES */ - --static __init int tracer_init_tracefs(void) -+static int tracefs_init(void * data) - { - int ret; - -@@ -9451,6 +9451,17 @@ static __init int tracer_init_tracefs(void) - return 0; - } - -+static __init int tracer_init_tracefs(void) -+{ -+ struct task_struct *thread; -+ -+ thread = kthread_run(tracefs_init, NULL, "tracefs_init"); -+ if (IS_ERR(thread)) -+ return PTR_ERR(thread); -+ -+ return 0; -+} -+ - static int trace_panic_handler(struct notifier_block *this, - unsigned long event, void *unused) - { -diff --git a/drivers/char/mem.c b/drivers/char/mem.c -index 7d483c332..9b839d619 100644 ---- a/drivers/char/mem.c -+++ b/drivers/char/mem.c -@@ -1066,6 +1066,12 @@ static int devmem_init_inode(void) - return 0; - } - -+static int do_wait_for_random_bytes(void * data) -+{ -+ wait_for_random_bytes(); -+ return 0; -+} -+ - static int __init chr_dev_init(void) - { - int minor; -@@ -1094,6 +1100,11 @@ static int __init chr_dev_init(void) - NULL, devlist[minor].name); - } - -+ struct task_struct *thread; -+ thread = kthread_run(do_wait_for_random_bytes,NULL,"wait_for_random_bytes_thread"); -+ if (IS_ERR(thread)){ -+ printk("wait_for_random_bytes_thread thread create fail"); -+ } - return tty_init(); - } -- Gitee