├── .flowconfig ├── .gitignore ├── LICENSE ├── README.md ├── examples ├── README.md ├── bitmapLayer.json ├── borderedShape.json ├── exampleAB.json ├── roundRect.json ├── roundRectWithShadow.json ├── textLayer.json ├── textLayerWithAnotherFill.json └── wrappingText.json ├── package.json ├── testCases ├── testShapeGroup.js ├── testSymbolInstance.js ├── testSymbolMaster.js └── testTextLayer.js └── types.js /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | #.*/node_modules/babel.* 3 | 4 | [include] 5 | 6 | [libs] 7 | 8 | [options] 9 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-0]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\) 10 | 11 | esproposal.class_static_fields=enable 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.log* 3 | node_modules 4 | lib 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Andrew Pouliot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # sketchapp-json-flow-types 2 | 3 | Flow types describing Sketch v43's JSON internal structures. 4 | 5 | This repository is now archived, both because it is out of date and also because the larger JS community has chosen Typescript over Flow. 6 | -------------------------------------------------------------------------------- /examples/README.md: -------------------------------------------------------------------------------- 1 | # Generating examples 2 | 3 | Select an object you would like to see as JSON, and run this via the `Custom Plugin` menu item in Sketch 43 beta: 4 | 5 | log(asJSON(context.selection[0])); 6 | 7 | function asJSON(o) { 8 | const imm = o.immutableModelObject(); 9 | const string = [MSJSONDataArchiver archiveStringWithRootObject:imm error:nil]; 10 | return string; 11 | } 12 | -------------------------------------------------------------------------------- /examples/bitmapLayer.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "bitmap", 3 | "do_objectID": "280555B9-0196-44F4-98F1-49CB7FE7E88F", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": true, 14 | "height": 587, 15 | "width": 479, 16 | "x": 570, 17 | "y": 279 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 2, 24 | "name": "Screen Shot 2017-03-03 at 12.32.39 PM", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "endDecorationType": 0, 32 | "miterLimit": 10, 33 | "startDecorationType": 0 34 | }, 35 | "clippingMask": "{{0, 0}, {1, 1}}", 36 | "fillReplacesImage": false, 37 | "image": { 38 | "_class": "MSJSONOriginalDataReference", 39 | "_ref_class": "MSImageData", 40 | "_ref": "images/4ad1253315ee09ce2744849b6f673e911ce34313", 41 | "data": { 42 | "_data": "iVBORw0KGgoAAAANSUhEUgAAA74AAASWCAYAAAANJnDUAAAAAXNSR0IArs4c6QAAQABJREFUeAHs3Qm8ftW8P/DVSKWiDCXcJpK45jJ1UwqF+BsSZY7MQv0pclPXkClE6CZTMktRqEj6X3GpyHAlzYarlKikbnr++7Pu3ec+53Se5/c7v7N/5+xzfu/1ep3zTHuvvfZ77b2f/d1r7fWsNGhSkQgQIECAAAECBAgQIECAwCIVWHmRrpfVIkCAAAECBAgQIECAAAECVUDga0MgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBd1NVr5QgQIECAAAECBAgQIEBA4GsbIECAAAECBAgQIECAAIFFLSDwXdTVa+UIECBAgAABAgQIECBAQOBrGyBAgAABAgQIECBAgACBRS0g8F3U1WvlCBAgQIAAAQIECBAgQEDgaxsgQIAAAQIECBAgQIAAgUUtIPBdDtU7GAzKf/3Xfy2HnGVJYLJAn7a1G2+8cXLhVoBXWefUQZ/T3//+95K/FSWtaOs703pd1v306quvnumi5nT6ZV2vOS2khd1CIPvrtddee4v35/MN29J86ls2geUrIPBdRt9tttmmrL766vVvpZVWKqutttrE62OPPbY84AEPmDbnM888s9zznvec9rPp3pzp9NPlsdDf23///csBBxzQm9X41a9+VU444YQZlef0008v22677YzmWZrlfP/73x+5rc1oYbOc+JJLLimbbbbZLHOZ+9lPOumk8otf/GKZF7zpppuWX/7yl8s8/6gZ73KXu5Sf/vSnoz6e0fv77rtvectb3jKjeWY6cYL/ww8/vBcX/N7znveU/fbbb6ar0On0S7NdLc/j2qjtZ1n20yuuuKI8+MEPLs997nM7Neoys6Vdr6Wply7LNd95Le1+OXW6UdtP1+uT79F8b3z+85/vOutlzm9pt6VRC5gru1HLn+79pTmXmG4+7xFYjAIC32Ws1R/84AclVwXzt8EGG5QTTzxx4nVOhkelBMSnnnrqqI9v8f5Mp79FBt7oXOCss84qH/rQhzrPd2qGc7WcqctdkV4fddRRJRcP+pa+973vlS222KJvxRpZnptvvrm88pWvLDfccMPIaVakD+Z7u+py+8lxKN9zX/nKVxZ8Fc53vcw14NLul1On63L7GbfO2aZe+MIXluc///njJltQn82V3UxQnEvMRMu0i11A4LucajhXUA866KCy8cYblwc96EHlZz/7WV3S+eefX/7v//2/9fkf//jHsvfee5cNN9ywPPCBDywJpqemmU6f+b/+9a+XRz7ykeVud7tb2XPPPUuWk5SWkCOOOKI87WlPKxtttFF5+tOfXv72t7/Vz6b+O/LII8u97nWv+vf+97+/fnzOOeeUtHT/7ne/q68/8YlPlGc/+9n1ed57xjOeUfN99KMfXb71rW/V988999z6/tve9ray+eabl6c+9anlJz/5Sdluu+3KP/zDP5R3v/vddbr/9//+X9lnn33Ka1/72nLXu9617LDDDuXiiy+unw3/u+6668pee+1Vp9l+++3Lv//7vw9/PPH8iU98YjnuuONqS0VazsbNN8orXbBe97rXlTve8Y5l6623Lh//+Mdr694b3vCGki+3V7ziFRPLG35y2GGHlXvf+95lk002Ke9617uGP6rP//rXv5YnP/nJJT0DkmIUj6x3WlX+8pe/TLucXFxJb4FMlyDj+uuvr/OP2tby4T//8z/Xee53v/uVt771rXX6/Mv2ccwxx5S8f4973KN86Utfqp8tbT1k4q997Wt1205rUKzblJOoN77xjeXOd75z3R7+5V/+ZaI78G9/+9vymMc8pqy33nrVINtC0o477lguuuiiNov6OtMu7faTGadzzPujtvu0UJ522mnl4IMPLscff3wmHZm++93vlp133rnc4Q53KLvttlsZ7vZ5yimn1O0s+/rwBZGTTz65bgfrrrtuecpTnlL+8Ic/lP/8z/+s21Lble6lL31pedOb3lSXm+3iYQ97WG01Tf1edtlldZ2e97znlUMPPbTkglqOE61ZnLMtpv6yL2c//ehHPzrtOqTV7v/8n/9TjzXPfOYzJwLU3//+9+Xxj398SRmzLXznO9+p8z/nOc8p3/zmN+vzL3/5y+URj3hEyfKSXvWqV93i4l3yTkqvhqzHqHzrREP/lnY/Td2Ocsj2n9bTOOy6667VrV3EqP0+rfR77LFHbaXOvjA1jTqeTZ1uuu1ieLvKPp79I/5tyvFrahA5qpyZJ8enXABNHQwfc7NN/Ou//mubbXn7299eP88b7faT56P203w23XE+77cp++RrXvOaum++4AUvqMelqW7TbeeZP/vdO9/5zrq/pFXvHe94R/nMZz5TL+jc9773LT/60Y/axUx6HHU8njRR82Lcek133Buul3Z/n266qcv5wAc+UPKX9c6xLGmU26jj6nTb26jj1bjzglHLzbEp21TONfK9k/ImTd0vR23X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lBUBAgQIECBAgAABAgQI9E9A4Nu/OlEiAgQIECBAgAABAgQIEOhQQODbIaasCBAgQIAAAQIECBAgQKB/AgLf/tWJEhEgQIAAAQIECBAgQIBAhwIC3w4xZUWAAAECBAgQIECAAAEC/RMQ+PavTpSIAAECBAgQIECAAAECBDoUEPh2iCkrAgQIECBAgAABAgQIEOifgMC3f3WiRAQIECBAgAABAgQIECDQoYDAt0NMWREgQIAAAQIECBAgQIBA/wQEvv2rEyUiQIAAAQIECBAgQIAAgQ4FBL4dYsqKAAECBAgQIECAAAECBPonIPDtX50oEQECBAgQIECAAAECBAh0KCDw7RBTVgQIECBAgAABAgQIECDQPwGBb//qRIkIECBAgAABAgQIECBAoEMBgW+HmLIiQIAAAQIECBAgQIAAgf4JCHz7VydKRIAAAQIECBAgQIAAAQIdCgh8O8SUFQECBAgQIECAAAECBAj0T0Dg2786USICBAgQIECAAAECBAgQ6FBA4NshpqwIECBAgAABAgQIECBAoH8CAt/+1YkSESBAgAABAgQIECBAgECHAgLfDjFlRYAAAQIECBAgQIAAAQL9ExD49q9OlIgAAQIECBAgQIAAAQIEOhQQ+HaIKSsCBAgQIECAAAECBAgQ6J+AwLd/daJEBAgQIECAAAECBAgQINChgMC3Q0xZESBAgAABAgQIECBAgED/BAS+/asTJSJAgAABAgQIECBAgACBDgUEvh1iyooAAQIECBAgQIAAAQIE+icg8O1fnSgRAQIECBAgQIAAAQIECHQoIPDtEFNWBAgQIECAAAECBAgQINA/AYFv/+pEiQgQIECAAAECBAgQIECgQwGBb4eYsiJAgAABAgQIECBAgACB/gkIfPtXJ0pEgAABAgQIECBAgAABAh0KCHw7xJQVAQIECBAgQIAAAQIECPRPQODbvzpRIgIECBAgQIAAAQIECBDoUEDg2yGmrAgQIECAAAECBAgQIECgfwIC3/7ViRIRIECAAAECBAgQIECAQIcCAt8OMWVFgAABAgQIECBAgAABAv0TEPj2r06UiAABAgQIECBAgAABAgQ6FBD4dogpKwIECBAgQIAAAQIECBDon4DAt391okQECBAgQIAAAQIECBAg0KGAwLdDTFkRIECAAAECBAgQIECAQP8EBL79qxMlIkCAAAECBAgQIECAAIEOBQS+HWLKigABAgQIECBAgAABAgT6JyDw7V+dKBEBAgQIECBAgAABAgQIdCgg8O0QU1YECBAgQIAAAQIECBAg0D8BgW//6kSJCBAgQIAAAQIECBAgQKBDAYFvh5iyIkCAAAECBAgQIECAAIH+CQh8+1cnSkSAAAECBAgQIECAAAECHQoIfDvElBUBAgQIECBAgAABAgQI9E9A4Nu/OlEiAgQIECBAgAABAgQIEOhQQODbIaasCBAgQIAAAQIECBAgQKB/AgLf/tWJEhEgQIAAAQIECBAgQIBAhwIC3w4xZUWAAAECBAgQIECAAAEC/RMQ+PavTpSIAAECBAgQIECAAAECBDoUEPh2iCkrAgQIECBAgAABAgQIEOifgMC3f3WiRAQIECBAgAABAgQIECDQoYDAt0NMWREgQIAAAQIECBAgQIBA/wQEvv2rEyUiQIAAAQIECBAgQIAAgQ4FBL4dYsqKAAECBAgQIECAAAECBPonIPDtX50oEQECBAgQIECAAAECBAh0KCDw7RBTVgQIECBAgAABAgQIECDQPwGBb//qRIkIECBAgAABAgQIECBAoEMBgW+HmLIiQIAAAQIECBAgQIAAgf4JCHz7VydKRIAAAQIECBAgQIAAAQIdCgh8O8SUFQECBAgQIECAAAECBAj0T0Dg2786USICBAgQIECAAAECBAgQ6FBA4NshpqwIECBAgAABAgQIECBAoH8CAt/+1YkSESBAgAABAgQIECBAgECHAgLfDjFlRYAAAQIECBAgQIAAAQL9ExD49q9OlIgAAQIECBAgQIAAAQIEOhQQ+HaIKSsCBAgQIECAAAECBAgQ6J+AwLd/daJEBAgQIECAAAECBAgQINChgMC3Q0xZESBAgAABAgQIECBAgED/BAS+/asTJSJAgAABAgQIECBAgACBDgUEvh1iyooAAQIECBAgQIAAAQIE+icg8O1fnSgRAQIECBAgQIAAAQIECHQoIPDtEFNWBAgQIECAAAECBAgQINA/AYFv/+pEiQgQIECAAAECBAgQIECgQwGBb4eYsiJAgAABAgQIECBAgACB/gkIfPtXJ0pEgAABAgQIECBAgAABAh0KCHw7xJQVAQIECBAgQIAAAQIECPRPQODbvzpRIgIECBAgQIAAAQIECBDoUEDg2yGmrAgQIECAAAECBAgQIECgfwIC3/7ViRIRIECAAAECBAgQIECAQIcCAt8OMWVFgAABAgQIECBAgAABAv0TEPj2r06UiAABAgQIECBAgAABAgQ6FBD4dogpKwIECBAgQIAAAQIECBDon4DAt391okQECBAgQIAAAQIECBAg0KGAwLdDTFkRIECAAAECBAgQIECAQP8EBL79qxMlIkCAAAECBAgQIECAAIEOBQS+HWLKigABAgQIECBAgAABAgT6JyDw7V+dKBEBAgQIECBAgAABAgQIdCgg8O0QU1YECBAgQIAAAQIECBAg0D8BgW//6kSJCBAgQIAAAQIECBAgQKBDAYFvh5iyIkCAAAECBAgQIECAAIH+CQh8+1cnSkSAAAECBAgQIECAAAECHQoIfDvElBUBAgQIECBAgAABAgQI9E9A4Nu/OlEiAgQIECBAgAABAgQIEOhQQODbIaasCBAgQIAAAQIECBAgQKB/AgLf/tWJEhEgQIAAAQIECBAgQIBAhwIC3w4xZUWAAAECBAgQIECAAAEC/RMQ+PavTpSIAAECBAgQIECAAAECBDoUEPh2iCkrAgQIECBAgAABAgQIEOifgMC3f3WiRAQIECBAgAABAgQIECDQoYDAt0NMWREgQIAAAQIECBAgQIBA/wQEvv2rEyUiQIAAAQIECBAgQIAAgQ4FBL4dYsqKAAECBAgQIECAAAECBPonIPDtX50oEQECBAgQIECAAAECBAh0KCDw7RBTVgQIECBAgAABAgQIECDQPwGBb//qRIkIECBAgAABAgQIECBAoEMBgW+HmLIiQIAAAQIECBAgQIAAgf4JCHz7VydKRIAAAQIECBAgQIAAAQIdCgh8O8SUFQECBAgQIECAAAECBAj0T0Dg2786USICBAgQIECAAAECBAgQ6FBA4NshpqwIECBAgAABAgQIECBAoH8CAt/+1YkSESBAgAABAgQIECBAgECHAgLfDjFlRYAAAQIECBAgQIAAAQL9ExD49q9OlIgAAQIECBAgQIAAAQIEOhQQ+HaIKSsCBAgQIECAAAECBAgQ6J+AwLd/daJEBAgQIECAAAECBAgQINChgMC3Q0xZESBAgAABAgQIECBAgED/BAS+/auTpSrRTTfdVC677LKlmtZEBAgQmCuBG2+8ca4WZTkECBAgQIAAgaUWEPguNdXkCbfZZpuy+uqr17+VVlqprLbaahOvf/azn02euMNXV1xxRXn2s59dNt9887LddtvVxze96U0TSzjppJPKL37xi4nX0z3Zf//9ywEHHDDdR94j0JnAueeeW/bbb7+yyy67lA9+8IPlmmuumcj7+OOPL09/+tPLM57xjHLyySdPvD/dk2znF1544aSPrrrqqvK+972vPPaxj63b8nnnnTfx+a9+9avyqle9qi73ne98Z7n55psnPltRn/zlL38pOU5deumlkwiOPPLI8rCHPWzSe7N5cckll5TNNtusZjF8nLnLXe5SfvrTn84ma/MSIECAAAECBGYlIPBdRr4f/OAHJS0b+dtggw3KiSeeOPH63ve+9zLmuuTZcjK56qqrll//+tc1GPjiF79YPvrRj5Yvf/nLdeajjjqqfP/7319yRqYgsBwFbrjhhhqU3v/+9y+HHHJIyQWZt771rXWJp59+ennxi19cHvOYx9THF7zgBeV73/vetKVJgHv11VeXTTfddNLnr3/968vPf/7z8o53vKOsvfbaZddddy1///vfy7XXXjvx/C1veUs544wzSqaV5lcg9bvFFlvMbyEsnQABAgQIEFihBQS+HVf/n/70p/LgBz+4pGW2TXvttVf5yle+Ug4++OByxBFH1JaoO9/5zmWfffYp6bKcdN1115VMd9e73rVsv/325d///d/b2Sc9XnTRRTXQTvCbdL/73a988pOfLBtvvHE5/PDDy2mnnVaXc+yxx44sx3CG45Z72GGHlQTxm2yySXnXu941PJvnBMYKnHPOObWFMS26D3zgA2vr7r/927/VebIP7LvvvuX5z39+7bXwxCc+sXzsYx+bNr8EzGkxnpq+/vWv154P//iP/1he/vKX14tA2ee++c1vltve9rblAx/4QEnQ/drXvrZeGNLqO1Vw+tdpAb7Xve5V/97//vdPTPS73/2uts5vtNFG5dGPfnT51re+NfHZ1772tfKgBz2oHm+OO+64ifeHn7zyla+st2akF8Dznve8cuihh9aLGdk2fvKTn0xMOmr5ExN4QoAAAQIECBBYRgGB7zLCjZrtdre7Xe32nBbgpHQxPOaYY8rWW29d0gUzXYxf97rXlVNOOaV28cyJfdLee+9drrzyyvpenqcLZ1q7pqanPOUp5d3vfnd55jOfWT71qU+V3/72t+VRj3pUecADHlD22GOPupy0pj3hCU8YWY7hPEct95e//GU5+uijayCRwDrdSlN+icDSCOTiz5prrlle9rKXlfRCSOtrts+kCy64oF6wafNJ19jzzz+/fTnp8YQTTqgtuJPebF5k+0836myb6fqf7tDpeZGeELkY1Kbknf3oj3/8Y/vWCv34oQ99qAadCTzz941vfGPCI93P3/a2t5Vc8Prc5z5XMu2nP/3p+nkuJGy44Ybl7LPPrt652DAYDKptLm7svvvu9eLYJz7xiYn8hp/86Ec/Kn/961/rBb4cDxNIZ9n/8A//UN74xjfWScctfzgvzwkQIECAAAECyyIg8F0WtSXM87SnPa189atfrVPl5C6tIWnhTXrOc55TT9K32mqr2gUzAXJaiT/72c/WE84tt9yynkTm5L0NiuuM//PvpS99aQ2Ob3WrW9X573a3u5W0mOXkfr311itrrbVWueMd71i7f44rR7Ibt9ycmF5++eW15XrbbbctZ555Zg0shsviOYFRArmfNBdkEgjlQs1vfvObkm016eKLLy7rrrvuxKzp5ZAuylNTbiNIy3Hup5+aEuieddZZJffwZh+65z3vWSdJ3uuss87E5GmhTFnSs0Eq9f7/H//4x6X9S720Kfdh50JFuqDf5z73qfdJf/7zn68fP+5xj6s9SXJsSS+QXBhLnX3729+uLb1pwU+dvPrVr26zG/mYun/Pe95T7nGPe9SW//b+7HHLH5mZDwgQIECAAAECSykg8F1KqJlMllbZtOjmPse0WCUAbdPd73739mntQpzunxm4J10x0yqcE8v85R7iP/zhDxPTDj/JCWa6hqa1N10O/+M//qP88z//8/Ak9fm4cmSCccvdYYcdasvOP/3TP9XBatL6e5vb3OYWy/AGgekEPvOZz9SLP7///e/r9plWxDYoSkvwcAtsgtIM1jY15V7gXHRZeeXJh6kEXE960pNKWggzYFKC3dznnufJOz0n2nT99dfXng8JrqVSb4dI3bR/ub2iTWktT8t8ewzKeAK5+JWUWzJifvvb374GxO08ubXi4Q9/ePuyPOQhD5l4PurJne50p7LKKqvUj3NMSR0ljVt+ncA/AgQIECBAgMAsBCafUc4iI7P+r0BattKim+A3Lb5PfepTJz4cHtk2J+o5CUwLSO7Zzf27OdHMX1piXvKSl0zMlydpAbv1rW9du4q2HzzykY+s9wZP1w15XDky/7jl/vnPfy5vfvOba4tvujmmW3UCDYnA0gika+uOO+440fqaiz/ZRjNQVbbLjP7bpgSuua90ahrVzTn3iWZE9bRMJqU3xSMe8Yh6sShdZ5Nfm/I8LYvtPfHt+x5vKZDjQfb19hiUixZpTc+gYelani7l7X3U7dwZdGz4Z9VGdVlvp8/j1AsZ7Wejlt9+7pEAAQIECBAgMBsBge9s9MbMmxP9N7zhDbULZrpbtimjL6f1JK1WX/rSl+oJewaPyjQZkCopJ5IJnNsugO28OdlPq3DuzWsH68l9c6eeemq5733vWydLS0rbgpI3RpUjn41b7he+8IXa7TE/07TzzjvX7trT3XOcfCQCUwUygm+6wbaDvKXrf4LTDDyVlsOPf/zjdRtOoJR7Pqf7SZ1cONppp52mZl17IKQ3RXsffZaRweAyCFbubc8Iwgmys2+8/e1vnzbvW2TqjZJeHrm3929/+1v9yyBU6aaeWyLSiv74xz++Bq25CNameKfXSe7bznEt8y9rGrX8Zc3PfAQIECBAgACBYQGB77BGh8/TzTgtU3vuueekXNO1Ly1QbZfnDHSVYDVdidO1sB1RNffaZVTaqelf//Vf60l+uiPm3uHcE5xgov0t3wQKBx54YA2qM++ocuSzcctNwPzd7363jrz60Ic+tA5GkwFsJAJLI5CfKEogk3tvs41mhOCDDjqozpoRfrPNpvtx7mXPPeppHR5O2XcyMFXuWZ+a0ksiI0Mnn+Sf/SADXaXlNxdz8hNHGS0486dXRV5LSxbIhboEuDFMy3me5/iU7s3Pfe5z6/Eox6TcH5zBy3Jfb45l6XWSOk539dncDjFq+UsuuSkIECBAgAABAksWWKkZmXOw5MlMMVOBdBVON8B0X24H20kQnPvh0mUwn7cDXrV5pxUrrbx5Pyebo1KqLPmm23QGmmnvl2unT2vyGmusUd+frhztdO3jqOWma3Vazu5whzvULtnt9B4JLK1AWg8zUNrU3+HN/JdeemkdhC0joS9ryvaZvKd2Zc6+kZbg6Za7rMtaEebLsSWtt0lT77tO1+dciMjxLN2f0219/fXXr9OmS3mOObkoMZs0bvmzyde8BAgQIECAAAGB73LYBtLFMy24CRgzqE+b2sB36r277eddP44qR9fLkR8BAgQIECBAgAABAgT6LLBqnwu3UMuW0Zgz8M5uu+02aRWe/OQnT/yky6QPltOLUeVYTouTLQECBAgQIECAAAECBHopoMW3l9WiUAQIECBAgAABAgQIECDQlYDBrbqSlA8BAgQIECBAgAABAgQI9FJA4NvLalEoAgQIECBAgAABAgQIEOhKQODblaR8CBAgQIAAAQIECBAgQKCXAgLfXlaLQhEgQIAAAQIECBAgQIBAVwIC364k5UOAAAECBAgQIECAAAECvRQQ+PayWhSKAAECBAgQIECAAAECBLoSEPh2JSkfAgQIECBAgAABAgQIEOilgMC3l9WiUAQIECBAgAABAgQIECDQlYDAtytJ+RAgQIAAAQIECBAgQIBALwUEvr2sFoUiQIAAAQIECBAgQIAAga4EBL5dScqHAAECBAgQIECAAAECBHopIPDtZbUoFAECBAgQIECAAAECBAh0JSDw7UpSPgQIECBAgAABAgQIECDQSwGBby+rRaEIECBAgAABAgQIECBAoCsBgW9XkvIhQIAAAQIECBAgQIAAgV4KCHx7WS0KRYAAAQIECBAgQIAAAQJdCQh8u5KUDwECBAgQIECAAAECBAj0UkDg28tqUSgCBAgQIECAAAECBAgQ6EpA4NuVpHwIECBAgAABAgQIECBAoJcCAt9eVotCESBAgAABAgQIECBAgEBXAgLfriTlQ4AAAQIECBAgQIAAAQK9FBD49rJaFIoAAQIECBAgQIAAAQIEuhIQ+HYlKR8CBAgQIECAAAECBAgQ6KWAwLeX1aJQBAgQIECAAAECBAgQINCVgMC3K0n5ECBAgAABAgQIECBAgEAvBQS+vawWhSJAgAABAgQIECBAgACBrgQEvl1JyocAAQIECBAgQIAAAQIEeikg8O1ltSgUAQIECBAgQIAAAQIECHQlIPDtSlI+BAgQIECAAAECBAgQINBLAYFvL6tFoQgQIECAAAECBAgQIECgKwGBb1eS8iFAgAABAgQIECBAgACBXgoIfHtZLQpFgAABAgQIECBAgAABAl0JCHy7kpQPAQIECBAgQIAAAQIECPRSQODby2pRKAIECBAgQIAAAQIECBDoSkDg25WkfAgQIECAAAECBAgQIECglwIC315Wi0IRIECAAAECBAgQIECAQFcCAt+uJOVDgAABAgQIECBAgAABAr0UEPj2sloUigABAgQIECBAgAABAgS6EhD4diUpHwIECBAgQIAAAQIECBDopYDAt5fVolAECBAgQIAAAQIECBAg0JWAwLcrSfkQIECAAAECBAgQIECAQC8FBL69rBaFIkCAAAECBAgQIECAAIGuBAS+XUnKhwABAgQIECBAgAABAgR6KSDw7WW1KBQBAgQIECBAgAABAgQIdCUg8O1KUj4ECBAgQIAAAQIECBAg0EsBgW8vq0WhCBAgQIAAAQIECBAgQKArAYFvV5LyIUCAAAECBAgQIECAAIFeCgh8e1ktCkWAAAECBAgQIECAAAECXQkIfLuSlA8BAgQIECBAgAABAgQI9FJA4NvLalEoAgQIECBAgAABAgQIEOhKQODblaR8CBAgQIAAAQIECBAgQKCXAgLfXlaLQhEgQIAAAQIECBAgQIBAVwIC364k5UOAAAECBAgQIECAAAECvRQQ+PayWhSKAAECBAgQIECAAAECBLoSEPh2JSkfAgQIECBAgAABAgQIEOilgMC3l9WiUAQIECBAgAABAgQIECDQlYDAtytJ+RAgQIAAAQIECBAgQIBALwUEvr2sFoUiQIAAAQIECBAgQIAAga4EBL5dScqHAAECBAgQIECAAAECBHopIPDtZbUoFAECBAgQIECAAAECBAh0JSDw7UpSPgQIECBAgAABAgQIECDQSwGBby+rRaEIECBAgAABAgQIECBAoCsBgW9XkvIhQIAAAQIECBAgQIAAgV4KCHx7WS0KRYAAAQIECBAgQIAAAQJdCQh8u5KUDwECBAgQIECAAAECBAj0UkDg28tqUSgCBAgQIECAAAECBAgQ6EpA4NuVpHwIECBAgAABAgQIECBAoJcCAt9eVotCESBAgAABAgQIECBAgEBXAgLfriTlQ4AAAQIECBAgQIAAAQK9FBD49rJaFIoAAQIECBAgQIAAAQIEuhIQ+HYlKR8CBAgQIECAAAECBAgQ6KWAwLeX1aJQBAgQIECAAAECBAgQINCVgMC3K0n5ECBAgAABAgQIECBAgEAvBQS+vawWhSJAgAABAgQIECBAgACBrgQEvl1JyocAAQIECBAgQIAAAQIEeikg8O1ltSgUAQIECBAgQIAAAQIECHQlIPDtSlI+BAgQIECAAAECBAgQINBLAYFvL6tFoQgQIECAAAECBAgQIECgKwGBb1eS8iFAgAABAgQIECBAgACBXgoIfHtZLQpFgAABAgQIECBAgAABAl0JCHy7kpQPAQIECBAgQIAAAQIECPRSQODby2pRKAIECBAgQIAAAQIECBDoSkDg25WkfAgQIECAAAECBAgQIECglwIC315Wi0IRIECAAAECBAgQIECAQFcCAt+uJOVDgAABAgQIECBAgAABAr0UEPj2sloUigABAgQIECBAgAABAgS6EhD4diUpHwIECBAgQIAAAQIECBDopYDAt5fVolAECBAgQIAAAQIECBAg0JWAwLcrSfkQIECAAAECBAgQIECAQC8FBL69rBaFIkCAAAECBAgQIECAAIGuBAS+XUnKhwABAgQIECBAgAABAgR6KSDw7WW1KBSBhS/wzW9+s+y2227lSU96UvngBz9Yrr322omVOvPMM8vzn//8su2225Y3vOEN5cYbb5z4bOqT7bbbrlx44YVT366vB4NB2XPPPcvXvva1ic/PPffcst9++5VddtmlLveaa66Z+GxFfbLNNtuU1Vdfvf6ttNJKZbXVVpt4/exnP7sceOCBleakk04qv/jFL+rz/fffvxxwwAHLRHbssceW973vfcs0r5kIECBAgAABAstDQOC7PFTlSWAFFzjvvPNKAqqHP/zhNag67rjjahAalksvvbQ885nPLA984ANrcHT66aeXT3/609OKXXXVVeXqq68um2666bSfH3744eWLX/xiufLKK+vnN9xwQ3nsYx9b7n//+5dDDjmkJJB761vfOu28K9KbP/jBD+rFhVxg2GCDDcqJJ5448fq9731vec1rXlM5jjrqqPL9739/mWkSNL/lLW8pr3zlK8v555+/zPmYkQABAgQIECDQtcCqXWcoPwIECJx11lnl6U9/ennVq15VMZ72tKeVL3zhC+V1r3tdSbC6xx57lJe97GX1s7QOJridLiVwTcvtdClB1vHHH18e9ahHTXx8zjnnlLRoPuMZz6iPKUOCOWm0wDHHHFPWXHPNcv3115fTTjutnH322WX99defNMN1111X6zKt+Jtvvnk59NBDy9Zbbz1pmry4+OKLyx//+Mey8cYb3+IzbxAgQIAAAQIE5lNAi+986ls2gUUqkBbd97///bUl9jvf+U5597vfXZ785CfXtb3gggvKXe5yl9pFeddddy0Jku9973tPK3HCCSeUTDM1peXyBS94QW1FXnnl/z2MPfjBD65BXILqBLxpfUyQLY0WuOiii8oll1xSnRLMvvjFLy477LDDpBn23nvvWpcnn3xyyfO0qqc1fmrKRYrDDjusbL/99lM/8poAAQIECBAgMK8CWnznld/CCSxugVNPPbW27KYL8hZbbFFXNvfrphvyPvvsU1ZZZZXykpe8pN5v+rjHPW4SRoLbtODm/tSp6U1velO9d/ie97znpI/S2psW4E984hO19fI3v/lNudvd7jZpGi+mF1hvvfXKWmutVe54xzuWtddee2KiP/3pT+Wzn/1s+fWvf11bcrfccsty5JFH1m7kub9aIkCAAAECBAgsBAGB70KoJWUksEAF0tU4A1xloKPdd9+9XH755eWmm24qT3ziE+sAVFmtBL/pbjs18M29vxn8arhFNzW03VoAAEAASURBVNP/8Ic/rIHY5z//+dot989//nNtscy9w2eccUb56le/Wn7/+9+XddZZpwZor371q8vOO++cWaVlEMiFiptvvnlS1+Z0fZ5aX8uQtVkIECBAgAABAnMmIPCdM2oLIrDiCLzrXe+qLYcZ4CqtsOluvO+++9Z7edPNebPNNpvA2HDDDcsVV1wx8bp9Mqqbc6ZN62S65CYlMEtX3Swn3W933HHHGvTms9xbnOlyD/Ftb3vbvCXNUGDdddctq666akmX6LQIJ6UV+Fa3utUMczI5AQIECBAgQGD+BP735rj5K4MlEyCwyAQyCvMRRxxR0tU4Pzn0qU99qgakt7vd7crjH//48rnPfa4Go3/729/KZz7zmRqgTiU45ZRTyk477TT17TrYVQZgav9yP+rBBx9cR49Od+pvf/vbE4F0Wn8f8YhHCHpvoTj9G2l9zyBXw2mTTTYpG220UckgZEmXXXZZ2WqrrUpG7pYIECBAgAABAgtFQIvvQqkp5SSwgAQy+FEGtErL7p3vfOdy17vetbztbW+ra7DXXnuV3Pub99KCmGnSJXo45bd4837bwjj82bjnGfAqvxGce39zr2rmf8c73jFuFp8NCeRCw+tf//r6k0ft2wmGjz766HpxIgNXJfDNNPnJKIkAAQIECBAgsFAEVmpaYwYLpbDKSYDAwhHIoSU/b5MusQl+p6a0Bud+342Xw0/fpCX5d7/73cjf/51aFq//V+Daa68ta6yxRr33+n/fLSUDlKWVN3V5+9vffvgjzwkQIECAAAECvRcQ+Pa+ihSQAAECBAgQIECAAAECBGYj4B7f2eiZlwABAgQIECBAgAABAgR6LyDw7X0VKSABAgQIECBAgAABAgQIzEZA4DsbPfMSIECAAAECBAgQIECAQO8FBL69ryIFJECAAAECBAgQIECAAIHZCAh8Z6NnXgIECBAgQIAAAQIECBDovYDAt/dVpIAECBAgQIAAAQIECBAgMBsBge9s9MxLgAABAgQIECBAgAABAr0XEPj2vooUkAABAgQIECBAgAABAgRmIyDwnY2eeQkQIECAAAECBAgQIECg9wIC395XkQISIECAAAECBAgQIECAwGwEBL6z0TMvAQIECBAgQIAAAQIECPReQODb+ypSQAIECBAgQIAAAQIECBCYjYDAdzZ65iVAgAABAgQIECBAgACB3gsIfHtfRQpIgAABAgQIECBAgAABArMREPjORs+8BAgQIECAAAECBAgQINB7AYFv76tIAQkQIECAAAECBAgQIEBgNgIC39nomZcAAQIECBAgQIAAAQIEei8g8O19FSkgAQIECBAgQIAAAQIECMxGQOA7Gz3zEiBAgAABAgQIECBAgEDvBQS+va8iBSRAgAABAgQIECBAgACB2QgIfGejZ14CBAgQIECAAAECBAgQ6L2AwLf3VaSABAgQIECAAAECBAgQIDAbAYHvbPTMS4AAAQIECBAgQIAAAQK9FxD49r6KFJAAAQIECBAgQIAAAQIEZiMg8J2NnnkJECBAgAABAgQIECBAoPcCAt/eV5ECEiBAgAABAgQIECBAgMBsBAS+s9EzLwECBAgQIECAAAECBAj0XkDg2/sqUkACBAgQIECAAAECBAgQmI2AwHc2euYlQIAAAQIECBAgQIAAgd4LCHx7X0UKSIAAAQIECBAgQIAAAQKzERD4zkbPvAQIECBAgAABAgQIECDQewGBb++rSAEJECBAgAABAgQIECBAYDYCAt/Z6JmXAAECBAgQIECAAAECBHovIPDtfRUpIAECBAgQIECAAAECBAjMRkDgOxs98xIgQIAAAQIECBAgQIBA7wUEvr2vIgUkQIAAAQIECBAgQIAAgdkICHxno2deAgQIECBAgAABAgQIEOi9gMC391WkgAQIECBAgAABAgQIECAwGwGB72z0zEuAAAECBAgQIECAAAECvRcQ+Pa+ihSQAAECBAgQIECAAAECBGYjIPCdjZ55CRAgQIAAAQIECBAgQKD3AgLf3leRAhIgQIAAAQIECBAgQIDAbAQEvrPRMy8BAgQIECBAgAABAgQI9F5A4Nv7KlJAAgQIECBAgAABAgQIEJiNgMB3NnrmJUCAAAECBAgQIECAAIHeCwh8e19FCkiAAAECBAgQIECAAAECsxEQ+M5Gz7wECBAgQIAAAQIECBAg0HsBgW/vq0gBCRAgQIAAAQIECBAgQGA2AgLf2eiZlwABAgQIECBAgAABAgR6LyDw7X0VKSABAgQIECBAgAABAgQIzEZA4DsbPfMSIECAAAECBAgQIECAQO8FBL69ryIFJECAAAECBAgQIECAAIHZCAh8Z6NnXgIECBAgQIAAAQIECBDovYDAt/dVpIAECBAgQIAAAQIECBAgMBsBge9s9MxLgAABAgQIECBAgAABAr0XEPj2vooUkAABAgQIECBAgAABAgRmIyDwnY2eeQkQIECAAAECBAgQIECg9wIC395XkQISIECAAAECBAgQIECAwGwEBL6z0TMvAQIECBAgQIAAAQIECPReQODb+ypSQAIECBAgQIAAAQIECBCYjYDAdzZ65iVAgAABAgQIECBAgACB3gsIfHtfRQpIYGEKnHPOOeVZz3pW2Wmnncrhhx9errjiilusyMc//vHyqle96hbvD7+x3XbblQsvvHD4rfK73/2u7L333mXHHXcsBx54YPnlL3858XmW88Y3vrFsu+225ZnPfGa54IILJj5bUZ9ss802ZfXVV69/K620UllttdUmXj/72c+uhrE56aSTyi9+8YvKtP/++5cDDjhgRmTXXXdd2Xfffcv2229f9ttvv/LjH/94RvObmAABAgQIECCwvAQEvstLVr4EVmCBP//5zzXg3XDDDcs73vGO8tOf/rTsvvvuk0TOP//88trXvnZsYHrVVVeVq6++umy66aaT5n3CE55QBoNBefvb315WXXXVsueee9bP814CuT/84Q/lwx/+cLnLXe5SXv7yl0+ad0V88YMf/KDceOON9W+DDTYoJ5544sTr9773veU1r3lNZTnqqKPK97///WUmes5znlPOPffccvDBB5f73ve+5aEPfWiti2XO0IwECBAgQIAAgY4EVu0oH9kQIEBgQiDB0xZbbFGD3ryZQOjOd75z+eMf/1huf/vbl5tuuqm86EUvKi95yUvGtgqmBXKXXXaZyDdPElT/5S9/qYHtyiuvXDbeeONyyCGHlATJv/71r2vr8Ne//vU6z1ve8pZy2mmnTZrfi8kCxxxzTFlzzTXL9ddfX63OPvvssv7660+aKC25aZn/5je/WTbffPNy6KGHlq233nrSNLnocOqpp5af//znZaONNqot7kceeWQ57rjjyotf/OJJ03pBgAABAgQIEJhrAS2+cy1ueQRWAIG09H35y1+eWNMzzjijbLnlljXozZv/8i//UgPaBMfj0gknnFB23XXXSZOsu+66Ja3FN998c/nRj35Uu9amW/N6661XW48f9KAHlTe/+c1lhx12KO9///tLXkujBS666KJyySWXlD322KMGswlSYzec0q38yiuvLCeffHLtYv7Yxz62XmgYniaB71lnnVWD3rx/zTXX1IsaqRuJAAECBAgQIDDfAgLf+a4ByyewCAXWWWedcqc73amu2bHHHluDpdx3m5Rut6eccspE99r65jT/0jU39wnn/tTpUlp90336E5/4RA3YEggniDv++OPr41577VW++MUvLnE50+W9Ir6XCwdrrbVWueMd71jWXnvtCYI//elP5bOf/Ww57LDD6sWLmN/vfver9wNPTNQ8Sev7ZpttVt8677zzyiMe8Yiy8847l6222mp4Ms8JECBAgAABAvMioKvzvLBbKIHFL3DDDTfUwaVyf2/uKU0rcILTDHiVAal+8pOflIsvvrh2Xc7z3BM6nE4//fTaXTYB1XQpgVq6Nmfwqnvd617lMY95TPmv//qvcpvb3KZ89KMfLausskp55CMfWe55z3uWD33oQ2WNNdaYLhvvLUEgA4ul3oa7Nqfr8+Me97hp5/zIRz5SMjBW6nifffaZdhpvEiBAgAABAgTmWkDgO9filkdgBRDIPby77bZbyUBKCXxvdatb1bX++9//XgPTtB4mpTUx9+a+4hWvKN/97nfre+2/6bo557N0p/3ABz5QPvaxj9VJ08qYoDqtvRnMKvf8JuhNSnCcZV577bUC3yoy83/pWp4BxOKbFuGk1Ftbp8M5Hn300eWII44oP/zhDydaf4c/95wAAQIECBAgMF8C0zelzFdpLJcAgUUhkHtB0xr7zne+swaef/3rX0v+EkBl8KT2761vfWtt1Z0a9AYh3aHzU0hTU7rOfuUrXylpEU7K/b7J70lPelJ59KMfXVuS8zrp05/+dA2K73CHO9TX/o0XyAWDDHI1nDbZZJN63266rCdddtlltftyujMPp7QKZ5TuDGiV0bzbOs9FEIkAAQIECBAgMN8CWnznuwYsn8AiFDjzzDPr78GmtXA4pVvy1J8mGv68fZ6fxElLbtvC2L6fx1vf+tY1wMpvxSavDKp00EEH1ZGIMxrxe97znvKwhz2stv7mp5CGB9kazsfzWwrkQsPrX//62lLffppgOC25T3va0+p9vgl8M83973//dpL6+LOf/az+9NRDHvKQSe/nJ6de97rXTXrPCwIECBAgQIDAXAus1Jw0DuZ6oZZHgACB2QpklOHLL7+8Drg0Na+MKJwALT+9s/rqq0/92OsxAm238La7eDtp7tlOK29+lio/SSURIECAAAECBBaSgMB3IdWWshIgQIAAAQIECBAgQIDAjAXc4ztjMjMQIECAAAECBAgQIECAwEISEPgupNpSVgIECBAgQIAAAQIECBCYsYDAd8ZkZiBAgAABAgQIECBAgACBhSQg8F1ItaWsBAgQIECAAAECBAgQIDBjAYHvjMnMQIAAAQIECBAgQIAAAQILSUDgu5BqS1kJECBAgAABAgQIECBAYMYCAt8Zk5mBAAECBAgQIECAAAECBBaSgMB3IdWWshIgQIAAAQIECBAgQIDAjAUEvjMmMwMBAgQIECBAgAABAgQILCQBge9Cqi1lJUCAAAECBAgQIECAAIEZCwh8Z0xmBgIECBAgQIAAAQIECBBYSAIC34VUW8pKgAABAgQIECBAgAABAjMWEPjOmMwMBAgQIECAAAECBAgQILCQBAS+C6m2lJUAAQIECBAgQIAAAQIEZiwg8J0xmRkIECBAgAABAgQIECBAYCEJCHwXUm0pKwECBAgQIECAAAECBAjMWEDgO2MyMxAgQIAAAQIECBAgQIDAQhIQ+C6k2lJWAgQIECBAgAABAgQIEJixgMB3xmRmIECAAAECBAgQIECAAIGFJCDwXUi1pawECBAgQIAAAQIECBAgMGMBge+MycxAgAABAgQIECBAgAABAgtJQOC7kGpLWQkQIECAAAECBAgQIEBgxgIC3xmTmYEAAQIECBAgQIAAAQIEFpKAwHch1ZayEiBAgAABAgQIECBAgMCMBQS+MyYzAwECBAgQIECAAAECBAgsJAGB70KqLWUlQIAAAQIECBAgQIAAgRkLCHxnTGYGAgQIECBAgAABAgQIEFhIAgLfhVRbykqAAAECBAgQIECAAAECMxYQ+M6YzAwECBAgQIAAAQIECBAgsJAEBL4LqbaUlQABAgQIECBAgAABAgRmLCDwnTGZGQgQIECAAAECBAgQIEBgIQkIfBdSbSkrAQIECBAgQIAAAQIECMxYQOA7YzIzECBAgAABAgQIECBAgMBCEhD4LqTaUlYCBAgQIECAAAECBAgQmLGAwHfGZGYgQIAAAQIECBAgQIAAgYUkIPBdSLWlrAQIECBAgAABAgQIECAwYwGB74zJzECAAAECBAgQIECAAAECC0lA4LuQaktZCRAgQIAAAQIECBAgQGDGAgLfGZOZgQABAgQIECBAgAABAgQWkoDAdyHVlrISIECAAAECBAgQIECAwIwFBL4zJjMDAQIECBAgQIAAAQIECCwkAYHvQqotZSVAgAABAgQIECBAgACBGQsIfGdMZgYCBAgQIECAAAECBAgQWEgCAt+FVFvKSoAAAQIECBAgQIAAAQIzFhD4zpjMDAQIECBAgAABAgQIECCwkAQEvguptpSVAAECBAgQIECAAAECBGYsIPCdMZkZCBAgQIAAAQIECBAgQGAhCQh8F1JtKSsBAgQIECBAgAABAgQIzFhA4DtjMjMQIECAAAECBAgQIECAwEISEPgupNpSVgILSOCcc84pz3rWs8pOO+1UDj/88HLFFVdMlP74448vT3/608sznvGMcvLJJ0+8P92T7bbbrlx44YWTPrruuuvKvvvuW7bffvuy3377lR//+MeTPs+LSy65pGy99dblb3/72y0+W9He2Gabbcrqq69e/1ZaaaWy2mqrTbx+9rOfXQ488MBKctJJJ5Vf/OIX9fn+++9fDjjggBlR/e53vyt777132XHHHWuev/zlL2c0v4kJECBAgAABAstLQOC7vGTlS2AFFvjzn/9cA94NN9ywvOMd7yg//elPy+67715FTj/99PLiF7+4POYxj6mPL3jBC8r3vve9abWuuuqqcvXVV5dNN9100ufPec5zyrnnnlsOPvjgct/73rc89KEPLX/4wx8mprn55pvLC1/4wvLDH/6w5PmKnn7wgx+UG2+8sf5tsMEG5cQTT5x4/d73vre85jWvqURHHXVU+f73v7/MXE94whPKYDAob3/728uqq65a9txzz2XOy4wECBAgQIAAgS4FVu0yM3kRIEAgAgmetthiixr05nUC1Dvf+c7lj3/8YzniiCNqa+3zn//8fFSe+MQnlo997GPlYQ97WH09/C8tkLvsssvwWzWwOvXUU8vPf/7zstFGG5Vtt922HHnkkeW4446rgXQmfuc731nSUnzKKaeUtHBKowWOOeaYsuaaa5brr7++nHbaaeXss88u66+//qQZ0sL+qle9qnzzm98sm2++eTn00ENra/rwRLnY8Ze//KV8+MMfLiuvvHLZeOONyyGHHFJy8WK99dYbntRzAgQIECBAgMCcC2jxnXNyCySw+AXSAvvlL395YkXPOOOMsuWWW5bb3/725YILLij3u9/9Jj7bbLPNyvnnnz/xevjJCSecUHbdddfht2rge9ZZZ9WgNx9cc801tatzAuCkdHtOwLzPPvvU1/6NF7joootqt/A99tijBrNpjd9hhx0mzZTuy1deeWXtlp7nj33sY2tAOzzRuuuuW+sxLew/+tGP6sWN1Imgd1jJcwIECBAgQGC+BAS+8yVvuQQWscA666xT7nSnO9U1PPbYY+t9n2984xvr64svvrgkSGrTXe9613Lttde2Lyce0zU39wnn/tThlNbEBMtJ5513XnnEIx5Rdt5557LVVlvV+3nTkpxWx1VWWWV4Ns+XIJAAda211ip3vOMdy9prrz0x9Z/+9Kfy2c9+thx22GH14kW6rOfCRS4uTJfS6ptpPvGJT9RAWlfz6ZS8R4AAAQIECMy1gMB3rsUtj8AKInDDDTeUpzzlKeWggw6q95RmIKukdKtNl+c2pRttus9OTbkXOC2GCXSnSx/5yEfqvb3Pfe5za2CWabKs+9znPrXbboLmpDymVVhaNoEMLJbgNQOFJSjOX+4ZHr6nejjnBNC//vWv61/uH/7Od74z/LHnBAgQIECAAIF5EXCP77ywWyiBxS1w0003ld12261kIKUMbHWrW91qYoXvdre71a617RtpAb7Xve7Vvpx4nK6bc/vh0UcfXe8VzuBVbetvPkuwneXttddetUt03nvpS19aW4Af8pCH5KU0Q4G0zmegqnSJTotwUlqBh+s076X7+Qc+8IF6v3Zep17S5T3zSQQIECBAgACB+RaYvillvktl+QQILGiB/ERRWv0yyNTf//738te//rX+ZcTfJz3pSeXjH/94bUXMvb0ZXGm6ga0yMFV+CmlqSuvja1/72jqgVUaNbvNOsJ3uuBmcKX+5zzTpzDPPLILeqYrTv0738AxyNZw22WSTej91uqwnXXbZZbVbebqZD6d0Nf/KV75S0lKflLpNPaS+JQIECBAgQIDAfAsIfOe7BiyfwCIUSLCZ34NNa2FaCdu/tP698pWvLLe97W1L7u3NvaIZ1Tm/+zqc8lNFaTFsWxiHP/vZz35Wf+IowWybbx7f/e53D0/m+TII5EJDftP3S1/60sTcCYbTwp7f9U3LfP5e9rKXlfvf//4T0+TJrW9963pBIr+tnK7rGQArXc+njhA9aSYvCBAgQIAAAQJzJLBS0wIzmKNlWQwBAgQmBC699NI6iNLtbne7ifc8mX+BDDS2xhpr3GJwsHQjTytvfpYqo3OPShn9+fLLL68DYY2axvsECBAgQIAAgbkWEPjOtbjlESBAgAABAgQIECBAgMCcCujqPKfcFkaAAAECBAgQIECAAAECcy0g8J1rccsjQIAAAQIECBAgQIAAgTkVEPjOKbeFESBAgAABAgQIECBAgMBcCwh851rc8ggQIECAAAECBAgQIEBgTgUEvnPKbWEECBAgQIAAAQIECBAgMNcCAt+5Frc8AgQIECBAgAABAgQIEJhTAYHvnHJbGAECBAgQIECAAAECBAjMtYDAd67FLY8AAQIECBAgQIAAAQIE5lRA4Dun3BZGgAABAgQIECBAgAABAnMtIPCda3HLI0CAAAECBAgQIECAAIE5FRD4zim3hREgQIAAAQIECBAgQIDAXAsIfOda3PIIECBAgAABAgQIECBAYE4FBL5zym1hBAgQIECAAAECBAgQIDDXAgLfuRa3PAIECBAgQIAAAQIECBCYUwGB75xyWxgBAgQIECBAgAABAgQIzLWAwHeuxS2PAAECBAgQIECAAAECBOZUQOA7p9wWRoAAAQIECBAgQIAAAQJzLSDwnWtxyyNAgAABAgQIECBAgACBORUQ+M4pt4URIECAAAECBAgQIECAwFwLCHznWtzyCBAgQIAAAQIECBAgQGBOBQS+c8ptYQQIECBAgAABAgQIECAw1wIC37kWtzwCBAgQIECAAAECBAgQmFMBge+cclsYAQIECBAgQIAAAQIECMy1gMB3rsUtjwABAgQIECBAgAABAgTmVEDgO6fcFkaAAAECBAgQIECAAAECcy0g8J1rccsjQIAAAQIECBAgQIAAgTkVEPjOKbeFESBAgAABAgQIECBAgMBcCwh851rc8ggQIECAAAECBAgQIEBgTgUEvnPKbWEECBAgQIAAAQIECBAgMNcCAt+5Frc8AgQIECBAgAABAgQIEJhTAYHvnHJbGAECBAgQIECAAAECBAjMtYDAd67FLY8AAQIECBAgQIAAAQIE5lRA4Dun3BZGgAABAgQIECBAgAABAnMtIPCda3HLI0CAAAECBAgQIECAAIE5FRD4zim3hREgQIAAAQIECBAgQIDAXAsIfOda3PIIECBAgAABAgQIECBAYE4FBL5zym1hBAgQWNgCf//730v+JAIECBAgQIDAQhIQ+C6k2lJWAgtQYO+99y4/+clPJpX8zDPPLM9//vPLtttuW97whjeUG2+8cdLnwy+22267cuGFFw6/Va677rqy7777lu23377st99+5cc//vGkz/PikksuKVtvvXX529/+dovPVrQ3LrvssrLSSiuV9dZbr6y//vplrbXWKltuuWX56le/OmOK97znPdV8xjOagQABAgQIECAwjwIC33nEt2gCi1kgQdWLXvSicuSRR5arr756YlUvvfTS8sxnPrM88IEPLO973/vK6aefXj796U9PfD785KqrrqrzbrrppsNvl+c85znl3HPPLQcffHC5733vWx760IeWP/zhDxPT3HzzzeWFL3xh+eEPf1jyXPpvgf/8z/8sV155ZbnmmmvKHnvsUZ773OeWm266CQ8BAgQIECBAYNELCHwXfRVbQQLzI/DTn/60tiyuvfbakwpw+OGH16DrZS97WXnAAx5Qjj322BoET5rof16cdNJJZZdddpn00WAwKKeeemr52Mc+VluM99xzz/LgBz+4HHfccRPTvfOd7yxpKU5KS6c0WWDllVcuD3/4wye9efLJJ5d73/veZd111y1PecpTJi4kxHv//fcv97jHPcquu+5a0nqc9MUvfrG22reZJKBOC/tf/vKX9i2PBAgQIECAAIHeCAh8e1MVCkJgcQkccMAB5bDDDqvda4fX7IILLih3uctdSgLWBFJnnXVWDbiGp2mfn3DCCXWa9nUeE4hlno022qi+ndbLdHVOt+mkPE/AvM8++9TX/v2vwCc/+cny8Y9/vKS78ite8Yry2te+tqy66qo1mH36059e6yv1c4c73KE873nPqzNm+i9/+cvlve99b62Lo48+ur6/zTbblGOOOWaiNf/EE08st771rcs666zzvwv0jAABAgQIECDQE4FVe1IOxSBAYAURyP26hxxySA1MV1lllfKSl7ykrL766uVxj3vcJIHc93vOOeeUBFjDKa2Vm222WX3rvPPOK7vttlvZeeedy1ZbbVXv5829w+k6nbylyQKnnHJKid/1119fW2ZzkSBdwT/1qU/V7uI77bRTneHNb35z2WCDDeo03/jGN2pdtS3vxx9/fJ3mrne9a22pz+e77757yUWKpz71qZMX6BUBAgQIECBAoCcCAt+eVIRiEFhRBHJP6ROf+MSJAZISoKblcGrgm3t/04qbQG269JGPfKR2wT3wwAMnWncPOuigcp/73KcGdgmak/KY96Z2uZ4uz8X+XgLcXGRI+utf/1rud7/7lTPOOKNcdNFFtZtyu/53utOdajf1K664opx22ml1ALL2s4c85CH1PuG8ftrTnlYHyHryk59cElTnnm2JAAECBAgQINBHgenPKPtYUmUiQGBRCKSbc9timxXacMMNSwKsqWm6bs7tNOlue8QRR9TBq1796ldP3Md7ww03lNxbvNdee5WXvvSldfI8/vznP29n9fg/AmuuuWbZeOON64jbaS3/zW9+M2Hz29/+tga+GVQsf+19vZng/PPPn5guLbxp8U3Qm4sLbffziQk8IUCAAAECBAj0REDg25OKUAwCK4rA4x//+PK5z32u3huanxr6zGc+U1sOp65/gqm26+3wZ+mam3tTM1p0gua0XOYvLcm5p/jss8+ufz/60Y/qbPnppLRSSqX+DFSsLr/88nLooYfW1t50YU6dxDs/AZWUiw477rhjvaCQz9Iin/l+//vfl29961sTlHe7293K3e9+95L7udP6KxEgQIAAAQIE+iqgq3Nfa0a5CCxSgbTGZlTm3COa35NN628GVhpO+amivJ/Pp6af/exnNWieGsy+/e1vL6973eumTu71kEB+xzdptdVWK1tssUUd6GrzzTev7yXQzcjNGWk7P3v0la98pb6fn4561KMeVTJdBhabejEiAW9Gfc59vhIBAgQIECBAoK8CKzUnMoO+Fk65CBBYvALpWptW2nS3lfohkBbd/OZyAuDhwcFST7/61a/KJptsUtZYY41Jhc19wwmSv/SlL0163wsCBAgQIECAQJ8EBL59qg1lIUCAwAISOOqoo8q73/3u8tGPfrQ87GEPW0AlV1QCBAgQIEBgRRNwj++KVuPWlwABAh0JXHzxxYLejixlQ4AAAQIECCxfAS2+y9dX7gQIECBAgAABAgQIECAw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ClNOOWWaZppp0nTTTZemmmqqtPzyy6cf/vCHrTbJyw444IB04IEHtlyvKIp0wgknpDfffDOvd8UVV6Q77rij5TYWEiBAgAABAgQIECBAoI4CAt82amWrrbZKY8aMSf/973/Trbfemp555pk0/fTTp8985jNt5PruNr3pppvSSy+9lF577bV09NFHp9122y09+OCD7y6TIdZ+55130l577ZVef/31vPRHP/pR+uMf/zjEmt4iQIAAAQIECBAgQIBAvQUEvhNZPxHo3nDDDen4449PU089dc4lel+PO+64tPbaa6cIHOPva1/7WppzzjnTXHPNlY444ogUPaljp2uuuSYtscQSaYYZZkibbbZZs8f4xBNPTPG37bbb5m3H3m7s12uuuWZaaKGF0o033pgXXXnllWmNNdZI88wzTw7GhxqK/XJ5L+YXvvCFNPfcc6fY/s9//nPedpNNNsmPq622Wvre976Xrr/++nTYYYelSy+9NL9/6qmnpsUWWyz/hYFEgAABAgQIECBAgACBugoIfCeyZuKe3ggyZ5lllkE5zD777OmrX/1qmmSSSdL3v//9dPXVV6c//elP6brrrks//elP05lnnjlo/YceeihFz/Gxxx6b7r333jTrrLOmHXbYIa/z8MMPp69//et5H7FOqxQ9vhdeeGG6++670zrrrJMD7P333z/tt99+qTERSQTlY6edd945Pf300ymC73i+/vrr557rxrpR3u233z6tsMIKaZdddklrrbVWDn6POuqoXObzzz8/nXzyyfnYxs7bawIECBAgQIAAAQIECNRBwKzOE1kLcX9v9NC2SjE8eO+99869qbHe7rvvns4999wcSDa2O+uss9LKK6+cg9V47xvf+EaK4PmFF17Iq8R9u40gtLHNwMdlllmm+TJ6nA899NA022yzpVdeeSUHpNFj+8Ybb+Qgfeyhys8++2w677zz0j333JPmm2++tOiii6boyY37eePe5UgLLLBAvod42nJW2Mj3Pe95TzrppJPysay33np5nTjGCy64IPdM5zf8Q4AAAQIECBAgQIAAgRoJCHwnsjIiIIzhznEPbEwy1UgxGdTpp5+ePve5z6UHHnggrbjiio1FOYh88sknm6/jyf333597Uxtvvu9970sRZDbWW3bZZRuLhnyMIchLLrlkvtd4xhlnzD3NsWIMv46e3p122ilFkB7DraM3eWC677778nDs6M1tpBj6vOGGGzZeDvkYgfLNN9+c7ymOFeKYF1lkkSHX9SYBAgQIECBAgAABAgS6LWCo80TWQNzfGsOL//CHPwzKIYY2R09vzLK8+OKL54mvGivcdddduXe38Toex14nhjdH4BuB9YSkCHZnnnnmNNNMMzWD3tgu7vP99re/nX75y1+mRx99NPc8x0RcA1P0WE822WQ5+H7iiSdS/MVEXbvuuuvA1cZ5HtvFvceNbSL/2I9EgAABAgQIECBAgACBOgoIfCeyVuaff/6044475smrGr2zETR+5StfyffCRrYbbbRRiqHMESDHpFa/+MUvmkOaG7uNda699tr0n//8J7912WWX5cmxxg5SG+tP6OOdd96ZPvShD6X42aS33norxb24Y0+sFccQk26dc845Odu43zgC8QjQY/9xn3IMmY406aSTpvi94khxn2/kF8cVf3FP8jHHHJOX+YcAAQIECBAgQIAAAQJ1ExD4tlEj8fNBcd9r3JMbMydHL20ME47f9I302c9+Nv3lL3/J99fG/bMx/LhxX2xjtzFBVswC/YEPfCD3BkeeETy3m7bYYos81DqGSseM0XGv72233daclTnyj2A2hmXH7/o2ZmiO+5DjvuEIeqOsSy+9dIrhzzFh1sEHH5wuuuiidNBBB+UJsSJwnnfeefPzmNBLIkCAAAECBAgQIECAQB0FxpS9gOP+vk4dS1rjMsXv98YQ5YUXXjgPcR5Y1LfffjvPtBy/7xv32Y4vxXDh5557LgfAEZB2KsVM0RGcxpDmmDBriimmGKeMcZ9y9PJG+caepTrKFMOpI8XvBUfwHuWLZhN5R4rgXSIwUOCl8mKJVB+B6crbJ3o5Lbfccr1c/L4re+OXAnr1wE6855FeLXpflnuPhcb/3agXDniew8f9xYxeKHe/lvHBg/fu10NzXB0QMLlVBxDj/tr4GypFkDghEz/NMcccKf46nWKocyNF8D1Uism5llpqqaEWNYPeWDjddNM114mh0ALeJocnBAgQIECAAAECBAjUWMBQ5xpXjqIRIECAAAECBAgQIECAQPsCAt/2DeVAgAABAgQIECBAgAABAjUWEPjWuHIUjQABAgQIECBAgAABAgTaFxD4tm8oBwIECBAgQIAAAQIECBCosYDAt8aVo2gECBAgQIAAAQIECBAg0L6AwLd9QzkQIECAAAECBAgQIECAQI0FBL41rhxFI0CAAAECBAgQIECAAIH2BQS+7RvKgQABAgQIECBAgAABAgRqLCDwrXHlKBoBAgQIECBAgAABAgQItC8g8G3fUA4ECBAgQIAAAQIECBAgUGMBgW+NK0fRCBAgQIAAAQIECBAgQKB9AYFv+4ZyIECAAAECBAgQIECAAIEaCwh8a1w5ikaAAAECBAgQIECAAAEC7QsIfNs3lAMBAgQIECBAgAABAgQI1FhA4FvjylE0AgQIECBAgAABAgQIEGhfQODbvqEcCBAgQIAAAQIECBAgQKDGAgLfGleOohEgQIAAAQIECBAgQIBA+wIC3/YN5UCAAAECBAgQIECAAAECNRYQ+Na4chSNAAECBAgQIECAAAECBNoXEPi2bygHAgQIECBAgAABAgQIEKixgMC3xpWjaAQIECBAgAABAgQIECDQvoDAt31DORAgQIAAAQIECBAgQIBAjQUEvjWuHEUjQIAAAQIECBAgQIAAgfYFBL7tG8qBAAECBAgQIECAAAECBGosIPCtceUoGgECBAgQIECAAAECBAi0LyDwbd9QDgQIECBAgAABAgQIECBQYwGBb40rR9EIECBAgAABAgQIECBAoH0BgW/7hnIgQIAAAQIECBAgQIAAgRoLCHxrXDmKRoAAAQIECBAgQIAAAQLtCwh82zeUAwECBAgQIECAAAECBAjUWEDgW+PKUTQCBAgQIECAAAECBAgQaF9A4Nu+oRwIECBAgAABAgQIECBAoMYCAt8aV46iESBAgAABAgQIECBAgED7AgLf9g3lQIAAAQIECBAgQIAAAQI1FhD41rhyFI0AAQIECBAgQIAAAQIE2hcQ+LZvKAcCBAgQIECAAAECBAgQqLGAwLfGlaNoBAgQIECAAAECBAgQINC+gMC3fUM5ECBAgAABAgQIECBAgECNBQS+Na4cRSNAgAABAgQIECBAgACB9gUEvu0byoEAAQIECBAgQIAAAQIEaiwg8K1x5SgaAQIECBAgQIAAAQIECLQvIPBt31AOBAgQIECAAAECBAgQIFBjAYFvjStH0QgQIECAAAECBAgQIECgfQGBb/uGciBAgAABAgQIECBAgACBGgsIfGtcOYpGgAABAgQIECBAgAABAu0LCHzbN5QDAQIECBAgQIAAAQIECNRYQOBb48pRNAIECBAgQIAAAQIECBBoX0Dg276hHAgQIECAAAECBAgQIECgxgIC3xpXjqIRIECAAAECBAgQIECAQPsCAt/2DeVAgAABAgQIECBAgAABAjUWEPjWuHIUjQABAgQIECBAgAABAgTaFxD4tm8oBwIECBAgQIAAAQIECBCosYDAt8aVo2gECBAgQIAAAQIECBAg0L6AwLd9QzkQIECAAAECBAgQIECAQI0FBL41rhxFI0CAAAECBAgQIECAAIH2BQS+7RvKgQABAgQIECBAgAABAgRqLCDwrXHlKBoBAgQIECBAgAABAgQItC8g8G3fUA4ECBAgQIAAAQIECBAgUGMBgW+NK0fRCBAgQIAAAQIECBAgQKB9AYFv+4ZyIECAAAECBAgQIECAAIEaCwh8a1w5ikaAAAECBAgQIECAAAEC7QsIfNs3lAMBAgQIECBAgAABAgQI1FhA4FvjylE0AgQIECBAgAABAgQIEGhfQODbvqEcCBAgQIAAAQIECBAgQKDGAgLfGleOohEgQIAAAQIECBAgQIBA+wIC3/YN5UCAAAECBAgQIECAAAECNRYQ+Na4chSNAAECBAgQIECAAAECBNoXEPi2bygHAgQIECBAgAABAgQIEKixgMC3xpWjaAQIECBAgAABAgQIECDQvoDAt31DORAgQIAAAQIECBAgQIBAjQUEvjWuHEUjQIAAAQIECBAgQIAAgfYFBL7tG8qBAAECBAgQIECAAAECBGosIPCtceUoGgECBAgQIECAAAECBAi0LyDwbd9QDgQIECBAgAABAgQIECBQYwGBb40rR9EIECBAgAABAgQIECBAoH0BgW/7hnIgQIAAAQIECBAgQIAAgRoLCHxrXDmKRoAAAQIECBAgQIAAAQLtCwh82zeUAwECBAgQIECAAAECBAjUWEDgW+PKUTQCBAgQIECAAAECBAgQaF9A4Nu+oRwIECBAgAABAgQIECBAoMYCAt8aV46iESBAgAABAgQIECBAgED7AgLf9g3lQIAAAQIECBAgQIAAAQI1FhD41rhyFI0AAQIECBAgQIAAAQIE2hcQ+LZvKAcCBAgQIECAAAECBAgQqLGAwLfGlaNoBAgQIECAAAECBAgQINC+gMC3fUM5ECBAgAABAgQIECBAgECNBQS+Na4cRSNAgAABAgQIECBAgACB9gXGFGVqPxs5ECBAgAABAgQIECBAgACBegro8a1nvSgVAQIECBAgQIAAAQIECHRIQODbIUjZECBAgAABAgQIECBAgEA9BQS+9awXpSJAgAABAgQIECBAgACBDgkIfDsEKRsCBAgQIECAAAECBAgQqKeAwLee9aJUBAgQIECAAAECBAgQINAhAYFvhyBlQ4AAAQIECBAgQIAAAQL1FBD41rNelIoAAQIECBAgQIAAAQIEOiQg8O0QpGwIECBAgAABAgQIECBAoJ4CAt961otSESBAgECHBYqiSG+++WaHc5VdLws888wz6fnnn+/lQ1D2GgloTzWqDEUhMISAwHcIFG8RINCewAsvvJDGjBmTHnzwwUEZnXrqqWmVVVYZ9J4XBIYTePLJJ3N72nXXXQetevbZZ6e11lorv7fvvvumgw8+eNDysV/88Y9/TB/+8IfHfju//ve//50uu+yyIZd5s/8ErrvuuvSxj30srbjiimnBBRdMH/nIR9KVV17ZfwfqiEZEoFvt6eGHH06bbbbZOMd4zjnnpOOOO26c971BYLQLCHxHewtw/AQIEOgRgQsvvDD95S9/GbK0EfR+6UtfGnLZhLwZ+Z588skTsqqnUE2tAABAAElEQVR1elzg7bffTptvvnnaZ5990t13350eeeSRtP322+f3Xn/99R4/OsUfaYFutKcXX3wxn6+22GKLdOONNzYP+Y477khHHnlk2muvvXLbbi7whACBLCDw1RAIEOiawCGHHJIWWWSRtPTSS6dvfvObzXKsvfba6f777x/0Oq5sRzr22GPTEksskeaff/703e9+t7mOJ/0v8PWvfz3tvvvuKYYsj52i9/eiiy7Kb0fPXfTsRi/emWeembbbbrvm6rHtoYcemuabb7603HLLpX/84x/pzjvvTAcddFC66aab0p577tlc15P+FHjuuefSs88+m97//vfnA5xiiinS5z//+fT//t//S6+99lq+uLLVVls1D/6WW25Jn/nMZ/LrE088McXftttum4444ojmOp6MXoEq21Ocy9ZYY400zzzz5Db41FNPZegIfGOUyrzzzjsI/oEHHkixTpzfBqZddtklRS9wI51//vn5XNp47ZHAaBEQ+I6WmnacBLogED1o3/72t5t/V111VbMUt912Wx5aePHFF6f4EP7+97+f/vrXv+blf/vb3/IX0MbK8X70xESAcvrpp6err746/eQnP8lDueLDXxodAjvttFO+R/eMM84Y54DjQsl//vOf9Oqrr6ZtttkmHXDAATnAPeaYY9If/vCH5vrRI/L000+nyy+/PH3gAx/IAe8CCyyQe0jiAsyBBx7YXNeT/hSYeeaZ0+qrr5422mijtN9+++XzSbSbaF8zzDBDeumll1K0k0aK13HuiRQX4OICzCyzzJIGBseNdT2OPoGq2lNcpNt///1zG42LL5Eaw5fnnHPOfBF47FEuH//4x/P7a6655qCK+OAHP5ji4mAjxfO46CwRGG0CAt/RVuOOl8AICsSXx9tvv73599///re59/iCGVegF1tssTTrrLOmueaaa7zDWBsbxZDEJ554IsU9n6uttloOaGafffbGYo99LjDppJPm3rYIaqPHbqh0/fXXp09+8pMphgDGyIEY8jewh3j66afPXx6XXHLJtNtuu6V//etfKXr83ve+96VpppkmzTHHHENl670+E7jiiivykNC4yLbpppumCCQmtAd3+eWXz21o4YUX7jMVhzOxAlW0p7gYExeP4wLNjDPOmBZaaKF08803T1QRY2j/b37zm/Tyyy+nV155JcU9ydHuJQKjTWCy0XbAjpcAgZETOOGEE/IQrcYeY3KrH//4x/nl1FNPnQ477LAUPb7xoR5DDMeX4h6qSDGRUQxb/ehHP5qD5c997nPpa1/72vg2834fCqy88spp/fXXz/Uez8dO1157bRoYkKy00kqDVokAZ5JJ/vea77TTTpt7iAet4MWoEIiLHHFfb/xFIHDWWWelGA4a55ax01tvvTXorWWXXXbQay8IVNGe4jMyenpjJELMPB7nrrhIPDFp7rnnTh/60IdSnB9j4skY3RIXmyUCo01Aj+9oq3HHS6AmAnFPb/TaxeQyd911V1pqqaUGlazRSxf3MjV69+LD/xvf+Ebu8Y377OLL6qWXXjpoOy/6XyCGz5977rnp1ltvHedgo1d44Gzijz766KB1Yrk0ugUuuOCCFL22jRRBy84775zv+W7cOvHOO+80Fuf21DgfNd/0hMD/CVTVnmLSqjjX/fKXv0xxHtt7771z0Dqx8DEKJm7xiNnrt9xyy4nNxnYEelpA4NvT1afwBHpXIO6ZW2eddVIMPY37M3//+983h6TGhB0xLCvSwAk5YlbfmNxo8sknTxtssEH+ohq/myiNLoEY3h49/XHxY+y06qqrpmuuuSY99NBDKUYKDLXO2NvE68kmm0zv71Awffhe/ITRP//5z0E/XxRD3uMiXPSKxfkn7hePiYIiAD7vvPP6UMEhdUqgqvYUn5HRHuPntmLUQcyF0c4FmBjuHEOy4y+eSwRGo4DAdzTWumMmUAOBPfbYozlc9bOf/Wwewhw/wxAzZMa9l3FvZnzgx71IjZkr44r1b3/72xSTEcUw17jnd+utt67B0SjCSAvE7Mtxz9vYXwQ32WSTPDQwZkKNdhL37E455ZTDFi96ACP42XHHHYdd1wq9LRDnk1NOOSXPzBxtKGaJ33jjjfP5KNpBzIgbt1UsuuiiafHFF8/tqLePWOmrFKiqPcXnXVx8iaH10UZjXouYFHJiRznFzNBR1phXwzDnKluEvOssMKb80jDu70LUucTKRoBA3wjE5B0xUVV8IEeKiatmm222/Dwm4XjjjTfSe9/73vy68U+8F8MR416nmJBIIjBQINpQXDyJiyZxL1tcOIkgJ0YLDJfefPPN3Obi3l+p/wXi/BO9vDHHQOMcNPCoH3/88TTTTDPlESYD3/ecwFACVbWne++9NwesMSrlhRdeyJPxTTXVVEMVYdj3PvGJT+SfRTIj+bBUVuhTAYFvn1aswyJAgMBoFIh74WJCq4MPPjj/5Ez8Zm/8Rm/0nkgECBAYjQL33XdfuuSSS/LPBsbIlrhdSCIwGgUMdR6Nte6YCRAg0KcCMbT5oosuyvdoxrD4o48+WtDbp3XtsAgQmDCB119/Pf9ywg033CDonTAya/WpgB7fPq1Yh0WAAAECBAgQIECAAAEC/yugx1dLIECAAAECBAgQIECAAIG+FhD49nX1OjgCBAgQIECAAAECBAgQEPhqAwQIECBAgAABAgQIECDQ1wIC376uXgdHgAABAgQIECBAgAABAgJfbYAAAQIECBAgQIAAAQIE+lpA4NvX1evgCBAgQIAAAQIECBAgQEDgqw0QIECAAAECBAgQIECAQF8LCHz7unodHAECBAgQIECAAAECBAgIfLUBAgQIECBAgAABAgQIEOhrAYFvX1evgyNAgAABAgQIECBAgAABga82QIAAAQIECBAgQIAAAQJ9LSDw7evqdXAEuitwxx13pE984hPptddeS0sssUQuzGWXXZbGjBkzzt9WW22Vl1999dVpyy23TBtvvHE66aST0ksvvTRB2zWO9D//+U9aYYUV8j7jveH2N77tGu97rI/AUO3pnXfeSd/61rfSeuutl774xS+mX/ziF80CP/LII2nnnXdOa6+9djr44IPTnXfe2Vw2vnbWXMGTvhcYX3s65phj0jrrrJO22267dP311w9y+OEPf5g+/vGP5/Z28cUX52Vxfotz2jTTTJOmm266/Lfsssum8847r7nt9773vTTFFFOkmWeeOc0000xp+umnT+uuu2566KGH8jrjO09NPfXUzTwaT3784x+nvffeu/HSY00EhmpPUbTTTz89fw7GZ9wll1yS3nzzzUElLooifeYznxl07vrb3/6W9t9//9zW4nPwxRdfbG4zvvyeeeaZdNxxx6X1118/HXjggemuu+5qbjPllFOO85k7ySRCgCaQJ6NGQKsfNVXtQAmMvEAEF/EhfMMNN6SPfvSjzQIstNBCKT7sB/6df/75+YM6vmyuuuqqOVD5+c9/noPfxobj266xPIKgnXbaKd18880pnjfSxG7X2N5jPQSGak9HH310igAkAoHNNtssByv33HNPLnBcdIk2FoHxZJNNlr9cxoL4QtiqndXjaJWiaoGh2tNPfvKTHLBG4BAX3yIguf3223NRTjvttPSDH/wgfeUrX0m77LJLvqjy9NNPN4v597//PV+oe/bZZ1O0yy996Uvp3HPPbS7fYIMNUqwfAcoTTzyRnnvuufSNb3yjuXzxxRcfdE6Mtvvqq682l8eTu+++O335y19O995776D3vei+wFDtKT7Xoo7j3LTHHnukQw45JAfCA0t7wgknpJ/97Ge5bcT7r7/+ev7cXGaZZdLhhx+errjiivTNb34zb9Iqv//5n/9J//znP3Pbe8973pM++clPprfffru5q1tvvXVQ+xr4GdlcyRMCfS4g8O3zCnZ4BLohEF/8jjzyyHTGGWc0P4gff/zx/AHeqjx/+ctfUlwVjyAmeky22GKLdO2117baZNCy73znO2n11VfP70UPzISmid1uQvO3XnsCrdrTX//613TEEUc0e+E+/OEPp1//+tfp+eefTy+88EIOVJZbbrm0++675wAmgo5221l7R2Prbgu0ak8RqEbAuuaaa6ZNN9009+xGL12kww47LActa6yxRtpkk03SL3/5y0GBReO4Jp988vSxj30sRSASF12GSlNNNVWKdvlu0ltvvZVHNey6667vZjPrVizQqj3F59e+++6btt9++7TaaqulL3zhC+mCCy5olih6iS+99NLcXhpv3nbbbbl3dptttsmfg/GZ+Pvf/z4vbpXflVdemS/oLbXUUjnIvu+++9KTTz7ZyDbn2XzhCYFRKjDZKD1uh02AQIUCMYRq+eWXT6eeemrafPPN04477phOPvnk9MEPfjD94x//yMO2Bg4DjKLEF8lPf/rT+S96RaL3JIYc7rPPPs2SxnCvobaLYVzRKxNXxuPva1/7WnObeDKx2w3KxIuuCbRqT40etfiSFyML/vSnP6Uf/ehHaYYZZsi9YxEsRE/HiSeemL94xjDT4dpZ1w7UjkdEoFV7imGoEbg2Utxq8a9//Su98cYb6amnnkr//e9/01e/+tW04IIL5l7f2WabrXlbRWObxuMqq6yS9ttvv2Zw/OCDD6YYphw9uffff3+66KKLcvDcWD8u1ox9flt44YVz8BPrNC7wzD777M1e6Ma2Hrsn0Ko9xcWSOBc10o033pjPQ/E62tTnP//5fIE4hjU3Unx2xrD5uFgXF/LiwmxcjInUKr84r0U+cWEkRkvFReBoK4101VVXDbrdIy68xGgoicBoEhD4jqbadqwERkggPujjHrYYsrz00kunWWaZJcUwv0gR+MYXvOOPP35QaWJIdASwkX71q1/lD/0Y8hXBciONb7v4IhnB9U9/+tM06aSTNlZvPk7sds0MPOmqQKv21ChYDAk855xzcnuL3rRGil7frbfeOg8NjSGqMbwvvqhGGl87a2zrsT8FWrWnGGUS90nON9986bHHHksRLERPXcwdEBdRIvDYa6+98kWW6BV++OGHx4sUF1mivcV2kaL3LYbDNp7HeSsu8DV6fqPnMC4WDkwx3DpGv8QFnejt++1vf5vb+cB1PO+uQKv21CjZK6+8koPXqMe4oBvp61//eh5Ov8giizRWy48xWilGDJx55pn5HvO42DLPPPPkZXPOOWd+HCq/CHSPPfbYHCjH7Rwx58HAFBcJp5122uZbcVFG4Nvk8GS0CJQnXokAAQIdFSh7Jopy4paivK+3KIOOopzYqiiH/OV9lMO6ivLDdtj9lV8Yi/JDvCiD5iKet9qu7IEpyns2i3IIa3HTTTcV5fm7KIeGFWXQM9HbDVtAK4yYQKv2NLAQL7/8crHWWmsV5YRWA9/Oz8v7fotycqGiHAY9aNnY7WzQQi/6UqBVeyp7eItyWGpR9pQVK664YlGOOCnKoapFOSQ1n1fKya6aJmWPblHeX16U9+HmZdHGBqbf/OY3xWKLLZbfKoOdorzncuDifI6K/ZT3YebzVHmP76DljRexvOz5Lcr7j/M5rgy+i4985CNFOcqlsYrHLgq0ak9RrPJib1FeSCnK0U9FOZopl/TPf/5zMe+88xZlIJzrtLy4UpT3AhflBZbi7LPPLsoAtygv2OZ1TznllKK8AJyfxz9D5VeOairKkQpFOeIpr1dekCnKC4BFOUlWfh3nvnIIdX7uHwKjWcA9vqPlCofjJDCCAtG7G/dSxrCr8gSbh3NFz8Vw6bvf/W6KyWUixVXvbbfdNkUvSEwC0ypFz3D0nMT9U7vttlteNR5joo9WaWK3a5WnZZ0XaNWeNtxwwzz8NPYawwNjEpkHHngg38e7ww47NAsTQ1NXXnnlPMR0YttZMzNPelqgVXuKSadisqFHH300/fGPf8yTS8Wok7nmmisfc7SjRoret1h/fCkmLIqhquNLZVCce5Vj/oNWKSYoitmiozcvznExq2/M+rvnnnu22syyERJo1Z5ior2YZCqGK1944YV5Ru8oVvT+x4iAmCQt6jTqMyZPi17eW265Jc9EH6OmIsUohH//+9/5c3B8+cX2MWt4zG4fKdpmeXEkjxTIb/iHAIH/FRjNUb9jJ0CgGoHyPrniAx/4QM68HMbXvModb7TquS3vecu9LOVPfORe3uglKT/Icz6ttssr/N8/5bDC3PtSDgVra7uBeXreXYFW7SlGFESPf/mTMkX0+JbDT4vyHt/cCzfjjDMW0esWqfziWJQznRblfZpFq3bW3SO195EQaNWeyon1inKIaC5Ged94Mffccxflvbn5dYxgKecPyD205cWVYtZZZy3KwLfZ41tefMttMN4rA50i2l/5E1p52ziXlRdp8vJop+WkbEX5s21FOXNvXh7nt3LIaz5XRq/gwL8YlTAwlUP6c14D3/O8ewKt2lOMHjjggAOa9R51HyMExk7lHBdFef93frucD6N4//vfn9tWvFEGw0X0CEcaX37lsPyinLm+KH8WK68XbbAMnIvo+Y2kxzcz+IdAocfXFRACBDouED8nFPetRU9teZ5tXuUebkdxn2/coxu9KgsssED+zcP4/VVpdAu0ak9xv2VMZlUOJcz3q80xxxz5d6DjPt/42Ze4DzPuY4u2deihh+bfUdXOtKfxnZ/ivsjocSuHzKdyqHOeUKoMfjNY9ASXw1DT/PPPn8oLe3kSoTL4bWIuueSS+R7KWF5ecMk/UTNwjoKYBTrusYy/+Hm3GM0ycIbf+J3p+J3fsf8G/oZrc2ee1Eag1fnpD3/4QzrqqKOa9R51H3NftEox4VW0v7j3d9FFF83zYcS5K9L48nvf+96Xvv/97+f7z2O7aN8x4qpxT3De2D8ECKQxEfxzIECAQF0E4pQUQ1Vjoisf2nWplXqXo+ztzZNXxcWSqaeeelBhY4bwGI4aXyAHJu1soIbnYwvELOExvLkx4V5jeQw7jt/SjUDjve99b+NtjwQ6LhDntUceeSRfBH43mcew6DgXxm+XSwQIDBYQ+A728IoAAQIECBAgQIAAAQIE+kzAUOc+q1CHQ4AAAQIECBAgQIAAAQKDBQS+gz28IkCAAAECBAgQIECAAIE+ExD49lmFOhwCBAgQIECAAAECBAgQGCwg8B3s4RUBAgQIECBAgAABAgQI9JmAwLfPKtThECBAgAABAgQIECBAgMBgAYHvYA+vCBAgQIAAAQIECBAgQKDPBAS+fVahDocAAQIECBAgQIAAAQIEBgsIfAd7eEWAAAECBAgQIECAAAECfSYg8O2zCnU4BAgQIECAAAECBAgQIDBYQOA72MMrAgQIECBAgAABAgQIEOgzAYFvn1WowyFAgAABAgQIECBAgACBwQIC38EeXhEgQIAAAQIECBAgQIBAnwkIfPusQh0OAQIECBAgQIAAAQIECAwWEPgO9vCKAAECBAgQIECAAAECBPpMQODbZxXqcAgQIDDaBVZbbbU011xzpXfeeWdIinaXD5mpNwkQIDABAs4/E4BkFQIVCQh8K4KVLQECBAiMvMD999+f7rnnnjT55JOnG264YZwCtLt8nAy9QYAAgQkUcP6ZQCirEahIYExRporyli0BAgQIEBhRgSOOOCI9/vjjaYoppkgvvvhiOvXUUwftv93lgzLzggABAu9CwPnnXWBZlUAFAgLfClBlSYAAAQLdEVh00UXTaaedlsaMGZM22mij9Nhjj+Xe30Zp2l3eyMcjAQIE3q2A88+7FbM+gc4KGOrcWU+5ESBAgECXBG655Zb06quvppVXXjmttNJKaeqpp07XXHNNszTtLm9m5AkBAgTepYDzz7sEszqBCgQEvhWgypIAAQIERl7g7LPPTs8//3xabrnl8t9LL72Uzj333GZB2l3ezMgTAgQIvEsB5593CWZ1AhUIGOpcAaosCRAgQGBkBd5+++08k/N3vvOdtMACC+Sd33fffWm33XZLTzzxRL7nN2Z6ntjl0XssESBAYGIE2j0/Of9MjLptCIwrIPAd18Q7BAgQINBjAldddVXaddddU8ya2kgxd+M888yTjjnmmDT99NO3tXzLLbdsZOuRAAEC70qg3fOT88+74rYygfEKTDbeJRYQIECAAIEeEYhhhFtsscWg0sYEVxtvvHEe7jzttNO2tdwXz0G0XhAg8C4E2j0/Of+8C2yrEmghoMe3BY5FBAgQIECAAAECBAgQIND7Aia36v06dAQECBAgQIAAAQIECBAg0EJA4NsCxyICBAgQIECAAAECBAgQ6H0BgW/v16EjIECAAAECBAgQIECAAIEWAgLfFjgWESBAgAABAgQIECBAgEDvCwh8e78OHQEBAgQIECBAgAABAgQItBAQ+LbAsYgAAQIECBAgQIAAAQIEel9A4Nv7degICBAgQIAAAQIECBAgQKCFgMC3BY5FBAgQIECAAAECBAgQIND7AgLf3q9DR0CAAAECBAgQIECAAAECLQQEvi1wLCJAgAABAgQIECBAgACB3hcQ+PZ+HToCAgQIECBAgAABAgQIEGghIPBtgWMRAQIECBAgQIAAAQIECPS+gMC39+vQERAgQIAAAQIECBAgQIBACwGBbwsciwgQIECAAAECBAgQIECg9wUEvr1fh46AAAECBAgQIECAAAECBFoICHxb4FhEgAABAgQIECBAgAABAr0vIPDt/Tp0BAQIECBAgAABAgQIECDQQkDg2wLHIgIECBAgQIAAAQIECBDofQGBb+/XoSMgQIAAAQIECBAgQIAAgRYCAt8WOBYRIECAAAECBAgQIECAQO8LCHx7vw4dAQECBAgQIECAAAECBAi0EBD4tsCxiAABAgQIECBAgAABAgR6X0Dg2/t16AgIECBAgAABAgQIECBAoIWAwLcFjkUECBAgQIAAAQIECBAg0PsCAt/er0NHQIAAAQIECBAgQIAAAQItBAS+LXAsIkCAAAECBAgQIECAAIHeFxD49n4dOgICBAgQIECAAAECBAgQaCEg8G2BYxEBAgQIECBAgAABAgQI9L6AwLf369ARECBAgAABAgQIECBAgEALAYFvCxyLCBAgQIAAAQIECBAgQKD3BQS+vV+HjoAAAQIECBAgQIAAAQIEWggIfFvgWESAAAECBAgQIECAAAECvS8g8O39OnQEBAgQIECAAAECBAgQINBCQODbAsciAgQIECBAgAABAgQIEOh9AYFv79ehIyBAgAABAgQIECBAgACBFgIC3xY4FhEgQIAAAQIECBAgQIBA7wsIfHu/Dh0BAQIECBAgQIAAAQIECLQQEPi2wLGIAAECBAgQIECAAAECBHpfQODb+3XoCAgQIECAAAECBAgQIECghYDAtwWORQQIECBAgAABAgQIECDQ+wIC396vQ0dAgAABAgQIECBAgAABAi0EBL4tcCwiQIAAAQIECBAgQIAAgd4XEPj2fh06AgIECBAgQIAAAQIECBBoISDwbYFjEQECBAgQIECAAAECBAj0voDAt/fr0BEQIECAAAECBAgQIECAQAsBgW8LHIsIECBAgAABAgQIECBAoPcFBL69X4eOgAABAgQIECBAgAABAgRaCAh8W+BYRIAAAQIECBAgQIAAAQK9LyDw7f06dAQECBAgQIAAAQIECBAg0EJA4NsCxyICBAgQIECAAAECBAgQ6H0BgW/v16EjIECAAAECBAgQIECAAIEWAgLfFjgWESBAgAABAgQIECBAgEDvCwh8e78OHQEBAgQIECBAgAABAgQItBAQ+LbAsYgAAQIECBAgQIAAAQIEel9A4Nv7degICBAgQIAAAQIECBAgQKCFwGQtlllEgACBiRJ4/uIzJmo7G1UjMMOmO1ST8Qjl+si+W47QnuxmQgTmPPaCCVmttuscf8+FtS3baCzYXgtt0dOHvdhRH+/p8vdb4e844Ip+OyTH00EBPb4dxJQVAQIECBAgQIAAAQIECNRPQOBbvzpRIgIECBAgQIAAAQIECBDooIDAt4OYsiJAgAABAgQIECBAgACB+gkIfOtXJ0pEgAABAgQIECBAgAABAh0UEPh2EFNWBAgQIECAAAECBAgQIFA/AYFv/epEiQgQIECAAAECBAgQIECggwIC3w5iyooAAQIECBAgQIAAAQIE6icg8K1fnSgRAQIECBAgQIAAAQIECHRQQODbQUxZESBAgAABAgQIECBAgED9BAS+9asTJSJAgAABAgQIECBAgACBDgoIfDuIKSsCBAgQIECAAAECBAgQqJ+AwLd+daJEBAgQIECAAAECBAgQINBBAYFvBzFlRYAAAQIECBAgQIAAAQL1ExD41q9OlIgAAQIECBAgQIAAAQIEOigg8O0gpqwIECBAgAABAgQIECBAoH4CAt/61YkSESBAgAABAgQIECBAgEAHBQS+HcSUFQECBAgQIECAAAECBAjUT0DgW786USICBAgQIECAAAECBAgQ6KCAwLeDmLIiQIAAAQIECBAgQIAAgfoJCHzrVydKRIAAAQIECBAgQIAAAQIdFBD4dhBTVgQIECBAgAABAgQIECBQPwGBb/3qRIkIECBAgAABAgQIECBAoIMCAt8OYsqKAAECBAgQIECAAAECBOonIPCtX50oEQECBAgQIECAAAECBAh0UEDg20FMWREgQIAAAQIECBAgQIBA/QQEvvWrEyUiQIAAAQIECBAgQIAAgQ4KCHw7iCkrAgQIECBAgAABAgQIEKifgMC3fnWiRAQIECBAgAABAgQIECDQQQGBbwcxZUWAAAECBAgQIECAAAEC9RMQ+NavTpSIAAECBAgQIECAAAECBDooIPDtIKasCBAgQIAAAQIECBAgQKB+AgLf+tWJEhEgQIAAAQIECBAgQIBABwUEvh3ElBUBAgQIECBAgAABAgQI1E9A4Fu/OlEiAgQIECBAgAABAgQIEOiggMC3g5iyIkCAAAECBAgQIECAAIH6CQh861cnSkSAAAECBAgQIECAAAECHRQQ+HYQU1YECBAgQIAAAQIECBAgUD8BgW/96kSJCBAgQIAAAQIECBAgQKCDAgLfDmLKigABAgQIECBAgAABAgTqJyDwrV+dKBEBAgQIECBAgAABAgQIdFBA4NtBTFkRIECAAAECBAgQIECAQP0EBL71qxMlIkCAAAECBAgQIECAAIEOCgh8O4gpKwIECBAgQIAAAQIECBCon4DAt351okQECBAgQIAAAQIECBAg0EEBgW8HMWVFgAABAgQIECBAgAABAvUTEPjWr06UiAABAgQIECBAgAABAgQ6KCDw7SCmrAgQIECAAAECBAgQIECgfgIC3/rViRIRIECAAAECBAgQIECAQAcFBL4dxJQVAQIECBAgQIAAAQIECNRPQOBbvzpRIgIECBAgQIAAAQIECBDooIDAt4OYsiJAgAABAgQIECBAgACB+gkIfOtXJ0pEgAABAgQIECBAgAABAh0UEPh2EFNWBAgQIECAAAECBAgQIFA/AYFv/epEiQgQIECAAAECBAgQIECggwIC3w5iyooAAQIECBAgQIAAAQIE6icg8K1fnSgRAQIECBAgQIAAAQIECHRQQODbQUxZESBAgAABAgQIECBAgED9BAS+9asTJSJAgAABAgQIECBAgACBDgoIfDuIKSsCBAgQIECAAAECBAgQqJ+AwLd+daJEBAgQIECAAAECBAgQINBBAYFvBzFlRYAAAQIECBAgQIAAAQL1ExD41q9OlIgAAQIECBAgQIAAAQIEOigg8O0gpqwIECBAgAABAgQIECBAoH4CAt/61YkSESBAgAABAgQIECBAgEAHBQS+HcSUFQECBAgQIECAAAECBAjUT0DgW786USICBAgQIECAAAECBAgQ6KCAwLeDmLIiQIAAAQIECBAgQIAAgfoJCHzrVydKRIAAAQIECBAgQIAAAQIdFBD4dhBTVgQIECBAgAABAgQIECBQPwGBb/3qRIkIECBAgAABAgQIECBAoIMCAt8OYsqKAAECBAgQIECAAAECBOonIPCtX50oEQECBAgQIECAAAECBAh0UEDg20FMWREgQIAAAQIECBAgQIBA/QQEvvWrEyUiQIAAAQIECBAgQIAAgQ4KCHw7iCkrAgQIECBAgAABAgQIEKifgMC3fnWiRAQIECBAgAABAgQIECDQQQGBbwcxZUWAAAECBAgQIECAAAEC9RMQ+NavTpSIAAECBAgQIECAAAECBDooIPDtIKasCBAgQIAAAQIECBAgQKB+AgLf+tWJEhEgQIAAAQIECBAgQIBABwUEvh3ElBUBAgQIECBAgAABAgQI1E9A4Fu/OlEiAgQIECBAgAABAgQIEOiggMC3g5iyIkCAAAECBAgQIECAAIH6CQh861cnSkSAAAECBAgQIECAAAECHRQQ+HYQU1YECBAgQIAAAQIECBAgUD8BgW/96kSJCBAgQIAAAQIECBAgQKCDAgLfDmLKigABAgQIECBAgAABAgTqJyDwrV+dKBEBAgQIECBAgAABAgQIdFBA4NtBTFkRIECAAAECBAgQIECAQP0EBL71qxMlIkCAAAECBAgQIECAAIEOCgh8O4gpKwIECBAgQIAAAQIECBCon4DAt351okQECBAgQIAAAQIECBAg0EEBgW8HMWVFgAABAgQIECBAgAABAvUTEPjWr06UiAABAgQIECBAgAABAgQ6KCDw7SCmrAgQIECAAAECBAgQIECgfgIC3/rViRIRIECAAAECBAgQIECAQAcFBL4dxJQVAQIECBAgQIAAAQIECNRPQOBbvzpRIgIECBAgQIAAAQIECBDooIDAt4OYsiJAgAABAgQIECBAgACB+gmMKcpUv2IpEQECBAgQIECAAAECBAgQ6IyAHt/OOMqFAAECBAgQIECAAAECBGoqIPCtacUoFgECBAgQIECAAAECBAh0RkDg2xlHuRAgQIAAAQIECBAgQIBATQUEvjWtGMUiQIAAAQIECBAgQIAAgc4ICHw74ygXAgQIECBAgAABAgQIEKipgMC3phWjWAQIECBAgAABAgQIECDQGQGBb2cc5UKAAAECBAgQIECAAAECNRUQ+Na0YhSLAAECBAgQIECAAAECBDojIPDtjKNcCBDoosAbb7yRiqLoYgnsup8EtKd+qk3HQoAAAQIE/ldA4KslECBQicCUU06ZpplmmjTddNOlqaaaKi2//PLphz/8YSX7WmCBBdKdd95ZSd4yrYdAr7annXfeOf31r38dhPjwww+nzTbbbNB7XoyswEi2p5E9MnvrhkAd29M555yTjjvuuHE4hjonjbOSNwj0qYDAt08r1mERqIPATTfdlF566aX02muvpaOPPjrttttu6cEHH6xD0ZShBwV6qT1dfvnl6Ytf/GI69dRT03PPPZe1X3zxxXTyySenLbbYIt144409WAP9VeReak/9Jd+fR1OX9nTHHXekI488Mu21117p7rvvbmIPdU5qLvSEwCgREPiOkop2mAS6LbDmmmumhRZaqPmF/29/+1taffXV09xzz52233779MILLzSLeMghh6RFFlkkLb300umb3/xm8/3oKVtvvfXSTDPNlDbddNNBPWnXXntt7lWeb775cnDR3MiTvhSoQ3t65JFH0jbbbJPmmmuutO6666Zf//rXTeu///3vadppp03vec97mu9F4Pvvf/87zTvvvM334snPfvaztOOOOzbfe/rpp9MKK6ww6P9Ec6EnlQh0oj196lOfSj//+c/zeSjqXxq9AiPRnsb3OfnAAw+kp556KsVn4cA01Dnp2Wefze31ySefbK76hS98IV1yySXN154Q6CuB8r44iQABAh0XmGKKKYrbbrst5/vqq68WF1xwQTHppJMWjz/+ePH8888Xs8wyS3HMMccU999/f7HTTjsV5ZfGvO6tt95alMOii3/+859FOXy5KIOK4vbbb8/LVl111aK8il2UvcbFV77ylWLZZZfN78c6K620UvH73/+++NGPfpT388orr+Rl/ukPgTq2pwMOOKDYd999i8cee6w466yzivJiTfHOO+8MAi+D3OI3v/nNoPf+/Oc/F7POOmvzvWjPk08+eVF+Cc3vnXnmmcVqq63WXO5J5wWqaE/lLRfFoosuWpxwwglFeSGv84WWY20FRro9tfqcbCDtt99+xe6779542Xwc+5y08sorF2eccUZeHp/N5bDtorzI3FzfEwL9JBATwkgECBDouEB8ESivEjb/yvt9i8MPPzzvp7zXtyh7tJr7LK825y/+5bDo4t577y3K4Vl5Wdnzldc77bTTirvuuquYZJJJigiiI0Vge9hhh+VAIwLfK6+8Mr8f/8w+++zNYLn5pic9LVDH9vS73/2uKHtxcxuMizzR3scOeMb+khmVMHbgG+/FhZtzzz03nhbl/b9FeW9efu6fagQ63Z6ilBH4xrlNGn0CI92exvc5OVB+QgPf733ve0U5gipvev755xdxgVki0K8Ck/VV97WDIUCgVgLXX399WnLJJdOYMWPSjDPOmMrANZfvnnvuSTHsarbZZmuWt+wpSzHEc+qpp05lQJsuvvjivE3cHxwphm/NP//8eaKseB3rHXzwwfE0pxgy3UgxxLQMkBsvPfaJQN3a01tvvZU23njjVAa9aYkllmhLOe77jXvwYgh/DNsfalKatnZg43EEOtmeGpmXo1AaTz2OMoGRbE/j+5ycGPKYaC+GTb/++uvpsssuy3MQTEw+tiHQCwLu8e2FWlJGAj0qEMHuzDPPnO/JbQS9cSgzzDBDvifyiSeeSI2/mPQqgte4pzfuO4pJOcpe3rTUUkvlo497fmPdt99+O79+880309lnn52fxz8D82++6UlfCdSpPUU7/PSnP5222267FPfHXX311W1Zb7755umqq67KQW9cLIr7hqVqBTrZnholjYt80ugUGMn2NL7PyYmRn2eeedLiiy+ezz1xDopzkUSgXwUEvv1as46LQI0FYuKPuDremOE5fnZhjTXWyD3D8bNE66yzTpp++ulTef9vKu/bzb/RGx/O0eMbEwFFKu+DzD1kNT5MRRshgW60p7g4EyMUNtpoo3zRpbzHt62jjfa98MILpwMPPFCPS1uS7W88Me2p/b3KoV8FqmhP4/ucnFjDGHFy0EEH5UklXXSbWEXb9YKAoc69UEvKSKDPBMr7GdOee+6Zv+gvuOCC6eWXX2723u6xxx5pl112SeUkVamcDCv3qMVPM8RwrCOOOCL3ssUHdAxnjuBXItCN9lROzpZnI19mmWXyiIZVVlklz45a3leXTjnllImqlPjyWU6YlbbeeuuJ2t5GnRGY2PbUmb3Lpd8EqmhPrT4no+f53ab4fP3yl7/sFxHeLZz1e05gTNy83HOlVmACBPpCIH5yIX6iqJwJNZWTgzSPKe7PjeGj0QsWKYY4N+4HfuONN/JPNcw555zN9T0hEALdaE+PPvpovggTIxRi+HP8Zm8M75+YFL3G8TMiF1100cRsbpsOC0xMe+pwEWTXRwKdbk+tPiffLVs5m3MqJ2fLo6ziXCYR6FcBgW+/1qzjIkCAAIGeEYgRDuXPe6VyBvMUvccSAQIERkLguuuuS6effnoqf2ItHXvssSOxS/sg0DUBQ527Rm/HBAgQIEDgfwVi1nJBr9ZAgMBICzz++ONpvfXWS1tuueVI79r+CIy4gB7fESe3QwIECBAgQIAAAQIECBAYSQGzOo+ktn0RIECAAAECBAgQIECAwIgLCHxHnNwOCRAgQIAAAQIECBAgQGAkBQS+I6ltXwQIECBAgAABAgQIECAw4gIC3xEnt0MCBAgQIECAAAECBAgQGEkBge9IatsXAQIECBAgQIAAAQIECIy4gMB3xMntkAABAgQIECBAgAABAgRGUkDgO5La9kWAAAECBAgQIECAAAECIy4g8B1xcjskQIAAAQIECBAgQIAAgZEUEPiOpLZ9ESBAgAABAgQIECBAgMCICwh8R5zcDgkQIECAAAECBAgQIEBgJAUEviOpbV8ECBAgQIAAAQIECBAgMOICAt8RJ7dDAqNH4I477kif+MQn0muvvZaWWGKJfOCXXXZZGjNmzDh/U089dcvlW221VRPu+OOPz9vfeOONzffiSexryimnTNNNN12K/BZccMG077775v0PWrF8sdpqq6W55porvfPOO4MW/fvf/0577713+vjHP56+853vjLN80MpejKjAxLSnqN9vfetbab311ktf/OIX0y9+8Ytc5rvvvjt95jOfGefvRz/6UV4+vnbw+uuvj7PNTTfdlLd5/PHH0y677JLWWmut9OUvfzk9+uijI+pjZ+9OYKj2FO3lmGOOSeuss07abrvt0vXXX9/M9JFHHkk777xzWnvttdPBBx+c7rzzzrwszm9xTptmmmnyuSfOP8suu2w677zzmts2njz88MNp0kknTXvuuWfjrUGP41v+ve99L00xxRRp5plnTjPNNFOafvrp07rrrpseeuihQdt70T2BodpTlOb000/Pn03xGXbJJZekN998Mxcyzj9DfRZGu4v0zDPPpOOOOy6tv/766cADD0x33XVXfj/+ic+mgeevY489trms8eTHP/5x/ixrvF5ppZVy+4w2FO1nzjnnTPvtt196++23G6t4JND3AgLfvq9iB0igewJXX311/tC+4YYb0kc/+tFmQRZffPFUFMWgv1dffbW5fKGFFhq0LNY9//zzm8vPPvvstMIKK6Rzzz23+V7jyTe+8Y300ksvpcjvV7/6VfrXv/6VPv3pTzcW58f7778/3XPPPWnyySdPUbZGiu0++clP5i8CRx55ZIrA+n/+538aiz12WWBi2tPRRx+dLr744vwFcLPNNsvBTNR9BA+f+tSnBv39/ve/z8FLq3Zw3333pX/84x9p6623bv7NO++8WWbHHXdMk0wySfrud7+bpppqqrTRRhult956q8tqdj8+gaHa009+8pMcsEagsfHGG+fg4vbbb89ZxIW1OBfFhZTJJpssLxuY99///vd87nn22WdTtLsvfelL45yjzjnnnLTccsulCy+8cMiAo9XyDTbYID399NM5IHriiSfSc889l+J8J9VDYKj2FJ9bUUdx7tljjz3SIYcckgPhRokPPfTQcT7rog1Gis+ef/7zn7ktvec972l+NsWyM888M59fGuehuJA7MMWFvbj4du+99w58O/3gBz/IbeiFF15IV155ZTrhhBPy5+Sglbwg0M8C5UlcIkCAQEcFyivVxRFHHFEsueSSxa677lqUPWDFpptuWvzyl78sLr300qIMfMe7v1heBr7jXV72shTlleqiDFKKWWaZpSivnjfXLQON4qijjmq+jicPPvhgUX5JLWK7Rjr88MOL8ktIUX4xLXbaaafG28XPfvazYsUVV2y+/s1vflOUAVJRXhFvvufJyAu0057KL4ZF+YW0WeiPfexjRfnlr/m68eSMM84oyt68/LJVO7j88suLL3zhC43Nmo9PPfVUUX45LV588cX83htvvFG8973v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AgR6WEDg28OVp+gECBAgQIAAAQIECBAgMLyAwHd4I2sQIECAAAECBAgQIECAQA8LCHx7uPIUnQABAgQIECBAgAABAgSGFxD4Dm9kDQIECBAgQIAAAQIECBDoYQGBbw9XnqITIECAAAECBAgQIECAwPACAt/hjaxBgAABAgQIECBAgAABAj0sIPDt4cpTdAIECBAgQIAAAQIECBAYXkDgO7yRNQgQIECAAAECBAgQIECghwUEvj1ceYpOgAABAuMKrLbaammuueZK77zzzrgLy3eGW37SSSelNddcc8htvUmAAIF2BIY7/wy3vJ1925bAaBcQ+I72FuD4CRAg0EcC999/f7rnnnvS5JNPnm644YZxjmy45eNs4A0CBAh0SGC4889wyztUDNkQGLUCAt9RW/UOnAABAv0n8NOf/jRtvvnmabPNNkvnnnvuOAc43PJxNhjrjUceeSRts802uUd53XXXTb/+9a/zGnfeeWfadttt0wknnJDWWGON/N6VV16ZPvzhD6ePfOQj6cwzz0zbbbddM7dTTz01LbbYYvnv+OOPb77vCQEC/Ssw3PlnuOX9K+PICIyMwJiiTCOzK3shQIAAAQLVCiy66KLptNNOS2PGjEkbbbRReuyxx3Lvb2Ovwy2P9WKo889+9rN0/fXXNzZrPh544IHptddeS1/96lfTtddem4488sh0xx13pNtuuy2tvvrqafnll0/7779/Dn7nmGOO9MMf/jC9973vTV/60pfSq6++mu6+++506aWXpn322Sf94Ac/SHPOOWfacsst09e+9rUcODd35AkBAn0nMNz5Z7jlfQfigAiMsIAe3xEGtzsCR4HpNAAADsZJREFUBAgQqEbglltuycHlyiuvnFZaaaU09dRTp2uuuaa5s+GWN1ds8WTDDTdMhx12WJptttnSEksskaKn96WXXspbREB84YUXpg022CAHzZ/85CfTFltskdZee+201157pcZ15gisd99997TeeuulJZdcMu29997pggsuaLFXiwgQ6HWB4c4/wy3v9eNXfgJ1EJisDoVQBgIECBAg0K7A2WefnZ5//vm03HLL5awiII3hzhGsRhpueV5pmH/eeuuttPHGG+ce3gh8B6b55psvzTzzzPmt6A1eeOGFm4sjEG+kuAf55ptvTkcffXR+680330yLLLJIY7FHAgT6UGC4889wy/uQxCERGHEBge+Ik9shAQIECHRa4O23307nnXdeivtlF1hggZz9fffdl3bbbbfcCzzFFFO0XB69w8Ol2MenP/3pdNRRR+We5DfeeCP3Kg+13aSTTpoefPDB5qJHH320+XyGGWZIhx9+eHNoc/QUv/LKK83lnhAg0F8CI3F+6i8xR0OgGgGBbzWuciVAgACBERSIHtYIXj/72c8297rKKqukuCf38ssvT9NPP33L5XGf7cAUPbvPPPPMwLfyzyM9/fTT+d7hSSaZJJ111lmDlg98seqqq+b7eB966KF8H++JJ57YXLzWWmul888/P0/AFW/usMMOOViP+4UlAgT6T6DT56f+E3JEBEZGwD2+I+NsLwQIECBQoUAME4z7aQemmOAqhiXHcOfhlg/cLp7/7ne/y8OWY+hy4+/1119P22+/fVpmmWXy3+23354ns9pvv/3G3jxtsskmaaeddsqTXEUPdEx0NeWUU+b1DjrooBQB9Pzzz5/mnXfe/Dwmy5IIEOhPgeHOP8Mt708VR0Vg5AXM6jzy5vZIgAABAj0sEMOWp5122tyLHEMYn3vuuea9vY3DeuKJJ/L7Cy64YJ5h+rrrrkunnHJKnvwq1omJru699968+kILLdTYzCMBAgQIECBQkYChzhXBypYAAQIE+lMgem8bKe7lbUxo1XgvHiMgXmedddLBBx+cZplllnTooYem6OltpOiNFvA2NDwSIECAAIHqBfT4Vm9sDwQIECAwCgXi50niN3tffvnltP7666d11113FCo4ZAIECBAgUA8BgW896kEpCBAgQIAAAQIECBAgQKAiAZNbVQQrWwIECBAgQIAAAQIECBCoh4DAtx71oBQECBAgQIAAAQIECBAgUJGAwLciWNkSIECAAAECBAgQIECAQD0EBL71qAelIECAAAECBAgQIECAAIGKBAS+FcHKlgABAgQIECBAgAABAgTqISDwrUc9KAUBAgQIECBAgAABAgQIVCQg8K0IVrYECBAgQIAAAQIECBAgUA8BgW896kEpCBAgQIAAAQIECBAgQKAiAYFvRbCyJUCAAAECBAgQIECAAIF6CAh861EPSkGAAAECBAgQIECAAAECFQkIfCuClS0BAgQIECBAgAABAgQI1ENA4FuPelAKAgQIECBAgAABAgQIEKhIQOBbEaxsCRAgQIAAAQIECBAgQKAeAgLfetSDUhAgQIAAAQIECBAgQIBARQIC34pgZUuAAAECBAgQIECAAAEC9RAQ+NajHpSCAAECBAgQIECAAAECBCoSEPhWBCtbAgQIECBAgAABAgQIEKiHgMC3HvWgFAQIECBAgAABAgQIECBQkYDAtyJY2RIgQIAAAQIECBAgQIBAPQQEvvWoB6UgQIAAAQIECBAgQIAAgYoEBL4VwcqWAAECBAgQIECAAAECBOohIPCtRz0oBQECBAgQIECAAAECBAhUJCDwrQhWtgQIECBAgAABAgQIECBQDwGBbz3qQSkIECBAgAABAgQIECBAoCIBgW9FsLIlQIAAAQIECBAgQIAAgXoICHzrUQ9KQYAAAQIECBAgQIAAAQIVCQh8K4KVLQECBAgQIECAAAECBAjUQ0DgW496UAoCBAgQIECAAAECBAgQqEhA4FsRrGwJECBAgAABAgQIECBAoB4CAt961INSECBAgAABAgQIECBAgEBFAgLfimBlS4AAAQL/v/06JgEAAEAg2L+1KYQfroDIOUmAAAECBAgQINAQcHwbO2hBgAABAgQIECBAgAABAicBx/cEK5YAAQIECBAgQIAAAQIEGgKOb2MHLQgQIECAAAECBAgQIEDgJOD4nmDFEiBAgAABAgQIECBAgEBDwPFt7KAFAQIECBAgQIAAAQIECJwEHN8TrFgCBAgQIECAAAECBAgQaAg4vo0dtCBAgAABAgQIECBAgACBk4Dje4IVS4AAAQIECBAgQIAAAQINAce3sYMWBAgQIECAAAECBAgQIHAScHxPsGIJECBAgAABAgQIECBAoCHg+DZ20IIAAQIECBAgQIAAAQIETgKO7wlWLAECBAgQIECAAAECBAg0BBzfxg5aECBAgAABAgQIECBAgMBJwPE9wYolQIAAAQIECBAgQIAAgYaA49vYQQsCBAgQIECAAAECBAgQOAk4vidYsQQIECBAgAABAgQIECDQEHB8GztoQYAAAQIECBAgQIAAAQInAcf3BCuWAAECBAgQIECAAAECBBoCjm9jBy0IECBAgAABAgQIECBA4CTg+J5gxRIgQIAAAQIECBAgQIBAQ8DxbeygBQECBAgQIECAAAECBAicBBzfE6xYAgQIECBAgAABAgQIEGgIOL6NHbQgQIAAAQIECBAgQIAAgZOA43uCFUuAAAECBAgQIECAAAECDQHHt7GDFgQIECBAgAABAgQIECBwEnB8T7BiCRAgQIAAAQIECBAgQKAh4Pg2dtCCAAECBAgQIECAAAECBE4Cju8JViwBAgQIECBAgAABAgQINAQc38YOWhAgQIAAAQIECBAgQIDAScDxPcGKJUCAAAECBAgQIECAAIGGgOPb2EELAgQIECBAgAABAgQIEDgJOL4nWLEECBAgQIAAAQIECBAg0BBwfBs7aEGAAAECBAgQIECAAAECJwHH9wQrlgABAgQIECBAgAABAgQaAo5vYwctCBAgQIAAAQIECBAgQOAk4PieYMUSIECAAAECBAgQIECAQEPA8W3soAUBAgQIECBAgAABAgQInAQc3xOsWAIECBAgQIAAAQIECBBoCDi+jR20IECAAAECBAgQIECAAIGTgON7ghVLgAABAgQIECBAgAABAg0Bx7exgxYECBAgQIAAAQIECBAgcBJwfE+wYgkQIECAAAECBAgQIECgIeD4NnbQggABAgQIECBAgAABAgROAo7vCVYsAQIECBAgQIAAAQIECDQEHN/GDloQIECAAAECBAgQIECAwEnA8T3BiiVAgAABAgQIECBAgACBhoDj29hBCwIECBAgQIAAAQIECBA4CTi+J1ixBAgQIECAAAECBAgQINAQcHwbO2hBgAABAgQIECBAgAABAicBx/cEK5YAAQIECBAgQIAAAQIEGgKOb2MHLQgQIECAAAECBAgQIEDgJOD4nmDFEiBAgAABAgQIECBAgEBDwPFt7KAFAQIECBAgQIAAAQIECJwEHN8TrFgCBAgQIECAAAECBAgQaAg4vo0dtCBAgAABAgQIECBAgACBk4Dje4IVS4AAAQIECBAgQIAAAQINAce3sYMWBAgQIECAAAECBAgQIHAScHxPsGIJECBAgAABAgQIECBAoCHg+DZ20IIAAQIECBAgQIAAAQIETgKO7wlWLAECBAgQIECAAAECBAg0BBzfxg5aECBAgAABAgQIECBAgMBJwPE9wYolQIAAAQIECBAgQIAAgYaA49vYQQsCBAgQIECAAAECBAgQOAk4vidYsQQIECBAgAABAgQIECDQEHB8GztoQYAAAQIECBAgQIAAAQInAcf3BCuWAAECBAgQIECAAAECBBoCjm9jBy0IECBAgAABAgQIECBA4CTg+J5gxRIgQIAAAQIECBAgQIBAQ8DxbeygBQECBAgQIECAAAECBAicBBzfE6xYAgQIECBAgAABAgQIEGgIOL6NHbQgQIAAAQIECBAgQIAAgZOA43uCFUuAAAECBAgQIECAAAECDQHHt7GDFgQIECBAgAABAgQIECBwEnB8T7BiCRAgQIAAAQIECBAgQKAh4Pg2dtCCAAECBAgQIECAAAECBE4Cju8JViwBAgQIECBAgAABAgQINAQc38YOWhAgQIAAAQIECBAgQIDAScDxPcGKJUCAAAECBAgQIECAAIGGgOPb2EELAgQIECBAgAABAgQIEDgJOL4nWLEECBAgQIAAAQIECBAg0BBwfBs7aEGAAAECBAgQIECAAAECJwHH9wQrlgABAgQIECBAgAABAgQaAo5vYwctCBAgQIAAAQIECBAgQOAk4PieYMUSIECAAAECBAgQIECAQEPA8W3soAUBAgQIECBAgAABAgQInAQc3xOsWAIECBAgQIAAAQIECBBoCDi+jR20IECAAAECBAgQIECAAIGTgON7ghVLgAABAgQIECBAgAABAg0Bx7exgxYECBAgQIAAAQIECBAgcBJwfE+wYgkQIECAAAECBAgQIECgIeD4NnbQggABAgQIECBAgAABAgROAo7vCVYsAQIECBAgQIAAAQIECDQEHN/GDloQIECAAAECBAgQIECAwEnA8T3BiiVAgAABAgQIECBAgACBhoDj29hBCwIECBAgQIAAAQIECBA4CTi+J1ixBAgQIECAAAECBAgQINAQcHwbO2hBgAABAgQIECBAgAABAicBx/cEK5YAAQIECBAgQIAAAQIEGgKOb2MHLQgQIECAAAECBAgQIEDgJOD4nmDFEiBAgAABAgQIECBAgEBDwPFt7KAFAQIECBAgQIAAAQIECJwEHN8TrFgCBAgQIECAAAECBAgQaAg4vo0dtCBAgAABAgQIECBAgACBk4Dje4IVS4AAAQIECBAgQIAAAQINAce3sYMWBAgQIECAAAECBAgQIHAScHxPsGIJECBAgAABAgQIECBAoCHg+DZ20IIAAQIECBAgQIAAAQIETgKO7wlWLAECBAgQIECAAAECBAg0BBzfxg5aECBAgAABAgQIECBAgMBJYDkf6z0KfkmVAAAAAElFTkSuQmCC" 43 | }, 44 | "sha1": { 45 | "_data": "hnfMv/qAkY4Td9wX9pwzLU+dDdM=" 46 | } 47 | }, 48 | "nineSliceCenterRect": "{{0, 0}, {0, 0}}", 49 | "nineSliceScale": "{0, 0}" 50 | } -------------------------------------------------------------------------------- /examples/borderedShape.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "shapeGroup", 3 | "do_objectID": "BB32F5EF-2AF6-49A1-8EC2-8C0CA0D6F57F", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": false, 14 | "height": 262, 15 | "width": 247, 16 | "x": 75, 17 | "y": 147 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 1, 24 | "name": "Rectangle", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "borders": [ 32 | { 33 | "_class": "border", 34 | "isEnabled": true, 35 | "color": { 36 | "_class": "color", 37 | "alpha": 1, 38 | "blue": 0, 39 | "green": 0, 40 | "red": 0 41 | }, 42 | "fillType": 0, 43 | "position": 1, 44 | "thickness": 1 45 | } 46 | ], 47 | "endDecorationType": 0, 48 | "fills": [ 49 | { 50 | "_class": "fill", 51 | "isEnabled": false, 52 | "color": { 53 | "_class": "color", 54 | "alpha": 1, 55 | "blue": 0.8666666666666667, 56 | "green": 0.8666666666666667, 57 | "red": 0.8666666666666667 58 | }, 59 | "fillType": 0, 60 | "noiseIndex": 0, 61 | "noiseIntensity": 0, 62 | "patternFillType": 1, 63 | "patternTileScale": 1 64 | } 65 | ], 66 | "miterLimit": 10, 67 | "startDecorationType": 0 68 | }, 69 | "hasClickThrough": false, 70 | "layers": [ 71 | { 72 | "_class": "rectangle", 73 | "do_objectID": "88676249-D5A2-4412-862D-887BEC034F92", 74 | "exportOptions": { 75 | "_class": "exportOptions", 76 | "exportFormats": [], 77 | "includedLayerIds": [], 78 | "layerOptions": 0, 79 | "shouldTrim": false 80 | }, 81 | "frame": { 82 | "_class": "rect", 83 | "constrainProportions": false, 84 | "height": 262, 85 | "width": 247, 86 | "x": 0, 87 | "y": 0 88 | }, 89 | "isFlippedHorizontal": false, 90 | "isFlippedVertical": false, 91 | "isLocked": false, 92 | "isVisible": true, 93 | "layerListExpandedType": 0, 94 | "name": "Path", 95 | "nameIsFixed": false, 96 | "resizingType": 0, 97 | "rotation": 0, 98 | "shouldBreakMaskChain": false, 99 | "booleanOperation": -1, 100 | "edited": false, 101 | "path": { 102 | "_class": "path", 103 | "isClosed": true, 104 | "points": [ 105 | { 106 | "_class": "curvePoint", 107 | "cornerRadius": 8, 108 | "curveFrom": "{0, 0}", 109 | "curveMode": 1, 110 | "curveTo": "{0, 0}", 111 | "hasCurveFrom": false, 112 | "hasCurveTo": false, 113 | "point": "{0, 0}" 114 | }, 115 | { 116 | "_class": "curvePoint", 117 | "cornerRadius": 8, 118 | "curveFrom": "{1, 0}", 119 | "curveMode": 1, 120 | "curveTo": "{1, 0}", 121 | "hasCurveFrom": false, 122 | "hasCurveTo": false, 123 | "point": "{1, 0}" 124 | }, 125 | { 126 | "_class": "curvePoint", 127 | "cornerRadius": 8, 128 | "curveFrom": "{1, 1}", 129 | "curveMode": 1, 130 | "curveTo": "{1, 1}", 131 | "hasCurveFrom": false, 132 | "hasCurveTo": false, 133 | "point": "{1, 1}" 134 | }, 135 | { 136 | "_class": "curvePoint", 137 | "cornerRadius": 8, 138 | "curveFrom": "{0, 1}", 139 | "curveMode": 1, 140 | "curveTo": "{0, 1}", 141 | "hasCurveFrom": false, 142 | "hasCurveTo": false, 143 | "point": "{0, 1}" 144 | } 145 | ] 146 | }, 147 | "fixedRadius": 8, 148 | "hasConvertedToNewRoundCorners": true 149 | } 150 | ], 151 | "clippingMaskMode": 0, 152 | "hasClippingMask": false, 153 | "windingRule": 1 154 | } -------------------------------------------------------------------------------- /examples/exampleAB.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "artboard", 3 | "do_objectID": "92D5989B-E399-456B-AEDC-50E5BE06FD29", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": false, 14 | "height": 478, 15 | "width": 450, 16 | "x": 176, 17 | "y": 163 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 0, 24 | "name": "Artboard", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "endDecorationType": 0, 32 | "miterLimit": 10, 33 | "startDecorationType": 0 34 | }, 35 | "hasClickThrough": false, 36 | "layers": [ 37 | { 38 | "_class": "group", 39 | "do_objectID": "470C0E08-84F3-4DD2-9681-A740F4DF17BA", 40 | "exportOptions": { 41 | "_class": "exportOptions", 42 | "exportFormats": [], 43 | "includedLayerIds": [], 44 | "layerOptions": 0, 45 | "shouldTrim": false 46 | }, 47 | "frame": { 48 | "_class": "rect", 49 | "constrainProportions": false, 50 | "height": 112, 51 | "width": 185, 52 | "x": 53, 53 | "y": 43 54 | }, 55 | "isFlippedHorizontal": false, 56 | "isFlippedVertical": false, 57 | "isLocked": false, 58 | "isVisible": true, 59 | "layerListExpandedType": 2, 60 | "name": "Parent", 61 | "nameIsFixed": true, 62 | "resizingType": 0, 63 | "rotation": 0, 64 | "shouldBreakMaskChain": false, 65 | "style": { 66 | "_class": "style", 67 | "endDecorationType": 0, 68 | "miterLimit": 10, 69 | "startDecorationType": 0 70 | }, 71 | "hasClickThrough": false, 72 | "layers": [ 73 | { 74 | "_class": "shapeGroup", 75 | "do_objectID": "8754F7E0-FA42-4CBE-93FF-EBF1EA0A26FE", 76 | "exportOptions": { 77 | "_class": "exportOptions", 78 | "exportFormats": [], 79 | "includedLayerIds": [], 80 | "layerOptions": 0, 81 | "shouldTrim": false 82 | }, 83 | "frame": { 84 | "_class": "rect", 85 | "constrainProportions": false, 86 | "height": 56, 87 | "width": 57, 88 | "x": 0, 89 | "y": 0 90 | }, 91 | "isFlippedHorizontal": false, 92 | "isFlippedVertical": false, 93 | "isLocked": false, 94 | "isVisible": true, 95 | "layerListExpandedType": 0, 96 | "name": "Rectangle", 97 | "nameIsFixed": false, 98 | "resizingType": 0, 99 | "rotation": 0, 100 | "shouldBreakMaskChain": false, 101 | "style": { 102 | "_class": "style", 103 | "borders": [ 104 | { 105 | "_class": "border", 106 | "isEnabled": false, 107 | "color": { 108 | "_class": "color", 109 | "alpha": 1, 110 | "blue": 0, 111 | "green": 0, 112 | "red": 0 113 | }, 114 | "fillType": 0, 115 | "position": 1, 116 | "thickness": 1 117 | } 118 | ], 119 | "endDecorationType": 0, 120 | "fills": [ 121 | { 122 | "_class": "fill", 123 | "isEnabled": true, 124 | "color": { 125 | "_class": "color", 126 | "alpha": 1, 127 | "blue": 0.8666666666666667, 128 | "green": 0.8666666666666667, 129 | "red": 0.8666666666666667 130 | }, 131 | "fillType": 0, 132 | "noiseIndex": 0, 133 | "noiseIntensity": 0, 134 | "patternFillType": 1, 135 | "patternTileScale": 1 136 | } 137 | ], 138 | "miterLimit": 10, 139 | "startDecorationType": 0 140 | }, 141 | "hasClickThrough": false, 142 | "layers": [ 143 | { 144 | "_class": "rectangle", 145 | "do_objectID": "65B1408C-68AB-4244-B0C8-09B188E92467", 146 | "exportOptions": { 147 | "_class": "exportOptions", 148 | "exportFormats": [], 149 | "includedLayerIds": [], 150 | "layerOptions": 0, 151 | "shouldTrim": false 152 | }, 153 | "frame": { 154 | "_class": "rect", 155 | "constrainProportions": false, 156 | "height": 56, 157 | "width": 57, 158 | "x": 0, 159 | "y": 0 160 | }, 161 | "isFlippedHorizontal": false, 162 | "isFlippedVertical": false, 163 | "isLocked": false, 164 | "isVisible": true, 165 | "layerListExpandedType": 0, 166 | "name": "Path", 167 | "nameIsFixed": false, 168 | "resizingType": 0, 169 | "rotation": 0, 170 | "shouldBreakMaskChain": false, 171 | "booleanOperation": -1, 172 | "edited": false, 173 | "path": { 174 | "_class": "path", 175 | "isClosed": true, 176 | "points": [ 177 | { 178 | "_class": "curvePoint", 179 | "cornerRadius": 8, 180 | "curveFrom": "{0, 0}", 181 | "curveMode": 1, 182 | "curveTo": "{0, 0}", 183 | "hasCurveFrom": false, 184 | "hasCurveTo": false, 185 | "point": "{0, 0}" 186 | }, 187 | { 188 | "_class": "curvePoint", 189 | "cornerRadius": 8, 190 | "curveFrom": "{1, 0}", 191 | "curveMode": 1, 192 | "curveTo": "{1, 0}", 193 | "hasCurveFrom": false, 194 | "hasCurveTo": false, 195 | "point": "{1, 0}" 196 | }, 197 | { 198 | "_class": "curvePoint", 199 | "cornerRadius": 8, 200 | "curveFrom": "{1, 1}", 201 | "curveMode": 1, 202 | "curveTo": "{1, 1}", 203 | "hasCurveFrom": false, 204 | "hasCurveTo": false, 205 | "point": "{1, 1}" 206 | }, 207 | { 208 | "_class": "curvePoint", 209 | "cornerRadius": 8, 210 | "curveFrom": "{0, 1}", 211 | "curveMode": 1, 212 | "curveTo": "{0, 1}", 213 | "hasCurveFrom": false, 214 | "hasCurveTo": false, 215 | "point": "{0, 1}" 216 | } 217 | ] 218 | }, 219 | "fixedRadius": 8, 220 | "hasConvertedToNewRoundCorners": true 221 | } 222 | ], 223 | "clippingMaskMode": 0, 224 | "hasClippingMask": false, 225 | "windingRule": 1 226 | }, 227 | { 228 | "_class": "shapeGroup", 229 | "do_objectID": "A8BE08EB-8B17-4BA4-9304-7EDF1D0333E9", 230 | "exportOptions": { 231 | "_class": "exportOptions", 232 | "exportFormats": [], 233 | "includedLayerIds": [], 234 | "layerOptions": 0, 235 | "shouldTrim": false 236 | }, 237 | "frame": { 238 | "_class": "rect", 239 | "constrainProportions": false, 240 | "height": 56, 241 | "width": 57, 242 | "x": 128, 243 | "y": 56 244 | }, 245 | "isFlippedHorizontal": false, 246 | "isFlippedVertical": false, 247 | "isLocked": false, 248 | "isVisible": true, 249 | "layerListExpandedType": 1, 250 | "name": "Rect 1", 251 | "nameIsFixed": true, 252 | "resizingType": 0, 253 | "rotation": 0, 254 | "shouldBreakMaskChain": false, 255 | "style": { 256 | "_class": "style", 257 | "borders": [ 258 | { 259 | "_class": "border", 260 | "isEnabled": false, 261 | "color": { 262 | "_class": "color", 263 | "alpha": 1, 264 | "blue": 0, 265 | "green": 0, 266 | "red": 0 267 | }, 268 | "fillType": 0, 269 | "position": 1, 270 | "thickness": 1 271 | } 272 | ], 273 | "endDecorationType": 0, 274 | "fills": [ 275 | { 276 | "_class": "fill", 277 | "isEnabled": true, 278 | "color": { 279 | "_class": "color", 280 | "alpha": 1, 281 | "blue": 0, 282 | "green": 0, 283 | "red": 1 284 | }, 285 | "fillType": 0, 286 | "noiseIndex": 0, 287 | "noiseIntensity": 0, 288 | "patternFillType": 1, 289 | "patternTileScale": 1 290 | } 291 | ], 292 | "miterLimit": 10, 293 | "startDecorationType": 0 294 | }, 295 | "hasClickThrough": false, 296 | "layers": [ 297 | { 298 | "_class": "rectangle", 299 | "do_objectID": "B5F7FD8D-7DB5-4996-8B74-53C908A3304B", 300 | "exportOptions": { 301 | "_class": "exportOptions", 302 | "exportFormats": [], 303 | "includedLayerIds": [], 304 | "layerOptions": 0, 305 | "shouldTrim": false 306 | }, 307 | "frame": { 308 | "_class": "rect", 309 | "constrainProportions": false, 310 | "height": 56, 311 | "width": 57, 312 | "x": 0, 313 | "y": 0 314 | }, 315 | "isFlippedHorizontal": false, 316 | "isFlippedVertical": false, 317 | "isLocked": false, 318 | "isVisible": true, 319 | "layerListExpandedType": 0, 320 | "name": "Path", 321 | "nameIsFixed": false, 322 | "resizingType": 0, 323 | "rotation": 0, 324 | "shouldBreakMaskChain": false, 325 | "booleanOperation": -1, 326 | "edited": false, 327 | "path": { 328 | "_class": "path", 329 | "isClosed": true, 330 | "points": [ 331 | { 332 | "_class": "curvePoint", 333 | "cornerRadius": 8, 334 | "curveFrom": "{0, 0}", 335 | "curveMode": 1, 336 | "curveTo": "{0, 0}", 337 | "hasCurveFrom": false, 338 | "hasCurveTo": false, 339 | "point": "{0, 0}" 340 | }, 341 | { 342 | "_class": "curvePoint", 343 | "cornerRadius": 8, 344 | "curveFrom": "{1, 0}", 345 | "curveMode": 1, 346 | "curveTo": "{1, 0}", 347 | "hasCurveFrom": false, 348 | "hasCurveTo": false, 349 | "point": "{1, 0}" 350 | }, 351 | { 352 | "_class": "curvePoint", 353 | "cornerRadius": 8, 354 | "curveFrom": "{1, 1}", 355 | "curveMode": 1, 356 | "curveTo": "{1, 1}", 357 | "hasCurveFrom": false, 358 | "hasCurveTo": false, 359 | "point": "{1, 1}" 360 | }, 361 | { 362 | "_class": "curvePoint", 363 | "cornerRadius": 8, 364 | "curveFrom": "{0, 1}", 365 | "curveMode": 1, 366 | "curveTo": "{0, 1}", 367 | "hasCurveFrom": false, 368 | "hasCurveTo": false, 369 | "point": "{0, 1}" 370 | } 371 | ] 372 | }, 373 | "fixedRadius": 8, 374 | "hasConvertedToNewRoundCorners": true 375 | } 376 | ], 377 | "clippingMaskMode": 0, 378 | "hasClippingMask": false, 379 | "windingRule": 1 380 | } 381 | ] 382 | } 383 | ], 384 | "backgroundColor": { 385 | "_class": "color", 386 | "alpha": 1, 387 | "blue": 1, 388 | "green": 1, 389 | "red": 1 390 | }, 391 | "hasBackgroundColor": false, 392 | "horizontalRulerData": { 393 | "_class": "rulerData", 394 | "base": 0, 395 | "guides": [] 396 | }, 397 | "includeBackgroundColorInExport": true, 398 | "includeInCloudUpload": true, 399 | "verticalRulerData": { 400 | "_class": "rulerData", 401 | "base": 0, 402 | "guides": [] 403 | } 404 | } -------------------------------------------------------------------------------- /examples/roundRect.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "shapeGroup", 3 | "do_objectID": "EBB3E829-B831-4502-93D1-E0DA3C3F6364", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": true, 14 | "height": 91, 15 | "width": 91, 16 | "x": 725, 17 | "y": 405 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 0, 24 | "name": "Rectangle", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "borders": [ 32 | { 33 | "_class": "border", 34 | "isEnabled": false, 35 | "color": { 36 | "_class": "color", 37 | "alpha": 1, 38 | "blue": 0, 39 | "green": 0, 40 | "red": 0 41 | }, 42 | "fillType": 0, 43 | "position": 1, 44 | "thickness": 1 45 | } 46 | ], 47 | "endDecorationType": 0, 48 | "fills": [ 49 | { 50 | "_class": "fill", 51 | "isEnabled": true, 52 | "color": { 53 | "_class": "color", 54 | "alpha": 1, 55 | "blue": 0.8666666666666667, 56 | "green": 0.8666666666666667, 57 | "red": 0.8666666666666667 58 | }, 59 | "fillType": 0, 60 | "noiseIndex": 0, 61 | "noiseIntensity": 0, 62 | "patternFillType": 1, 63 | "patternTileScale": 1 64 | } 65 | ], 66 | "miterLimit": 10, 67 | "startDecorationType": 0 68 | }, 69 | "hasClickThrough": false, 70 | "layers": [ 71 | { 72 | "_class": "rectangle", 73 | "do_objectID": "783A23D4-A488-4A52-8E77-2FCB3163039B", 74 | "exportOptions": { 75 | "_class": "exportOptions", 76 | "exportFormats": [], 77 | "includedLayerIds": [], 78 | "layerOptions": 0, 79 | "shouldTrim": false 80 | }, 81 | "frame": { 82 | "_class": "rect", 83 | "constrainProportions": false, 84 | "height": 91, 85 | "width": 91, 86 | "x": 0, 87 | "y": 0 88 | }, 89 | "isFlippedHorizontal": false, 90 | "isFlippedVertical": false, 91 | "isLocked": false, 92 | "isVisible": true, 93 | "layerListExpandedType": 0, 94 | "name": "Path", 95 | "nameIsFixed": false, 96 | "resizingType": 0, 97 | "rotation": 0, 98 | "shouldBreakMaskChain": false, 99 | "booleanOperation": -1, 100 | "edited": false, 101 | "path": { 102 | "_class": "path", 103 | "isClosed": true, 104 | "points": [ 105 | { 106 | "_class": "curvePoint", 107 | "cornerRadius": 8, 108 | "curveFrom": "{0, 0}", 109 | "curveMode": 1, 110 | "curveTo": "{0, 0}", 111 | "hasCurveFrom": false, 112 | "hasCurveTo": false, 113 | "point": "{0, 0}" 114 | }, 115 | { 116 | "_class": "curvePoint", 117 | "cornerRadius": 8, 118 | "curveFrom": "{1, 0}", 119 | "curveMode": 1, 120 | "curveTo": "{1, 0}", 121 | "hasCurveFrom": false, 122 | "hasCurveTo": false, 123 | "point": "{1, 0}" 124 | }, 125 | { 126 | "_class": "curvePoint", 127 | "cornerRadius": 8, 128 | "curveFrom": "{1, 1}", 129 | "curveMode": 1, 130 | "curveTo": "{1, 1}", 131 | "hasCurveFrom": false, 132 | "hasCurveTo": false, 133 | "point": "{1, 1}" 134 | }, 135 | { 136 | "_class": "curvePoint", 137 | "cornerRadius": 8, 138 | "curveFrom": "{0, 1}", 139 | "curveMode": 1, 140 | "curveTo": "{0, 1}", 141 | "hasCurveFrom": false, 142 | "hasCurveTo": false, 143 | "point": "{0, 1}" 144 | } 145 | ] 146 | }, 147 | "fixedRadius": 8, 148 | "hasConvertedToNewRoundCorners": true 149 | } 150 | ], 151 | "clippingMaskMode": 0, 152 | "hasClippingMask": false, 153 | "windingRule": 1 154 | } -------------------------------------------------------------------------------- /examples/roundRectWithShadow.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "shapeGroup", 3 | "do_objectID": "C78D7CCD-83B1-4565-9BF0-CF3890B7DF5C", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": false, 14 | "height": 186, 15 | "width": 313, 16 | "x": 266, 17 | "y": 118 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 0, 24 | "name": "Rectangle", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "borders": [ 32 | { 33 | "_class": "border", 34 | "isEnabled": false, 35 | "color": { 36 | "_class": "color", 37 | "alpha": 1, 38 | "blue": 0, 39 | "green": 0, 40 | "red": 0 41 | }, 42 | "fillType": 0, 43 | "position": 1, 44 | "thickness": 1 45 | } 46 | ], 47 | "endDecorationType": 0, 48 | "fills": [ 49 | { 50 | "_class": "fill", 51 | "isEnabled": true, 52 | "color": { 53 | "_class": "color", 54 | "alpha": 1, 55 | "blue": 0.8666666666666667, 56 | "green": 0.8666666666666667, 57 | "red": 0.8666666666666667 58 | }, 59 | "fillType": 0, 60 | "noiseIndex": 0, 61 | "noiseIntensity": 0, 62 | "patternFillType": 1, 63 | "patternTileScale": 1 64 | } 65 | ], 66 | "miterLimit": 10, 67 | "shadows": [ 68 | { 69 | "_class": "shadow", 70 | "isEnabled": true, 71 | "blurRadius": 4, 72 | "color": { 73 | "_class": "color", 74 | "alpha": 0.5, 75 | "blue": 0, 76 | "green": 0, 77 | "red": 0 78 | }, 79 | "contextSettings": { 80 | "_class": "graphicsContextSettings", 81 | "blendMode": 0, 82 | "opacity": 1 83 | }, 84 | "offsetX": 0, 85 | "offsetY": 2, 86 | "spread": 0 87 | } 88 | ], 89 | "startDecorationType": 0 90 | }, 91 | "hasClickThrough": false, 92 | "layers": [ 93 | { 94 | "_class": "rectangle", 95 | "do_objectID": "B32A7957-49D7-4017-A250-F398BB49DEB2", 96 | "exportOptions": { 97 | "_class": "exportOptions", 98 | "exportFormats": [], 99 | "includedLayerIds": [], 100 | "layerOptions": 0, 101 | "shouldTrim": false 102 | }, 103 | "frame": { 104 | "_class": "rect", 105 | "constrainProportions": false, 106 | "height": 186, 107 | "width": 313, 108 | "x": 0, 109 | "y": -1.4210854715202E-14 110 | }, 111 | "isFlippedHorizontal": false, 112 | "isFlippedVertical": false, 113 | "isLocked": false, 114 | "isVisible": true, 115 | "layerListExpandedType": 0, 116 | "name": "Path", 117 | "nameIsFixed": false, 118 | "resizingType": 0, 119 | "rotation": 0, 120 | "shouldBreakMaskChain": false, 121 | "booleanOperation": -1, 122 | "edited": false, 123 | "path": { 124 | "_class": "path", 125 | "isClosed": true, 126 | "points": [ 127 | { 128 | "_class": "curvePoint", 129 | "cornerRadius": 0, 130 | "curveFrom": "{0, 0}", 131 | "curveMode": 1, 132 | "curveTo": "{0, 0}", 133 | "hasCurveFrom": false, 134 | "hasCurveTo": false, 135 | "point": "{0, 0}" 136 | }, 137 | { 138 | "_class": "curvePoint", 139 | "cornerRadius": 0, 140 | "curveFrom": "{1, 0}", 141 | "curveMode": 1, 142 | "curveTo": "{1, 0}", 143 | "hasCurveFrom": false, 144 | "hasCurveTo": false, 145 | "point": "{1, 0}" 146 | }, 147 | { 148 | "_class": "curvePoint", 149 | "cornerRadius": 0, 150 | "curveFrom": "{1, 1}", 151 | "curveMode": 1, 152 | "curveTo": "{1, 1}", 153 | "hasCurveFrom": false, 154 | "hasCurveTo": false, 155 | "point": "{1, 1}" 156 | }, 157 | { 158 | "_class": "curvePoint", 159 | "cornerRadius": 0, 160 | "curveFrom": "{0, 1}", 161 | "curveMode": 1, 162 | "curveTo": "{0, 1}", 163 | "hasCurveFrom": false, 164 | "hasCurveTo": false, 165 | "point": "{0, 1}" 166 | } 167 | ] 168 | }, 169 | "fixedRadius": 0, 170 | "hasConvertedToNewRoundCorners": true 171 | } 172 | ], 173 | "clippingMaskMode": 0, 174 | "hasClippingMask": false, 175 | "windingRule": 1 176 | } -------------------------------------------------------------------------------- /examples/textLayer.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "text", 3 | "do_objectID": "7CCE8237-0E16-499F-A289-F03986614B5B", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": false, 14 | "height": 17, 15 | "width": 117, 16 | "x": 146, 17 | "y": 253 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 0, 24 | "name": "My hot hot ABCD", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "endDecorationType": 0, 32 | "miterLimit": 10, 33 | "startDecorationType": 0, 34 | "textStyle": { 35 | "_class": "textStyle", 36 | "encodedAttributes": { 37 | "NSColor": { 38 | "_archive": "YnBsaXN0MDDUAQIDBAUGHyBYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKUHCBEVHFUkbnVsbNQJCgsMDQ4PEFVOU1JHQlxOU0NvbG9yU3BhY2VfEBJOU0N1c3RvbUNvbG9yU3BhY2VWJGNsYXNzTxAnMC4xODc4NDEzOTc3IDAuNTE1ODY0MTU4MiAwLjIyNjcyNzI0ODEAEAGAAoAE0hIMExRUTlNJRBABgAPSFhcYGVokY2xhc3NuYW1lWCRjbGFzc2VzXE5TQ29sb3JTcGFjZaIaG1xOU0NvbG9yU3BhY2VYTlNPYmplY3TSFhcdHldOU0NvbG9yoh0bXxAPTlNLZXllZEFyY2hpdmVy0SEiVHJvb3SAAQAIABEAGgAjAC0AMgA3AD0AQwBMAFIAXwB0AHsApQCnAKkAqwCwALUAtwC5AL4AyQDSAN8A4gDvAPgA/QEFAQgBGgEdASIAAAAAAAACAQAAAAAAAAAjAAAAAAAAAAAAAAAAAAABJA==" 39 | }, 40 | "MSAttributedStringFontAttribute": { 41 | "_archive": "YnBsaXN0MDDUAQIDBAUGJidYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKkHCA0XGBkaGyJVJG51bGzSCQoLDFYkY2xhc3NfEBpOU0ZvbnREZXNjcmlwdG9yQXR0cmlidXRlc4AIgALTDg8JEBMWV05TLmtleXNaTlMub2JqZWN0c6IREoADgASiFBWABYAGgAdfEBNOU0ZvbnRTaXplQXR0cmlidXRlXxATTlNGb250TmFtZUF0dHJpYnV0ZSNALAAAAAAAAF8QEC5TRk5TVGV4dC1NZWRpdW3SHB0eH1okY2xhc3NuYW1lWCRjbGFzc2VzXxATTlNNdXRhYmxlRGljdGlvbmFyeaMeICFcTlNEaWN0aW9uYXJ5WE5TT2JqZWN00hwdIyRfEBBOU0ZvbnREZXNjcmlwdG9yoiUhXxAQTlNGb250RGVzY3JpcHRvcl8QD05TS2V5ZWRBcmNoaXZlctEoKVRyb290gAEACAARABoAIwAtADIANwBBAEcATABTAHAAcgB0AHsAgwCOAJEAkwCVAJgAmgCcAJ4AtADKANMA5gDrAPYA/wEVARkBJgEvATQBRwFKAV0BbwFyAXcAAAAAAAACAQAAAAAAAAAqAAAAAAAAAAAAAAAAAAABeQ==" 42 | }, 43 | "NSParagraphStyle": { 44 | "_archive": "YnBsaXN0MDDUAQIDBAUGICFYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKUHCBMXHVUkbnVsbNUJCgsMDQ4PEBESWk5TVGFiU3RvcHNbTlNBbGlnbm1lbnRcTlNUZXh0QmxvY2tzXxAfTlNBbGxvd3NUaWdodGVuaW5nRm9yVHJ1bmNhdGlvblYkY2xhc3OAABAEgAIQAYAE0hQNFRZaTlMub2JqZWN0c6CAA9IYGRobWiRjbGFzc25hbWVYJGNsYXNzZXNXTlNBcnJheaIaHFhOU09iamVjdNIYGR4fXxAQTlNQYXJhZ3JhcGhTdHlsZaIeHF8QD05TS2V5ZWRBcmNoaXZlctEiI1Ryb290gAEACAARABoAIwAtADIANwA9AEMATgBZAGUAcgCUAJsAnQCfAKEAowClAKoAtQC2ALgAvQDIANEA2QDcAOUA6gD9AQABEgEVARoAAAAAAAACAQAAAAAAAAAkAAAAAAAAAAAAAAAAAAABHA==" 45 | }, 46 | "NSKern": 0.03402778 47 | } 48 | } 49 | }, 50 | "attributedString": { 51 | "_class": "MSAttributedString", 52 | "archivedAttributedString": { 53 | "_archive": "YnBsaXN0MDDUAQIDBAUGaWpYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8QGwcIDxAeHyAhIiwvNTg8REVGR0hMUFFYXGBjZVUkbnVsbNMJCgsMDQ5YTlNTdHJpbmdWJGNsYXNzXE5TQXR0cmlidXRlc4ACgBqAA18QD015IGhvdCBob3QgQUJDRNMREgoTGB1XTlMua2V5c1pOUy5vYmplY3RzpBQVFheABIAFgAaAB6QZGhscgAiADIAUgBWAGV8QEE5TUGFyYWdyYXBoU3R5bGVfEB9NU0F0dHJpYnV0ZWRTdHJpbmdGb250QXR0cmlidXRlVk5TS2VybldOU0NvbG9y1SMkJSYKJygpKitaTlNUYWJTdG9wc1tOU0FsaWdubWVudFxOU1RleHRCbG9ja3NfEB9OU0FsbG93c1RpZ2h0ZW5pbmdGb3JUcnVuY2F0aW9ugAAQBIAJEAGAC9ISCi0uoIAK0jAxMjNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0FycmF5ojI0WE5TT2JqZWN00jAxNjdfEBBOU1BhcmFncmFwaFN0eWxlojY00go5OjtfEBpOU0ZvbnREZXNjcmlwdG9yQXR0cmlidXRlc4ATgA3TERIKPUBDoj4/gA6AD6JBQoAQgBGAEl8QE05TRm9udFNpemVBdHRyaWJ1dGVfEBNOU0ZvbnROYW1lQXR0cmlidXRlI0AsAAAAAAAAXxAQLlNGTlNUZXh0LU1lZGl1bdIwMUlKXxATTlNNdXRhYmxlRGljdGlvbmFyeaNJSzRcTlNEaWN0aW9uYXJ50jAxTU5fEBBOU0ZvbnREZXNjcmlwdG9yok80XxAQTlNGb250RGVzY3JpcHRvciM/oWwW1ILOp9RSU1QKVSpWV1VOU1JHQlxOU0NvbG9yU3BhY2VfEBJOU0N1c3RvbUNvbG9yU3BhY2VPECcwLjE4Nzg0MTM5NzcgMC41MTU4NjQxNTgyIDAuMjI2NzI3MjQ4MQCAFoAY0lkKWltUTlNJRBABgBfSMDFdXlxOU0NvbG9yU3BhY2WiXzRcTlNDb2xvclNwYWNl0jAxYWJXTlNDb2xvcqJhNNIwMUtkoks00jAxZmdfEBJOU0F0dHJpYnV0ZWRTdHJpbmeiaDRfEBJOU0F0dHJpYnV0ZWRTdHJpbmdfEA9OU0tleWVkQXJjaGl2ZXLRa2xUcm9vdIABAAgAEQAaACMALQAyADcAVQBbAGIAawByAH8AgQCDAIUAlwCeAKYAsQC2ALgAugC8AL4AwwDFAMcAyQDLAM0A4AECAQkBEQEcAScBMwFAAWIBZAFmAWgBagFsAXEBcgF0AXkBhAGNAZUBmAGhAaYBuQG8AcEB3gHgAeIB6QHsAe4B8AHzAfUB9wH5Ag8CJQIuAkECRgJcAmACbQJyAoUCiAKbAqQCrQKzAsAC1QL/AwEDAwMIAw0DDwMRAxYDIwMmAzMDOANAA0MDSANLA1ADZQNoA30DjwOSA5cAAAAAAAACAQAAAAAAAABtAAAAAAAAAAAAAAAAAAADmQ==" 54 | } 55 | }, 56 | "automaticallyDrawOnUnderlyingPath": false, 57 | "dontSynchroniseWithSymbol": false, 58 | "glyphBounds": "{{0, 0}, {116, 17}}", 59 | "heightIsClipped": false, 60 | "lineSpacingBehaviour": 2, 61 | "textBehaviour": 0 62 | } -------------------------------------------------------------------------------- /examples/textLayerWithAnotherFill.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "text", 3 | "do_objectID": "7CCE8237-0E16-499F-A289-F03986614B5B", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": false, 14 | "height": 17, 15 | "width": 117, 16 | "x": 146, 17 | "y": 253 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 0, 24 | "name": "My hot hot ABCD", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "endDecorationType": 0, 32 | "fills": [ 33 | { 34 | "_class": "fill", 35 | "isEnabled": true, 36 | "color": { 37 | "_class": "color", 38 | "alpha": 1, 39 | "blue": 0, 40 | "green": 0, 41 | "red": 0.9397852891156463 42 | }, 43 | "fillType": 0, 44 | "noiseIndex": 0, 45 | "noiseIntensity": 0, 46 | "patternFillType": 1, 47 | "patternTileScale": 1 48 | } 49 | ], 50 | "miterLimit": 10, 51 | "startDecorationType": 0, 52 | "textStyle": { 53 | "_class": "textStyle", 54 | "encodedAttributes": { 55 | "NSColor": { 56 | "_archive": "YnBsaXN0MDDUAQIDBAUGHyBYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKUHCBEVHFUkbnVsbNQJCgsMDQ4PEFVOU1JHQlxOU0NvbG9yU3BhY2VfEBJOU0N1c3RvbUNvbG9yU3BhY2VWJGNsYXNzTxAnMC4xODc4NDEzOTc3IDAuNTE1ODY0MTU4MiAwLjIyNjcyNzI0ODEAEAGAAoAE0hIMExRUTlNJRBABgAPSFhcYGVokY2xhc3NuYW1lWCRjbGFzc2VzXE5TQ29sb3JTcGFjZaIaG1xOU0NvbG9yU3BhY2VYTlNPYmplY3TSFhcdHldOU0NvbG9yoh0bXxAPTlNLZXllZEFyY2hpdmVy0SEiVHJvb3SAAQAIABEAGgAjAC0AMgA3AD0AQwBMAFIAXwB0AHsApQCnAKkAqwCwALUAtwC5AL4AyQDSAN8A4gDvAPgA/QEFAQgBGgEdASIAAAAAAAACAQAAAAAAAAAjAAAAAAAAAAAAAAAAAAABJA==" 57 | }, 58 | "MSAttributedStringFontAttribute": { 59 | "_archive": "YnBsaXN0MDDUAQIDBAUGJidYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKkHCA0XGBkaGyJVJG51bGzSCQoLDFYkY2xhc3NfEBpOU0ZvbnREZXNjcmlwdG9yQXR0cmlidXRlc4AIgALTDg8JEBMWV05TLmtleXNaTlMub2JqZWN0c6IREoADgASiFBWABYAGgAdfEBNOU0ZvbnRTaXplQXR0cmlidXRlXxATTlNGb250TmFtZUF0dHJpYnV0ZSNALAAAAAAAAF8QEC5TRk5TVGV4dC1NZWRpdW3SHB0eH1okY2xhc3NuYW1lWCRjbGFzc2VzXxATTlNNdXRhYmxlRGljdGlvbmFyeaMeICFcTlNEaWN0aW9uYXJ5WE5TT2JqZWN00hwdIyRfEBBOU0ZvbnREZXNjcmlwdG9yoiUhXxAQTlNGb250RGVzY3JpcHRvcl8QD05TS2V5ZWRBcmNoaXZlctEoKVRyb290gAEACAARABoAIwAtADIANwBBAEcATABTAHAAcgB0AHsAgwCOAJEAkwCVAJgAmgCcAJ4AtADKANMA5gDrAPYA/wEVARkBJgEvATQBRwFKAV0BbwFyAXcAAAAAAAACAQAAAAAAAAAqAAAAAAAAAAAAAAAAAAABeQ==" 60 | }, 61 | "NSParagraphStyle": { 62 | "_archive": "YnBsaXN0MDDUAQIDBAUGICFYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKUHCBMXHVUkbnVsbNUJCgsMDQ4PEBESWk5TVGFiU3RvcHNbTlNBbGlnbm1lbnRcTlNUZXh0QmxvY2tzXxAfTlNBbGxvd3NUaWdodGVuaW5nRm9yVHJ1bmNhdGlvblYkY2xhc3OAABAEgAIQAYAE0hQNFRZaTlMub2JqZWN0c6CAA9IYGRobWiRjbGFzc25hbWVYJGNsYXNzZXNXTlNBcnJheaIaHFhOU09iamVjdNIYGR4fXxAQTlNQYXJhZ3JhcGhTdHlsZaIeHF8QD05TS2V5ZWRBcmNoaXZlctEiI1Ryb290gAEACAARABoAIwAtADIANwA9AEMATgBZAGUAcgCUAJsAnQCfAKEAowClAKoAtQC2ALgAvQDIANEA2QDcAOUA6gD9AQABEgEVARoAAAAAAAACAQAAAAAAAAAkAAAAAAAAAAAAAAAAAAABHA==" 63 | }, 64 | "NSKern": 0.03402778 65 | } 66 | } 67 | }, 68 | "attributedString": { 69 | "_class": "MSAttributedString", 70 | "archivedAttributedString": { 71 | "_archive": "YnBsaXN0MDDUAQIDBAUGaWpYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8QGwcIDxAeHyAhIiwvNTg8REVGR0hMUFFYXGBjZVUkbnVsbNMJCgsMDQ5YTlNTdHJpbmdWJGNsYXNzXE5TQXR0cmlidXRlc4ACgBqAA18QD015IGhvdCBob3QgQUJDRNMREgoTGB1XTlMua2V5c1pOUy5vYmplY3RzpBQVFheABIAFgAaAB6QZGhscgAiADIAUgBWAGV8QEE5TUGFyYWdyYXBoU3R5bGVfEB9NU0F0dHJpYnV0ZWRTdHJpbmdGb250QXR0cmlidXRlVk5TS2VybldOU0NvbG9y1SMkJSYKJygpKitaTlNUYWJTdG9wc1tOU0FsaWdubWVudFxOU1RleHRCbG9ja3NfEB9OU0FsbG93c1RpZ2h0ZW5pbmdGb3JUcnVuY2F0aW9ugAAQBIAJEAGAC9ISCi0uoIAK0jAxMjNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0FycmF5ojI0WE5TT2JqZWN00jAxNjdfEBBOU1BhcmFncmFwaFN0eWxlojY00go5OjtfEBpOU0ZvbnREZXNjcmlwdG9yQXR0cmlidXRlc4ATgA3TERIKPUBDoj4/gA6AD6JBQoAQgBGAEl8QE05TRm9udFNpemVBdHRyaWJ1dGVfEBNOU0ZvbnROYW1lQXR0cmlidXRlI0AsAAAAAAAAXxAQLlNGTlNUZXh0LU1lZGl1bdIwMUlKXxATTlNNdXRhYmxlRGljdGlvbmFyeaNJSzRcTlNEaWN0aW9uYXJ50jAxTU5fEBBOU0ZvbnREZXNjcmlwdG9yok80XxAQTlNGb250RGVzY3JpcHRvciM/oWwW1ILOp9RSU1QKVSpWV1VOU1JHQlxOU0NvbG9yU3BhY2VfEBJOU0N1c3RvbUNvbG9yU3BhY2VPECcwLjE4Nzg0MTM5NzcgMC41MTU4NjQxNTgyIDAuMjI2NzI3MjQ4MQCAFoAY0lkKWltUTlNJRBABgBfSMDFdXlxOU0NvbG9yU3BhY2WiXzRcTlNDb2xvclNwYWNl0jAxYWJXTlNDb2xvcqJhNNIwMUtkoks00jAxZmdfEBJOU0F0dHJpYnV0ZWRTdHJpbmeiaDRfEBJOU0F0dHJpYnV0ZWRTdHJpbmdfEA9OU0tleWVkQXJjaGl2ZXLRa2xUcm9vdIABAAgAEQAaACMALQAyADcAVQBbAGIAawByAH8AgQCDAIUAlwCeAKYAsQC2ALgAugC8AL4AwwDFAMcAyQDLAM0A4AECAQkBEQEcAScBMwFAAWIBZAFmAWgBagFsAXEBcgF0AXkBhAGNAZUBmAGhAaYBuQG8AcEB3gHgAeIB6QHsAe4B8AHzAfUB9wH5Ag8CJQIuAkECRgJcAmACbQJyAoUCiAKbAqQCrQKzAsAC1QL/AwEDAwMIAw0DDwMRAxYDIwMmAzMDOANAA0MDSANLA1ADZQNoA30DjwOSA5cAAAAAAAACAQAAAAAAAABtAAAAAAAAAAAAAAAAAAADmQ==" 72 | } 73 | }, 74 | "automaticallyDrawOnUnderlyingPath": false, 75 | "dontSynchroniseWithSymbol": false, 76 | "glyphBounds": "{{0, 0}, {116, 17}}", 77 | "heightIsClipped": false, 78 | "lineSpacingBehaviour": 2, 79 | "textBehaviour": 0 80 | } -------------------------------------------------------------------------------- /examples/wrappingText.json: -------------------------------------------------------------------------------- 1 | { 2 | "_class": "text", 3 | "do_objectID": "FC5041FD-F7A9-4307-8C1C-807A1A47F557", 4 | "exportOptions": { 5 | "_class": "exportOptions", 6 | "exportFormats": [], 7 | "includedLayerIds": [], 8 | "layerOptions": 0, 9 | "shouldTrim": false 10 | }, 11 | "frame": { 12 | "_class": "rect", 13 | "constrainProportions": false, 14 | "height": 168, 15 | "width": 220, 16 | "x": 0, 17 | "y": 0 18 | }, 19 | "isFlippedHorizontal": false, 20 | "isFlippedVertical": false, 21 | "isLocked": false, 22 | "isVisible": true, 23 | "layerListExpandedType": 0, 24 | "name": "⚛️ Makes styled-components, react-boilerplate, @KeystoneJS and CarteBlanche. ✌ Open source developer @thethinkmill. ☕ Speciality coffee geek, skier, traveller.", 25 | "nameIsFixed": false, 26 | "resizingType": 0, 27 | "rotation": 0, 28 | "shouldBreakMaskChain": false, 29 | "style": { 30 | "_class": "style", 31 | "endDecorationType": 0, 32 | "miterLimit": 10, 33 | "startDecorationType": 0, 34 | "textStyle": { 35 | "_class": "textStyle", 36 | "encodedAttributes": { 37 | "MSAttributedStringFontAttribute": { 38 | "_archive": "YnBsaXN0MDDUAQIDBAUGJidYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKkHCA0XGBkaGyJVJG51bGzSCQoLDFYkY2xhc3NfEBpOU0ZvbnREZXNjcmlwdG9yQXR0cmlidXRlc4AIgALTDg8JEBMWV05TLmtleXNaTlMub2JqZWN0c6IREoADgASiFBWABYAGgAdfEBNOU0ZvbnRTaXplQXR0cmlidXRlXxATTlNGb250TmFtZUF0dHJpYnV0ZSNAMAAAAAAAAF8QD0FwcGxlQ29sb3JFbW9qadIcHR4fWiRjbGFzc25hbWVYJGNsYXNzZXNfEBNOU011dGFibGVEaWN0aW9uYXJ5ox4gIVxOU0RpY3Rpb25hcnlYTlNPYmplY3TSHB0jJF8QEE5TRm9udERlc2NyaXB0b3KiJSFfEBBOU0ZvbnREZXNjcmlwdG9yXxAPTlNLZXllZEFyY2hpdmVy0SgpVHJvb3SAAQAIABEAGgAjAC0AMgA3AEEARwBMAFMAcAByAHQAewCDAI4AkQCTAJUAmACaAJwAngC0AMoA0wDlAOoA9QD+ARQBGAElAS4BMwFGAUkBXAFuAXEBdgAAAAAAAAIBAAAAAAAAACoAAAAAAAAAAAAAAAAAAAF4" 39 | }, 40 | "NSParagraphStyle": { 41 | "_archive": "YnBsaXN0MDDUAQIDBAUGGxxYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKMHCBRVJG51bGzWCQoLDA0ODxAREhMRW05TQWxpZ25tZW50Wk5TVGFiU3RvcHNfEA9OU01pbkxpbmVIZWlnaHRWJGNsYXNzXxAfTlNBbGxvd3NUaWdodGVuaW5nRm9yVHJ1bmNhdGlvbl8QD05TTWF4TGluZUhlaWdodBAEgAAjQDgAAAAAAACAAhAB0hUWFxhaJGNsYXNzbmFtZVgkY2xhc3Nlc18QF05TTXV0YWJsZVBhcmFncmFwaFN0eWxloxcZGl8QEE5TUGFyYWdyYXBoU3R5bGVYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2ZXLRHR5Ucm9vdIABAAgAEQAaACMALQAyADcAOwBBAE4AWgBlAHcAfgCgALIAtAC2AL8AwQDDAMgA0wDcAPYA+gENARYBKAErATAAAAAAAAACAQAAAAAAAAAfAAAAAAAAAAAAAAAAAAABMg==" 42 | } 43 | } 44 | } 45 | }, 46 | "attributedString": { 47 | "_class": "MSAttributedString", 48 | "archivedAttributedString": { 49 | "_archive": "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" 50 | } 51 | }, 52 | "automaticallyDrawOnUnderlyingPath": false, 53 | "dontSynchroniseWithSymbol": false, 54 | "glyphBounds": "{{0, 0}, {1156, 22}}", 55 | "heightIsClipped": false, 56 | "lineSpacingBehaviour": 2, 57 | "textBehaviour": 1 58 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sketchapp-json-flow-types", 3 | "version": "0.3.6", 4 | "description": "Flow types describing Sketch v43's JSON internal structures", 5 | "main": "types.js", 6 | "repository": "https://github.com/darknoon/sketchapp-json-flow-types", 7 | "author": "Andrew Pouliot", 8 | "license": "MIT", 9 | "files": [ 10 | "types.js", 11 | ".flowconfig" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /testCases/testShapeGroup.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | import type { SJLayer, SJShapeGroupLayer } from '../types'; 3 | 4 | const data: SJShapeGroupLayer = { 5 | "_class": "shapeGroup", 6 | "do_objectID": "EBB3E829-B831-4502-93D1-E0DA3C3F6364", 7 | "exportOptions": { 8 | "_class": "exportOptions", 9 | "exportFormats": [], 10 | "includedLayerIds": [], 11 | "layerOptions": 0, 12 | "shouldTrim": false 13 | }, 14 | "frame": { 15 | "_class": "rect", 16 | "constrainProportions": true, 17 | "height": 91, 18 | "width": 91, 19 | "x": 725, 20 | "y": 405 21 | }, 22 | "isFlippedHorizontal": false, 23 | "isFlippedVertical": false, 24 | "isLocked": false, 25 | "isVisible": true, 26 | "layerListExpandedType": 0, 27 | "name": "Rectangle", 28 | "nameIsFixed": false, 29 | "resizingType": 0, 30 | "rotation": 0, 31 | "shouldBreakMaskChain": false, 32 | "style": { 33 | "_class": "style", 34 | "borders": [ 35 | { 36 | "_class": "border", 37 | "isEnabled": false, 38 | "color": { 39 | "_class": "color", 40 | "alpha": 1, 41 | "blue": 0, 42 | "green": 0, 43 | "red": 0 44 | }, 45 | "fillType": 0, 46 | "position": 1, 47 | "thickness": 1 48 | } 49 | ], 50 | "endDecorationType": 0, 51 | "fills": [ 52 | { 53 | "_class": "fill", 54 | "isEnabled": true, 55 | "color": { 56 | "_class": "color", 57 | "alpha": 1, 58 | "blue": 0.8666666666666667, 59 | "green": 0.8666666666666667, 60 | "red": 0.8666666666666667 61 | }, 62 | "fillType": 0, 63 | "noiseIndex": 0, 64 | "noiseIntensity": 0, 65 | "patternFillType": 1, 66 | "patternTileScale": 1 67 | } 68 | ], 69 | "miterLimit": 10, 70 | "startDecorationType": 0 71 | }, 72 | "hasClickThrough": false, 73 | "layers": [ 74 | { 75 | "_class": "rectangle", 76 | "do_objectID": "783A23D4-A488-4A52-8E77-2FCB3163039B", 77 | "exportOptions": { 78 | "_class": "exportOptions", 79 | "exportFormats": [], 80 | "includedLayerIds": [], 81 | "layerOptions": 0, 82 | "shouldTrim": false 83 | }, 84 | "frame": { 85 | "_class": "rect", 86 | "constrainProportions": false, 87 | "height": 91, 88 | "width": 91, 89 | "x": 0, 90 | "y": 0 91 | }, 92 | "isFlippedHorizontal": false, 93 | "isFlippedVertical": false, 94 | "isLocked": false, 95 | "isVisible": true, 96 | "layerListExpandedType": 0, 97 | "name": "Path", 98 | "nameIsFixed": false, 99 | "resizingType": 0, 100 | "rotation": 0, 101 | "shouldBreakMaskChain": false, 102 | "booleanOperation": -1, 103 | "edited": false, 104 | "path": { 105 | "_class": "path", 106 | "isClosed": true, 107 | "points": [ 108 | { 109 | "_class": "curvePoint", 110 | "cornerRadius": 8, 111 | "curveFrom": "{0, 0}", 112 | "curveMode": 1, 113 | "curveTo": "{0, 0}", 114 | "hasCurveFrom": false, 115 | "hasCurveTo": false, 116 | "point": "{0, 0}" 117 | }, 118 | { 119 | "_class": "curvePoint", 120 | "cornerRadius": 8, 121 | "curveFrom": "{1, 0}", 122 | "curveMode": 1, 123 | "curveTo": "{1, 0}", 124 | "hasCurveFrom": false, 125 | "hasCurveTo": false, 126 | "point": "{1, 0}" 127 | }, 128 | { 129 | "_class": "curvePoint", 130 | "cornerRadius": 8, 131 | "curveFrom": "{1, 1}", 132 | "curveMode": 1, 133 | "curveTo": "{1, 1}", 134 | "hasCurveFrom": false, 135 | "hasCurveTo": false, 136 | "point": "{1, 1}" 137 | }, 138 | { 139 | "_class": "curvePoint", 140 | "cornerRadius": 8, 141 | "curveFrom": "{0, 1}", 142 | "curveMode": 1, 143 | "curveTo": "{0, 1}", 144 | "hasCurveFrom": false, 145 | "hasCurveTo": false, 146 | "point": "{0, 1}" 147 | } 148 | ] 149 | }, 150 | "fixedRadius": 8, 151 | "hasConvertedToNewRoundCorners": true 152 | } 153 | ], 154 | "clippingMaskMode": 0, 155 | "hasClippingMask": false, 156 | "windingRule": 1, 157 | }; 158 | -------------------------------------------------------------------------------- /testCases/testSymbolInstance.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | import type { SJSymbolInstanceLayer } from '../types'; 3 | 4 | const data : SJSymbolInstanceLayer = { 5 | "_class": "symbolInstance", 6 | "do_objectID": "999610FD-741D-4483-96A3-D494D922D963", 7 | "exportOptions": { 8 | "_class": "exportOptions", 9 | "exportFormats": [], 10 | "includedLayerIds": [], 11 | "layerOptions": 0, 12 | "shouldTrim": false 13 | }, 14 | "frame": { 15 | "_class": "rect", 16 | "constrainProportions": false, 17 | "height": 96, 18 | "width": 96, 19 | "x": 4, 20 | "y": 4 21 | }, 22 | "isFlippedHorizontal": false, 23 | "isFlippedVertical": false, 24 | "isLocked": false, 25 | "isVisible": true, 26 | "layerListExpandedType": 0, 27 | "name": "Swatch Haus", 28 | "nameIsFixed": false, 29 | "resizingType": 0, 30 | "rotation": 0, 31 | "shouldBreakMaskChain": false, 32 | "style": { 33 | "_class": "style", 34 | "endDecorationType": 0, 35 | "miterLimit": 10, 36 | "startDecorationType": 0 37 | }, 38 | "horizontalSpacing": 0, 39 | "masterInfluenceEdgeMaxXPadding": 0, 40 | "masterInfluenceEdgeMaxYPadding": 0, 41 | "masterInfluenceEdgeMinXPadding": 0, 42 | "masterInfluenceEdgeMinYPadding": 0, 43 | "symbolID": "B053267D-9749-4E0C-AD18-7B6B2713EC3B", 44 | "verticalSpacing": 0 45 | } 46 | -------------------------------------------------------------------------------- /testCases/testSymbolMaster.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | import type { SJSymbolMaster } from '../types'; 3 | 4 | const data : SJSymbolMaster = { 5 | "_class": "symbolMaster", 6 | "do_objectID": "2C6AC337-B58E-4666-AFE0-E8F8C12D547B", 7 | "exportOptions": { 8 | "_class": "exportOptions", 9 | "exportFormats": [], 10 | "includedLayerIds": [], 11 | "layerOptions": 0, 12 | "shouldTrim": false 13 | }, 14 | "frame": { 15 | "_class": "rect", 16 | "constrainProportions": false, 17 | "height": 96, 18 | "width": 96, 19 | "x": 516, 20 | "y": 0 21 | }, 22 | "isFlippedHorizontal": false, 23 | "isFlippedVertical": false, 24 | "isLocked": false, 25 | "isVisible": true, 26 | "layerListExpandedType": 0, 27 | "name": "Swatch Haus", 28 | "nameIsFixed": false, 29 | "resizingType": 0, 30 | "rotation": 0, 31 | "shouldBreakMaskChain": false, 32 | "style": { 33 | "_class": "style", 34 | "endDecorationType": 0, 35 | "miterLimit": 10, 36 | "startDecorationType": 0 37 | }, 38 | "hasClickThrough": true, 39 | "layers": [ 40 | { 41 | "_class": "group", 42 | "do_objectID": "beb8e6c0-6aa5-445b-a091-ec3739afa81f", 43 | "exportOptions": { 44 | "_class": "exportOptions", 45 | "exportFormats": [], 46 | "includedLayerIds": [], 47 | "layerOptions": 0, 48 | "shouldTrim": false 49 | }, 50 | "frame": { 51 | "_class": "rect", 52 | "constrainProportions": false, 53 | "height": 96, 54 | "width": 96, 55 | "x": 0, 56 | "y": 0 57 | }, 58 | "isFlippedHorizontal": false, 59 | "isFlippedVertical": false, 60 | "isLocked": false, 61 | "isVisible": true, 62 | "layerListExpandedType": 2, 63 | "name": "Swatch Haus", 64 | "nameIsFixed": false, 65 | "resizingType": 0, 66 | "rotation": 0, 67 | "shouldBreakMaskChain": false, 68 | "style": { 69 | "_class": "style", 70 | "endDecorationType": 0, 71 | "miterLimit": 10, 72 | "startDecorationType": 0 73 | }, 74 | "hasClickThrough": false, 75 | "layers": [ 76 | { 77 | "_class": "shapeGroup", 78 | "do_objectID": "8ff6d195-f7c4-47b9-9c05-f325f8f23fe2", 79 | "exportOptions": { 80 | "_class": "exportOptions", 81 | "exportFormats": [], 82 | "includedLayerIds": [], 83 | "layerOptions": 0, 84 | "shouldTrim": false 85 | }, 86 | "frame": { 87 | "_class": "rect", 88 | "constrainProportions": false, 89 | "height": 96, 90 | "width": 96, 91 | "x": 0, 92 | "y": 0 93 | }, 94 | "isFlippedHorizontal": false, 95 | "isFlippedVertical": false, 96 | "isLocked": false, 97 | "isVisible": true, 98 | "layerListExpandedType": 0, 99 | "name": "ShapeGroup", 100 | "nameIsFixed": false, 101 | "resizingType": 0, 102 | "rotation": 0, 103 | "shouldBreakMaskChain": false, 104 | "style": { 105 | "_class": "style", 106 | "endDecorationType": 0, 107 | "fills": [ 108 | { 109 | "_class": "fill", 110 | "isEnabled": true, 111 | "color": { 112 | "_class": "color", 113 | "alpha": 1, 114 | "blue": 0, 115 | "green": 0, 116 | "red": 0 117 | }, 118 | "fillType": 0, 119 | "noiseIndex": 0, 120 | "noiseIntensity": 0, 121 | "patternFillType": 1, 122 | "patternTileScale": 1 123 | } 124 | ], 125 | "miterLimit": 10, 126 | "startDecorationType": 0 127 | }, 128 | "hasClickThrough": false, 129 | "layers": [ 130 | { 131 | "_class": "rectangle", 132 | "do_objectID": "d9db84ad-e02e-4e39-bec6-8d4d4c5f7483", 133 | "exportOptions": { 134 | "_class": "exportOptions", 135 | "exportFormats": [], 136 | "includedLayerIds": [], 137 | "layerOptions": 0, 138 | "shouldTrim": false 139 | }, 140 | "frame": { 141 | "_class": "rect", 142 | "constrainProportions": false, 143 | "height": 96, 144 | "width": 96, 145 | "x": 0, 146 | "y": 0 147 | }, 148 | "isFlippedHorizontal": false, 149 | "isFlippedVertical": false, 150 | "isLocked": false, 151 | "isVisible": true, 152 | "layerListExpandedType": 0, 153 | "name": "Path", 154 | "nameIsFixed": false, 155 | "resizingType": 0, 156 | "rotation": 0, 157 | "shouldBreakMaskChain": false, 158 | "booleanOperation": -1, 159 | "edited": false, 160 | "path": { 161 | "_class": "path", 162 | "isClosed": true, 163 | "points": [ 164 | { 165 | "_class": "curvePoint", 166 | "cornerRadius": 0, 167 | "curveFrom": "{0, 0}", 168 | "curveMode": 1, 169 | "curveTo": "{0, 0}", 170 | "hasCurveFrom": false, 171 | "hasCurveTo": false, 172 | "point": "{0, 0}" 173 | }, 174 | { 175 | "_class": "curvePoint", 176 | "cornerRadius": 0, 177 | "curveFrom": "{1, 0}", 178 | "curveMode": 1, 179 | "curveTo": "{1, 0}", 180 | "hasCurveFrom": false, 181 | "hasCurveTo": false, 182 | "point": "{1, 0}" 183 | }, 184 | { 185 | "_class": "curvePoint", 186 | "cornerRadius": 0, 187 | "curveFrom": "{1, 1}", 188 | "curveMode": 1, 189 | "curveTo": "{1, 1}", 190 | "hasCurveFrom": false, 191 | "hasCurveTo": false, 192 | "point": "{1, 1}" 193 | }, 194 | { 195 | "_class": "curvePoint", 196 | "cornerRadius": 0, 197 | "curveFrom": "{0, 1}", 198 | "curveMode": 1, 199 | "curveTo": "{0, 1}", 200 | "hasCurveFrom": false, 201 | "hasCurveTo": false, 202 | "point": "{0, 1}" 203 | } 204 | ] 205 | }, 206 | "fixedRadius": 8, 207 | "hasConvertedToNewRoundCorners": true 208 | } 209 | ], 210 | "clippingMaskMode": 0, 211 | "hasClippingMask": false, 212 | "windingRule": 1 213 | }, 214 | { 215 | "_class": "group", 216 | "do_objectID": "dce3d2f9-f20b-4e70-95e0-0785210f3d38", 217 | "exportOptions": { 218 | "_class": "exportOptions", 219 | "exportFormats": [ 220 | 221 | ], 222 | "includedLayerIds": [ 223 | 224 | ], 225 | "layerOptions": 0, 226 | "shouldTrim": false 227 | }, 228 | "frame": { 229 | "_class": "rect", 230 | "constrainProportions": false, 231 | "height": 18, 232 | "width": 80, 233 | "x": 8, 234 | "y": 8 235 | }, 236 | "isFlippedHorizontal": false, 237 | "isFlippedVertical": false, 238 | "isLocked": false, 239 | "isVisible": true, 240 | "layerListExpandedType": 2, 241 | "name": "Swatch Name", 242 | "nameIsFixed": false, 243 | "resizingType": 0, 244 | "rotation": 0, 245 | "shouldBreakMaskChain": false, 246 | "style": { 247 | "_class": "style", 248 | "endDecorationType": 0, 249 | "miterLimit": 10, 250 | "startDecorationType": 0 251 | }, 252 | "hasClickThrough": false, 253 | "layers": [ 254 | { 255 | "_class": "group", 256 | "do_objectID": "3d4a1ad8-015e-4546-b77c-250bcad1c7c3", 257 | "exportOptions": { 258 | "_class": "exportOptions", 259 | "exportFormats": [ 260 | 261 | ], 262 | "includedLayerIds": [ 263 | 264 | ], 265 | "layerOptions": 0, 266 | "shouldTrim": false 267 | }, 268 | "frame": { 269 | "_class": "rect", 270 | "constrainProportions": false, 271 | "height": 18, 272 | "width": 80, 273 | "x": 0, 274 | "y": 0 275 | }, 276 | "isFlippedHorizontal": false, 277 | "isFlippedVertical": false, 278 | "isLocked": false, 279 | "isVisible": true, 280 | "layerListExpandedType": 2, 281 | "name": "Haus", 282 | "nameIsFixed": false, 283 | "resizingType": 0, 284 | "rotation": 0, 285 | "shouldBreakMaskChain": false, 286 | "style": { 287 | "_class": "style", 288 | "endDecorationType": 0, 289 | "miterLimit": 10, 290 | "startDecorationType": 0 291 | }, 292 | "hasClickThrough": false, 293 | "layers": [ 294 | { 295 | "_class": "text", 296 | "do_objectID": "c1813543-e177-4199-80c8-70f5a950e44b", 297 | "exportOptions": { 298 | "_class": "exportOptions", 299 | "exportFormats": [ 300 | 301 | ], 302 | "includedLayerIds": [ 303 | 304 | ], 305 | "layerOptions": 0, 306 | "shouldTrim": false 307 | }, 308 | "frame": { 309 | "_class": "rect", 310 | "constrainProportions": false, 311 | "height": 18, 312 | "width": 80, 313 | "x": 0, 314 | "y": 0 315 | }, 316 | "isFlippedHorizontal": false, 317 | "isFlippedVertical": false, 318 | "isLocked": false, 319 | "isVisible": true, 320 | "layerListExpandedType": 0, 321 | "name": "Haus", 322 | "nameIsFixed": false, 323 | "resizingType": 0, 324 | "rotation": 0, 325 | "shouldBreakMaskChain": false, 326 | "style": { 327 | "_class": "style", 328 | "endDecorationType": 0, 329 | "miterLimit": 10, 330 | "startDecorationType": 0 331 | }, 332 | "attributedString": { 333 | "_class": "MSAttributedString", 334 | "archivedAttributedString": { 335 | "_archive": "" 336 | } 337 | }, 338 | "automaticallyDrawOnUnderlyingPath": false, 339 | "dontSynchroniseWithSymbol": false, 340 | "glyphBounds": "{{0, 0}, {0, 0}}", 341 | "heightIsClipped": false, 342 | "lineSpacingBehaviour": 2, 343 | "textBehaviour": 1 344 | } 345 | ] 346 | } 347 | ] 348 | }, 349 | { 350 | "_class": "group", 351 | "do_objectID": "e2969495-f617-47d5-b9dd-499912565baf", 352 | "exportOptions": { 353 | "_class": "exportOptions", 354 | "exportFormats": [], 355 | "includedLayerIds": [], 356 | "layerOptions": 0, 357 | "shouldTrim": false 358 | }, 359 | "frame": { 360 | "_class": "rect", 361 | "constrainProportions": false, 362 | "height": 18, 363 | "width": 80, 364 | "x": 8, 365 | "y": 26 366 | }, 367 | "isFlippedHorizontal": false, 368 | "isFlippedVertical": false, 369 | "isLocked": false, 370 | "isVisible": true, 371 | "layerListExpandedType": 2, 372 | "name": "Swatch Hex", 373 | "nameIsFixed": false, 374 | "resizingType": 0, 375 | "rotation": 0, 376 | "shouldBreakMaskChain": false, 377 | "style": { 378 | "_class": "style", 379 | "endDecorationType": 0, 380 | "miterLimit": 10, 381 | "startDecorationType": 0 382 | }, 383 | "hasClickThrough": false, 384 | "layers": [ 385 | { 386 | "_class": "group", 387 | "do_objectID": "a4f3f8d5-fb57-48fb-b9f6-8fd7717984ea", 388 | "exportOptions": { 389 | "_class": "exportOptions", 390 | "exportFormats": [], 391 | "includedLayerIds": [], 392 | "layerOptions": 0, 393 | "shouldTrim": false 394 | }, 395 | "frame": { 396 | "_class": "rect", 397 | "constrainProportions": false, 398 | "height": 18, 399 | "width": 80, 400 | "x": 0, 401 | "y": 0 402 | }, 403 | "isFlippedHorizontal": false, 404 | "isFlippedVertical": false, 405 | "isLocked": false, 406 | "isVisible": true, 407 | "layerListExpandedType": 2, 408 | "name": "#000", 409 | "nameIsFixed": false, 410 | "resizingType": 0, 411 | "rotation": 0, 412 | "shouldBreakMaskChain": false, 413 | "style": { 414 | "_class": "style", 415 | "endDecorationType": 0, 416 | "miterLimit": 10, 417 | "startDecorationType": 0 418 | }, 419 | "hasClickThrough": false, 420 | "layers": [ 421 | { 422 | "_class": "text", 423 | "do_objectID": "3ab20423-7f68-42c4-9eac-cab9b87444f9", 424 | "exportOptions": { 425 | "_class": "exportOptions", 426 | "exportFormats": [], 427 | "includedLayerIds": [], 428 | "layerOptions": 0, 429 | "shouldTrim": false 430 | }, 431 | "frame": { 432 | "_class": "rect", 433 | "constrainProportions": false, 434 | "height": 18, 435 | "width": 80, 436 | "x": 0, 437 | "y": 0 438 | }, 439 | "isFlippedHorizontal": false, 440 | "isFlippedVertical": false, 441 | "isLocked": false, 442 | "isVisible": true, 443 | "layerListExpandedType": 0, 444 | "name": "#000", 445 | "nameIsFixed": false, 446 | "resizingType": 0, 447 | "rotation": 0, 448 | "shouldBreakMaskChain": false, 449 | "style": { 450 | "_class": "style", 451 | "endDecorationType": 0, 452 | "miterLimit": 10, 453 | "startDecorationType": 0 454 | }, 455 | "attributedString": { 456 | "_class": "MSAttributedString", 457 | "archivedAttributedString": { 458 | "_archive": "" 459 | } 460 | }, 461 | "automaticallyDrawOnUnderlyingPath": false, 462 | "dontSynchroniseWithSymbol": false, 463 | "glyphBounds": "{{0, 0}, {0, 0}}", 464 | "heightIsClipped": false, 465 | "lineSpacingBehaviour": 2, 466 | "textBehaviour": 1 467 | } 468 | ] 469 | } 470 | ] 471 | } 472 | ] 473 | } 474 | ], 475 | "backgroundColor": { 476 | "_class": "color", 477 | "alpha": 1, 478 | "blue": 1, 479 | "green": 1, 480 | "red": 1 481 | }, 482 | "hasBackgroundColor": false, 483 | "horizontalRulerData": { 484 | "_class": "rulerData", 485 | "base": 0, 486 | "guides": [] 487 | }, 488 | "includeBackgroundColorInExport": true, 489 | "includeInCloudUpload": true, 490 | "verticalRulerData": { 491 | "_class": "rulerData", 492 | "base": 0, 493 | "guides": [] 494 | }, 495 | "includeBackgroundColorInInstance": false, 496 | "symbolID": "B3930B3A-0102-4E7E-B843-5FE55610BAD9" 497 | } 498 | -------------------------------------------------------------------------------- /testCases/testTextLayer.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | import type { SJTextLayer } from '../types'; 3 | 4 | const data: SJTextLayer = { 5 | "_class": "text", 6 | "do_objectID": "7CCE8237-0E16-499F-A289-F03986614B5B", 7 | "exportOptions": { 8 | "_class": "exportOptions", 9 | "exportFormats": [], 10 | "includedLayerIds": [], 11 | "layerOptions": 0, 12 | "shouldTrim": false 13 | }, 14 | "frame": { 15 | "_class": "rect", 16 | "constrainProportions": false, 17 | "height": 17, 18 | "width": 117, 19 | "x": 146, 20 | "y": 253 21 | }, 22 | "isFlippedHorizontal": false, 23 | "isFlippedVertical": false, 24 | "isLocked": false, 25 | "isVisible": true, 26 | "layerListExpandedType": 0, 27 | "name": "My hot hot ABCD", 28 | "nameIsFixed": false, 29 | "resizingType": 0, 30 | "rotation": 0, 31 | "shouldBreakMaskChain": false, 32 | "style": { 33 | "_class": "style", 34 | "endDecorationType": 0, 35 | "miterLimit": 10, 36 | "startDecorationType": 0, 37 | "textStyle": { 38 | "_class": "textStyle", 39 | "encodedAttributes": { 40 | "NSColor": { 41 | "_archive": "YnBsaXN0MDDUAQIDBAUGHyBYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKUHCBEVHFUkbnVsbNQJCgsMDQ4PEFVOU1JHQlxOU0NvbG9yU3BhY2VfEBJOU0N1c3RvbUNvbG9yU3BhY2VWJGNsYXNzTxAnMC4xODc4NDEzOTc3IDAuNTE1ODY0MTU4MiAwLjIyNjcyNzI0ODEAEAGAAoAE0hIMExRUTlNJRBABgAPSFhcYGVokY2xhc3NuYW1lWCRjbGFzc2VzXE5TQ29sb3JTcGFjZaIaG1xOU0NvbG9yU3BhY2VYTlNPYmplY3TSFhcdHldOU0NvbG9yoh0bXxAPTlNLZXllZEFyY2hpdmVy0SEiVHJvb3SAAQAIABEAGgAjAC0AMgA3AD0AQwBMAFIAXwB0AHsApQCnAKkAqwCwALUAtwC5AL4AyQDSAN8A4gDvAPgA/QEFAQgBGgEdASIAAAAAAAACAQAAAAAAAAAjAAAAAAAAAAAAAAAAAAABJA==" 42 | }, 43 | "MSAttributedStringFontAttribute": { 44 | "_archive": "YnBsaXN0MDDUAQIDBAUGJidYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKkHCA0XGBkaGyJVJG51bGzSCQoLDFYkY2xhc3NfEBpOU0ZvbnREZXNjcmlwdG9yQXR0cmlidXRlc4AIgALTDg8JEBMWV05TLmtleXNaTlMub2JqZWN0c6IREoADgASiFBWABYAGgAdfEBNOU0ZvbnRTaXplQXR0cmlidXRlXxATTlNGb250TmFtZUF0dHJpYnV0ZSNALAAAAAAAAF8QEC5TRk5TVGV4dC1NZWRpdW3SHB0eH1okY2xhc3NuYW1lWCRjbGFzc2VzXxATTlNNdXRhYmxlRGljdGlvbmFyeaMeICFcTlNEaWN0aW9uYXJ5WE5TT2JqZWN00hwdIyRfEBBOU0ZvbnREZXNjcmlwdG9yoiUhXxAQTlNGb250RGVzY3JpcHRvcl8QD05TS2V5ZWRBcmNoaXZlctEoKVRyb290gAEACAARABoAIwAtADIANwBBAEcATABTAHAAcgB0AHsAgwCOAJEAkwCVAJgAmgCcAJ4AtADKANMA5gDrAPYA/wEVARkBJgEvATQBRwFKAV0BbwFyAXcAAAAAAAACAQAAAAAAAAAqAAAAAAAAAAAAAAAAAAABeQ==" 45 | }, 46 | "NSParagraphStyle": { 47 | "_archive": "YnBsaXN0MDDUAQIDBAUGICFYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKUHCBMXHVUkbnVsbNUJCgsMDQ4PEBESWk5TVGFiU3RvcHNbTlNBbGlnbm1lbnRcTlNUZXh0QmxvY2tzXxAfTlNBbGxvd3NUaWdodGVuaW5nRm9yVHJ1bmNhdGlvblYkY2xhc3OAABAEgAIQAYAE0hQNFRZaTlMub2JqZWN0c6CAA9IYGRobWiRjbGFzc25hbWVYJGNsYXNzZXNXTlNBcnJheaIaHFhOU09iamVjdNIYGR4fXxAQTlNQYXJhZ3JhcGhTdHlsZaIeHF8QD05TS2V5ZWRBcmNoaXZlctEiI1Ryb290gAEACAARABoAIwAtADIANwA9AEMATgBZAGUAcgCUAJsAnQCfAKEAowClAKoAtQC2ALgAvQDIANEA2QDcAOUA6gD9AQABEgEVARoAAAAAAAACAQAAAAAAAAAkAAAAAAAAAAAAAAAAAAABHA==" 48 | }, 49 | "NSKern": 0.03402778 50 | } 51 | } 52 | }, 53 | "attributedString": { 54 | "_class": "MSAttributedString", 55 | "archivedAttributedString": { 56 | "_archive": "YnBsaXN0MDDUAQIDBAUGaWpYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8QGwcIDxAeHyAhIiwvNTg8REVGR0hMUFFYXGBjZVUkbnVsbNMJCgsMDQ5YTlNTdHJpbmdWJGNsYXNzXE5TQXR0cmlidXRlc4ACgBqAA18QD015IGhvdCBob3QgQUJDRNMREgoTGB1XTlMua2V5c1pOUy5vYmplY3RzpBQVFheABIAFgAaAB6QZGhscgAiADIAUgBWAGV8QEE5TUGFyYWdyYXBoU3R5bGVfEB9NU0F0dHJpYnV0ZWRTdHJpbmdGb250QXR0cmlidXRlVk5TS2VybldOU0NvbG9y1SMkJSYKJygpKitaTlNUYWJTdG9wc1tOU0FsaWdubWVudFxOU1RleHRCbG9ja3NfEB9OU0FsbG93c1RpZ2h0ZW5pbmdGb3JUcnVuY2F0aW9ugAAQBIAJEAGAC9ISCi0uoIAK0jAxMjNaJGNsYXNzbmFtZVgkY2xhc3Nlc1dOU0FycmF5ojI0WE5TT2JqZWN00jAxNjdfEBBOU1BhcmFncmFwaFN0eWxlojY00go5OjtfEBpOU0ZvbnREZXNjcmlwdG9yQXR0cmlidXRlc4ATgA3TERIKPUBDoj4/gA6AD6JBQoAQgBGAEl8QE05TRm9udFNpemVBdHRyaWJ1dGVfEBNOU0ZvbnROYW1lQXR0cmlidXRlI0AsAAAAAAAAXxAQLlNGTlNUZXh0LU1lZGl1bdIwMUlKXxATTlNNdXRhYmxlRGljdGlvbmFyeaNJSzRcTlNEaWN0aW9uYXJ50jAxTU5fEBBOU0ZvbnREZXNjcmlwdG9yok80XxAQTlNGb250RGVzY3JpcHRvciM/oWwW1ILOp9RSU1QKVSpWV1VOU1JHQlxOU0NvbG9yU3BhY2VfEBJOU0N1c3RvbUNvbG9yU3BhY2VPECcwLjE4Nzg0MTM5NzcgMC41MTU4NjQxNTgyIDAuMjI2NzI3MjQ4MQCAFoAY0lkKWltUTlNJRBABgBfSMDFdXlxOU0NvbG9yU3BhY2WiXzRcTlNDb2xvclNwYWNl0jAxYWJXTlNDb2xvcqJhNNIwMUtkoks00jAxZmdfEBJOU0F0dHJpYnV0ZWRTdHJpbmeiaDRfEBJOU0F0dHJpYnV0ZWRTdHJpbmdfEA9OU0tleWVkQXJjaGl2ZXLRa2xUcm9vdIABAAgAEQAaACMALQAyADcAVQBbAGIAawByAH8AgQCDAIUAlwCeAKYAsQC2ALgAugC8AL4AwwDFAMcAyQDLAM0A4AECAQkBEQEcAScBMwFAAWIBZAFmAWgBagFsAXEBcgF0AXkBhAGNAZUBmAGhAaYBuQG8AcEB3gHgAeIB6QHsAe4B8AHzAfUB9wH5Ag8CJQIuAkECRgJcAmACbQJyAoUCiAKbAqQCrQKzAsAC1QL/AwEDAwMIAw0DDwMRAxYDIwMmAzMDOANAA0MDSANLA1ADZQNoA30DjwOSA5cAAAAAAAACAQAAAAAAAABtAAAAAAAAAAAAAAAAAAADmQ==" 57 | } 58 | }, 59 | "automaticallyDrawOnUnderlyingPath": false, 60 | "dontSynchroniseWithSymbol": false, 61 | "glyphBounds": "{{0, 0}, {116, 17}}", 62 | "heightIsClipped": false, 63 | "lineSpacingBehaviour": 2, 64 | "textBehaviour": 0 65 | }; -------------------------------------------------------------------------------- /types.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | // TODO(akp): determine possibilites here 4 | 5 | export type SJRect = {| 6 | _class: 'rect', 7 | constrainProportions: bool, 8 | x: number, 9 | y: number, 10 | width: number, 11 | height: number, 12 | |}; 13 | 14 | export type SJObjectId = string; 15 | 16 | type SJIDBase = { 17 | do_objectID: SJObjectId, 18 | }; 19 | 20 | // Rect encoded as a string, ie {{0, 0}, {10, 30}} 21 | export type SJStringRect = string; 22 | 23 | export type SJColor = {| 24 | _class: 'color', 25 | red: number, 26 | green: number, 27 | blue: number, 28 | alpha: number, 29 | |}; 30 | 31 | /*** Style & Misc. ***/ 32 | 33 | // You'll want to use values from sketch-constants for these. 34 | // This just prevents some mistakes. 35 | // $Values will make these unnecessary https://github.com/facebook/flow/issues/627 36 | type TextDecorationUnderlineEnum = 0 | 1 | 9; 37 | type StrikeThroughEnum = 0 | 1; 38 | type TextAlignmentEnum = 0 | 1 | 2 | 3; 39 | type TextTransformEnum = 0 | 1 | 2; 40 | type BorderPositionEnum = 0 | 1 | 2 | 3; 41 | type BorderLineCapStyle = 0 | 1 | 2; 42 | type BorderLineJoinStyle = 0 | 1 | 2; 43 | type FillTypeEnum = 0 | 1 | 4 | 5; 44 | type PatternFillTypeEnum = 0 | 1 | 2 | 3; 45 | type BlendModeEnum = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15; 46 | type LineDecorationTypeEnum = 0 | 1 | 2 | 3; 47 | type BooleanOperation = -1 | 0 | 1 | 2 | 3; 48 | export type SJCurveMode = 0 | 1 | 2 | 3 | 4; 49 | /* 50 | const ResizingType = { 51 | Stretch: 0, 52 | PinToCorner: 1, 53 | ResizeObject: 2, 54 | FloatInPlace: 3 55 | }; 56 | */ 57 | type ResizingType = 0 | 1 | 2 | 3; 58 | /* 59 | const LayerListExpandedType = { 60 | Collapsed: 0, 61 | ExpandedTemp: 1, 62 | Expanded: 2, 63 | }; 64 | */ 65 | type LayerListExpandedType = 0 | 1 | 2; 66 | 67 | export type SJBorder = {| 68 | _class: 'border', 69 | isEnabled: bool, 70 | color: SJColor, 71 | fillType: FillTypeEnum, 72 | position: BorderPositionEnum, 73 | thickness: number, 74 | |}; 75 | 76 | export type SJBorderOptions = {| 77 | _class: 'borderOptions', 78 | isEnabled: bool, 79 | dashPattern: number[], 80 | lineCapStyle: BorderLineCapStyle, 81 | lineJoinStyle: BorderLineJoinStyle, 82 | |}; 83 | 84 | export type SJFill = {| 85 | _class: 'fill', 86 | isEnabled: bool, 87 | color?: SJColor, 88 | fillType: FillTypeEnum, 89 | image?: SJImageDataReference, 90 | noiseIndex: number, 91 | noiseIntensity: number, 92 | patternFillType: PatternFillTypeEnum, 93 | patternTileScale: number, 94 | |}; 95 | 96 | export type SJShadow = {| 97 | _class: 'shadow' | 'innerShadow', 98 | isEnabled: bool, 99 | blurRadius: number, 100 | color: SJColor, 101 | contextSettings: { 102 | _class: 'graphicsContextSettings', 103 | blendMode: BlendModeEnum, 104 | opacity: number, 105 | }, 106 | offsetX: number, 107 | offsetY: number, 108 | spread: number, 109 | |}; 110 | 111 | export type SJStyle = { 112 | _class: 'style', 113 | sharedObjectID?: string, 114 | borderOptions?: SJBorderOptions, 115 | borders?: SJBorder[], 116 | shadows?: SJShadow[], 117 | innerShadows?: SJShadow[], 118 | fills?: SJFill[], 119 | textStyle?: SJTextStyle, 120 | miterLimit: number, 121 | startDecorationType: LineDecorationTypeEnum, 122 | endDecorationType: LineDecorationTypeEnum, 123 | } 124 | 125 | type TextStyleAttributes = { 126 | underlineStyle: TextDecorationUnderlineEnum, 127 | strikethroughStyle: StrikeThroughEnum, 128 | paragraphStyle: { 129 | _class: 'paragraphStyle', 130 | alignment: TextAlignmentEnum, 131 | minimumLineHeight?: number, 132 | maximumLineHeight?: number, 133 | lineHeightMultiple?: number, 134 | kerning?: number, 135 | MSAttributedStringTextTransformAttribute?: TextTransformEnum, 136 | MSAttributedStringFontAttribute?: { 137 | _class: 'fontDescriptor', 138 | attributes: { 139 | name: string, 140 | size: number, 141 | }, 142 | }, 143 | textStyleVerticalAlignmentKey?: number, 144 | MSAttributedStringColorAttribute?: SJColor, 145 | } 146 | } 147 | 148 | export type SJTextStyle = {| 149 | _class: 'textStyle', 150 | encodedAttributes: { 151 | NSColor: KeyValueArchive, 152 | MSAttributedStringFontAttribute?: KeyValueArchive, 153 | NSParagraphStyle?: KeyValueArchive, 154 | NSKern: number, 155 | } | TextStyleAttributes 156 | |}; 157 | 158 | type ExportOptions = {| 159 | _class: 'exportOptions', 160 | exportFormats: [], 161 | includedLayerIds: [], 162 | layerOptions: number, 163 | shouldTrim: bool, 164 | |}; 165 | 166 | type RulerData = {| 167 | _class: 'rulerData', 168 | base: 0, 169 | guides: number[], 170 | |}; 171 | 172 | export type SJImageDataReference = {| 173 | _class: 'MSJSONOriginalDataReference', 174 | _ref: string, 175 | _ref_class: 'MSImageData', 176 | data: { 177 | _data: string, 178 | }, 179 | sha1: { 180 | _data: string, 181 | }, 182 | |}; 183 | 184 | // '{0, 1}' 185 | type PointString = string; 186 | 187 | export type SJCurvePoint = {| 188 | _class: 'curvePoint', 189 | cornerRadius: number, 190 | curveFrom: PointString, 191 | curveMode: SJCurveMode, 192 | curveTo: PointString, 193 | hasCurveFrom: bool, 194 | hasCurveTo: bool, 195 | point: PointString, 196 | |} 197 | 198 | export type SJPath = {| 199 | _class: 'path', 200 | isClosed: bool, 201 | points: SJCurvePoint[], 202 | |} 203 | 204 | /*** Layers ***/ 205 | 206 | type SJFlow = { 207 | _class: 'MSImmutableFlowConnection', 208 | animationType: number, 209 | destinationArtboardID?: SJObjectId | 'back' 210 | } 211 | 212 | type _SJLayerBase = { 213 | // Layers have names; when they are not fixed, they are changed by the layer's string 214 | name: string, 215 | nameIsFixed: bool, 216 | 217 | // It's important to make sure your layers are visible by including visible: true 218 | isVisible: bool, 219 | isLocked?: bool, 220 | layerListExpandedType?: LayerListExpandedType, 221 | hasClickThrough?: bool, 222 | 223 | layers?: SJLayer[], 224 | style?: SJStyle, 225 | 226 | // Rotation direction is backwards compared to Sketch UI 227 | isFlippedHorizontal?: bool, 228 | isFlippedVertical?: bool, 229 | rotation?: number, 230 | shouldBreakMaskChain?: bool, 231 | resizingType?: ResizingType, 232 | 233 | flow?: SJFlow, 234 | } & SJIDBase; 235 | 236 | type _SJArtboardBase = { 237 | frame: SJRect, 238 | backgroundColor: SJColor, 239 | hasBackgroundColor: bool, 240 | horizontalRulerData?: RulerData, 241 | verticalRulerData?: RulerData, 242 | includeBackgroundColorInExport?: bool, 243 | includeInCloudUpload?: bool, 244 | isFlowHome?: bool, 245 | } & _SJLayerBase; 246 | 247 | export type SJLayer = SJArtboardLayer | SJTextLayer | SJGroupLayer | SJShapeGroupLayer | SJShapeLayer | SJSymbolInstanceLayer; 248 | 249 | export type SJSymbolMaster = { 250 | _class: 'symbolMaster', 251 | includeBackgroundColorInInstance?: bool, 252 | symbolID: SJObjectId, 253 | } & _SJArtboardBase; 254 | 255 | export type SJNestedSymbolOverride = { 256 | symbolID: SJObjectId, 257 | } 258 | 259 | export type SJSymbolOverride = { 260 | _class: 'overrideValue', 261 | overrideName: string, 262 | value: string | SJImageDataReference, 263 | } & SJIDBase 264 | 265 | export type SJSymbolInstanceLayer = { 266 | _class: 'symbolInstance', 267 | frame: SJRect, 268 | horizontalSpacing: number, 269 | verticalSpacing: number, 270 | masterInfluenceEdgeMinXPadding?: number, 271 | masterInfluenceEdgeMaxXPadding?: number, 272 | masterInfluenceEdgeMinYPadding?: number, 273 | masterInfluenceEdgeMaxYPadding?: number, 274 | symbolID: SJObjectId, 275 | overrides?: { 276 | [objectId: SJObjectId]: string | SJNestedSymbolOverride | SJImageDataReference, 277 | }, 278 | overrideValues?: SJSymbolOverride[] 279 | } & _SJLayerBase; 280 | 281 | export type SJArtboardLayer = { 282 | _class: 'artboard', 283 | } & _SJArtboardBase; 284 | 285 | export type SJTextLayer = { 286 | _class: 'text', 287 | attributedString: MSAttributedString, 288 | glyphBounds: SJStringRect, 289 | } & _SJLayerBase; 290 | 291 | export type SJGroupLayer = { 292 | _class: 'group', 293 | } & _SJLayerBase; 294 | 295 | // There are some restrictions on the nesting of shape groups and shapes 296 | 297 | export type SJShapeGroupLayer = { 298 | _class: 'shapeGroup', 299 | //TODO(akp): find a way to restrict this to shape layers with blowing up, i.e. 300 | //layers?: SJShapeLayer[], 301 | style: SJStyle, 302 | hasClippingMask: bool, 303 | } & _SJLayerBase; 304 | 305 | export type SJShapeLayer = { 306 | // TODO(akp): split these into types 307 | _class: 'rectangle' | 'oval' | 'shapePath', 308 | } & SJIDBase; 309 | 310 | /*** Dumb key value coded types. Hopefully sketch will kill this off at some point **/ 311 | 312 | // This is a base-64 encoded bplist, which is pretty dumb 313 | type EncodedBase64BinaryPlist = string; 314 | 315 | type KeyValueArchive = { 316 | _archive: EncodedBase64BinaryPlist, 317 | }; 318 | 319 | export type NSColorArchive = KeyValueArchive; 320 | 321 | export type MSAttributedString = { 322 | _class: 'MSAttributedString', 323 | archivedAttributedString: KeyValueArchive, 324 | } | {| 325 | _class: 'attributedString', 326 | string: string, 327 | attributes: { 328 | _class: 'stringAttribute', 329 | location: number, 330 | length: number, 331 | attributes: TextStyleAttributes, 332 | }[], 333 | |} 334 | --------------------------------------------------------------------------------