From 743827ba60f293ddf97bbfdb55b9d2d9eb05ec83 Mon Sep 17 00:00:00 2001 From: Curtis Wensley Date: Mon, 16 Dec 2024 10:15:24 -0800 Subject: [PATCH 1/4] Add GH2 template --- .../.template.config/dotnetcli.host.json | 52 ++++++ .../.template.config/ide.host.json | 8 + .../.template.config/template.json | 157 ++++++++++++++++++ .../CSGrasshopper2/.vscode/launch.json | 47 ++++++ .../content/CSGrasshopper2/.vscode/tasks.json | 21 +++ .../Icons/MyGrasshopper__1Component.3dm | Bin 0 -> 37926 bytes .../Icons/MyGrasshopper__1Component.ghicon | Bin 0 -> 2729 bytes .../Icons/MyGrasshopper__1Plugin.3dm | Bin 0 -> 3005442 bytes .../Icons/MyGrasshopper__1Plugin.ghicon | Bin 0 -> 897 bytes .../CSGrasshopper2/MyGrasshopper.1.csproj | 88 ++++++++++ .../MyGrasshopper.1PluginInfo.cs | 15 ++ .../MyGrasshopper__1Component.cs | 102 ++++++++++++ .../Properties/launchSettings.json | 20 +++ build/GenerateTemplates.proj | 27 ++- 14 files changed, 536 insertions(+), 1 deletion(-) create mode 100755 Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json create mode 100755 Rhino.Templates/content/CSGrasshopper2/.template.config/ide.host.json create mode 100755 Rhino.Templates/content/CSGrasshopper2/.template.config/template.json create mode 100644 Rhino.Templates/content/CSGrasshopper2/.vscode/launch.json create mode 100644 Rhino.Templates/content/CSGrasshopper2/.vscode/tasks.json create mode 100644 Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Component.3dm create mode 100644 Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Component.ghicon create mode 100644 Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Plugin.3dm create mode 100644 Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Plugin.ghicon create mode 100755 Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1.csproj create mode 100644 Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs create mode 100644 Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs create mode 100644 Rhino.Templates/content/CSGrasshopper2/Properties/launchSettings.json diff --git a/Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json b/Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json new file mode 100755 index 0000000..e53ed79 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json @@ -0,0 +1,52 @@ +{ + "$schema": "http://json.schemastore.org/dotnetcli.host", + "symbolInfo": { + "IncludeSample": { + "longName": "include-sample", + "shortName": "sample" + }, + "RhinoVersion": { + "longName": "version", + "shortName": "v" + }, + "AddonDisplayName": { + "longName": "addon-display-name", + "shortName": "addon-name" + }, + "ComponentClassName": { + "longName": "component-class", + "shortName": "component" + }, + "ComponentName": { + "longName": "component-name", + "shortName": "cname" + }, + "ComponentInfo": { + "shortName": "info" + }, + "ComponentChapter": { + "longName": "chapter", + "shortName": "ch" + }, + "ComponentSection": { + "longName": "section", + "shortName": "sec" + }, + "UseWpf": { + "longName": "include-wpf", + "shortName": "wpf" + }, + "UseWinForms": { + "longName": "include-winforms", + "shortName": "wf" + }, + "BuildYak": { + "longName": "build-yak", + "shortName": "yak" + }, + "IncludeVSCode": { + "longName": "include-vscode-launch", + "shortName": "vscode" + } + } +} \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/.template.config/ide.host.json b/Rhino.Templates/content/CSGrasshopper2/.template.config/ide.host.json new file mode 100755 index 0000000..fb277c7 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/.template.config/ide.host.json @@ -0,0 +1,8 @@ +{ + "$schema": "http://json.schemastore.org/vs-2017.3.host", + "unsupportedHosts": [ + { + "id": "vs" + } + ] +} \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json b/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json new file mode 100755 index 0000000..c632a76 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json @@ -0,0 +1,157 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "McNeel", + "classifications": [ + "Rhino", + "Grasshopper2", + "GH2" + ], + "name": "Grasshopper2 PlugIn (WIP)", + "description": "Build Grasshopper2 components for Rhino 3D in C#", + "identity": "Grasshopper2.Component.CS", + "groupIdentity": "Grasshopper2.PlugIn", + "precedence": 100, + "defaultName": "MyGrasshopper2Components", + "shortName": "gh2", + "tags": { + "language": "C#", + "type": "project" + }, + "sourceName": "MyGrasshopper.1", + "preferNameDirectory": true, + "symbols": { + "IncludeSample": { + "type": "parameter", + "description": "Include code sample.", + "dataType": "bool", + "defaultValue": "false" + }, + "RhinoVersion": { + "type": "parameter", + "description": "Version of Rhino", + "datatype": "choice", + "defaultValue": "8", + "choices": [ + { + "choice": "8", + "description": "Version 8" + } + ] + }, + "BuildYak": { + "type": "parameter", + "description": "Include target to build yak package(s) for your plugin", + "datatype": "bool", + "defaultValue": "false" + }, + "IncludeVSCode": { + "type": "parameter", + "description": "Include tasks.json and launch.json to build/debug in VS Code", + "datatype": "bool", + "defaultValue": "true" + }, + "AddonDisplayName": { + "type": "parameter", + "description": "Display name of your Grasshopper2 assembly", + "datatype": "text", + "replaces": "MyGrasshopper.1 Info" + }, + "ComponentClassName": { + "type": "parameter", + "description": "Name of the component class", + "datatype": "text", + "replaces": "MyGrasshopper__1Component", + "fileRename": "MyGrasshopper__1Component" + }, + "ComponentName": { + "type": "parameter", + "description": "Display name of the component", + "datatype": "text", + "replaces": "MyGrasshopper.1 Component" + }, + "ComponentInfo": { + "type": "parameter", + "description": "Description of the component", + "replaces": "ComponentInfo", + "defaultValue": "Description of component" + }, + "ComponentChapter": { + "type": "parameter", + "description": "Chapter of the component", + "replaces": "ComponentChapter", + "defaultValue": "Chapter" + }, + "ComponentSection": { + "type": "parameter", + "description": "Section of the component", + "replaces": "ComponentSection", + "defaultValue": "Section" + }, + + "UseWpf": { + "type": "parameter", + "description": "Enable to use WPF (Windows only)", + "datatype": "bool", + "defaultValue": "false" + }, + "UseWinForms": { + "type": "parameter", + "description": "Enable the use of Windows Forms", + "datatype": "bool", + "defaultValue": "false" + }, + "UseWindowsDesktop": { + "type": "computed", + "value": "UseWpf || UseWinForms" + }, + + "HostIdentifier": { + "type": "bind", + "binding": "HostIdentifier" + } + }, + "forms": { + "JsonStringEncode": { + "identifier": "replace", + "pattern": "\\\\", + "replacement": "\\\\" + } + }, + "sources": [ + { + "modifiers": [ + { + "condition": "!IncludeVSCode", + "exclude": [ ".vscode/*.*" ] + }, + { + "condition": "ComponentClassName == 'MyGrasshopper__1Component'", + "rename": { + "MyGrasshopper__1Component.cs": "MyGrasshopper.1Component.cs" + } + } + ] + } + ], + "primaryOutputs": [ + { "path": "MyGrasshopper.1.csproj" }, + { "path": "MyGrasshopper__1Component.cs" } + ], + "guids": [ + "ee4e2b39-d96b-4e4c-8f9d-9b6561e61b64", + "e79cd2b5-cb9c-4d08-93ec-446cc1f6d923", + "cd826b9b-8dbe-4c31-aac1-6fc7ea2bcfb7" + ], + "postActions": [ + { + "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", + "description": "Opens the command in the editor", + "manualInstructions": [], + "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", + "args": { + "files": "1" + }, + "continueOnError": true + } + ] +} \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/.vscode/launch.json b/Rhino.Templates/content/CSGrasshopper2/.vscode/launch.json new file mode 100644 index 0000000..6d3f097 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/.vscode/launch.json @@ -0,0 +1,47 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Rhino 8 - netcore", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "", + "osx": { + "program": "/Applications/Rhino 8.app/Contents/MacOS/Rhinoceros", + "args": [ + "-runscript=_G2" + ] + }, + "windows": { + "program": "C:\\Program Files\\Rhino 8\\System\\Rhino.exe", + "targetArchitecture": "x86_64", + "args": "/netcore /runscript=\"_G2\"" + }, + "env": { + "RHINO_PACKAGE_DIRS": "${workspaceFolder}/bin/Debug" + }, + "cwd": "${workspaceFolder}", + "stopAtEntry": false, + "console": "internalConsole" + }, + { + "name": "Rhino 8 Windows - netfx", + "type": "clr", + "request": "launch", + "preLaunchTask": "build", + "windows": { + "program": "C:\\Program Files\\Rhino 8\\System\\Rhino.exe", + "targetArchitecture": "x86_64", + "args": "/netfx /runscript=\"_G2\"" + }, + "env": { + "RHINO_PACKAGE_DIRS": "${workspaceFolder}/bin/Debug" + }, + "cwd": "${workspaceFolder}", + "stopAtEntry": false, + "console": "internalConsole" + }, + ], + "compounds": [] +} \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/.vscode/tasks.json b/Rhino.Templates/content/CSGrasshopper2/.vscode/tasks.json new file mode 100644 index 0000000..20c5e62 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/.vscode/tasks.json @@ -0,0 +1,21 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "shell", + "args": [ + "build", + "-clp:NoSummary", + "${workspaceFolder}/MyGrasshopper.1.csproj" + ], + "problemMatcher": "$msCompile", + "presentation": { + "reveal": "always", + "clear": true + }, + "group": "build" + } + ] +} \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Component.3dm b/Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Component.3dm new file mode 100644 index 0000000000000000000000000000000000000000..cf0f299d87f43de52c929763bf6012ebc6cd3e57 GIT binary patch literal 37926 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 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFwkb;@BijMdnbl%F%&=XV}Jn$7c}|*3^0(_z;sO#`Tw`S@zZzKCwbdTU(z-VFu=e#2I87}%&qge*0uI= z+E9PfRtzw}00UPr5NnTlu3tWz80(aH&H9A(D_Bb7>Hbcp3l$c)JNNB!#r)MEwlv#3^2gJl??d)KhIb4tS&q= zz(6(wk?;HdKbP5DDi4zkFu=e)4aAxxt^rKnpD6E5#B-0X53q7iE81PVGr#}?+YOZ8 z(Jj{i${ag?UTn9=R?NhV0R|XgfPp##k?Y5rq}-PK;#n6@aT7NN7+`>bVqki$z09w! zuk%rSxMhI>1{h%AECVI~FYi;FRSxIX2N+<00S2ySpvO8qFp$@PIW}+G=r`Ji0R|Xg;Eo2YO}M|Kdv)fX0S1mRV2RPqc$}V1NMz7+|2U0c$<$eFhj{fB^iF53^2gJ`3B0GuSZ*C zJXXdsMXZ%;n|<*TulX3&%S5l^=-1nf-X&ghw;peIB4%R700Rs#z(79(S6};Hy?)Ub z)NxyX5HInX&LKSTF!j)TOr0Ow<89u=OS~9hfB^;==xgBWYu~HaFZzQzZtD}`C0^5c zga;m`9(s?d^J9Cw&6{|M7Xu71zyJe%4P1Tgd-eK7e^AG5eL}p%YdVkcz{Au-?=f|L zY>&5j6EE>%fB^;=V4$yoo@-xi)3=eQ|p}Vaefp>&xs=g3@~sF1LnnRw4?s09T{MN0S2yaAoBjm_owyz z_BVd|`QvgOVES6zx6aWo<|aI5f&m8ZY{0z8|DFA-JO2zYz`$4rBHxee0MTxd^Ox%Z z^8c~gQNPn(3^2gJIR@na=fs_Nac6)51{h$V&Oqe)<$eE%Vcd`P%%gZ(=hVgcQ7k0HW^kxI8zFg>{a;G4hUr1{h#q3zpy#cG_m{YcmEIU|>H3=EePD z%dOZlzyJdbFmSE`>zs4r&%gLHzyJfe444;lwTJ$pJs4ns0R|Z8XTUnAUo5#4O9mKV zV0;7S#qrxvKh%Z{Fu(u<3_Lbqo%1*@yod_}3@~s{1Lnnhw!8kW-5Fqj0S4}1z&eNX zJ2+QI&KY1}tpW2QD{HOTjui$NV1R+q3|QwdJDOSLWtIU3_B3E#3}iPjo&Toy zvzJ@>^eqM$V1NMz7}#oHy4ET8w;sdx+%doa0}PC6pv-;q+fnPI-1;H|3^2d|0}MPf zP}V!oUiUmZ3^2d|19viDUgZ5w-qn?N1{h%AUIwgl?$zGyq|0}L?000aFESm*SQDW_t}00Rt+YrwoXZrka1+KvGR7+`>b*9NR}UdM+Y z@nL`g2JU6Rym+tn*1xqk0}L?0z?}?O=kR_f@9N4s0}Lz~FfTH)WW?)?Fu(u<42){P zI)~j+?J76B3^1^V0rMhPd$@8;t{7l|0R}P{u+HHygF|KDkO2m=7%(rgn8l)Uu*d)d z3^35!fOQU2y-hhDQw%ULvH|lVza#rqc77RPfB^Z%ozpj- ze2OOn3@|XZ0rTS6?Wg}~KL!|JfB^=c8?erK9vg1Nh5-f`xSs*@;{DoOKiB3AFu(u< zcQIg{!}?vUt0(IWFtEmed6APfPHe*o0}L?0z=#IQI%j&Dp&sA<#!uf(%M|zj{%`)X zchj=P4CG`_Y5$=00Rs#(Az*+>-0Wu>+wqd?-~H}t(NT15Cgdkl-$4E zW^13U^J2C*DNn9`r9HF<0}L?0z#0Qt*EvzHD1YStu|`}|7uzt;00RuK*q5?>%7SPHOy;A?Z^NF z3@~t}0qY$8&h+Qp{4u~lHUs8GCbOAT9wr%JfB^=285nV$GynW(uUI&ae#HO-4D>Y+ z-{C6X^&cg+BhHJX#8x@`_Al`iPX-uZfPt+BMqKB_S~AK#+M04}+t^-zW`Kc_4U9Tg zk2o)m>_pj(a||%R00RshXJFKI&Zz53wvV$d)?&@Tc?L!vqeq<=c|Xs)*o!>_3^2gJ zC%7R(b4Ow$HViPp00RuHGmv$ilW|SR)H+k*Bu)%4u+~7vu|Dg(xHhJ?)BhM? zfB^;=VBnd7tm~Yb?}Wxaeh+~4XVyK>1_S#TX!$Lcnz4TGcFa02?p<%k-=}|wtGF`2 z00RtUGH|7JPOL%WH>ct+Q;d~GpJ#x9s~U)LH|CKmU3Sau2fB^;=V4%*x z71ufC8o-s-qkPx-7B_KYU_S#_%>Bd573W3$V84DKwqnZw0}L=Ql7UgzIlumE-~8x3 z{x@&leDZkuxzb0kPut1spT7j@k0FOFZXC&YP2i{h)mSekZ|9sIrhHKla_gG&u{*<|I zep_=a`+VB}#Y9XPV1NMz7|3Iwtaq}tN$)jbhTo|wIsew2{LJlRO}};>pUqHBd3wY; zVpenREANvvu06`-7>_@vw6-7g9_xGbqpb5{kGeTVp7ocu&=w3ZzyJeh7|6QL*<($3 z#x;Og17~}WzcydF!?l3g*i83ZoA;d2-_JVdG(NTW_lWCN`etoR_uOx7d+jmSw>r-{ zFSgdp{??fcFu(u<3^0&&owKwijCE^`-y^O8#QWt}&nvEaEucp}v^MXl@jL21S>qaQ z)uU{V@#$v(*7k#?vHlG6S?9$wV&RUFY|X_a4Wa*RSUBmEzGW#x-%A@3Ti-HNDUlWtH?X~AvU+XvPyjWWw z`(10@raiSM0}L?0K#KwEoOVBQh!6R~+Vy^m*S+_x$#drWTpXR-CX*fPKX0}L>5t^w~9*ZRd3^2d|1Gx;0y3UEU zXfI1!|82m?ZMUw4@3{Sl>;E3@G-ADb^`&RW$sE@nWpj*AuOp1y4@R9ApY=b_=UR7Z z5ADGK0}L>5rh%;MoFl&zy7o5#@A&=x9(m13dBEN3d(_yIIj%j*<{0()|B++;TJKrs z#kJ+PopmJx3^2d|0}MPfkae9C<$6};J)U2>1`s){HU6h-{4FsV;X1&U`aIiqgnI7L zhh81?S**4^zgJxK?Y4gXtPR(;*U@ABE2rhPtn*?ipId7>1{h#~0R|YTHIQ|kbHpcd$jA?yl0Q{ zXFX>2xb`TYV|+X&tnCL&WBnPXv(AfW#KJkPBNN?o;!`D+2g9e_wVm(`@z{`{iA-EbzXc_R?l5)O{P7yCj$&Hz`))HvaWN^ z`b{Xm@z*~OSjzn(_sVh|V5zKYUSFH{?A^CB9e+*SmbTe5uHkR#{9fNSHmq&0v&Q;Y z{UhtV_^QlavtDF?0R|XgfPpmztaH9_k~Ig2b@cr2Rog~A=G%{uyJWZq&?8Q3^PX32 zc(vC?h^x;4Y|HPL+H~Z8U|#%UUcA~^q(0h~0R|Xg;O+)SUFXEwvuE37$^A>-zGp66 z&at$9KjZbt!Fsmq)?@Xk^T>J6)_ASmeuTJ2yY(oiV|=)dFmgW_bzWTCA8lvt%K!rm zFu=fl4Or*=bcfmlP5$zaMt_UHEkOCR+M>7-S*n%=p3p? zJ&wpzYufY7eMX9FPxB-7_p^K)G1f2DZ94x=?=S7=b!$Qf7+`<_1{fI4z;vxs?q{e& zl;u@9BAelJhLD&tp{c_^7z{9viZ> z!I9;N_Fa3vrLlhPaay)3bKm^7<(T%h9%O(41{h#~fs6*qdM8`i_Ffa#i|dPeG$K{ZTx8aBg=b4oA)@!qd0AS?#Q_I{0zVq$AKOu$}#pH>&tnz+-98@ zx75M5)|?D5zyJdbF!0Dg)^*OFYr>vu`$suU9RKQ{`#thHz>#_1qxRhT+>zyd)Tc8( zw>5^3wm&+qkIGQ{+!@yZ;(PuheAj=^vA(u1WStjl>tjFbKL!|JfB^;=Ci(K$+K$FpvuzO^~g+Wn4<>Dn^A+V05mp4IMK&-*G~YhOD$uD!npaAf&M`knv1 z#`>*Br`uK5yFc3g$nx&lrah1SC{A0SJ0q^WT_5qepbWWxv~5p6M;~j{dGY8tIiGbW0}L?0 z00ZM0xXU`H_j`HM+$C~^jPGF`-5>Xg@sWAov|VfOA6ed`+qm|8wXvM;cUD}dW$1B# z?`r`5jlcGJ_%8EeZGX03yD>2oLk1XNfPu3N+-059`+dBU2b`6YoaJTBd3(qD$QYM) zZMi+NyldJc!!|APEc>1n*FCOl?R^a(Lz|CWhP%v*Be#*VTQ@Vn00Rs#P-ox{>zqB- z?~#*O!#_9IGv-I;eI?gyxjnMHql|kk@htnE8Q0#|w4zSNkLTmZ*{<&}FP*uvLOa9RF_SM=w%09yHZm*4B?RLGc0UVk4^)PZ|d28F| z=>4t`*R0n7VywwF-b8z^HMTU?uRTuB?Xu2`J?rRL*IwIcU+v2P0}L?m%s|$4PL%6e znYTP2xmb_fV|t8Nxqp-`*5dIU+%4t2>bBFk)!sicpRO(AbiX6ZJBpiWd}{A!h-+=x zU+uRvp1f+~7;9pz%$EPZD)aocUSs|IxGj&f&WkN|vafX@0}L?000Rt!fvoGC9&5s0 z?>|r1?(rVrn!XeHziR+L>2mGm$h>db*0uMKEbkhN8Mdj7<#fLcaouA~i8|I?1Gqx& zU*@0;MyF-SIxkMk=)N@^0}L?000Ruv7|6QL>5>2U{=Dwm+`qJg-{F@37Yld4o#yei z_cP@G(T*9e0bC{bk9hVN>wEXFtn*^;dODtUBLfUDzyJgHGmv$iv$Q6R9O9MN-fQ%& zxqp-`*610(+xjYQy*+Yu0H1de+E8` zvn9W6xy_XSN4uVV4d5!aTF3f5;*fP-+@r3JX)VYA0}L?0z`YDyah=n9U7juP7^#o8 zZbic}KC(63?=4#<=#r&RFWY_HzKEwEt-3yyCn#S{o?uz1E`ITYEFW z00YMvxZ*k|@`SRE?s41GWA@MO_N;3ht4I8g%=<v&g=>z>yD%IA*ayF~G~ zSNk~b$8+u#=S6M&aT|+=crd^K0}R~Nz^Ln-$S0n)S&v+!9HXqipPg&#^H=)at~GTp zacsGj|BpXDx3quR_eck8Y)`k@>l#4R{Wt&i|1#Xa@fYQu#%Hwqqt1(?#aVgBAKSH| zHe`SS2F5dxb)8fDozR}|{qOY|+&f(ZD7jn9?U8w3OF7HFN0xV#F}K8~lt3@~tnfwIn--X3w@rE^4imbQ8HdP{yW z-}lk+dp&oT&-2b>TJ!kGysxHw^L>siZ!eE~A7>t;n#Uu=bI-ujFI1{h#~0R~1jFkS1E`x)vIW!YMep1=FI*L(k4>oofIHF@5ApCj|0 z`MGNzA6ec}eAL8ozRxIe-SZm2700ETvA(zaGWX4Id!NVgtQ8qxfB^;=VBl;6WxaED zIp*hIS`$WYFyE)=y1V!H{^w=A%j0si?A79jd9i059n1QY0R|XgfPs4&$hyv{Srg9J$+eG1SYMCQUu)Z7 zy5Es`-}Jn-_m3(1{h$Vmw~M7 zoUOkJ)pMnb$0~l`(y~@1UyB|B=c$T%9He-MR1{jzd7CS2*S)U+Wc$uiw0CxsugW*-y!fh4 zUbFsVfB^;=V1R)zaD{bF&$V@i&(lWkpYb!XHDktTdEaQ|t!a}p_7T?)^G(m+D4oYN z+ckhQob@{A73RfWv2Yw~MFtpPfB^=sW#9_yoY6n~f8{<4QnH9!~g>fF!0Pk)^*O7_rH6sr>~MXS8X}Ip;B|d3>d~MqO%Ruy&sepJQ6t%myK?WFL zfB^;=$hyvna=r2y>)`VG+BNagc3Ja_SRar2djLx@U-SBr?XspkOWPb--qHuM-!8>$ z&Ffc*YxL##>-oK{&<0vi@U$0R|Xg;GPDuu5;F| z345-gv-W|=72Y9>w#_YXEEgtsU#v9pb@_?GrhAukSF; zV-}CI$8GIcU*dJdZPt15h`Kw6^&tZcFu(u<*EW!KowN2kp|Q4owC3IVT=q3`^uxFY zP~JBjrC)Ashez8V**1^PzxBBz%gezSzv5RqOQHx%p>G%kwau$E59j5 zVxQ@?tucJG{m5}$d+n~*c=jlMM_vPn^Jnt6wJf8~i(Bhyduv7p7+`<_2JUBI^mWdo zb#BdbBYaQxS^tc(M{bnyucj^L`y83~&Cgx)_{j1;Gm-82nmEq)xl3H5KhNvl>+zA- z0J0g}Ql8Q0#VvKU?fuq$+FYA6zyJgHHZb}+r`Ni893H zitDy{#x;O#@#@_VMxPgZ$HVc?^(g-0&j14qFwoP$$m^V*Yvi6WJ@Q!bx#C~>+PCEY z@4pMuBkuClK5?A4#ogi>-_>dTt&SMq_WC|R95;?XZzqpG_#b&*)Q0HJ@?2bdcN;HYI{bG@ui>nq5NO|pE{SjQ~n=)GRD=`{J)GzdtC#FHreYM zKpeZ2f9ZB_W-t)tSt>`b{D1V%Yxjyn zj~s1}V;tE&J<5M%d6)V~me=nR*WS5*X}=M#0hF>Y-L4tymyXf;`gH!A-fumw{qMD& z(%#ye0R|XgU<3oxwNAO8q1;iHrE>Jjdq>aLdc~nfj<&}!j%=SEvxIk z+TZ!FX_r0w`Cgv`SX0k6WBr=rv}{x6zWHs-G3{#&$N&QjFu(u<84Z;6PPVeGSrhhJ z509R&^@>A}9Bq$d9N9iS%70{ev-R6&g%|D`lmRGBLfUDz`zIwvaWNM)`YQs?e&@1(epL=f4{NjQC_t5xzRoCF>Y;*;iK)v z^@H;ft^q{*t#!0C)~`KI&+W3#i#_Y;SpDV=u@p-N7+`>bkql&A=dAfns7E$?CoaoA&@k>|xd;^CN|j%i{dCJZpZ00W~M7@*y?*Dvrj1+!=-2;C{70S_OC8+ycOj-?$^ZilFmMF}qpovm zbBIU#joyy(|9)f9BOji7v)gaZZHaA`{6ACfU&gL%*8rkjOW8)e9d%wDG1ki5Z~hWX zv1EV&1{hdlAnQ73&38h#_4QXyymsz&fGqj{p8v*Q%Q%zm8o=7R ztQqUq9;?@OS?9%G^>dtlbB0)oB?AmFz`$q*vaWNYTuZU+m5(i*C;RL2|9<06FH?@w z|5`zo{6F(}u*WrkIOd*pUNhG3dHzSo&N?qXDy!%EjsIdPmJBe!00Vb0kaeB2W=+^D z#~Qtz<^TQ0s$QlXNB)1-xH8%`fHhX^Yx&$p8C|Cp}#`R^Mv?XTAS__V4`Hj0eb^Iy-Yby-`qdqc}D&}a$niw z8o(a^F5sH6zDM8Qa*V9=;+8tt)>@PS1{h#~0R|o!$hyv1^P5n;a;!&jx%zV>=QVq_ zO)pc9Gk*Smg+4OEHGnl^{hodP(Xq46i;v3cIcqxx7+`<_1{m04VB~d9uN-SjysotE z74n|y1u~Z&wQU(}cfB^<_85nh)(=)%iv&qPF z;_uEenAW|gE63`44dBSn|7ZO-{-##9-0yu2AddIy{9*sq>)Br$bzaOKSLMsK{?i`X zg8>E@xTk@U*Ezk`wCvy0{-bu6v-i!}d&cv~{Qr@S(Vy!zUY0i90}L?0Ku!ZAuX7?FC~MJ{+bgeQ^}B8TuEmjk_q}!?|KDbL-uGji>uq#?j;lN# zd0xCq8>mNHe-}UTV}Jn$7I; zn!uj@G`<6~X3W{@DcknFuK_H54`5CGGsJy5|4r|&DZg#Lm_NiqEEr&b0R|YzZ(zFC zDfct9Ta@KhIU=u;|M&NGrQbb!<>%RJ^7VfCdhb~7mH)>zuRC4$>U|C1(dVb4?Vt6r z`SVL-{e1g99+$aqe!IuH9JBwtC8lD^00Rs#z`%L~WxbOvW^2}j^8fYiyrq5bd<~#? z&gyvmt|#=)|HFC7{kQawD{R~Qw*XpVvSzGrIeyK)S?9%?y4Yu*c~V@(l>r7AU|>`O zS=Tvh)`Y#@$LjGJ)=}I4S-B%Oioa*CU-fzUdcS|<_YfB^;=V1R+Cfl=2vvF40=l(lE; z?KCFt-?xvnI*R?}sh|20*H2@TVVnu8J=$jOJ|1VNUu_viofm8CYrmZRQ@dyv1{h#~ zfjtb2zRv0O8P+{w>zL#9*&ex&{QuK-7uQc?l4X48HHMC!^H1Aj^m%bw7x(k_J#C|H z7+`<_2F@@r`Z}lA`&V+d<^Fev-$<9IE<30hr!vI#uD@xq)LuQm2XK{fbo6;~sm;B< z&p0Qp;>rL63@|W)fzj7F^8e%dS>#XQ<;uUAmLX3aVcghS#M~%C3A2*+iwOBL200Z|mkaeB2^qWwTPlVfE>(+8Sec^RqxOyIScAk1w ze`m(^>SlYH>Cr}I94)tN%CA{yU3^F?}{<#Vd*NLf$rJ9XU6po-&^U?R=uvJZuP%qtnX3JHOI(0FRm%O zZLC!pV1NMz7+~O)fvoGCEo;IaxkVgf>$>$-T)j4Czw2R%qfgsjTtAIT#xbHtJ8k_A zz?QN8sF-D)7mupH^Ni77wUc&YfB^;=s4{XSsGYPE0}L?0z}^P3u5*^wgpp5_*!24S z>aFivmGis3PCu2W?$egyx=&ntk3GG{(&_lTRK}&Terf+bUe7u&?on6A9HVb)C+)-l z0}L?G%Rtt3&eq?A>XBb;S+n+v{}qlCZFQC31L)z%`~RPg&qu}e%D+u<)L3y;Tb253 z9qY?}d){W97x%2QV}CksiHVpnzyJdbT+zT));YaCw<>qr-p?cFir-j^ztQ{1(Yep) z@mgE{BjOqkV?4XcwWzhR?Y&)(?^BKbS*okdi@j|)-uC%X%*2cV1{h!U-&N+t46#&( zetlCc#gYLA7+|1>fl=2vkrT}8U-E?3+gSh3kL~fg{uX&y`8;pLakN;r+KK&N<*9dd zw0B(n8-MHi=URU~+H38(GHy5OyqGbT%G9@Sil=xozyJdbv>Le5I;Y2)RsPnmPffp* z5jpV)d2tUzBh<5X+}OImxc2K;TVr3d{j~4aw%usg{-$xd(!4mWm-}P&L+z!#7+`<_ z2KF#e);ZJLJE&D~@Rl8Q5@3-Z=wtd_;=P{i=j<(8}A56wQJX{WxUJwTk?l^uQ5x!A6eM?T$Z|IvbHsbkG7x2HNI!E z_wP)^coOHF{yi$!^tntiZz)UEd0MZU`_uM%RhF8u{?+knUMq9o{I=#;_BnP9Bi`c8 z00Rs#z`!;GWxbOvZcA&zSdTs`bC1uhmbLDq<9lwMua=DImeoWzL% z1{h%ADh9Hyb86RwJ=U#dy}Ne(dKC*j>rrCZa(l-216s;k_T}c&`Ju$7BFSMDG7 zdyE}D`_P%k>Jf{z{h)TN-!nd0=fyqi?AV`9=f%D1>$ujp3^2d|0}R~9z!ldyJ=U%z_gK4z)n~rwGbMH{w`aw@ zrOajDv&x>?V2Mr3?U#P$hr8we5xXA0A99tpk9xGURqQ)*EUq{&W*#4u?Th(SEX0BV z1{h#qZv&&Qb7Fn@DmJZa*XjPR&f~R@`)H3GDq?@u`>4})uf0EV-m{nI+E`BaJ0h;r z^VQrxqKtdB(e$`ckDB^V_n97VwELsZi=)L^c|V>%#X~$8V1NMzjxcc5bxx1p@+xcD ztE}md@YE~rN0jx^IZB(i-1742*xeG(vhNXbE$6De4gZf^jrN@U{|`U^4!~&bro5ky zJz^pz3^2d|0}Om@;Hvq5ulJ!#9&pzC(Ia{774tK5sM6jow@2iuBe{sOw#2jSdqiA& zT)!HvZ61|Z{xAQ3_p-{mHg4mX`py@9r$@d};(K;% zOF3F@kIGX=GT0K&vhPuG?Qt#ZY{xA&denbQTlE_2Tk1UDH|xAOFQ>;}%tK-!77Q@J z00RuHGmv$i({oMOGe0f4$jIyao_!Hn^2KYY-zh5 z`N#Aaqpt6_#B9yBJ>DxUam|o7m$J0nW~j%SwmWj0mUxzZkBnj- zzLv)Nwa4kXUDkQAXB{2O`j-I)7+`>bdm6aQI;Y2bdh=W$*103D@q6|4vd*8!rS@?t zSL6e~_v1g8P^`R;}}Q9x5s&Uz4w1)JN2md zqhs759|Lz<=k!?9KgwP1cnzR;ET=Jy-2dC(`03|=M~_91 z+IQ=7SIB>Q$9-!IA8mhRT;p7i%CPmhsq5Y`?R~thb$hmb?{b}SygSW{XT;Yz@3Y3# z*4ml@1{la^;7;qDUhi)`TKA5$&Ts99y>tI(?~|5m07rfn;8ELdeeTFSwY4pe+J9>d zA8mhhTpyL8=D88ZhMs-;C{uf$=T7tDo^f>Sd}}^!qD>fJfB^=wu5*^Y6B_IA8ozs9 z12{TAsi}YKK0WhHeimEw^`YFpb%o`z`S-`yL(FUe=#o-&zy5 zBesdSmKe9*mNtsxtS$SI{d;Yhvd)WZ%WpetI|dkFfB^;=cxIribEdb?wmtIsD9>K! z>$R?bv{sH|zshI#s?*-bjXLcSw`{r5qc+|8T*-m0}L?000Rt+Vqm(~Dfcs!J<76YIrhk9r#Z{f zxyqigin>he*7JV0Yb8DEcBQuOn#VQu%Fy0> zmZ2t&^L@^W>%1H-kE1_j7!!K;>y~R9M~wAbZD*Yqx7Ne<)}stCzyJdbFfcceb)B=c zCX6-sye?ZG$2z=aEx%>ovvQZMF^TQ>&if;7wfRE%w*hMEwPv3!ZTf86k=lAqOj@^z zHhUJUEzh47*EsK%a<19-%xeI>bN{ICygu>VS~p8${o3R7+%D_9*t3p~Wj)9M0}L?0 zz&#CQUFRJ2n@~qy1Bf;8Svky_{(VH=Uvi^)zObfzWt;Nv0+h!+Z%g@FZZo%W&seQF zR^~S3<+NSneUMbsAV|_W_n%k`N;+nGC=ALUg z?XKM!V1NMz)*7(R`S5;s$uW+)jWzR``AqQ<`Nv*)!LwNQ$a&%#K;)LC9=&d#m3hna z8QQg1JX(%Za{tla|Bo1i*)0aPY`gb$fW7;7kN(`^Y>$1-i`GzkxN=Oc7+`<_1~M41 z&iUYQ&-MLME>Nxo9F;f5dG^i;p4GWm9V4gQ<9)+t<=*mquR3NJA6m*Vy+*Soe$Tc& zJFd}BpOvl0^JN@piFw&K#ih@pAW`mFRNw=6Kg00RtM&A_PZoLF!7Zi_Ro z0nGD>2^n! z?^T(i9;4WNRL)W7#Yc7VoOLS$3^2d|0}M*ExH9wtGw4TjRg! zk_$)faa8U<{k-{>ww`X=BUid>{vY4Th`(t(%l)gx_0Ho%@BV!DSYM1zZ?n#e(=xjM z@mfYa#Df6_7+`>bbq2DobD~^lx8a@F_&xHqIL48=aO9rh=2;H9##4`aA6e%$bvk03 zrPyCFu6GCvjqc0R|Xg;0ps;*EvgT!pJ9%Xh+`% zsQ(Yhr%IxZZ7S*m7NK%lN!B*0=hs*+1*NSW_4Ke6ijU z3$b8;0R|XgAn)%SXIm5A@x8v5ob8OxYhWU z{cGwx-zRIHx+M<1x1GnR=5gk@UUh7U{=8@IAI>t4^;ze|-u=??tRWd-fB^;=xSs** zob7EMc}PwEa^-!F$P3kD2DnnbdzU=*=)QBOxL#pgXnoKB?D4tP_o(w? zYrXA%?s`o8#h(EN7+~NC1J*h1&aSZDugT9w$@}B;#cO{Lpe7FUeMX5(&G=IL+Y0j- z)jS?8uA_|$@qYhkF|IMZW*_rn`@Fa&&bAR}1{h#~0S1mYV4c%1=A*6mYjUvIXS5t4 za@P2by7*ffV`^hE-EXw`EXAa}9&wEEV(qn*vR~Xz<5PQo)VM~uGk-52%GUaR|Fo^I zaNoSxZ(h8D2X)|q0R|Xg;7SIvu5&W}Ce+$?kF|8>^?ptMb%pl^%Qb*k`D;yV=KGAA zr@r#tlKaPT=P{~zJbGNSjSE@w{)}UN)_L(&AN88GDFX~JzyJdbtT9m5In&!U`|Z6= zl;_nsB7b=GdY0EBXNkX>eCOUVpTAY5S$yrLlf#{~oVT=fCOw9>;c!kL`5u7T-V zr`*rbCQ+6Q<>*<4vgYrR3+;7`k|Xr2_ejU;5!Wl`|E+B(uCK@WGB)(QR#^J-5&3?L zj|^jdnfvCqE%mbRYxCkGJ`6Cx00Ru1W1y^evc*5cnsD!!#9F`n^~jHEj#19PcU>L- zoc=BD*NJ=StMl8@+c@J`pLJdwy{(o1I^&VH)Rqh|z`(c$vaWM7t_hEFK40J0}jre#_`RjPBXat-ouxXW7m=wwUNwt@gHz&r4%{Yguac&pI#G)Wtsf zGXo4TzyJdbObuA)@G$jo$NTc#FZzI3d=ZN~_62qR(EjE{{Xkz}fB^;=VBo3-taI4D zs_iZHlK1}P^UwRoco4DJ5ssC zw-Ag4cOL^v{mqN|Lb2eM1qK*kfPt$S$hyv1`cCMU@0VV!&D6&@!~g@C4Qv^om&W=t z>X~(3JR=s)X{=#@0R|Xg;93T$x#<4!@yvS@0v)VyBFu(u<42*0b z>pCannsDTHR`%`VROH9;o%k!pF6tJ2?8?_SuGnr@tW(CZKI^=A#r9XH?Q@fui5UY7 zFu*{IfvoGCr8VJ}@0Yg3$G-ROUy=V`?HYjG|K6sL7}K_l&r4(d5#^nqBkR04FQ>=) zG6M`SzyJdbY&DQ|os;o5p|-}>_Sfi-SNdIix&JjxUTJK}IM!#K7q8Ur>S8QnfB^;= zVBj1B);Z_Io%eC#9yxQy9Hqw4m9Ayf)Zaei^t&_L%Dl+Qnf{!cKL!|JfPp;?Sm*Gy zr!U9mivb2kGhkk1b~Llf%Pa#7Fu=fC1Ea2UwtT;IZ7gi3-!Q-c1MLPzAD>5^7ujvM zD~4jo00Rs#aCHOLIgDT3_#X8e<#Y7$-G%tuBL-*Ej+L!?b7+~OT2BvGBaz8^1 zqAahuNX(Z`%P ziX#IIFu(u<>kO3jPPTYuSQBQ8iSn#7El%RZz&Hjnj`dmRMXtwjt*x{b0}L?0Kvn}; z*Et!#6PmRRmCN|T00W~M$T-$#ofk)KW92qJF~9%=3^0(#fOSruw$LxM1p^E)aJ~Wa z;`wc$A7}#x7+`<_2KF&9>N;o3_ed>(aP zyo)dOyzkhe?X^7v3^34cz&fWrh8&7vF%Y?U{Pte_mFM=njq^nxKKh!&o^^6;{poB2 z=0yh2Ht75eGQa=>4D4mVI)|;jY~A^|Da&VH=YUo_|rDqvyarqJL|kyTOa#<>P}3=gaHN^ zVBoF>vaWNYT(8<>^zWCxs+-r0M+`79vVkq*^U_#Wvz1`II300W~N$hywSxF#IEt(E`W@v8OT z28izy?D=~Fe4Oj!uJO+})@Pj;?`lN7jZF+NzyJdb^fQokos)4*$X!2ocZ_A^?zR6e zKj{mW- zEx+3@_y0I{EQ!Yv2F#0`9pTJ5IAeeT1{gTQfOQUcXSlobIU}cE`<~~PYXx_Xsk$4- zdKxe<^3>ClWAVfQ0}L>b$$)hZkC{B)tt`LuKYsS^&;O^t^zP68M?d%O*S`7JU;dky zcZ-es8k^2CU|wYJEPKw&9s>+8z`))HvaWNM-XGoa{nEW-==l0+je-C6zxiA5zVxLp zz5D&&|NVFW^q>CIcb|Rs*}H%L-}`r61NbLA)p*LX&p-b0KYF)id|n#s&!|_{dGU-` zIH&Q50R|XgfPrfn$hyvna}`- z!2j{T|Kra;#}e1H{^DQ!i|@jBT;p2m_Zi3ftn=bhEWQ5m7%Lv)!2kmcFu=g42Ff~T zdYd6m8P|jv;-U)FFwQGCUzS@@o1{h%Ass^TOopL`zU85`+ z%ApMU{vHP6Gt!Y8&Hsz<0(|-B{{s8o{~yZ0E6?%!7O(nHhOxfPee>H_<@TDnfdK{> zV1NMzMl?{?JK4&EHR=zxy&@;)kDX23~!hC7i!1@6uTR zYTvzH%Q`RaRbR(7rZB(&0}L>59|Kv}IT?QwO24>Izc`|;YrijjMA@8!^{ob;{hr0r zziW|ktj{_xZfz6W>&FZ*zyJdbFfcb@ox{Z3gvZC4h|f;P`=?im`>+4nH{VVF{^8&I zolDj4N^RAvE?4^ZEX<3?j)A=lI*xW@fB^;=U|`vRb| z|M=(r%;)>KCh$0>BU_8#`it-T$7lYR-uKU3PxIpSY-aYRY`ihR00RshX<*cKj_?2L zCr9>^p6B|#AOFF-_*-+#_-yprZPy&H$2O7gM-IO>-(T7;j@P4Hj*(|f7=3&mbzam5 z^7H|1p)D9-fB^=w8nDh`Gpo%jmMe1k=yPjx`q=K<-}ve0e_7(Ol+V|`?mB?6D2s9P zB8yopDhG=UFu(uLyDvN5z51H=*4_*-zyJebAnQ6O%Ec(7S27Sed`tcw`)0_M*5>go+xaZO zefoaJu|Dg(c%|`BUGCGzwY9cpfB^<_8OXZMSy~fDZoyJ6OWNc5?Gf+Ix8(I(_Kn{d zU}{WLTgK<5vHlDLS?9$wV&R-)_Cf8Y-56ki0S2BK$hywSxF&oSL(l79cQFv}%Wuiy zTeo!$;QD@jfH}cMZT8b)@k)mwA!7qs=)Va||%R00T!E7FP#*7ndshA*{oTI{Fit-leS98uUfjF?JN`I*P+Ms$1{h#~foBG+ zbJ%!h!}Hs19GUx<_G$fh1@!&%|7+`<_1{k=G z0qdOWw55J|ep?=yizopM@X``jFe#?1#ZJTvo>{UO<$=`>xkv3w0 z0R|Y@%RpJ@OmFu(*OudEToZ07zisc)XXCT?@t3W=_xK*dnZNxvzwY3B0N3eX8OHkQ z{5QRytzRq8b=+%9ZOH%w3@~t(f$3VO+&`-<)AL4IrjOm%N3t0>Kl zM0xUzNqgkiz1z2U8K*h^*0M&f{^zt+Ego?c3=vXMcR+#(Hp8>eHp}ocs z^CDM!*>YUA7+`<_2F^BMox|YS2A%)D276os@EL&n`q^vjFfTH-mo3L-ivb20VBl;6 z);SEGZP5AeZLswkK>V%%L-#h+yZz0JJoPr^cuXP1ct$LobDusUuHwo70}L>5 zmVvD6oG8~>F>zk~u^5P4IV@((nM)bB+(td(w+rKM%YJ)r+xnY;J_9grpUpVdXPp=K z?uU*)Za>m?+KvGR7+_$nfvoGCjBCQRF}2+_`rp-Z|EbGz4ItBXjn;o3a9Th2$LWI^ z$NH@EBG==%)>hhz0R|XgAgh6_>zs^h!mMqmT>FeKqx>6xwe26df40wFPycPdt@r&7 z;6DAJ*4NtoGLH3G=f$-#wcVI~LAz-;1{h#~fg=oLUFR&V3AcQ|^oTe*hyKbyyMdP9 z0f>FIL3t%vP%^at&r9T;GM0R}P|$hywS_P%7MHd7X3 z$W;xr{tm!Z<8tMCWgP3X&Wl%epl;?h1{h#~0S1mSV4ZVJoO#Y4=lDE)rtiZaZ6?e2 z9kzb%f4aTj0nFdej&@yhKJy|+HE!&~4Fe1?z`zIwtaCUW!Rg**jJ!Yk!kzQ~EHUsq zfX1Y~`}@-I&5H~!8Sy$J3^2d|1EU%kb)B>2`=z6{jdC9|u4Ku3GqiV>SWMs3-+JHg z03OqCUU?mTd>(aPeAOmiJHKCO18u+n0}L>b!GLuRhZ!86Rfa72?pgJJblwax@jHOV zrAIc8dd|Ga-%-|_hcyNmV1R+64P;&CWc*F2qua*$_8$+jeCIt|TgNqk_&cjyz5}qo z{j=J3e%_2@eb#w#9y^ck(@(Uuwq}3<1{mmNAnQ6O%GIlmj-$UYFrI;}pZlL~?{@&l zY4402czc4B}51{fI0 zKw0l(D|5#0gl3D8@@yMxB7Y6T*eJ835d7+`>bj0UW8xXkFXcbVk=?am|rKl&O#%Xa|cT0n0{j@RyJgczC^ z@6pa9SX4$98DM|`26`J9b)92vuP?0a3v&N{R*wGn5?a3l;4=XI+J0?+i|s}qpGTb+ zx3rOM&*>ZDF76C4zyJeh8?er~p25hOBJXMW%lh5vn!0`IXMXtZSHAYG&*PD`UNH`| zv{%`8@9`wAr5ycv?dfOwx8C47@Usb)6ICdR6XN*S~uG&aYiH|L;++%=zHj9RJmJ zXSm<?mihh_^Zy=on&#IT^TBEPYVV)v zGOhu{Uym~M_}#yG411KzG5XJ+8OQpp^CEx!{fViVGQa=>4BX8?)^*O(Z$ib|{%&ox zw!S@b!$@dHk}O&fW$s<%`&_-G6DUUwfRM+hv^> zd)Cphtalk;fB^;=xTgW@oa?oFkK8F+t~Af(dOXfH=3TK)wK47yi}^7!Uh}DqkNx%? zx6OU+{lEQl%U<^MhE@+x1<^nUQGa;|;tEOW2UTdo1D`7FTR z?HzHS=Aw00Rs#z`%Y6vaWM7t_eqR*dvF^k{9p!S@4om zXKB|`o|fAzb(xnVa{o2&^B&ROS!~Z^bl1lj$NH@E;$4lX_kL?Yu@zee7+~Oj2Ff~T zdYi#P#x-GvxU4C|mGb|VTzKuiS>6v`Ti#dOt?`j{n>~N`ZyvL(F}P#7GK}@p`EPpv zj_sk&_ge>Qb8XH50}R~Dz;vxs?q@I%WqDPOSkJ$D{m!plCI9bHk9pqr=y8_!gCCV` z>vJQ!KdQYWrdis2 zpsaT?l_|=y=Ci`t%ABPZmlsX)78{acn zQ%>9LKVN4Y>$A>_JnrvNjK!D%1{h%A>ISTHu4nuT`Tvoh1&@3)!*>9BfGWz&D>by8_ z2anfz6(@0GfB^;=xRU|voa=dS$%je~dS?FrU;StQXH))P``v-FzXMQW-*P+J*cG|| zuYB!W)$JWlYuh{Ge0H0U)?RlhuX*u$^Wt6XswcY)Fu(u- zcrw5M0}R~JK-P6mlpEv?O*mcqU#UHM)TK7} zo#vAzkM2>PrDMcrz~e8rYt0AC=ecW-b7Z~eahb-y_Wt~s*&nx9oqk@UfB^;=xR!ye>zs^h!cpwE4yg%By*L&hTXSR9ISdMzEjAMP)d2!S> zR_<%98?~qQWPkw%#x{_3os;o9p`%!D&7mVFn&wt})q9@%$9dM|eb2U;m$^0$d)0U8 zxXYi={e>R zvt3&HOKV;g`O`d?ZYj^ReapZ7R$gy;4>!s@&j)LdcSPMwou{`odFyG87PZ~4xC z)O%jP7WZeh`MeGu=NOO8i#ggsf6xvLFu(u<4D>fJ>N@Aq`k#*vK3ejil24wI54D#2 zQTvzrY`Hz_^Wa;`_-xxpG06JdvpTGK{*liXKWDXh*0yOaSF~a4G0xn7)OqpDm^pX< z^_iH8DFX~Jz`z~`taGmCswEF9x!0roY7c+YW0rH*+&(LB?R(7AavgQQrrz^?jw);G zd0LG=YwvkHwmhDHex$XI_8)g_H7}0acKV&RV}Jn$7+~PF0qdOC@fp!iYi<=e)3f|) zuXxmcR=?zT&vLigSR7sdh-;}!%k5t6)BCtBb&P$Vm8bT4PaN}%Hh)$R&!0Okn-|ZG zKmX#-00Rs#z`%Y6vaWM7{wCBY4r_DXX-?KV7mDBdE5GsoD2}aVess+8+_YY6@1OB` z@U>-owOy%m=G)e5J+InkPe++!I&#@Ej`dmR#gW@t+4oz=iLKZ&zyJdbY%!2^ofGAH zRgcJlUcG+j*IIL+h;7gO|IzRK&)er!PP_ElQdw)?6P}lG@5f8^T=V+gW$bbM+V&{* z|CO(O>t)|B+tu7Y`y5G+df(|75&O0ET^j4x9;fGaS?9%`b#yFiMFtpPfB^>XX&~!5 zC*zuMls=Lv|6h~)x4s{|l(W?yf9bkHZx1#3>U^KxW!mF-^D=LJ9RF^_{NIk4mb2yh z!mG~~OwZwdzxgubSf6!XbyBa9#oat?bSY%uiW{At0GGxmCU*&0~ zF0JJ)$9Z+THODO5zdB~`*UC9tZhM!h_wicWy5#3^UFq59##_(PyUvdHdVP^$te?(* z)BD=)b=!%L_%Of#0}L=Qo`LCFr`*rbj!~8jfVy?t}SP6OqM=d z&@)CYaVY!tEYBXtYI$#di^~#^n%lLe_K43NkC|btFLU4g_KxkL&f~4)w3#+zfB^;= z*kYipced)QOh_B=<$AqY&DO?cX{=v+oSxfdofmu7(Xl>tD<)#X00Rs# za0dg{IoET3X8s?a%Z|UbeW$goYtIwgP4mbt_qUv*W!o)fdbVxL`S;$pwXI*}<&i^9 z-L;-;?RBNSW9InhjL+u9bK=gsxHG^20}L>*zX9u<{bPKz{ z#?NR|^WrtzRe#m43^2d|0}NQ_T+u*no;%Hlw&p)Ixqs{D!MB#N_Iz8(NB?RqXH6fS=963Q*PLtXK3mH3Y}>8pJZk&aT>RB%|EG1B{(BRxzK;6b z$F%%cxgS2))@5m|UwfRM+hv^>d)Cphp3k9TBQ^{$zyJeRHjs6l6Xm*c-1n?oYu*!U z_c+GdGEQ@@wfn?&&vMu`&#%n~=jEx5%@MiantCs7Gp}!!$4lj2dVQ_OxE3|dCzp=< z>h)SA}$OtzyJeT4P;&CEUgJ!-V@B)7QM>Vn)5_#U*$dV8SD6KDep9A-FmRl^|F8Y6ziAt`mhV~FrssHdzcwdr zJ@2bB#cR{}*WO<`$I-91w)K`g@>$(lKY!4A{oz@;JpW-_%Q)6&ofnzeHW!MQcrm~L z0}L?msR8SpPh&E=lO8$Oqg=N~?jNyj&BuDQPsaSZwoKFgdc>yZF{Wj!x&O%F*7DU} z?$%pvJL=Z!z4v*Xwmv>9hR%D=_-tN0C+@t9I|B?bzyJgL z8yIz+6YF~l{7yHMQQ!!zs_g2{nq@ z%=v%Gr)q9{=7Z6ewQ=fQj^e5&Ci8vDvCh7&jqS8Pz3VVNcFq0X<#D_Zb701?KI^>5 zOpbMvcF+zCFu(u*GCQ-0Cm(KRd2hJb%WqKI^=A#r9VxYiI@-V1NMzjx~^VowKwi zjC_KX$5vYNoQUn0e&&bW^Z!hr{V#U5=A~u(vVYIpa_pAdp5>`MR_%3_X}$N#wWsIU zdVh~=616eTzF)+4Z5fxw`nAXDxn0(Iv1c6}>+$?4F55bpvIcGri4F=ZtH@ z3~^agh93F<9{JbSd~3S>9_5Kx*2Zd&@=WVndw-3Oy|<~2>9o#!m9h02RPWEA>{ZW^ zj+-(;I`m8Nm?=r2)jhD9RU8b$a>tS!tYduk) zr5G-~zBMMcA8%|mFOJt{`k6LkfB^;=U|^krQP(-KM%TuV+qg##);s@S%Bfzx-n%Sw zH?{HVU9ML#So_+%Zbv_^y_Pbq-`-`eZSPXXy{}K~UH>DFAF(>(JbRsE)Om5QcsTCk zxmH}ng#iW_U|>W8);ZU6+nV3R+P!CP+ghF@@~x8FZMp6JIrS~)ezxt|W6-m5t$n_y zyJxWoPixEbXuIC+{;ZsyKW}U{FP;~B?!}$~1{h#~fqe~F=j2z-=d*Ig^IPLO-~QFHy*B=sYF-?_4fR89$N&Qj zFu=fL16kKO8GaLLR5LyDu%7wp5MES z<@mMjUFy=a-AkG7dYf^q&pI#O)rfjOUcZTpxG=x~0}Rv{$hyvna=ofgtixZue&^R( zbDM~5ul%O9EJwW`99~LpxAnG{wXNrUw0*C#Y&}lvXX>Laz09pCduw@p2jKO58|}HK z9b%iMv3~7wdTy6>UhG*%$9ip8e8h(V1{h%Ass^&Ib26?8M={WvbN9@}YCl(Ba@!+g zUR%~)*CV-o zFu*_#16kKO8P|lPnC+2^^?EP103tDH44n(wo=uD!RLmt*VWGu}_H zZSPXIUhUqyEk-+D#<4!@yf|9hDsPT;o_5d<3^2d|15*Q8*Et#2gwwcXzTcYHM1IpF zw`ncM8Sk%_+-~b_4-Z?<`Dptd<=A?R)^?71^zgQ|+_C+m7;bs4=A8EVcn;1u)@Pj; z+4(?Hq=XP1=#h!I^tjF`GxQGh_3^2gJ)eTtZ zT+eux{J-Q#HMeKIA6y%|9_6ix(|n(!$E(PH=VjRX_>9l~mpIk7cd6rJI_Gg*M)r~+Cu{v& z^_lUnEqm)Vi!C|lvu%%#+p}_PdH(1!&(GJ|U(UXMF|Uuu?PI!mu|0+yiXj6GFu(u< zISpi8=PZ3EH1Z3k9-C^-XCk&OIZf+l!duSW!$fWQTg$yAXMVPAkNU4YMs1v?WzX>W z`PO=5sKeSeJ8HXVUVbj-+KPY$M%ZN+T%`h)Ghbd9{$%#`NleS0p{*l6(=yfE&r*-Q z+Ir99W*qCY&Wn4tgJWCoGQa=>3@~sH16kKO8P|lP^oiE|JMy2F_p)p9r|CW!;#?cU zGvgL9JTi9EHmkjVWO-kmtG2yMy<6J-Rk`l)TE?+H>%4de59)Z2wWoI0&I~ZXzc-E4$qEvrm<&b zYJI*X?y+y2|J&dA=^ypO*7DqC|BPdO)_L(RCe-u1HKEvxJp&9daD4-1oin}7(C$lX z!m{4ZP}Z}{5P5&ZD?|R@nippJ9Cd9zSnHwoeAE4E&%JfOD}DCA)V;M%VRzma%dziv zyJdV{8tadU-E{t&-aq2p&T;*9mNwSL3^2d|1DOm=*E;2XhVo_nO{ffUnU~>FzR{Y4 z$J)L2efViET62G1zcU}##__D!ZOOS>;#&LJh`EQBGVHN$ZF`q`mCt@W>XUnv_bSKC zFxHp3Z+?4~7^{bMCj$&HzyJdb6a!_wQy#k=%f_S68@J{$kU@*ZpRu|&5L8Tm;R-_7+`<_1{hdx zz&dArtVVHlR({rc-pIGJ#ke*ftf@!sxu*NooOkO!)AQBd-+IoYwr~9oK(=dGN5$=G z=P@r{Z(h8bQT1Vz0R|Xgpw_^s>zv3tYU_OU{aW+zh;2bYZ`M zd2!5k)8Dik0}L?000YYgvaWM7{3cX3KWo2Jd`AA?dd|!_Q_1VL-fs1?_4tpr-+Ioi z+dn$z*5|gK^XTncEkC-x5#yQP19&_iWgP3X&WlI)1?PKgR$Rn|0R|XgU}OVX*EvzH zk>lFC?2$V}OxENOt@%sjbB}VES9RK&1J1X9b?mcWtBvQ;F^rh*8LQejOxwEVa}j&i z>Cv%kKl3rI=lr$A>_cekSc*4qp)zyJdbv>V8}&RJR$?w#vo zvb81mk8=0O)3)TUt@+ZHbDhyHwe{PY>rV5>+WULP=MJC!FY&95f7$QZ=UK`%fHl|g zN?As{jX10=_tIFu_BcJa%Q`RitfOPKub;$F3>jd60R~1ikaeAtaZPwu`#$k z=={I+e9v;FS9Lu4wUXCuz1>pIt;c?}{g(4>*|zo?$h?eO&Uxmxt)^dH`-$8?<7eK_ zig(7bKI^=ARvS65^(_MoFu(u<*D;WFonw7mZ>%+UiJUEtv9_PjbG)sO*PiFh?P_Cs zWE>;zd&Q`>{!^LT{Mc}!!}`hAB{Y)|X#{)hR% zym-BNk!@|t00Rs#z`zFsqpouz|F~)!#^-}uz8`#K{@;48k#fS?d~j_YYjW!OK6~_u z);2C>+@oxJ9<#OHuf78?EqA>C-O}Hu$I5bl^znJrc`-}-D~B~U0}L?000VgqSm)$w zo5%yAOYDy>hPF>mE}RYh#e5txGwkb*Q<& z=Gss6b^k6vu5sABn5#WXe{`!|7+`<_1{i2JV4c$*!(I-1k{kBDb0D zv-SR(bM%UBuj6d3W7&Sq`OCH~w`RNK; zmfPM&TiZD5vi5WEz02O?c&*pCqW){kvGw2iSbN;;+hrWy^bV>*`m>$?{sywSSMCZB72)lBbT^ezmbZBA$E1w6%?6|21{b(hnb% zqcsL=uKmP$;~HSbT=-E;mY&;UacQhyI@cbrXPp=KsH-(Zh$Il$=X`Hs)U#ioVV?En;=^R^LZ*AjJ#x3W}xNU2H8rk|0 z?U8Y;&pIz2(H_oWUC00f3^2gJwGCul=VV+Hj?x!e^OeZkmU5QXbF6(&G-J&7`VK(J zms@Uo#;diBqaGuF_P@lk$90f$EVrM|ry0lktn(s2pZXCKF=2oK1{h#qn}M>9dJ?pt?thU^LRo*SfdA9AV<8OJbhoLCrmUCv_wlyBL zpM%(Ytk^5&TiSkUtlz7Q)8m%8Z+<)7#{DnW4Pqe{3^2d|0}PC7psaVa;W2G^#CpCp zSBbUzs~o-cz0i?A`(OG=Z46%3{aH@G<@r*+*4x_pP0L!F^R||Kul=WWtGQoWt|P{b z+Ol1BKl9=-^Wjzfs24vBFu(u@Cl?ws9%jmUE7< zZI8H&P)}w2$vgAn_2xycwJ8G(Fu(u<9}JAT&WRjD8$RyGJ@S-id3x)6pjUcNxHcBg zVq5a&mfIeEqUHQ$-)D8~QNA;eQR-KFdnNy`+9Bfe>h^lG@MlH8JViNUg{kv+O8}(|5 z%~j*l;x6M@pLJeriL-sJEg4{d0R|XgAPi((=R~Zl3^2gJ(FU@v zb26?8x3o>H&7%%ytkGNZ^vEqA72o@;jme|QCZZT@xap#*DSK_xs z<8SnK%sAF(ofk)MYvmtz%+Yq*jsXT3xQ>CW>zt)EVdO|z9iEx{M@;t0|6B6X%0Q6_8o6rFV_IhxX$>>%a;DWG}ga5&t9)(ofr42uj7u__qCZe zV}Jn$7^pRnb)A#(JE3c1e8j);_o^&=c*wfnu=ZhlOU zuRk|L?mzN)nX&9y=SBVb`u$lOYhwl&V1R+W4Or(~&sb}&9{J@wU$6a~d&yO=_}Tx` zH*4cPk8z1r%WWx>+w1jfZF*drnir3YHP>Rz00Rs#z`(HvtaFZy_YuBp^U-PE**iBq zqTXknqt|x;rtz=6e^v~f_j=>Vo!ivB$n%~3t2_S;Fu=gI4UD?ZiTo&w&G`InrtjbO z&i`AFH@}vUrQLd#qes48dyMIRJ?rFHV~+h9{%wFv<8zJUQRl^)y4q*Vey-iL8v_h5 zz(B15>zp<_k@rUoublt;?EkWn+G`}!Ya`PAQ`wYlgt=j@r6&f|8)$F<)9n7&UsjeqU^ zE5=rxw$GjA-vt;Ub{WU|tn=as?Wv60`>U9V83PP3z`&6PvaWNYTt~)X>$$S#{!x#f z`G4!Nrq>a+#(1>tYjgJU+laOMPxl)wX3D$Ye0TQ0L$bDQGmiCH=f$-#wcURGN^HfJ z0R|XgU~~gn*EvgT!pM2fjD6;{b!*NZu`PMK&;G9;<7(qxVm-~{Yww@gC!Bk|l_O#m z*C@|=Z+*-7yfoGy5v%z*vd)Y1a(bMr&uI_s!2kmcFff9Ftm~YNYr+xQGs;+-hfZ_O zUODL~G3!yz*6#pJ<6nEfM?DvQ5Kehe_c z00Y?!Sm(SpdDMEjr;8rB``Uc-*>+Keo^=}OSkGc|#PcJ?Nm*ZyJ$uDx#4&BJSUfwf zdGQ>Z&)UQD+JgZG7+`>beg>>_UdJ-y=Vh1tXUPA{ziGEr)+@e#X8f-hPjz}dM%Bb8 zt^vef&AxZo$Gq6z+#TGgBR32%zyJdy7|6QL$?%=f5!&xj8PCi=%X{39%5|sbN*s>9 zy;F?U^%`?*#<4!@yvY1D%xg#O$N&QjFmR@Utm~X8*Q>ZhUiIqrJHK{z{vYSRbNr+3 zt-qaEd)?sfaaaEw^XZoHd1=pC9 zk8^hZf9KEsm$p5t4a)i5nj=Orka4WfIxmjWrpjsjVSoV!7+@f;fvoGCGuDJx`A+Ov zxo3ILT7Uo0-%C7>ycPSrV{PWPiO=Al^?LwkjP*-xk#$~ND!145e+C#}fB^;=STc}x zopbb>FxI|t&a>9QOYOAf^)vJTIQN#aUU}Oyz5{UOc&gie^I430@mr_ycXXVO9_!cC zFYCOxrtG%aub+sm*fPKX0}NcjK-P86(r-d-`F`nAJ6$RFkGh_j|NHF!7vtg??XYCs z>tD2wSbQ3bat)yMI_Q@1d1J`N`++d9|*0 zGZ{D|?<}8j&lHCYWhrqv>NZ22m0|2TF~-7-Ir)*U%!^|iKGKSFvBCfY3@|X70qdOW znLR82kMoY^fA8`h{T+b4>*M&>8!xo!r)_Fp{4^$Fu(u<*Dzq6bB%VK_Q$jG zf1myT)Y8#yF?Hbnr|lsoVzS17d6APfPHe*o0}L?0z=#G$UFU51e(Ahj;`6On`n>q|%Go8>d@* z;nwe$)_jMxcb$$p-qHDgobRZ*je4G=z5_67e3W~P`75pg#NSeTZ5f}J#`>jm^>}?c z|4r}rIJRSqVOu+CCk7Z`fPuRhn67oo{S0-__?^%UaamJ_qw{~C{a+q0k7|=OK5Vnx zUSf1yj53V%W$v5ba&Vjju@-9v7+`<_297aM);r>TOuUbX^HI5G`7HYpb-KbiO1$>G zy+WMS;W}f{sBLLpWN=iw%FQkV3^2gJl7XwPbJl)Nbtyh0zJ6r>ALkk|MrV}yh;})n zUe0;nc_!YwU-Nx{(TrSmUL36*l=r@4i?-MH3^2gJeg;Ne=e+uUX{<-1URPX~uIUR$ zF5#gW@W z*~c3bw3#+zfB^<_8_2rOS^7<=`RC3f|C#3g^Y@=Te)G|LbmAc%)3KQc9$Gz2KW{Z3 zpQp#3-(MQ*=i49gIP1K4MBSYu_nJ-nXdea`V1R*E16kKOQLe3ZyVJk%w>37lH&!sf zz+MI-_pi<4YsUJ$>QRoHbzUsxbE_{izyJdbFu*{qfvoGCjBCQ$7~4<(WPkw%9vjFw z)@Pj;8G39;T*QR|1{h#~f%OKmu5&W33AtMDO02|+0S49>$T-$#ofp@{(>D4Y0}L?0 z00RuXGLUthvt~^gpE;d==k!%Qy`~>9zyJfs8Cd&$tTki((e0LXUOYMu&UajY5o@t# zfB^;=ILbiQbzr}gO25)p3^2gJ{szp8 z`^T7LF=l`P1{h%A90OU`IT^nb%IG;p#a-MPxUPYWV|~_nQ9rnDKhUbyBnCVcQUNSqD^9LI4|4$ccS9) z(l&9d`F8W;JlZCXJKt`8oJZR{I@bI+kG6SqtlIPSJl4@=cfLRT-1IySwHD^b+1uXL z&!=xa_W8)wS_|cK0C9}7{-RwU{hd`F=RMDY*o!>_3^2gJ)eV$2&(-Uxe)=*43^2gJ z8UyA}9~b$ktxA9G5Ky7+`>bvkh41FnG2> z=Vy=s1~M5iFY=hlqq6YG00Rs#(9?i*4o^KjITlY0Ffh6S^CH8e8&-aX8DM|`2A&zP z&SB%34bQW|00Vb4U|!_@j_%c&dj=R_;2s97bMDd3`m=UsfB^>9889!dixW@c!~g>f zFu=fg2CQ?&Ycu^!n=!xu1N#{;FYXsxZpD@X1{h#~fpZO5=bRgV{>7gG1{la?z`U5N zJ@gOl!2kmcFu*`R1J*hHV#%dgGQa=>;~Ow9j^Bp*p*CcI0R|Xg;IRSgoX2tDMO+wQ zfPs4&FfZP--Sv0v&Hw`pFmMM0);XNt!MQqe&Hw{z4VV{MS!>01tT4a;0}PC2z&eN7 z(ab6@vkWk>rvdXKUwis;Y`z#^fB^>1G+>>>-@fB^;=IL|;?=S*+4$9e4`_F~Tf0}LE%U^@Rz?`wx++d;g=n*jzGV1R-B z4NTWM<-WM@A9pbpV+I&tAcui6_sws$PmcD{4%&eM1{h#~fqn+cdPhwA#Z)ZCk^u%7 z7}tP#aoo1k@3b8Q3^2d|1FsEO=e&*&KjOmx0}R~DfO+v=?X7=nZw44(fPp(1u+HKA zPTtj(cLo?(GGJb0WXXuv8DW3{1{fICfOQVLquNz&b{Sw`4+G{!uJ&-{m|QWy00RtU zFkqd-VFriFz##(+WHDe~WHF0H-R{&?@oAt(r#9j~fheXHtKRnGthzyKIXH3P77z*MT4f;=z<2Ef3M z%mC&^@Vg`Pi?V}XFaQR?z^=(a&CHj!o>KSdR(3mM0Cvu<$wy~QAPh`^0Wh#DGk|#! z{O`*Aqwe4z41fVJu;Ven>wf-l+p&A;syh?z0l?1L@!A)C5^V+szyKKd?ij$l_}%Fi z+(Nft01SWuFaQQp&wzLRFM9!gx`v&Tdj0$98Gg_+7ytucV8>tp^Wu)tPUuf)Colj8 zzyKHk1BwBx|IruF7r+1*00Us4XAEHd-!r{|H|PxvfB`T72Ef3!V?e(5FK(i?fSt4L z+9*+*z#nY_2EYIq*mewHUfg!N2lvoD7ytuc01SYEo-x4R`S0qx|EycsIX%-axP;!o z02lxRJ0}B}7kAEfMSn%Rf&nl92EYIq!1^ByU>pDgU;qq&0XG9!|APlN54Z;pU;qq& z0Wh#LF#tOUJnu|Aqb}eX41j@e%K+v@F!XI1LV7R+2EYIq00Y}A1F5ugwntgpW0{x* zl&gDV0`vuadB@OHF_9`c=-1t2bXU=rms>n{pA+Z|Is*e>01SWuFpxS1c6Qr$XRjak z1=O*7{Q>%dzT9&NcmNM>9#TD~dS&Ced%Qtk&=(j017H9QfPvI9u(R8~JA3`OKcJ4? z>l4ry^yQvMzyo-2^N{K>)hip%-Qx}Vg1*227ytuc01Tv-0kM7IzGJVWp$q5&41fVJ z00v-hq}JYmKA}%A00zJS7ytv?2LrHkVdsJYFaQR?02pu>fPJ!k*e7TQv;!Cb17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuhk;Y-9^DFkIQoDtpbIbn2EYIqNEHK^ zW5H6YSb`j|1O~tW7ytvQV1VD{OobfC0FPh*41fVJ00v?iz#JQ^5AXqffB`T72EYIq z*tQJ7HrclN2mjDN7ytucVCQ83bL`IBw&=HLTQC3yzyKK7Q5fL&5!ohjfAEeX_}x+X zMLEGL7ytv?GXs~dx^rvI%$H*3Se|d$e|s)B%7%Ug2EYIq00UrP=VO3v68BnP&L-H8 z!_ekCUz?*%w|$#(|8n;`UI*|;{3T5Mq|GFr``Meu9VYi~S7b^$ewJ|ez4*c1_Pn4C zwvRUGY5#Dq^<|D_S(szDk9I}>LOXx~FaQR?z^=l8*#GYOifzJve&O!8o!!g60_+>~ zr_MOp)xyN)XO}CYhe&#_pZ8hfb>_Nl z8ouu=F2ca>uEc<>!==u$u9toy>vIlgKlhr$y-t_(vQCjOcN(`WzUPmm6S>}JufK%D zML*ru7~sAj{fg@@eU$H$ofoBlx^?GG%g^q7+;MS_eg_7?02lxRU;qq!TL##MVSA$| zAGiI}SvfeK*fV^eY`V^5A`I;BEDUhp;6A~9Q2K_rTt``Vu%Gygn@9&7&gnQ@;)*M4 z5Roe~q#TmQ{VZ|dqTlVx47mFh>p}VwyNUF|X?ilhN*d|6iR8l{eG&|S0WbgtzyKKN zDFbY8c+-0QywBeFe$Q;bhz-MTXSR}Gdia6qotXhyr@QMY{Y3hX^gE8rev(GQC9S(} zNgVcb$8*PFe@-iY?s$@y$cBr4xGOW@?IZ5KBllhD$KAgquJmnr_KPE7aM1_B02lxR zU;qq&fmAZ!wL@68*U$T$Z2qzq5jWX%hzG`Zb_S$R@cP1i-;;Wa3|>QsESAImovl$g zuB4H54yWsBfA2}zkp_KzduD+9i1aVF+g0E4*2&wax_b7e$20l~7ytuc01SWuFpw$+ z{LUTRwuxVOvU!V*#BQ=_5D#qc3Jgf!aIeq5Z9nl#@8{>%uRDM7?<$SNgNwepvopYb zf%}NNPxNF?^rlJG9J{mYAN9i+0|vkV7ytuc;JaZ!&H+WgVw;{LGT_Fit34}A*^ zfB`T72DWzwWUcR>WBFe81h)6`qkQONU;qq&0Wbgtc3uY9CPDk|yzPs&McaY_FaQR& z9RrwSx1H|6J#-HSzyKHk17IMY0oW$-Isqrp2^ataU;qrHf&t92;3yRwK?XPi17H9Q zfPqvofcO5vQmR;j9IylizyKJCWdL(*tUka8^Z^FI02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q zfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9Q 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 Oz!R~!Q-`tfW_tj9wN51f literal 0 HcmV?d00001 diff --git a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1.csproj b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1.csproj new file mode 100755 index 0000000..928d6f2 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1.csproj @@ -0,0 +1,88 @@ + + + + + + net7.0-windows;net48 + + net7.0-windows;net7.0;net48 + + net7.0;net48 + + true + .rhp + + NU1701;NETSDK1086 + + NU1701 + + true + + + + + 1.0 + MyGrasshopper.1 + MyGrasshopper.1 Authors + Description of MyGrasshopper.1 + + + + + + + + + + + true + + + true + + + + + + + + + + + + + + + + + + + + + + + + + C:\Program Files\Rhino 8\System\Yak.exe + /Applications/Rhino 8.app/Contents/Resources/bin/yak + + True + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs new file mode 100644 index 0000000..970639c --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs @@ -0,0 +1,15 @@ +using System; +using Grasshopper.UI; +using Grasshopper.UI.Icon; + +namespace MyGrasshopper._1 +{ + public sealed class MyGrasshopper__1PluginInfo : Grasshopper.Framework.StandardRmaPlugin + { + public MyGrasshopper__1PluginInfo() + : base(new Guid("cd826b9b-8dbe-4c31-aac1-6fc7ea2bcfb7"), + new Nomen("MyGrasshopper.1 Info", ""), + AbstractIcon.FromResource("MyGrasshopper__1Plugin", typeof(MyGrasshopper__1PluginInfo))) + { } + } +} \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs new file mode 100644 index 0000000..b6e53de --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs @@ -0,0 +1,102 @@ +using System; +using Rhino.Geometry; +using GrasshopperIO; +using Grasshopper.UI; +using Grasshopper.Components; + +namespace MyGrasshopper._1 +{ + [IoId("e79cd2b5-cb9c-4d08-93ec-446cc1f6d923")] + public sealed class MyGrasshopper__1Component : Component + { + public MyGrasshopper__1Component() : base(new Nomen( + "MyGrasshopper.1 Component", + "ComponentInfo", + "ComponentChapter", + "ComponentSection")) + { + + } + + public MyGrasshopper__1Component(IReader reader) : base(reader) { } + +#if IncludeSample + /// + /// Registers all the input parameters for this component. + /// + protected override void AddInputs(InputAdder inputs) + { + inputs.AddPlane("Centre Point", "Cn", "Arc base plane.").Set(Plane.WorldXY); + inputs.AddPoint("Start Point", "Pa", "Arc start point.").Set(new Point3d(1, 0, 0)); + inputs.AddPoint("End Point", "Pb", "Arc end point").Set(new Point3d(-2, 2, 0)); + } + + /// + /// Registers all the output parameters for this component. + /// + protected override void AddOutputs(OutputAdder outputs) + { + outputs.AddArc("Clockwise Arc", "Cw", "Arc from start to end, travelling clockwise in the base plane."); + outputs.AddArc("Anti-clockwise Arc", "Aw", "Arc from start to end, travelling anti-clockwise in the base plane."); + } + + /// + /// This is the method that actually does the work. + /// + /// The IDataAccess object can be used to retrieve data from input parameters and + /// to store data in output parameters. + protected override void Process(IDataAccess access) + { + access.GetItem(0, out Plane plane); + access.GetItem(1, out Point3d pa); + access.GetItem(2, out Point3d pb); + + pa = plane.ClosestPoint(pa); + pb = plane.ClosestPoint(pb); + + access.VerifyNonCoincident(plane.Origin, pa, "centre", "start point"); + access.VerifyNonCoincident(plane.Origin, pb, "centre", "end point"); + + var radius = plane.Origin.DistanceTo(pa); + var sb = (pb - plane.Origin); sb.Unitize(); + pb = plane.Origin + sb * radius; + + plane.ClosestParameter(pa, out var ua, out var va); + var α = Math.Atan2(va, ua); + + var circle = new Circle(plane, radius); + var arc0 = new Arc(pa, -circle.TangentAt(α), pb); + var arc1 = new Arc(pa, circle.TangentAt(α), pb); + + access.SetItem(0, arc0); + access.SetItem(1, arc1); + } +#else + /// + /// Registers all the input parameters for this component. + /// + protected override void AddInputs(InputAdder inputs) + { + + } + + /// + /// Registers all the output parameters for this component. + /// + protected override void AddOutputs(OutputAdder outputs) + { + + } + + /// + /// This is the method that actually does the work. + /// + /// The IDataAccess object can be used to retrieve data from input parameters and + /// to store data in output parameters. + protected override void Process(IDataAccess access) + { + + } +#endif + } +} diff --git a/Rhino.Templates/content/CSGrasshopper2/Properties/launchSettings.json b/Rhino.Templates/content/CSGrasshopper2/Properties/launchSettings.json new file mode 100644 index 0000000..e30f217 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/Properties/launchSettings.json @@ -0,0 +1,20 @@ +{ + "profiles": { + "Rhino 8 - netcore": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Rhino 8\\System\\Rhino.exe", + "commandLineArgs": "/netcore /runscript=\"_G2\"", + "environmentVariables": { + "RHINO_PACKAGE_DIRS": "$(ProjectDir)$(OutputPath)\\" + } + }, + "Rhino 8 - netfx": { + "commandName": "Executable", + "executablePath": "C:\\Program Files\\Rhino 8\\System\\Rhino.exe", + "commandLineArgs": "/netfx /runscript=\"_G2\"", + "environmentVariables": { + "RHINO_PACKAGE_DIRS": "$(ProjectDir)$(OutputPath)\\" + } + }, + } +} \ No newline at end of file diff --git a/build/GenerateTemplates.proj b/build/GenerateTemplates.proj index ac66868..620aab5 100644 --- a/build/GenerateTemplates.proj +++ b/build/GenerateTemplates.proj @@ -69,7 +69,7 @@ Condition="!Exists($(MyTextFile))" /> - + @@ -200,6 +200,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + From 4d19a88002c312f74af899483e1b187c6e39727c Mon Sep 17 00:00:00 2001 From: Curtis Wensley Date: Mon, 16 Dec 2024 14:02:05 -0800 Subject: [PATCH 2/4] Updates to GH2 template - Make it a proper plugin so it loads in GH2 - Add Plugin Icon - Add VS 2022 UI to create the template - Use assembly attributes for plugin info as much as possible --- .../.template.config/dotnetcli.host.json | 6 +- .../.template.config/template.json | 4 +- .../content/CSGrasshopper2/Icons/plugin.ico | Bin 0 -> 33583 bytes .../CSGrasshopper2/MyGrasshopper.1.csproj | 5 +- .../CSGrasshopper2/MyGrasshopper.1Plugin.cs | 28 ++++ .../MyGrasshopper.1PluginInfo.cs | 28 +++- .../MyGrasshopper__1Component.cs | 76 +++++++--- .../CSGrasshopper2/Properties/AssemblyInfo.cs | 22 +++ .../Rhino.VisualStudio.Windows.csproj | 3 + .../CSGrasshopper2/grasshopper2.vstemplate | 43 ++++++ .../Templates/CSGrasshopper2/icon.ico | Bin 0 -> 50192 bytes .../Wizard/Grasshopper2Wizard.cs | 11 ++ .../Grasshopper2OptionsPanel.cs | 110 ++++++++++++++ .../Grasshopper2OptionsViewModel.cs | 135 ++++++++++++++++++ 14 files changed, 438 insertions(+), 33 deletions(-) create mode 100644 Rhino.Templates/content/CSGrasshopper2/Icons/plugin.ico create mode 100644 Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1Plugin.cs create mode 100755 Rhino.Templates/content/CSGrasshopper2/Properties/AssemblyInfo.cs create mode 100755 Rhino.VisualStudio.Windows/Templates/CSGrasshopper2/grasshopper2.vstemplate create mode 100755 Rhino.VisualStudio.Windows/Templates/CSGrasshopper2/icon.ico create mode 100755 Rhino.VisualStudio.Windows/Wizard/Grasshopper2Wizard.cs create mode 100755 Rhino.VisualStudio/Grasshopper2OptionsPanel.cs create mode 100755 Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs diff --git a/Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json b/Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json index e53ed79..7301b0a 100755 --- a/Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json +++ b/Rhino.Templates/content/CSGrasshopper2/.template.config/dotnetcli.host.json @@ -9,9 +9,9 @@ "longName": "version", "shortName": "v" }, - "AddonDisplayName": { - "longName": "addon-display-name", - "shortName": "addon-name" + "PlugInDisplayName": { + "longName": "plugin-display-name", + "shortName": "plugin-name" }, "ComponentClassName": { "longName": "component-class", diff --git a/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json b/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json index c632a76..0162737 100755 --- a/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json +++ b/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json @@ -50,9 +50,9 @@ "datatype": "bool", "defaultValue": "true" }, - "AddonDisplayName": { + "PlugInDisplayName": { "type": "parameter", - "description": "Display name of your Grasshopper2 assembly", + "description": "Display name of your Grasshopper2 plug-in", "datatype": "text", "replaces": "MyGrasshopper.1 Info" }, diff --git a/Rhino.Templates/content/CSGrasshopper2/Icons/plugin.ico b/Rhino.Templates/content/CSGrasshopper2/Icons/plugin.ico new file mode 100644 index 0000000000000000000000000000000000000000..022d1f78842c15850a45c0405c872e51c1070015 GIT binary patch literal 33583 zcmbrlWmr_-8#cOUVCWPCq(e$tkxnU<1_h)`1nH87p+Op?TUw>0duUV|q#Nn(A!gmy~O&#<8LCpZzzjOG|1(i~Gc`OgsfD$v(b4h3oa znW}ts`Ws(!zC4_9apn0XpBs-6Rkrk3Y`;`LeX7|&3O*K3fBY;d3nh8A;5zaa6y9x9 zRSNb4Xo=XJoIop1)cl5kNEQ|WB|uaH>V`nOZD9Y`w^jT|po;%e9&QJ(IFT1C+9lxw z;o9P>U>FW1pyn5X53r!;x*+8RqR~@KDm4Q9T@a`?!~feCJRd>@SfoQn-eR)6UDj_gQjI-oO2vgS{$g*HZR_uf792;>y{ZA^D*D%~y*AUn1yw+ncXfSp6TG zX;Z6=SkIQ$)*s|b<7|~BE(NdGfGjWFMICN?UE9J|R`s%mRpGw3&l9g{Q;$?xYlsK- zk9>!RbNOf+;B$ZI8YV==FH_qa5I*FZdSCDx)b}&;_8}jAl%L$q2;Lx8UFn{NHK;Q zaw8&2`})%-Awh>h?ZD(9^q6X$5Se%PlaU(&Uqb(X+}JG#$SEm<)k-jueqll&5E5!? zJWWl_^QP@>>l@*c!~1!5Yk@a!-oTavP=w(`bV1ta*_&LqR>q5z<5N?yv4T6-ZU26J z{`m3ZQJP_Qm_d!zP@c_1@j1Pt{akHeT3VV+E}If2CGft?73_2ecZP3fIyM?&S5DX3NK7|^$dCQLENbX2pQGKK21%7LNhX9K=( zr4qCzA$asOq@S8R3?KS)@-;}NJ76`G(sa7Q$W$m3!^`hmh|c%We7W#0Lg58qy)UL9 z!1Wu}{i@%Bp}BQdL)7r?g1Ft<)jxrKam@S{eFWR{4UT!lCByeC{1^(D_V}M|4jr#W z@r@7o`(d}>5=+4u4Lug!NoZ+lx4X-aBes(V?3*?_dt8sBS|nQDvhwWF9Q74x6OOK;S;RK7L@%7uI4KQ>YW}NGAmgq5BCP9h?n&)kMWN1q)>Vuf>O_f)*XIPSiqp4Hw~2#DXxi8XU*Ia~pVh17 zfbd{!Vy%QyJWq!>X{5*nj)+zxz@Z$212oTEEqXA}OuLMnUpT8i9q8w%JPtzJ*_#$1 zuf=z-yrBz;xb^e5x3lA3_%vV6?>0d4uA8!(7pRC!egGs7_`rB&y}iZmZvXJDF51sq zi`7V*njQ}cFNf%q>t7@2CfV=TR)+^DP6(9N`Q3iXH4aByo=h8IC$XysRaNmb7?=HQ zIni0yoj3HR069(DAFBgBM!4tD%l%mlv`PwOf)y}`@qSVZU@cV{XzJ*wLB6)OMlTH1k85!- zzX&`ERg4t{s;dR$AAe=ym7-r;UuWbLNLXMWWzg_!Od%rHcclKFaKnf--Y*paYI^ib z;H%Q{;Iom@8%R69`|cZWKbl<)CbTDOz5)2*7XvJDGWz<|XCPCPM=?_q{26dj+N-$F z(S=u+29}ueiMQKnRCDi3ALqRAmzAPx;p5>cKsZJZMulUsFn2Kt2t?kcQOllL4dvU< z*Sl3nI}qdI)_LO%f*H?df`QTge}+z;Cv8_t1<&XOJO}WGh3>V#-6Sk{FA8QbRL)l< za_g_I$%U7%$?*d{2y{b~hcs}eQN;So7fjs3zx^o;F_0K;K52&2v$KJ9^Cx)QAXD2X znE08`ZSfA~>R57KQi@S9mq;bMy)(#h`qdPM$O;z-VG&ubQ<;rX$dke?==wo9#|2(YV* zE2B6U4PK;3UI}9lWr!yBpyc-78p?wl(|V>)ly_u+N9PL_+4}g3Bzm0CiCraQ(bJj^}hi)MMgGD3eDposFG6oXV2--{wCp zN+~|R+}g=dK@9cSZ=QtKzS~F(+hwUHNlAJ;znTGJf{~_pH-^`*m3MqW(V46ApbcSEx(RB?k2Wr`Wc2sCGX1;f!4EOaW|pN z$`wix+bQmd$jIVODRSV3ft0+~AgWg-X3`E3Y&EYbz`m z(fnVQ#alsVgohm{|6)yY@?v#q1i6^|Zs8qYVamN8?kE7k*rhff?R5)Cz`yP=!qC0` zIQH`LUj<`6WRR_`F>MZB&QRvHz5=c|x$xe9Gp{uS?O3}=9lM}`u+CsCSx-+9#QaT@ z%sNCQEY1jvoQ^=q{LU2f1czUWlwd|PYXC!KO_eca2UJ) zeH(Zu`BoeqqkA1eut$D+i+wafovVHm#j1H0{c3_QDIa{zU%${dx6WtEce|r!InK{F za~l}Z1(8Ur6Hf1VWvwcOf^KgV6lxXtxViIkFh8fm^~M@C3;97xBtRz@Y(zn}$%!e( zo0W@jHwVt6k@nZM3CpBbAS^{>Txg&26()1m!g~GjF-`=|^tg|po2X_L zO}QSqe0lS+#3qI59n-UC_!aRwQo)VOA}&tdAv9S_)8=H4o@En+822`vZS6dNQ7z-R zl3}a(;`Z`@=_TF2zoTuDAY{++nFglQt{`4T1Fx(fB?yfn)*1kbi%IRt=gD$TX4wr* z1y3~n1t|fA&bwLGr06B3pWF08)Ku< zOUWV;tyqs`b|40pOcmQqiO%w(g)Aoj%g7v92MXaBXY%AT@Cm!3{bu*$-3}(!|E4wF zi!+AO4wp-Ji5d3aNPM@>1DREkJ_DQw1Om^K$&wPSQy3SgV{}(uF=jzzj`2o=Mf`3A zjc81#2GeUNQ~j1?A7TO~!5s2twv znXf*IjeOBaPPIfWY@@<*eHgu@tt-Qgw=GF4;u-Hv&!xl7ZY<9*V$+3=smxz^yA`x3 zxb;R?*5?S>6}4;Ws9;}a4F5QZk_1Id#7foOM}xXD~stQxOv!eW7PP{14Hr=^|$Y*^!56CgsK5fAMew8BZLgxvI!w+IFvijm5Y zrb+tL_j_SpDEucV=A=Ni2Og9kKx-o6R=cb58I2zu^1#s7tqegn^}$$#wY`u9nl?Rh zB04E~{r4=~{+6T!G(rm_q8K?48E&vh0?xGVvAiG2y&-AYLuC2m=xq1aDHUr@2M9w! z!Iq7Ze0*`m@U`V_$(1vB<4nro94tkVH}K?(pyqF%^ZS1A5@Sn{VTV^nVxCF?C-5Y&h~KeKDj z9!7!a!zHtx`^gR(82%N8_WSW)FD6RV!y}GyY>Z?>Au?3V^8Dpq=i6h(Q9n%+C%19~ zjJMcGoY4@(n+eE)xfv0>F%Ke2+35?FI7Z{P2u94qZx2Kr_hzaw$_ZD>xT;V`9c9iH z#%*}bZij15vwj@hyXvR$z!VuQR7o<1fKkr@5rDd7perxsx(7Die1J|V0ZAlowU{z*-d^p_Y70>uPn+EC z*mafYNa5Pg*VX7e*2$}Foa^@lK0mVhm?P%?d%bD>1c6RZZeVSrdk=B~kpvor3Rv{b zaGm4{uk4dD&fHjV!`=bM`q^Uc)SJWUa<{7-n6G&R*KB|D2jvW*q2T^SE4ylj{4~oC zeDq^d@B(Tg>MmV}U{Gq80?eI#wF|&HO4_$%a6d%=Du_eygQH0JZ36sOQ>HRlZ!lO-=D95DdmV z^~Cdh?7ds$DdYTa`M*Ewp~NRpbmh{WCmY$}9J=QD zq{5utI69=%>do9adhNcVJV(a==gBN#;|3y~ibUsNr!PPY?og(1Fh&3aRMd4-CReI# zDlb>tCGID9WjPBZVdeO~`-E1f!tl|y^3g-I_jW;GxPy#6MGXtAV=JG|!HNV7Y5~zy zvi(w@(u4-P@w(gbq2sPt{GqdCBAHHqzr77?zcc+6xu7(^Wi|T=b6Bp=dW;DI2V7Nc$?4F+PHZ&%n_k|dKJtFF8RGyYo(qC z$SWyz?zdP?aCSAiR9DeME5R$T2)<+qp05*2!)kXXBy%Wr1pCe^5B_HmLQb(j{r1x7 zR`uiSy6M<31IMQ1*v$E7=Tx@{<2I0oDA*ql82)y56oA54PW3kK#B~K7Q|Ae5XWlQI zPzU(@S$Sn(OxtZyHcR#jZV|;K+`nFwCoA=1u*GX)&&?{&H-V_nzk{+s*L+w;O--mU zTOFg#82j0WMOMyn=KcwFY1LG_??d-qh{Xzcw}GVY;9Q=5e{P*taxHjAzQ47?!5x=- zSp^FEJ5G&ZeXLh%IW_o5uw_^~nO;dkX5#^khCcAG9|htyZj{+$#gRb5$(%O#-^ER1 zw*gs{(6@=UT=!X{69+c7UShVn7`1vlrmb>o8$>`ts->m?iV89R*I_$Nu2=2byLPxvmDL4!G_0xq^B_3SGbJyBR}Wo*zaJQBm{KPoBKq1FSKiPF z>7UO3P_>=V>t+ds{P2M?kA8dmT_zy;zD84Sqky(-N#e~*!(UWi+0Kc8j6FXwJ!b1^ zmY~D|!6IL!@);FJN;Qf^&A_WSQoMnwk)?(sbXF;bIFNz(&}uOMmqM*Z^K+E7DF1m z5eYAbLN^EY*@_4tBK*=4lQH*vmCvy8r7pubCN^2YbRx~=b@#SptX@R0$J#oHJitX& z9&o}6?%=HnfZVUS38PM_a6t4n|W@rgadarh5&OLEpKi!m!0#iQR1q^kw%BuM(9$ z-Y9$&l+`fKz)y`uF>L>SmM%@)KPUX-9p=G&-4{E`60F;WX^&?%r9XcLr949&G%WA; zF}#jmdWWfBYt8fu?1HXt|FQ0oFjtr~p43gRv>df-?~BVEtrw*lpX!J7F#Pw751_dL z2r|XE+#Ppm!3ZH;9_Z*X+xbzfeSw+Nvf}Yn{}#+{ymN!>Nah`rK_BB+Lj1tgY2K6` z%pTh-PJs_V!DYY^ipC##{b4l3dV#t_=exU&UvC&6DJYXajfZ09WQ@r32yw;gPW&C* zjzS}q9o1L=O-u@8O-^_mTZ;Ix4ehm`428YW+B-SNpZpkX)*CFz`1Az^gKq*>2O=Av zA}Z1iTPp19en*=0auSYb?z5G5z$nMn5emN@aT&nd7k8ykds71eRrA|?PpMdn$Xfkw zXG?(-hq~Tk&}*^c`S)}aw+f0M_rs_~XD#6k-d=WA7@?|Zq!n*i5&oGc>wb+wwCK#ibM1Rg1#QJyNwlF6Zr`lt_*`kK z3+VDtY_Y=e?`vU7@bUDrk}15dflPSzpZhY~FJU%E?-b$vcaa39ytB@GD-ocPaU@YO%9yv@VGYXepZXy%xq<;1N=)oOX zq)bb_{Q*zK0uD556~7Mhx4yq*Br8z0(lH1FoA}8o-RdY4uddEp^?Tei=>>whErYrp ztfJG^cxUua_;zN`+5K=PiRj+92=78g~72C6BLQgXG)eQdsAc$K`#F zwO-&x)e_;(ilfRI1;(pWk9b!z;WKA<>uCaGBUEV{>(%>llA!goqt;vAG*xs~Bg{{5 zr}gll01bkiC?G1}*RNmy%oUDWRnF0!l>p6KM9co$+R}6c)-lt3-3}MLD*q<^)2p@C zOa=$vCp0yDSaCT6EJ#V`*#XV88^`0>zPs>qdjby?yDjUBnAoZ1o0%zA#(;n;1BxA@ zFQZojYV!)Mpv!jW<)!SEorlCTC@WHEYpbuP-vnE;oiMM)6M9wHJAe54(P%!#!B)!! z&VXMO#gIMgA1eKTCWk;(%$_>D7%Uc5$-dQ>S;o=$W%N=mm{Pa^yg|r7Qv0>&6^JvYhyU%xrW;cJ!x$ z@;g$P9jvj@ld?ONhA`e1fp+g7PSO81HpbtNYD9~DlDaA3qEmy|-1*m&Bh~r$0?SM;Qc(y@dSPG=cDBgeV&YWLEDHvMK4p zcrmB8P@s8gXPIihQsj@PD&jHiD0f4$=N`M{cXo!#35bCB(5ombSz98gw9dLV~OPvY(S}N&t z@wG22IT<(L4k`Xazm0l);#pb+ZiO7Ym(m1IOa2d?ZQRv>s$MkRCkarjWyXbsY_e>x zb57TV+F}V89JY;ZJ6&lKL}NvDBN}`#DI#BHNtl?Ef$$BbstI48&crfB-1V8fyTYke zcaTF-L<>KAMpoZ`!nUKHTfo|?C&MHoM~>&ac3W#dPr;^|g`+v9d1=Zxgo{HQj=9E( zIeP}QQnh1~!c1;W0+6^gCO&lZ#&DAJ-R#%4*mzr7`ucbsWX>>ej5Ym`9M6+p%GDGD zhm)P#t^cjtH+{V_<|E-y%K`-cwx~8P82e}!Pci9l=~&){IZLV+wk2;SdZjvZ%2cgNjvlN^5ONqpfe zq>N}HHgspAc+5`5Rv0Fx%>U#`#wXl`NA1eI(2291ot@)ti#S<9=PTVxV@S4`M@l4( zo&pe#*D-S~I*W2HhB5N?c%KakKg;F2kI&D*Ra@c9t2e(~(_Q|aV9(aBXXnK@$hALy zD8c`otI#c?MA1R;v!P!Cr75`r$|e=P{3Y6(JmzhsjTlC+}JDpioj(1L0-J&*3LlrgD0=YSGrcGZ5m)SjY~3a zRP$c&&y3*pzSvOBf{KI)s1A){QgF~?<`pSi9Kz-wtV`N;aPB=5QSm&*zEc z_lJSSd?;Mo>GDt${}Wnng)4?LJiQjsec+tJ2dE{frET4F2SVsa8xJ1eP#GPvo_XsV zy!6>~aIycZzyiKJ@FepBS>Jh&MFftq;c)=HMOYjIcXUrj{C|In&MzW)&@*-9I9`a0 z=(GS6;d6jzUX0{Q6N}Y4I#Po2UsqK%C$M+-Z$-1QNZbzAIPJro^^e!Dw{n6_PrYxY zjO7`54kT!q`+b)Y#Gd8S5z2|IY-~@n8SXXv7YuDekQLuWHKVvg!h}PuvaJF?*Sf5l zQR`JRJ~S_oD=P08m?@)*(Dx}2kz%B3`9*>07Kk zD6Pso?zYxu0*jsn;h>Tx8{GAkj#%Ot$dW#i+>T&|rbCrexx)qqUd}a({SNuQy&g{z zGoQy8##(Q;2$n{dQnhxoV4>Dp5c4aPNi)&cy*52e>%`IgfR&0_4T1 ze)IvfQ$4ivI+H8*6PTH9J+s3h>SRd7JIo$?=w19+t6Pw2NDbjX{}MWYKRQnqXy^*` zj%?xyYyyorRpRI}9Lo`MiM9+FO`d*s^ zc;ysF(-YS>3mXPVqW4NgW}mJ$I=%F4q?p_$jEJVXUi-thvK}X$zkKUjxZxPq?Pnal zd@U7+1FJunUkRm@NVV#g2tsdxJw>tI=YjHvfS@lqK=I}qBlS6cjJ29Uu4b?Sj7PY( zfu@$_`v~TtmjB`=K!tf_5<%G52R=SJeZ99=9Y4@puvEet4$*z#8R6zaXmzw2-K1Hd z*yKk?M6=|%9^BM^5KSAa3IR;h=?d`=~c8PbF`wO9PpgOpzg>L7i&DC{`wkK|(ah>FR(|U!;xD>-G0Ss}-||GR z7!5^tyqMIOh@gI(Xu<_n5GS>(-ARze69EyCjC?E=u6VuwOr5O2#@u!%*z&6P1tVWV zyFbp!gUv-(V#2$oLENfTjx#i+ij+>xnyBnRY@X1D%wPq}{>Saqy#`KC@l01D4AN3h z#}ymG`+jKy_&!((4BKA=E`o^cE#Aj0ZIf?I|7k=h7Px(ZSep+$w-6igQdnnQ$GmDu0AGm8eUh$+Ydo?%&$+SoSI|ewTkZ8H^$HP|r>c zkl;+JiC6NW&(&fLQ=P}R){{RAf4r~)4(IV3mIa1v6DJ}_Sys?{e`h;c_a#?3DKL1# zAil~AKZxr{znl(XjrT_pXkfp?Flbm9CG8`ywXyxB`jtsKUC@MmeL6}Jr{^8ioV2Rp zuKud)x9mo;;wg*nSc-{m4&khg$%}WZHpS~lQ$-JbQOk5{-wAKA`Y@bG)$d{#0*!&; z1p`!<7_|kg-`r{TY{;N~+#Q2b0-jel!YAOQNLsa+nq-k7>dJQKI&doy>9OoLZP6-6 zbgyn(OlVyd_E(}Qt#x9e$Rd*$ALII*mIvuSbx%b_FK|q+(e%hlX!6Iq5fXSi?^fDs zkc8$J_5fnRe=nwV|Gii$a?DRtBQRIrTSQLb^S>XTd1BH)C;kZ*1i_a$4CcAL^SXk; z0x?)wKtU%K5A%Hn&SDa&1*n_vTs@JwzIV9XCe>Yg&IO})=M(Bu|I3FD!N>b^s#T{u zx@nia5drI$4KJ)QvHrXn{h^8ZgAsvTVNC8hW;I{w#plN}hRRYij7F`4|25%d_U?`Hu=PkD>p%UCj$(idteEA2<;%I z4^6NrnaDtL%M0%kSF45t#@+-sJn75WV)aq3c<`p!3w(3N^kWObNPTbHKSu+&P7z?D zqm6$%d0LLDbDWK*82^lB*ImE!9p6nvt# zvQJv6x$+&yG_ne{e?$Dk|Hh_xHU`}qb0vQK3k@C64K2FkHE2&Qi+<||bXkbWn%lZP zD(~eiRy_ny6WOrF?22EUU8r%w65p6KnaLyxvgcL3#P))CXK0&NQ!$!sZEDV2wcERhSv}AW`*P^-r}e9^K71`;Hd_y4 zU)}tLeAs1ahHe}>7PJXm3}g;TWmdTNI+rc%`J4tYP*+w2_{Xmtt zKC-))>wUaQVL@&visp$6BVzJXM>GQq;(M+k&U!zQ?(v?>NGLv~DY`Yt_^P`#xJ0)y z2;KcP#|HKq*mt$Pvoenmz292wG;r(~a`Rnm@d!uvdX2&5-ri@<=T88~);f$sA8Xe2 zr6(_~-7%~SlFCU@Ri=6u1E$tldBOZtD`ao}**nqTx}i9my!`wGu5u6?MS-B3!i`uEKP`sjyrs>H0f%zi0kgCa9Uj z>*M3#npa$uJ$GWP?`o_FThGUpRc_aA0>A4>LP$vy)G9iBNMT+Gs_prjEgvz9__`dX zJ~peNjG_Ti7c}WkO$wMOdn@#~htF)XlnF4q9yQ`A64rkxY3igD|BwR`7{A%&J!Gc1Wq zXJ(qniIV)y>}S7})YQ)5Y!g_xl*)2%a$tkQ;t?W#TJ#=W2_f=wk-Sw=(_Lq|r_^7rpn>!?7=q2pKxAo<4ru^A|R~ zk&SN78uteMDC(=8ud+O0xh(4%?u+a8P40mUxRMwkq>(d!e7VyOqY%h%gC0)zJ$-M! z1EwA1TNgDc=UofPo_cL24v}c&Vx{ggJ&^{!G?l4=wj~Pqv(Nh8&LrxMlvmdWhwW`6 zj?9XVVHPE4`9BuMwi?p7B2PNx76Wt~GDNVJ=1wKtQMP19t!G5s2KCWi0V-t1@KJDc zd_-L><>&%-(yx~ta)x+zdo+%tFa|CvlbJRjVM3uN==Rt5WjY|e%N{Y$ljMf9%eUB} zn)lf?zufs&$hqotwX^p5&&wm#!|*!-H6w89xyk$+<5Md36I#h+b$lmy*b<5$*xEFmGn7<*18B0qf0ABTiui9TwIq;6vQ z)xY@==NT#l$Zf-ddJ4kC)K_}aeFwP6wc^J9*2!EpjpYA0#yo2>d%{cQ*mYWy)ABEh5qhKT8DoAw{~yFedFp~2y?-2(y>d96YAzqZqg zS(qg1@$Ih*Smaill)~k-d>adj8n)n>v*w^RcceVn`Ouuy@E3QDzjOVZ=e6#ojI)qW zM?Ei92hazqir7YXPinE`hWEvhB`L`VBfBk# zDcs{eTlMKVsSb9hePnT_L(qDEobI1n3y2x_LFlaiUqZAEX{rEKh0{G{XTA~eewi1U zoIRIv+o4&)ED!sL)QiLT(pOlVQL3>6?Z#h#$KTGmhB09F?>DgEx7I|9ytQ|VMj*>9 z?|$1wsX&2(a9ICQo7Ub}L_4|{RGo75jXow8A+R^8nk*hsa!N`EYRSAp=~Ia|{Ns~n5Eafd73$wt64&*PnM z=$?SN&vzCH+mTlWB#%hxw~xO4Hr-f8cLH;c)4{Tk=#W4DOY-^7L-fu+g#zYEey@7> zp25y0pQ-A)SL zGX=lFE6S46kDpfa$v-{^xB9lV2#2y$>IW-|wH0i5(C>K+pSseKI%VTKu@;c4ud?H}_ zJ+54u%WRB}srVN^OnJK9UIOiCwf2dT-N!Z>>POTIWKn^dqG?^U5& zrc#dEeUKJ|y%KU=nQ|&;0)jgwUh5n)RUf&ny9E=aTI=3Z(zKU~GsfQ0$ji!V-tb9< z*WDs-*poJI@Oe7MG;rRPGz6xfquzP0Uwkl~vlqs?X(=P+*9Gw1KCgqR{wj6%t4JBX zZxp)svAYLQBNG(Ru-F7uM83lzQiV2BtlRWRGa2Jo{%9szGw<3T^FR3^mA~N;c}GJF zdg0u}mo2-?iH>OavrY91!Zunhq(6sSv9XNkC#t2~P~4uM9vWb=lx*HVjTAmWbhhfm z@cqQ%Rpkr?*|s@-^_bc5T9QTnyCjZ;1m$qVzNUY|s<>m)CPG{ySUH{5Y4-=oVuQ{F zXX82HmxuHgVpEzd*j=f)b`?n$2*Udfn6)I}t{Pp4N_!Eh!p%VJ@Sgg{zz7*~d8P0! zWvp6sdv6?w@!Iyj~P#1LYICa_&EQPPUoKA@=*B9R0^U<$cvB6#B>NQ z5yY8U#4IRf=gznuR<6kS@M<&%=!gce2MpYn#ALMGf5>mXt&_Q@^9& z&|$<_XpGi5RS#(hBD`jxdZ$x!gpbC>x;Xa=PhO-CwRa_+r`=y4h?EjBzK1v};P^}v zf`a~$!tYm4ji}!8%L}(q2%5z(N=RTD>q$|Fv9o_>zGd@?;v>aq>BI z&F*6T$WazJ<@JXovu>pkc?=tAn_d6B4n)$6M4K{e&(|AEK1Uy{@g#>%*(Y|APhz^b z%Lj>nJ$C=H zK?nWHUB6SwX_UBHv_<*0>CN+!O_({0Uf&=-`jCY)7cdh(-B*j9lzt%?dBRQz9WAwt zh#5;v36OBJOJ#J~Qym|a(ySV39>N)Zc4sJok-3T=DosQ;!nBy=;`1jCfn2CnPrpH= z?KEusW#5)8IlLE;B?O2uAsY)@s(C=4i)SWa#K^0IpP7@1Q=ZX3M`*5e38N??(Ngu=FquP_Ue4BOanO3U@f{wI2c!#13p0)|ZHYB47U0jRm zTEH7BBv}k#*!TwX1Fy(W#9-Ki0nrW&ZmT0NBrb0CaX_UcuBIkwVEZAh^u4RU0qz8l z@dK6-FB_>dgd)Q{gjGUA8l5z4d0Y@iPj91R{X51!uB?^8T+T2sS2><^+I0}<*DUEz zPJq2AKLzD8|Jge+k3y}TMdc|qe5+LN$ECdw@1z1q?%bH%eTJMF;0PZC-JB zlY?*hM&aF&^UFnY7M{1P=69qz>(jGFeo9~(UWlHKjmb8$6r$|QA8V|N@=mT zkwva%J)<{9vnA*b^1N?wv%5|+)yNZKD5%VSHReK_N#rFD-oM#sBgZeZo3xm2)J!Cm zH|w>>CGjjyIgN-dK7HHURn*NXmxkvf%CqBkAw-%chS{$d@285kCefV_Zy+7f9k|Z7 z*sxNw?A5w0hp+RG%Y~l%mPoZ5FVKAukiU(cL?Q68%j5e+v!OrIFJ#aywdW^W`{S{ z!eiT|no(K>sa$}05Qfsz{Hn%rdN|k6&7&uu+bYFEI@@)p`GR?~;djUz^r@eK<8FBH z3!1SM)YL0K(}PnQyRya?%SK|8TM@|2LOI_=Gs&ch9!3Kq=%3@fI_3BrBQX2Ozd62| z_BA|mqwBDp8OKa9qRqi9+U@VdWmxDVai6987!m>f@vU6HTT{I{ `oL`4X z`(pvlfA|RDkz2P>Ekv=@fyrWI`{JIn?OBw~$ZJYz3m1fVts{iy)!s-6d`kV;=U}=r zw_&jn(6|#s@~>Sk3;R5lI2o<`sd%(>k*bJVjKOIfMm~GJfSTAkU3qO4dGLg6TKZPE z)Y1tdz+X!E8{;_@hTn$hU(6H%K2FY)dKyXq6)l}ZjT*o0@9e&cjwd=AOIZxwJ7U8h zbHGEy8Is=Lmq5A0HUNPfD! zUhPSzy)EJyStfoMs`O|W2EIwGQF#UyB@DuPa=#R}3E8Um2ZD{Oa}M=yz2Dy;6h8G#%B`8$XgI3zR6!Ssv2d{km&G6lq+>eXoxX%ypDm8IC@ELz zaXVo6^BP0P#OkIU{yBU=MKS}X}98NJ$*ktvteAlDA&<_@Iu99nPn^ZDijKcA!sFLh-U+KMY*$o9VHa*sMM2|VO#36CZ40SG zWFjt4@$sUb*er}#aAKs5SuiY@1iaxBFvwNhc>Ei3i*ny$e%?1U>KX^cGfrR*SY>t(_ zGVnw#67s`$Eq{F~__aU2hHr5rrs)9_s6V2{cRD{&C~IdHAlZUMETW=xKd)$c=Re>7 z@FaANtHq|8xKfXM&%L*wfe5X9Col()KgMbMtAx*du|u_m_jse9Cg0+xo2J4^d@ehm z3<*vuxv7|h^(O|*FEL1ihScOoE2GXo4&s!|1IGs?doD&!ym<>-T!u*=Ezv!_tl`lf zTzx|ZA_dIvEPk;cSuJ+F%^a@!aFu!avIBa>B+c^N>I0M0qHgIqmp01eG0AXuaLMrI z3x6}wA^1dcR@mn|MDz#CM@3v>!}U1mE+9s5ey@ z2!vyfaAT6b?vHp;pSs#T`)uf2pzRkhZOPb>6x?GBT#I*9fz`5p)i)tGG!ln5Z^(wc zwM~5Y4>LLrX=Az2XpKq0h=Q!ZE9bq5AhN1a%B{%(lLa}0>e%Qr=Ko}g7ZQf~hv@p3 z7igSfiHXDot1?x<+a{g=8Le0fC|U6ML*UQ-+)lmpoeSSV(_ujwYf6rrlB(iL@o*L; zLVTG$e%0tp2^&PF=lsMhJbNt6#`L^unBUoscze2~uAfQzR|GUkMg$!8^{-#HBt`)T zYubXzFYcf}J5vPGemn0_prfk;Nzb9U&g^HuW0R>{&$ zg_158^oWYmm-%@%>_Icdd}5zIs2V#G_0yo4My9ds0G+bQ;5NEMAsb9m(DHPI42{Io>isKbXS#sO8S{xTB@^p@KgAwSNs8+B-UT3dTH^UI8pEUo46kY^-8K| z4;AO;^NB)|6~f=e**&pANLQ5E4y{&cS%C8*4}HJu7a?J1W2H>3V;nC1?R^Z-`JzJa zZ0k3cz7Om@7nBkCFekG;TORs>PloRyhOJS6QUbB_*U>TUcN%5Sf_gOwie{H5%ozxL z3%SHT*{T|SAnK?5r~ElEs>VcE)aw~PdcVJV&L^P^DH=0wi7#F55XGSPwgT zSgJ-1;@K#If}S5&?gTRmFljB}lO%@hvtTMJWlOsR2=Sy|qEv6}N(T^hdUzhk=<#?p z(Bo|pIIg2sWBSLDEfV!QCgZT$bH^3Cce=@4?pDSa-o9>+SsZok3m z7Z5dTV?El;^Kzd2=4uDLC@xI)sI8S!L%%pU=|jz{jt=0-ssH;YM+#D#5fxNgpxBeS zr7SVoAzYa^sp_)jr;T&0Y=BMI{7>xb$K~zTRHMw7)FIP)+f}A^TI^{O?WyI14J^kc z9uL4Oa853+;Li)WFmv;adJ`J~*>COVGu0W*#k6W~%U%(ivR*fCP&e0&z|JYsQD zLb=-PhOeTq+EXL$>5wyNl_6u(HlKTZc;~SvOYCD(d*-{bSGc{5nO*JN@6{ITiPzbM zvsuqIH$OV;u6(juOO741Qb%fZcHg+ILe++>)VJ%3l47-Q^(YCmIm=x$)_H8z~pA_aE3_s+`DsxFb)qti<=4`{I>-_H$mYS$DUp z?x=xY-b+Q-St;2uX}3l-f3HY&TEhT&tBztR<6!U*iby9FaLtnkmJTt#)Hd zz+YjDhp;`O_j_XB_3ItrZL8=UeyuY^@)nk9 zzv;qBg)#PS(a+r<2Fp*e7+N?X-EmaP_Dto9dA}VH>gzo5U@mLX6SHg`3yq?%9(6bK zW(L;E3yn}OO>r(Yd^AvR@Nu7ATNbG+lqeKO>v0_IU#77RSdG^nK0o%J?Um5z*!60@ zyAtb_J@qxE<5$S^7vj(M&=)%pIrNIZ!PYw`9JKs%j%vP z{4uv)JL0mfqgRm6ur2!(!?&6VDX|vL5H^a^@i_jrjl_u6S*k~Lp2+U$D7sgK{L8=J zn!Rz671x%VEecsPyKuqr9LLxt?YSK5IZ+~O??kM$Q@TCzWYu8yAtx3~SIjxye?WqF zO22&v*B@WjeYvIQ661-stnvEBug0?~l=2pc$X;K0_|RL|*?V|47UqRY;aLfWei5wx zi*@&}RXeX;>D4P{?y40v54T42tC)QtxL=y^wEoIF&40fa?;o0#+Fx1BI;Zzfb4FOj z)W!`JXUVCq>Jm|&-hI-jA+vO}62b%LIOg^d3L4^FyPIe8N88(XGph#c9&%&J^z}d7 z-rHpE4$)~r`SVge`pxQaeevB4-NH+uSqYQ;wzK+IU+EF9YR==2Jz6kDN+|5Wal6#& z(Hnl6)1cZx8ESaZ!p8*Hs(qPLwB3sEmK7du)cZ0xeV z3+IF)YtCFw(owa+wE+g)rxtV0FEI)!xO2;_f9)pLVl5vTpF+uj39$|)Rf#vImPKEz zsqr&)_DKIZX_Nc((6T*$I-RSF5;2&Uz<(2OsD00OQ&B-x@iekgj@1yd4M=!V2-#?) z%FLVW1Y#wnY{*h``-yDI@;#T=gFUWjoy~7PzYii?0kL|yxH%^}dC%7)$7GKomNy}~ zkq}KGWV4}v)4x6Nck}?4#S+!$h)&g$Vi$5bqP1L(NDay3I?IWx{T=+jhX+@hC8y8e zWy}6rH3*!R4?)uAk>BvLwH!{U2Ocm@6%sNwGR8ile8p1j*aLQeF(b)nyxH z;IMc6U<}{fJWop0m11{RYJ-uQ(io~Pg}$nia3SXrZgy~1m1>khnmys0nf$Q*m(7OvL&PN05mIcpUayeGa>X&hvkg2wZ7)PiFj(aUX2l4%-5}QIwj5^C^kQ zh+c_(^8yj$<%Yo;GR!z4WyAhS_$d}5!+t8mg3-hAy5S`r)?7!$nUly*+=2Afi?Mfx zA6E7-gSA2%I*wlJ$%+{KlVqS{g5XM~G6eK-#N#`+P+L)k%O}#18@~yu%R{jz$OkjX z^C9C19i_$UI2=w6q3j<)Qc_YUN&hTuNgp+pVI1EKcgjmqQ*r?%$C8l~yADUlT!PnWSh$jUR&9ED#JJ{9;(h}qw@3# zoKM`2EHW38r;oz|GYxc>5d&XO3u(uW{iELpPmwP-^;ZJ%F4=GmH2%AH}^k--_Y>Zv%077=w`=YoNTF!^5aKQb}R|` zv1^gJcoudHvd4h-jdLL;av7SN>gwuHSXhYX&!2y`inXzq$b6h3Q;8OB#oZYYj8KHsL+}#-V%2H%5h~vn(#K)Qh~9YIHHF-qw+*5N)oprZ_Q$)&+x?`4*IZA zl!TFjBr*;szsK<5!TtO9VP<9qRaI5^_>6{yg#{zWxN+k?lA$&6Qyh7xvKV|;iV{fl z_e3R`55+rUkh?MzX@MiLj>urHK-VO3M9!a!`WG)ggpaXf$1->qhK1o=K>-R1&ttf! zCv$Ddk|lpB-`eNDhfi?R*8)bkGx(;ObwEW@0Yg$8NT2_3{FDJ*SNmERF>6w+ zM-Nn|C83PWh5Us<7{gU#WaFC{V8Mcg=-9C%6ciMgJT!DZPGk|CF#jAgesXhjajmKf z5fKqg|5IH=kbczo5wu@bQI0N3GO$&WLf+yTDBZFOzZ$k@uv=)WAuTN(Ij3{+XU1_1 z9XbpF0h6(H+ja&&?f=u{-rTu!$@4K|u=nfN?=SCzAB~^Nu_bgOlc%!D7|+Lrq9R-_yMn5!YE)EQMN;x1X8h~v=`ruFt_$wfR67M-+6HckuAh zBL+9^`;j9@g2&^bq@?6a(3yL!g@4haMa;NRR8#~dx|Y*iLqmhCAv{Kx?A5zBe)(kt zCItjA_{UF}fXZvv@ZiA%JR|QX+6R7qe$B>C1!yh&d-pbuSGv|w-6b$E2%|=gLcjj~ zVNaexXG24D>0%19l?sC~I(h?x{ocL%cuMsAYebG7J$keVdu!sSZDnU?!^OpgnRk4? zBgPVacOubMf~HKx;w4MT_}WP3z;Tq9SKvC)?`!YgMNLf&qN1XhHHqr`<>lqHsb;6v z>VE-4s%KePS~4=2o12rlFdgwb6UbVVjuR(N;P~-O96g$fEwQnTZ0*~(XUbCDUZBGX z+G`ZQ9XIgm@&x8%4!bOPnP)+_yvrp97m2EL3nsL=Fgwc z(Au?YLEopB$h!ZvwNcQ{m+~Kp|4V#Z>)!u3{wlVp=o{Tmof^KMbQ^Sa8%dAk%_VVh z@i)Y9QuQsy6IxGLNazhmR1}TGCOIKCB{7C%#Kh1@;*b&lFUg9xfovNANkCRYK$4J^ zl!V-Sl7gI+fTSTO-AMA%98miCr=Q+_2mbU9(wtjo`VB>1|6w>g#1rQ{yihn|G%k$t zMe*2)D47s|(qE_Ga^P>cGA$StGv}dl&H_}0hU5C82;5k*0yWE{a64)(YS%{NUi2nB z*c69{aXavM$1XhGm567F2l3)y3hGl*(UAHlUT2)Z+pKKh)M;3AdEaHf`u~n!{O6xv zS}H2RvaK>Kl~iD*tO_fYcCc1egLOM~*r>IKjk*T9YG|UXrWS0qv|+2Q13R6LuW5FWzDQH~Y5-zSske?|2sL!~8XyUSYB7e`?Gh338!#=S&S2 z>k(@nQ%;cAvmBW7ddgLU#iA3B=5zt4Icf5LGbg=5`;*C<W1}DrD|vBr=CEJt%ZT=C zJuaVb$v|3ki?fo%D{oB>2B}HGoy5qDATcHs6IWKO{pV}8&K*OJXpVb(X-w0VgCB_# znM!gRE7DViY*-}CE+kxpTZhx9TOo2zG?5W|L1R-WUrMvM@(AWB(Ab)K9!GTAr)##_ zRpHJu>;zNUMhr9caw zYaX*tlxik_8Xo}PL9TFauYhoqc8D}@kJXl%2s2fOG4X+(&dm5k>tDarT>i9N!^@ZO z>g9yq8VZQA)WAAxEo|tjgDD28Fjtks)yt)yWSEzi$JnB#Oqs&?&YBi#34dDe>66Fk z-nk<@J18=|H`{eYoP#cWxvJoIR7XYWrKZi}^5x5n4>Bld3f$b>U}tBChs35XNG;`0 z>rp?DmAWD(6S?CYI$?*S9(Hx(VxmDim?%nN!-}PX=Hct>OYEG#F#b>K7jkv&i}A!> zD@fnMpVp}-BM@r9J)D)D!m&OHOlTU%Qj)LwRz z_(qzh@8wV1x_kRJrcWmSQ_ts|&Odzki1FXdoH>*6xi;n5^tdJbX$%kbO;b68f`Z`h|0|ix6Br*r@a);3et-<( zSE6=nO4JS=8XDS^-ABhQ;ZG}{J9mz;&)eJEleXt${U6bce~mu(YuBonzE4O0| zynQXTls|3nHW_a-Nqhl~-=KE+fddC((4aw#Ux%(O-rn8}&ad&N_rHa|pk3-KN=Zop zozFBcE-q%Cx!`_t^6%l_oc6y~rX~E}l@;_^Yv!csuO?92;@QE&Q83&a=e@_Fc$_~j z`3IpaXa>q>%thtgg{Tf&iklIUxc&PY)UMlr`y1o%Xlp#4ChR3YyO@OfLr3u{Edy^) zoMLQ-ge#S!IqCnLKLOdAecrUK=E(m)QARLd9?b);IS|qy#Cb<77W)w)Vsl{=drPa5 zfG@REP_u+4A%UHO-}t-sz4{Tz{aiI5L@m?&{B1sb+vzKcd%8Q^ABqi!ka z)22DmhYLQePhuKY&G2%^920f&U7?Aw-E8pU`Lp-cGBYztEKdb<{;B#TwkL|}27a#2 zSY@q^^|qZb$+a79-KZupHRqYw4ytpPmX=a|{3HIfK5d+STa0lq$1b8vhTG_&yOkM! z88HI;_V358-Fq;D=n`M5PusY1u^67l9Wj8!-<~BgYcw8g>Cy-U5`BT{1YfI9+cr)=!M1JNhN|jnLG{n_r@9UK zEpG)g2Zq6wmj=yg?r - + 1.0 MyGrasshopper.1 MyGrasshopper.1 Authors @@ -31,7 +31,7 @@ - + @@ -48,6 +48,7 @@ + diff --git a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1Plugin.cs b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1Plugin.cs new file mode 100644 index 0000000..f54028a --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1Plugin.cs @@ -0,0 +1,28 @@ +using System; +using Rhino; + +namespace MyGrasshopper._1 +{ + /// + /// Every RhinoCommon .rhp assembly must have one and only one PlugIn-derived + /// class. DO NOT create instances of this class yourself. It is the + /// responsibility of Rhino to create an instance of this class. + /// To complete plug-in information, please also see all PlugInDescription + /// attributes in AssemblyInfo.cs (you might need to click "Project" -> + /// "Show All Files" to see it in the "Solution Explorer" window). + /// + public class MyGrasshopper__1Plugin : Rhino.PlugIns.PlugIn + { + public MyGrasshopper__1Plugin() + { + Instance = this; + } + + ///Gets the only instance of the MyRhino__1Plugin plug-in. + public static MyGrasshopper__1Plugin Instance { get; private set; } + + // You can override methods here to change the plug-in behavior on + // loading and shut down, add options pages to the Rhino _Option command + // and maintain plug-in wide options in a document. + } +} \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs index 970639c..a09d85d 100644 --- a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs +++ b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs @@ -1,15 +1,35 @@ using System; +using System.Reflection; using Grasshopper.UI; using Grasshopper.UI.Icon; namespace MyGrasshopper._1 { - public sealed class MyGrasshopper__1PluginInfo : Grasshopper.Framework.StandardRmaPlugin + public sealed class MyGrasshopper__1PluginInfo : Grasshopper.Framework.Plugin { + static T GetAttribute() where T : Attribute => typeof(MyGrasshopper__1PluginInfo).Assembly.GetCustomAttribute(); + public MyGrasshopper__1PluginInfo() : base(new Guid("cd826b9b-8dbe-4c31-aac1-6fc7ea2bcfb7"), - new Nomen("MyGrasshopper.1 Info", ""), - AbstractIcon.FromResource("MyGrasshopper__1Plugin", typeof(MyGrasshopper__1PluginInfo))) - { } + new Nomen( + GetAttribute()?.Title, + GetAttribute()?.Description), + typeof(MyGrasshopper__1PluginInfo).Assembly.GetName().Version) + { + Icon = AbstractIcon.FromResource("MyGrasshopper__1Plugin", typeof(MyGrasshopper__1PluginInfo)); + } + + public override string Author => GetAttribute()?.Company; + + public override sealed IIcon Icon { get; } + + public override sealed string Copyright => GetAttribute()?.Copyright ?? base.Copyright; + + // public override sealed string Website => "https://mywebsite.example.com"; + + // public override sealed string Contact => "myemail@example.com"; + + // public override sealed string LicenceAgreement => "license or URL"; + } } \ No newline at end of file diff --git a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs index b6e53de..b98d9b9 100644 --- a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs +++ b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper__1Component.cs @@ -26,9 +26,10 @@ public MyGrasshopper__1Component(IReader reader) : base(reader) { } /// protected override void AddInputs(InputAdder inputs) { - inputs.AddPlane("Centre Point", "Cn", "Arc base plane.").Set(Plane.WorldXY); - inputs.AddPoint("Start Point", "Pa", "Arc start point.").Set(new Point3d(1, 0, 0)); - inputs.AddPoint("End Point", "Pb", "Arc end point").Set(new Point3d(-2, 2, 0)); + inputs.AddPlane("Plane", "P", "Base plane for spiral").Set(Plane.WorldXY); + inputs.AddNumber("Inner Radius", "R0", "Inner radius for spiral").Set(1.0); + inputs.AddNumber("Outer Radius", "R1", "Outer radius for spiral").Set(10.0); + inputs.AddInteger("Turns", "T", "Number of turns between radii").Set(10); } /// @@ -36,8 +37,7 @@ protected override void AddInputs(InputAdder inputs) /// protected override void AddOutputs(OutputAdder outputs) { - outputs.AddArc("Clockwise Arc", "Cw", "Arc from start to end, travelling clockwise in the base plane."); - outputs.AddArc("Anti-clockwise Arc", "Aw", "Arc from start to end, travelling anti-clockwise in the base plane."); + outputs.AddCurve("Spiral", "S", "Spiral curve"); } /// @@ -47,29 +47,61 @@ protected override void AddOutputs(OutputAdder outputs) /// to store data in output parameters. protected override void Process(IDataAccess access) { - access.GetItem(0, out Plane plane); - access.GetItem(1, out Point3d pa); - access.GetItem(2, out Point3d pb); + // First, we need to retrieve all data from the input parameters. + // When data cannot be extracted from a parameter, we should abort this method. + if (!access.GetItem(0, out Plane plane)) return; + if (!access.GetItem(1, out double radius0)) return; + if (!access.GetItem(2, out double radius1)) return; + if (!access.GetItem(3, out int turns)) return; - pa = plane.ClosestPoint(pa); - pb = plane.ClosestPoint(pb); + // We should now validate the data and warn the user if invalid data is supplied. + if (radius0 < 0.0) + { + access.AddError("Inner radius must be bigger than or equal to zero", ""); + return; + } + if (radius1 <= radius0) + { + access.AddError("Outer radius must be bigger than the inner radius", ""); + return; + } + if (turns <= 0) + { + access.AddError("Spiral turn count must be bigger than or equal to one", ""); + return; + } - access.VerifyNonCoincident(plane.Origin, pa, "centre", "start point"); - access.VerifyNonCoincident(plane.Origin, pb, "centre", "end point"); + // We're set to create the spiral now. To keep the size of the SolveInstance() method small, + // The actual functionality will be in a different method: + Curve spiral = CreateSpiral(plane, radius0, radius1, turns); - var radius = plane.Origin.DistanceTo(pa); - var sb = (pb - plane.Origin); sb.Unitize(); - pb = plane.Origin + sb * radius; + // Finally assign the spiral to the output parameter. + access.SetItem(0, spiral); + } + + Curve CreateSpiral(Plane plane, double r0, double r1, Int32 turns) + { + Line l0 = new Line(plane.Origin + r0 * plane.XAxis, plane.Origin + r1 * plane.XAxis); + Line l1 = new Line(plane.Origin - r0 * plane.XAxis, plane.Origin - r1 * plane.XAxis); + + Point3d[] p0; + Point3d[] p1; + + l0.ToNurbsCurve().DivideByCount(turns, true, out p0); + l1.ToNurbsCurve().DivideByCount(turns, true, out p1); + + PolyCurve spiral = new PolyCurve(); - plane.ClosestParameter(pa, out var ua, out var va); - var α = Math.Atan2(va, ua); + for (int i = 0; i < p0.Length - 1; i++) + { + Arc arc0 = new Arc(p0[i], plane.YAxis, p1[i + 1]); + Arc arc1 = new Arc(p1[i + 1], -plane.YAxis, p0[i + 1]); - var circle = new Circle(plane, radius); - var arc0 = new Arc(pa, -circle.TangentAt(α), pb); - var arc1 = new Arc(pa, circle.TangentAt(α), pb); + spiral.Append(arc0); + spiral.Append(arc1); + } - access.SetItem(0, arc0); - access.SetItem(1, arc1); + return spiral; } #else /// diff --git a/Rhino.Templates/content/CSGrasshopper2/Properties/AssemblyInfo.cs b/Rhino.Templates/content/CSGrasshopper2/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..e76b049 --- /dev/null +++ b/Rhino.Templates/content/CSGrasshopper2/Properties/AssemblyInfo.cs @@ -0,0 +1,22 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Rhino.PlugIns; + +// Plug-in Description Attributes - all of these are optional. +// These will show in Rhino's option dialog, in the tab Plug-ins. +[assembly: PlugInDescription(DescriptionType.Address, "")] +[assembly: PlugInDescription(DescriptionType.Country, "")] +[assembly: PlugInDescription(DescriptionType.Email, "")] +[assembly: PlugInDescription(DescriptionType.Phone, "")] +[assembly: PlugInDescription(DescriptionType.Fax, "")] +[assembly: PlugInDescription(DescriptionType.Organization, "")] +[assembly: PlugInDescription(DescriptionType.UpdateUrl, "")] +[assembly: PlugInDescription(DescriptionType.WebSite, "")] + +// Icons should be Windows .ico files and contain 32-bit images in the following sizes: 16, 24, 32, 48, and 256. +[assembly: PlugInDescription(DescriptionType.Icon, "MyGrasshopper._1.Icons.plugin.ico")] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +// This will also be the Guid of the Rhino plug-in +[assembly: Guid("ee4e2b39-d96b-4e4c-8f9d-9b6561e61b64")] diff --git a/Rhino.VisualStudio.Windows/Rhino.VisualStudio.Windows.csproj b/Rhino.VisualStudio.Windows/Rhino.VisualStudio.Windows.csproj index 4f0465f..5fb0500 100755 --- a/Rhino.VisualStudio.Windows/Rhino.VisualStudio.Windows.csproj +++ b/Rhino.VisualStudio.Windows/Rhino.VisualStudio.Windows.csproj @@ -94,6 +94,8 @@ + + @@ -214,6 +216,7 @@ + diff --git a/Rhino.VisualStudio.Windows/Templates/CSGrasshopper2/grasshopper2.vstemplate b/Rhino.VisualStudio.Windows/Templates/CSGrasshopper2/grasshopper2.vstemplate new file mode 100755 index 0000000..f9d7d5f --- /dev/null +++ b/Rhino.VisualStudio.Windows/Templates/CSGrasshopper2/grasshopper2.vstemplate @@ -0,0 +1,43 @@ + + + + Grasshopper2 Plug-In for Rhino 3D (C#) + Build Grasshopper2 components for Rhino 3D in C# + 1 + + 20 + + Grasshopper2.Component.CS + CSharp + Windows + macOS + Desktop + Rhino + CSharp + icon.ico + MyGrasshopper2PlugIn + + true + true + Enabled + true + + + + + + + + + + + + + Rhino.VisualStudio.Windows, Version=8.15.0.0, Culture=neutral, PublicKeyToken=null + Rhino.VisualStudio.Windows.Wizard.Grasshopper2Wizard + + + Microsoft.VisualStudio.TemplateEngine.Wizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + Microsoft.VisualStudio.TemplateEngine.Wizard.TemplateEngineWizard + + \ No newline at end of file diff --git a/Rhino.VisualStudio.Windows/Templates/CSGrasshopper2/icon.ico b/Rhino.VisualStudio.Windows/Templates/CSGrasshopper2/icon.ico new file mode 100755 index 0000000000000000000000000000000000000000..dc15579c750d8c4d8643bb4248d930017e2a2b55 GIT binary patch literal 50192 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 literal 0 HcmV?d00001 diff --git a/Rhino.VisualStudio.Windows/Wizard/Grasshopper2Wizard.cs b/Rhino.VisualStudio.Windows/Wizard/Grasshopper2Wizard.cs new file mode 100755 index 0000000..b4b9046 --- /dev/null +++ b/Rhino.VisualStudio.Windows/Wizard/Grasshopper2Wizard.cs @@ -0,0 +1,11 @@ +using Eto.Forms; + +namespace Rhino.VisualStudio.Windows.Wizard +{ + public class Grasshopper2Wizard : EtoWizard + { + protected override Control CreatePanel() => new Grasshopper2OptionsPanel(false); + + protected override BaseWizardViewModel CreateViewModel() => new Grasshopper2OptionsViewModel(); + } +} \ No newline at end of file diff --git a/Rhino.VisualStudio/Grasshopper2OptionsPanel.cs b/Rhino.VisualStudio/Grasshopper2OptionsPanel.cs new file mode 100755 index 0000000..bdb2bdb --- /dev/null +++ b/Rhino.VisualStudio/Grasshopper2OptionsPanel.cs @@ -0,0 +1,110 @@ +using Eto.Forms; +using Eto.Drawing; +using System; +using Rhino.VisualStudio.Controls; + +namespace Rhino.VisualStudio +{ + public class Grasshopper2OptionsPanel : BaseRhinoPageView + { + public Grasshopper2OptionsPanel(bool showProjectName) + { + var spacing = new Size(6, 6); + var padding = new Padding(8); + + var projectNameTextBox = new TextBox(); + projectNameTextBox.TextBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.ProjectName); + + var nameValid = new Label { TextColor = Global.Theme.ErrorForeground }; + nameValid.BindDataContext(c => c.Visible, (Grasshopper2OptionsViewModel m) => m.IsProjectNameInvalid); + nameValid.BindDataContext(c => c.Text, (Grasshopper2OptionsViewModel m) => m.ProjectNameValidationText); + + var pluginDisplayNameTextBox = new TextBox(); + pluginDisplayNameTextBox.TextBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.PlugInDisplayName); + + var componentClassNameTextBox = new TextBox(); + componentClassNameTextBox.TextBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.ComponentClassName); + + var provideCommandSampleCheckBox = new CheckBox { Text = "Provide sample code", ToolTip = "Check to provide a sample implementation for the component" }; + provideCommandSampleCheckBox.CheckedBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.IncludeSample); + + + var componentNameTextBox = new TextBox(); + componentNameTextBox.TextBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.ComponentName); + + var componentChapterTextBox = new TextBox(); + componentChapterTextBox.TextBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.ComponentChapter); + + var componentSectionTextBox = new TextBox(); + componentSectionTextBox.TextBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.ComponentSection); + + var componentInfoTextBox = new TextBox(); + componentInfoTextBox.TextBinding.BindDataContext((Grasshopper2OptionsViewModel m) => m.ComponentInfo); + + // rhino location + var rhinoLocation = new FilePicker(); + rhinoLocation.Filters.Add(new FileFilter("Rhino.exe", "Rhino.exe")); + rhinoLocation.BindDataContext(c => c.FilePath, (BaseLocationWizardViewModel m) => m.ExecutableLocation); + + var rhinoLocationInvalid = new Label { Text = "Could not find Rhino.exe at the specified location.", TextColor = Global.Theme.ErrorForeground }; + rhinoLocationInvalid.BindDataContext(c => c.Visible, (BaseLocationWizardViewModel m) => m.IsLocationInvalid); + + + // styles + Styles.Add(null, g => g.Padding = padding); + + // layout + var layout = new DynamicLayout { DefaultSpacing = spacing, Padding = padding }; + + layout.AddCentered("Adds the first component that has an icon to the toolbar."); + // top + layout.BeginVertical(); + if (showProjectName) + { + layout.AddRow("Project name", new TableLayout(projectNameTextBox, nameValid)); + } + layout.AddRow("Plug-In display name", pluginDisplayNameTextBox); + layout.AddRow("Component class name", componentClassNameTextBox); + layout.EndVertical(); + + // type group + layout.BeginVertical(); + layout.Add(new PanelSeparator("First component"));; + layout.AddRow("Name", componentNameTextBox); + layout.BeginHorizontal(); + layout.Add("Chapter"); + layout.BeginVertical(); + layout.BeginHorizontal(); + layout.Add(componentChapterTextBox, xscale: true); + layout.Add("Section"); + layout.Add(componentSectionTextBox, xscale: true); + layout.EndHorizontal(); + layout.EndVertical(); + layout.AddRow("Description", componentInfoTextBox); + + layout.EndVertical(); + + layout.BeginVertical(); + layout.Add(new PanelSeparator("Options")); + AddRhinoVersion(layout); + AddBuildYakPackage(layout); + AddIncludeVSCode(layout); + layout.Add(provideCommandSampleCheckBox); + layout.EndVertical(); + + AddWindowsUI(layout); + + // AddRhinoLocation(layout); + + Content = layout; + + var information = new DynamicLayout(); + information.AddSpace(); + AddRhinoDownloadInfo(information); + information.AddSpace(); + + Information = information; + + } + } +} \ No newline at end of file diff --git a/Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs b/Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs new file mode 100755 index 0000000..e5fdef5 --- /dev/null +++ b/Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs @@ -0,0 +1,135 @@ +using Eto.Forms; +using System.Collections.Generic; +using System.Linq; + +namespace Rhino.VisualStudio +{ + public class Grasshopper2OptionsViewModel : BaseDesktopWizardViewModel + { + string _componentClassName; + + public override string ProjectTitle => "New Grasshopper2 Plug-In"; + + public string ComponentClassName + { + get => _componentClassName ?? Utility.GetSafeName(ProjectName, "Component", "Component", "Components", "Plugin", "Addin"); + set + { + if (Set(ref _componentClassName, value)) + { + OnPropertyChanged(nameof(IsValid)); + } + } + } + + string _componentName; + public string ComponentName + { + get => _componentName ?? ComponentClassName; + set => Set(ref _componentName, value); + } + + string _componentChapter; + public string ComponentChapter + { + get => _componentChapter; + set => Set(ref _componentChapter, value); + } + + string _componentSection; + public string ComponentSection + { + get => _componentSection; + set => Set(ref _componentSection, value); + } + + string _componentInfo; + public string ComponentInfo + { + get => _componentInfo; + set => Set(ref _componentInfo, value); + } + + string _projectName; + public override string ProjectName + { + get => _projectName ?? string.Empty; + set + { + if (Set(ref _projectName, value)) + { + OnPropertyChanged(nameof(PlugInDisplayName)); + OnPropertyChanged(nameof(ComponentClassName)); + OnPropertyChanged(nameof(ComponentName)); + OnPropertyChanged(nameof(IsValid)); + OnPropertyChanged(nameof(IsProjectNameInvalid)); + } + } + } + + string _plugInDisplayName; + public string PlugInDisplayName + { + get => _plugInDisplayName ?? ProjectName; + set + { + if (Set(ref _plugInDisplayName, value)) + { + OnPropertyChanged(nameof(IsValid)); + } + } + } + + bool _includeSample; + public bool IncludeSample + { + get => _includeSample; + set + { + if (Set(ref _includeSample, value)) + { + if (value) + { + ComponentChapter = "Curve"; + ComponentSection = "Primitive"; + ComponentInfo = "Construct an Archimedean, or arithmetic, spiral given its radii and number of turns."; + } + } + } + } + + protected override string FindLocation(int version) => Global.Helpers.FindRhino(version); + + public Grasshopper2OptionsViewModel() + { + SetDefaults(); + } + + public override bool IsValid => + !IsProjectNameInvalid + && Utility.IsValidIdentifier(ComponentClassName); + + void SetDefaults() + { + ComponentChapter = "Category"; + ComponentSection = "Subcategory"; + ComponentInfo = "Description"; + } + + public override void Finish() + { + base.Finish(); + if (Host == null) + return; + + Host.SetParameter("ComponentClassName", ComponentClassName); + Host.SetParameter("AddonDisplayName", PlugInDisplayName); + Host.SetParameter("IncludeSample", IncludeSample.ToString()); + Host.SetParameter("ComponentName", ComponentName); + Host.SetParameter("ComponentChapter", ComponentChapter); + Host.SetParameter("ComponentSsection", ComponentSection); + Host.SetParameter("ComponentInfo", ComponentInfo); + } + + } +} \ No newline at end of file From 4efc1c3bede589dd8f8b001ec0b01a3459a38e74 Mon Sep 17 00:00:00 2001 From: Curtis Wensley Date: Tue, 17 Dec 2024 08:36:46 -0800 Subject: [PATCH 3/4] Update Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs Co-authored-by: Callum Sykes <28632338+clicketyclackety@users.noreply.github.com> --- Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs b/Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs index e5fdef5..9fb503a 100755 --- a/Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs +++ b/Rhino.VisualStudio/Grasshopper2OptionsViewModel.cs @@ -111,8 +111,9 @@ public Grasshopper2OptionsViewModel() void SetDefaults() { - ComponentChapter = "Category"; - ComponentSection = "Subcategory"; + ComponentChapter = "Chapter"; + ComponentSection = "Section"; + ComponentInfo = "Description"; } From d675fdc27b8b1a6508cb15493c8c4bc04a0696d3 Mon Sep 17 00:00:00 2001 From: Curtis Wensley Date: Thu, 19 Dec 2024 11:14:10 -0800 Subject: [PATCH 4/4] Fixups for icon file names --- .../CSGrasshopper2/.template.config/template.json | 4 +++- ...opper__1Plugin.3dm => MyGrasshopper.1Plugin.3dm} | Bin ..._1Plugin.ghicon => MyGrasshopper.1Plugin.ghicon} | Bin .../CSGrasshopper2/MyGrasshopper.1PluginInfo.cs | 2 +- build/GenerateTemplates.proj | 2 +- 5 files changed, 5 insertions(+), 3 deletions(-) rename Rhino.Templates/content/CSGrasshopper2/Icons/{MyGrasshopper__1Plugin.3dm => MyGrasshopper.1Plugin.3dm} (100%) rename Rhino.Templates/content/CSGrasshopper2/Icons/{MyGrasshopper__1Plugin.ghicon => MyGrasshopper.1Plugin.ghicon} (100%) diff --git a/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json b/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json index 0162737..9fa9008 100755 --- a/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json +++ b/Rhino.Templates/content/CSGrasshopper2/.template.config/template.json @@ -127,7 +127,9 @@ { "condition": "ComponentClassName == 'MyGrasshopper__1Component'", "rename": { - "MyGrasshopper__1Component.cs": "MyGrasshopper.1Component.cs" + "MyGrasshopper__1Component.cs": "MyGrasshopper.1Component.cs", + "MyGrasshopper__1Component.3dm": "MyGrasshopper.1Component.3dm", + "MyGrasshopper__1Component.ghicon": "MyGrasshopper.1Component.ghicon" } } ] diff --git a/Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Plugin.3dm b/Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper.1Plugin.3dm similarity index 100% rename from Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Plugin.3dm rename to Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper.1Plugin.3dm diff --git a/Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Plugin.ghicon b/Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper.1Plugin.ghicon similarity index 100% rename from Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper__1Plugin.ghicon rename to Rhino.Templates/content/CSGrasshopper2/Icons/MyGrasshopper.1Plugin.ghicon diff --git a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs index a09d85d..0d53186 100644 --- a/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs +++ b/Rhino.Templates/content/CSGrasshopper2/MyGrasshopper.1PluginInfo.cs @@ -16,7 +16,7 @@ public MyGrasshopper__1PluginInfo() GetAttribute()?.Description), typeof(MyGrasshopper__1PluginInfo).Assembly.GetName().Version) { - Icon = AbstractIcon.FromResource("MyGrasshopper__1Plugin", typeof(MyGrasshopper__1PluginInfo)); + Icon = AbstractIcon.FromResource("MyGrasshopper.1Plugin", typeof(MyGrasshopper__1PluginInfo)); } public override string Author => GetAttribute()?.Company; diff --git a/build/GenerateTemplates.proj b/build/GenerateTemplates.proj index 620aab5..ba208bb 100644 --- a/build/GenerateTemplates.proj +++ b/build/GenerateTemplates.proj @@ -207,7 +207,7 @@ - +