From 2fd4545be4e3b7bac3f5990713839fc10981c1bd Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Wed, 2 Jan 2019 18:21:42 +0100 Subject: [PATCH] BL typechecking: simplifying promote (subclassing relation), implement LUB as raw types intersection, better support for raw classier types --- .../jetbrains.mps.baseLanguageExt.types.mps | 4448 +++++++++-------- ...s.mps.baseLanguageExt.test.types@tests.mps | 3495 +++++++------ 2 files changed, 4193 insertions(+), 3750 deletions(-) diff --git a/samples/mpscore/languages/jetbrains.mps.baseLanguageExt/models/jetbrains.mps.baseLanguageExt.types.mps b/samples/mpscore/languages/jetbrains.mps.baseLanguageExt/models/jetbrains.mps.baseLanguageExt.types.mps index 842044ba..b2edf1e5 100644 --- a/samples/mpscore/languages/jetbrains.mps.baseLanguageExt/models/jetbrains.mps.baseLanguageExt.types.mps +++ b/samples/mpscore/languages/jetbrains.mps.baseLanguageExt/models/jetbrains.mps.baseLanguageExt.types.mps @@ -4,7 +4,7 @@ - + @@ -12,16 +12,12 @@ - - - - @@ -32,18 +28,10 @@ - - - - - - - - @@ -89,16 +77,8 @@ - - - - - - - - - - + + @@ -125,15 +105,10 @@ - - - - - @@ -168,13 +143,7 @@ - - - - - - - + @@ -198,9 +167,7 @@ - - - + @@ -252,7 +219,6 @@ - @@ -311,9 +277,6 @@ - - - @@ -332,19 +295,11 @@ - - - - - - - - @@ -385,6 +340,9 @@ + + + @@ -535,6 +493,7 @@ + @@ -574,7 +533,6 @@ - @@ -2640,43 +2598,49 @@ - + - - - - - + + + + - - + + + + + + + - - - - - + + + + + - - - + + + + + - + - - + + - - - - + + + + - - + + @@ -2685,469 +2649,203 @@ - - - - - + + + + + - + - - - - - - - + + + + + + + - + - + - + - - - - - - + + + + + + + - - - + - + - - - - - - + + + + + + - - + + - - - - - - - + - - - - - - - - + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - + + + + - - - - - + + + + + + + + - - - - - - - - - - - - - - - @@ -3155,80 +2853,12 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5033,6 +4663,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9464,7 +9156,7 @@ - + @@ -9480,6 +9172,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10837,19 +10557,11 @@ - - - - - - - - - - - - - + + + + + @@ -10867,40 +10579,146 @@ - - - - - + + - - - - + + + + - - + + - - - - + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10908,87 +10726,210 @@ - - - + + + - - - + + + - - - - - - + + + - + - - - - - - - - - - - - - + + + + + + + + - - - + + + - + - - - - - + + - - - - - - - + + + + + + + - - + + - - - - - + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11150,6 +11091,20 @@ + + + + + + + + + + + + + + @@ -11194,20 +11149,6 @@ - - - - - - - - - - - - - - @@ -11263,12 +11204,13 @@ - - - + + + + - + @@ -11330,78 +11272,14 @@ - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -11894,10 +11772,10 @@ - + - + @@ -11909,10 +11787,10 @@ - + - + @@ -11924,13 +11802,13 @@ - + - + - + @@ -11939,30 +11817,39 @@ - + - + - + - + - + - + + + + + + + + + + @@ -11973,6 +11860,14 @@ + + + + + + + + @@ -11981,15 +11876,23 @@ - + + + + + + + + + - + @@ -12007,106 +11910,63 @@ - + - + - - + + - - - - - - - - - - - - - - - - + + + + - + - + - - - - - - - - - - - + + + - - - - + + + + - - - - - - - + + + + + + + + + - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -12118,7 +11978,7 @@ - + @@ -12128,10 +11988,10 @@ - + - + @@ -12140,21 +12000,10 @@ - + - - - - - - - - - - - - + @@ -12169,7 +12018,7 @@ - + @@ -12177,7 +12026,7 @@ - + @@ -12196,15 +12045,15 @@ - + - + - + @@ -12213,6 +12062,15 @@ + + + + + + + + + @@ -12223,17 +12081,33 @@ + + + + + + + + - + + + + + + + + + - + @@ -12245,14 +12119,14 @@ - + - + @@ -12269,112 +12143,68 @@ - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + - - + - + @@ -12390,86 +12220,20 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -12482,25 +12246,13 @@ - - - - - - - - - - - - - - - - + + + + @@ -12511,25 +12263,19 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + @@ -12538,7 +12284,7 @@ - + @@ -12563,61 +12309,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -12629,9 +12321,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12646,7 +12551,7 @@ - + @@ -12692,13 +12597,8 @@ - - - - - - - + + @@ -12741,46 +12641,34 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - + @@ -12790,69 +12678,37 @@ - + - - - - - - - + + - + - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - + + + - - - - - - - - + + @@ -12860,39 +12716,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -12901,10 +12724,10 @@ - + - - + + @@ -12943,8 +12766,8 @@ - - + + @@ -12970,8 +12793,8 @@ - - + + @@ -12989,61 +12812,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -13052,13 +12827,7 @@ - - - - - - - + @@ -13067,7 +12836,7 @@ - + @@ -13075,35 +12844,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -13118,10 +12859,18 @@ - + - - + + + + + + + + + + @@ -13134,14 +12883,14 @@ - + - + @@ -13159,7 +12908,7 @@ - + @@ -13244,16 +12993,6 @@ - - - - - - - - - - @@ -13563,15 +13302,20 @@ - + - + + + + + + @@ -13580,7 +13324,7 @@ - + @@ -13591,7 +13335,7 @@ - + @@ -13625,11 +13369,16 @@ + + + + + - + - + @@ -13638,9 +13387,9 @@ - + - + @@ -13648,112 +13397,26 @@ - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -13761,23 +13424,31 @@ - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + @@ -14393,6 +14064,342 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -16534,19 +16541,42 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -17720,6 +17750,16 @@ + + + + + + + + + + @@ -20183,6 +20223,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -20260,135 +20576,54 @@ - + - - - - - - - + - - - + + + - - + + - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - @@ -20401,19 +20636,16 @@ - - - - + - - + + - - + + @@ -20422,21 +20654,21 @@ - - - - - - + + + + + + + + + + + + - - - - - - @@ -20454,40 +20686,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + @@ -20557,7 +20762,7 @@ - + @@ -20634,42 +20839,25 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + - + @@ -20680,11 +20868,11 @@ - + - + @@ -20694,10 +20882,10 @@ - + - + @@ -20715,7 +20903,7 @@ - + @@ -20774,7 +20962,7 @@ - + @@ -20811,7 +20999,7 @@ - + @@ -20961,7 +21149,7 @@ - + @@ -21004,35 +21192,22 @@ - - - - - - - - - - - - - - - - - - - - + - + + + + + + + @@ -21192,38 +21367,31 @@ - - - - + + + + - - - - - - - - - - - + + + + - - + + - + - + @@ -21293,228 +21461,108 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - + - - - - - - - + - - + + - - + + - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - @@ -21527,19 +21575,16 @@ - - - - + - - - + + + - - + + @@ -21555,56 +21600,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - + + + - - - - - + + + + + + + + + @@ -21750,41 +21778,24 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + - + @@ -21798,7 +21809,7 @@ - + @@ -21818,7 +21829,7 @@ - + @@ -21998,7 +22009,7 @@ - + @@ -22018,7 +22029,7 @@ - + @@ -22391,7 +22402,7 @@ - + @@ -22653,25 +22664,6 @@ - - - - - - - - - - - - - - - - - - - @@ -22712,177 +22704,9 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -24813,6 +24637,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -25555,13 +25455,8 @@ - - - - - - - + + @@ -25807,32 +25702,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -27523,7 +27392,6 @@ - @@ -29357,5 +29225,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/mpscore/solutions/jetbrains.mps.baseLanguageExt.test/models/jetbrains.mps.baseLanguageExt.test.types@tests.mps b/samples/mpscore/solutions/jetbrains.mps.baseLanguageExt.test/models/jetbrains.mps.baseLanguageExt.test.types@tests.mps index cc434046..747189fc 100644 --- a/samples/mpscore/solutions/jetbrains.mps.baseLanguageExt.test/models/jetbrains.mps.baseLanguageExt.test.types@tests.mps +++ b/samples/mpscore/solutions/jetbrains.mps.baseLanguageExt.test/models/jetbrains.mps.baseLanguageExt.test.types@tests.mps @@ -47,6 +47,14 @@ + + + + + + + + @@ -72,9 +80,6 @@ - - - @@ -85,9 +90,6 @@ - - - @@ -102,17 +104,11 @@ - - - - - - - + @@ -123,14 +119,14 @@ - - - + + + @@ -140,6 +136,7 @@ + @@ -158,13 +155,13 @@ - - - + + + @@ -193,9 +190,7 @@ - - - + @@ -219,13 +214,15 @@ + + + - @@ -235,7 +232,6 @@ - @@ -1106,61 +1102,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + @@ -1281,74 +1227,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1378,31 +1256,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -1539,74 +1431,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1636,31 +1460,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -1782,74 +1620,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1880,31 +1650,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -2055,74 +1839,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2152,31 +1868,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -2468,74 +2198,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2579,31 +2241,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -2611,26 +2287,10 @@ - + - - - - - - - - - - - - - - - - @@ -2641,35 +2301,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2715,14 +2346,6 @@ - - - - - - - - @@ -2784,14 +2407,6 @@ - - - - - - - - @@ -2809,57 +2424,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2974,74 +2538,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3052,11 +2548,31 @@ - - + + - - + + + + + + + + + + + + + + + + + + + + + + @@ -3065,31 +2581,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -3097,26 +2627,10 @@ - + - - - - - - - - - - - - - - - - @@ -3127,35 +2641,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3201,14 +2686,6 @@ - - - - - - - - @@ -3256,14 +2733,6 @@ - - - - - - - - @@ -3325,14 +2794,6 @@ - - - - - - - - @@ -3350,43 +2811,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3432,14 +2856,6 @@ - - - - - - - - @@ -3501,14 +2917,6 @@ - - - - - - - - @@ -3517,74 +2925,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3595,11 +2935,31 @@ - - + + - - + + + + + + + + + + + + + + + + + + + + + + @@ -3608,31 +2968,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -3640,7 +3014,7 @@ - + @@ -3670,35 +3044,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3744,14 +3089,6 @@ - - - - - - - - @@ -3813,14 +3150,6 @@ - - - - - - - - @@ -3838,19 +3167,6 @@ - - - - - - - - - - - - - @@ -3896,14 +3212,6 @@ - - - - - - - - @@ -3965,14 +3273,6 @@ - - - - - - - - @@ -3981,74 +3281,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4059,11 +3291,31 @@ - - + + - - + + + + + + + + + + + + + + + + + + + + + + @@ -4072,31 +3324,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -4118,35 +3384,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4192,14 +3429,6 @@ - - - - - - - - @@ -4261,14 +3490,6 @@ - - - - - - - - @@ -4331,14 +3552,6 @@ - - - - - - - - @@ -4386,14 +3599,6 @@ - - - - - - - - @@ -4449,74 +3654,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4560,31 +3697,45 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -4606,35 +3757,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4680,14 +3802,6 @@ - - - - - - - - @@ -4749,14 +3863,6 @@ - - - - - - - - @@ -4813,74 +3919,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4910,31 +3948,1177 @@ - - - - - - + + + + + + + + + - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4944,109 +5128,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + @@ -5249,74 +5353,29 @@ - - - - - - - - + + + + + - - - - - + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -5382,31 +5441,19 @@ - - - - - - - - - - + + + + + - - - - - - - - - - - + + + + - - + + @@ -5416,51 +5463,275 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +