From 3656f45f558e8901d450757bdd0f00ef00626e93 Mon Sep 17 00:00:00 2001 From: Bridget McErlean Date: Thu, 11 Mar 2021 13:10:27 -0500 Subject: [PATCH] Partially revert adding credentials to VSL (#3561) We are no longer adding the Credentials field to the VSL so this reverts part the change that added it (#3409). The original PR also added the `snapshot-location set` command. This command only included options for setting the credential but is part of the work for #2426. Due to this, the command has been left in place (with the credentials option removed) but has been hidden. Signed-off-by: Bridget McErlean --- changelogs/3409-nrb | 2 -- .../velero.io_volumesnapshotlocations.yaml | 18 ----------- config/crd/crds/crds.go | 2 +- .../velero/v1/volume_snapshot_location.go | 9 +----- pkg/apis/velero/v1/zz_generated.deepcopy.go | 5 --- pkg/cmd/cli/snapshotlocation/create.go | 31 +++++-------------- pkg/cmd/cli/snapshotlocation/set.go | 24 ++++---------- 7 files changed, 15 insertions(+), 76 deletions(-) delete mode 100644 changelogs/3409-nrb diff --git a/changelogs/3409-nrb b/changelogs/3409-nrb deleted file mode 100644 index 69350463d..000000000 --- a/changelogs/3409-nrb +++ /dev/null @@ -1,2 +0,0 @@ -Add Credential field to Volume Snapshot Locations for multiple credential support. -Add `velero snapshot-location set` command to edit credentials on a Volume Snapshot Location. \ No newline at end of file diff --git a/config/crd/bases/velero.io_volumesnapshotlocations.yaml b/config/crd/bases/velero.io_volumesnapshotlocations.yaml index a062da708..e6bb7705d 100644 --- a/config/crd/bases/velero.io_volumesnapshotlocations.yaml +++ b/config/crd/bases/velero.io_volumesnapshotlocations.yaml @@ -50,24 +50,6 @@ spec: type: string description: Config is for provider-specific configuration fields. type: object - credential: - description: Credential contains the credential information intended - to be used with this location - properties: - key: - description: The key of the secret to select from. Must be a valid - secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key - type: object provider: description: Provider is the provider of the volume storage. type: string diff --git a/config/crd/crds/crds.go b/config/crd/crds/crds.go index def83f518..8bbf2779e 100644 --- a/config/crd/crds/crds.go +++ b/config/crd/crds/crds.go @@ -39,7 +39,7 @@ var rawCRDs = [][]byte{ []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec\xbd}s\xe46r0\xfe\xbf?\x05J\xe7\xfaI\xcaiF\xbbw\xc9U\xa2J\xfd\\:\xad\xec\xd3c\xafV\xb5\x92\xd7ϕ\xcfq0d\xcf\f\"\x12\xe0\x01\xe0H\x938\xdf\xfd)4\x00\xbe\xccp^\x00JZ\xd9G\xa4*g͒M\xa0\xd1\xe8\xf7nЂ}\x02\xa9\x98\xe0g\x84\x16\f\x1e5p\xf3\x97\x1a\xdf\xff\xab\x1a3q\xbax;\x01M\xdf~q\xcfxzF.J\xa5E\xfe\x11\x94(e\x02\xef`\xca8\xd3L\xf0/r\xd04\xa5\x9a\x9e}A\b\xe5\\hj~V\xe6OB\x12\xc1\xb5\x14Y\x06r4\x03>\xbe/'0)Y\x96\x82\xc4/\xf8\xef/ތ\xff8~\xf3\x05!\x89\x04|\xfd\x8e\xe5\xa04͋3\xc2\xcb,\xfb\x82\x10Ns8#\x12\x94\x16\x12\xd4x\x01\x19H1f\xe2\vU@\x82\xdfNS\x9c\x10\xcdn$\xe3\x1a\xe4\x85\xc8\xca\xdcNdD\xfe\xcf\xed\x87\xeb\x1b\xaa\xe7gdl^\x18Ohr_\x16\xd74\a\x9cg\n*\x91\xac\xd08\x1b\xf3+\x11Sb\x9f!Z\xf8ϒ\xa9\x149>og\xf3g|\x00\u007f\xd0\xcb\x02ΈҒ\xf1\xd9\xda\a5ե\x1a\x17s\xaa:\xbe\xf6\xd1\xc1\xb6O\x11U&sB\x15\xb9\xe27R\xcc$(uz!\xf2\"\x03\ri\xe3ӷ\xf8\xf4\xbe\x9fV\x9aJ]\xe1t}\x0e\xe6\x9f\xc8\xc3\x1c8\xd1s\xa8V+\n\x90\xb8\x1b\xe4\x81*\x820V\xe7P\xfdb'\x91R\r\x1b\xa6\x90\xd8E4\xf76n\x1eI\a6\xda\x18\xda9\x17\x90RH\xb5\xfe\xf9\vQrmv\x9ef\x19\xb1\x0f\x91\x19p\xf3uHIZ\x1a\f7g֘\xc1e\r\xd2~ސ\xe0\f\xe4\x86\x19\xfd\xab\xd9\x04d\xf6\xb7\x8e\xd7\xef\xb9\x01\xdf5\xdf9!lZm@zB\xa6,\xd3 Wvb\xdbr\xc5\xf6\x9d苂ݒʌ\x9c\xead~\xf9h4\x10U\xfb\x1a\xf7\xc2\xc6\xea\xabVq\xf3\xbak[\x98n\x85J\xd0xb\x12rk\x92\xdd!\x06\xeb_\x8c\xbeGί\xdfA\xba\x19)d\x1f\n[[\xc2\xf9\xca4\x9b\x9fuz\xe8~\vpJJ\xa5\xc3[\xf3\xfa\x84Pr\x0fK\xab]\x18c\x1f\xbdoB\xe2\xc3;!J@\x1b\x1f\t\xea\x1e\x96\bę\xed;\xde\xddo\xeb\xed\xb8\x87\xe5\xee\x87V\xd0ff\xe3\f,\x8b?\xf3\x03\"\x00M\xbe}QF\xd0\xe9\xe29̮E\x91}Y\x84\x1f\x1e\xdb\xc1˫\xb6\xa9\xe1\x90\u008dP\xa6\x91A\x19\xa8\xe8\xa9ТJ\x1e\xd9\v\xee\x04\xa6\x86\x89$\x82+\x96B\x95va\xf7\x89\ts즔e\xe5zТk\x84\x99\x81\x1c\x13J\x82\xb1\xfa\xc1\xbe\xd7\xf0\xb1\xcd\xc5C\x1b1{.}N\x17@ؔ0M\x80'f/@Z\x06\x8b\x1fpH@\x94\xec\xd4c\xec؇\x19\x9b\x01\xbc\xcc\xf7Y\xf8\b\xcf%\xe3[\xdcI͇\xbf\xa6l\x9b3Џ\xa0m24\x16{\x00~\xa8\xdf}\x81\x03P3\x83\xad\xcaH=&@>\x02M\x97\xfe\x14P\xad\x8d\x19\x88;.\x88,y\x93\x8b=1\xfd\xefoC\xb9\xef?\x95y\xc48۹\x91+\xdem\xa6\x9bڇ\x01\xf0lڇ\x01^\x89\xa2p\xf7\xc6U\xebu#\x14\xbcҊ\xb3\xae(doMd\x02\xc6\x00\x84Ժ\x8b\nQ\x99\xf96\xb5\xa43\x9c۹\xae\xfd\x95\x89\x15G\xa83\xe5\x9aIW\rB\xdf\xc7_i\xc7R\x94\xe4\x81r\xedI\xbbR\xab\n\xb1\x17m\x87\xed\xa3\x1dT\xce\xf6~v-\xa3\xcb+\x8d>\xb1\n\xb8\x96KL\xf9\xd9o\xbav\x18\xc3/\x15ɽQ\x11r:\x83\xc3CE.\u07bf\xf3\xfa\x82a\xff{sw;\x98\x8d1\x16R,XjT\x99OT2:Ɍ\x819\x05\t<\x01E\xbe<\xfat\xfe\xf1\xe7\xeb\xf3\xf7\x97\xc7\x01\xa0\x8dQ\n\x8f\x05\xe5\x86\xe2J\xe5\xa5q\xb5\xdff\xf2\xc0\x17L\nnP\x13\x82\x87\xab)\xa1d\xe1g\x9aTyPư\xc9\x16\x90\x9e\xb8\xf8\x88[A\b>,\x9bd\xbc(\xb5\xf7$>\xb0,\xc3,+\x9e\xcc)\x9f\x19,\xdd\xcdC\x806\xf0GԒk\xfah\xe6\x8c*\xa4Jh\x01)\xd2/\xa1\x01 SQ\x9a\xa5\u007f\xf9\xe5\tapF\xbel|bL.\x1d\xd4z\v\x03 \xe3j9,@Z\x1d\xd7n\xe0\t\x910\xa32\xcd@)Á\x1e\xe6\xa0簟\xd3\xd2\x0e\xeb\xfap[\x06\xde\xebi\xa8\xaf+\x93-\x00pG\x96\xdb}\x95\x929f\xe24\x15\x89:\xd5TݫSƍH\x19\xa5T\xd3Q\x83\t\x9dZ\x890r\xd2i\xe4m\xbcQE\xac\xa7\xbf\x93%\xe7\x8c\xcfF\xb4z\x8a\xf1\x11\x1d\xa99d\xd9\xe1\xde\xd3\r`\x9d\x0ema\xd6X\xf3\xa5\xfd]\xd5A\x86\xb2\x1dm\xfevY\xb13\xfb\xd51\xb9\x16zs&\xd1\xe6Q1r\xc4븓\xe3]^\xdf}\xfc\xeb͇\xab\xeb\xbb0F\xd7d\x91\x9b\x19_\x00\xccn\x16\xd9\xc1\xf8\x02\x8f\xc9F\x16\xd9f|\x01Pw\xb2H\xc7\xf8\x828\xe5N\x16\x19)8\xb6\xb1\xc8\x06\xe3\v\x99\xeb\x1e,\x12\xd7\x10\x00s`\x91\xff`,\x12\xf8\"\x92=~\xe7\xd4\xf6\xc6Q\xae\xf69D4k\x811^\xc6\xdb\\\xa2\x17q\x04c\xbb\xed\x14\xe2\x8bO\xb4\x1d\xc2\xe6\xcde\x06\xc0%5\xe9\xfbLU\x14\x04\x95\x05\x14B\xf0\xe1ڽ\x1d\xdb#\x1bݣ\xb3\x14\xcd\xea\xf8qx \r\\\x8c\xc9{\x17ӥ\xe4\xe2\xe7\xabw\x97\xd7wW__]~\fA\x06\x89=#ć\xe6{\xa1\xe4\xf0\xe9L\n;6\x18\x16\x85\x84\x05\x13e\x95\x9e\x1b\f\xb7\xf3x\xae\x9d\xb6\xf0\xe9b\xe0`I\x14\xc8\x05K\xa0\xfb3\xa1\xfb\xb9\x87\r\x14\f\xb1K!h\x89\xf9`\x88O\xaa\x16ر\x87r\x10\f\xf3\x19\xac(;v\xdbR\xc1 k\xc5b\x83\xba\x10\f\x11Ջw0\xa5ef\xfd\x13\a\a\xe3\xfd\xa5\xb5\x1d\xfd\xd8\xcb\xd7R\xec\xe5@n\x8e\x16\x8b\xb9\xb5\xc5\x1b\xdew\xfa\x14\x8c\xf7Х\u05f5\x84\xab5 \"`f%x\x8b# 7\xa7\x1e\xb1\xf2\x8c\xd80ڔ\xcd\xde\xd3\xe2[X~\x84i8\x80Udc\xe6\x9dKV\xc3\x02\xc3\b\x88\xc4\xc8u;\xadp\xd6\xd7\x0f\x1fd\xff|ĮѮ\u007fvY\x93\xa8\x99\x19\xb4\xc4,\x86\xf49@~\xc4h.~\xb4\xc5uS\x85q\xbc/zY\xfb\x9a\x1e\x89\xe0\t\x14Z\x9d\x8a\x85\x91\x92\xf0p\xfa 佱%\fg\x1f\xd9H\x80:\xc54\xfc\xd3\xdf\xe1\xffD\xcf\xe8\xeeû\x0fg\xe4V\xabዷ\a\x9fM\x9d\x98\xfa%>\xc9\x16 \xae\x9cJ\x81\x90\xe3%\x88W\xb4\xbc}Z\xe5\\E\x83<\xbf\xb9\xf2\xad5>\x13\xba\xfbɏj\xab^Z\x8a\xf84ү\x9fA\x9ax\xd8q\xbaϴ\xed\xb29\xb3\xf9\xd3\xfb\xd4\xcbm\x1e\x19\xc3\x0e\x1c\x94\xa7u\x17\x8e#\xfb\xe38)\xca8N\xec\xde\xcf!\x17ry\xe2\xff\x84b\x0e9H\x9a\x8d\x94\x16\x92\xce\"ټ\x9f&N\xaf\xfe\xcb~,\x8e37\x16\xbf>\xcbpg\x0eq\u07bc\xa4\x94\xc6\xcaȖ^\xfeC\xfaY$OE1]M@\xf6\x1dm\x92\xaeSQ\xfbXh5\x8f@'\xc7Bde\x0e\xea\xa4\xd2\xf2\xa3\xc1\x1ah\xc0\x17dA\xa5\xfal\xb6J\xca\x16L\xed\x97<\xd95(_~\x88b>\x04\xf9\xe7jۭ>Pz \xa1\xd3\xe4\xf2Eע\xd4E\x19o!M\x85̩\xae\xe2\x12\x8f\x85P\xe8\xd8\xf4\x8d)\xa2\x01\xb7\xf4\x95\xb7\a\x91p\n\xaa5H~F\xfe\xe3\xe8o\xbf\xffet\xfc\xd5\xd1яoF\xff\xf6\xd3\xef\x8f\xfe6\xc6\xff\xf8\xa7㯎\u007f\xf1\u007f\xfc\xfe\xf8\xf8\xe8\xe8\xc7o\xdf\u007fsws\xf9\x13;\xfe\xe5G^\xe6\xf7\xf6\xaf_\x8e~\x84˟\xf6\x04r|\xfc\u0557\x91\x13~\x1c\xd5>\x8c\x11\xe3z$\xe4\xc8n\xfd\x8er\xe9m\xc3o\xc7\xd3\xf0\x9d\x8f^\xa7\xe8'JIS\xe7\xfaL\f\xa2\x9fz\xd4c\xf9\xbd\xb4#\x05\x89\x04\xfd\xba|\xaevN\x8d\x1a\x88CU\xb7\xb6\xf8\r\xb8a\xfb\x9ax\x16=\xb5\x8d\x81\u0379\b\x86`\xfbx\xa7\xa8me\xe8\xe1\xdfC\xb0\xffߏ\xc1M<\xb8\x89\x9b\xe3\xb7\xeb&\xbe\xb5ge\xf0\x11\u007f\x1e\x1fq\xe4\xab1\xab\x1c!S\nI\x83\x8a\x99[T\xbeWX`\xba3\xe7\xabn\x96D\nQ\x94\x19ձ\xf1\xe9\xcd))c/\x00cr_\xea\x8c[\x1bD\xcf{\xe7\x1b\x9dg\x19a܊<\x9c\x94O\x03\x91`m{B\x15\t:D\xb0\x00\xae\xeb>ӭBIls\xcd\xf8lL~\x98\a\xb9a\xad.\xe5\xf2&\x18'y\x99iVd@\xaav}U\xb5~\bT\xa5D°\xf33&\xa5\xd8\xf65J{\xf4\".4\xbd\x0f\x81YHH \x05\x9e\x00vu)\x1b-\b'KB9\xb9\xe4\v\xfcZ\xd0\xea\xd3\xd2&wZթ\x9aW\xebk6\xf7!\x00\xecgIA4\xc7ԥ\x80\xb4\xbb;\a1=\xb7AF\xb9\xf6\xadt\xaaXe\x88\x1a\x11\xab\x14Wy\x1a\x11\x06Ú6\\GY+m6\xb4\xa4\xbes\xb5\x85e@kYZ\xfd!\x12\xe8\xd1\xe1/\x87'\x04trL\x1e\x04?\xd4H\x02cr'\x8c\x9d\x1f\t\xb3Z\xeaR\x94\x84\x83m\xb6\x06\x8fE\xc6\x12\xa6\x83\xa5\xad\x1fFl\x13Qj\xdb>\f/\xaa\xc2\xf68\x97\x8fѻ䮯\x15S\xf2\x06ϧ\x15\xe1\x84*\x92\xb1\x05\x9c\u0381fz\x1e;_CQ\\\xf0\xd1\u007f\x83\x14\xd8z\x87;xq>\x93\xe0\bQs\xf4Α\b7\xd4Wߍ\n\xc1\x1b\xb1\xfd\r\x04\xaa~d\xed\xf6\xb7\xbb\xbb\x9bo@\xb7\x05L\x04\x1a\xccl|\xee7\xbauAN\x85\\\xbb\xbap\xf7\xe8'\x9b\xe6BE`\x84\xac߉\xa7\xb4\xedGn\x8d\x03\x1e\x13\x1f\xb3C\x8bvَˬ#W7\xb1IB\u007f\x15\xa5\xc1҄N\xb2e\xd5\xe5P\x81&\afڱI\xb6\x8c\xe3\x1e\xfe\x05h\x8a\xdd$\xb9\xd2@\x83\xba\bգ\xe7\x91j\xcc\xe3)\x94\f{\x9f\xe1\xdc-l\xcfv\xa9\xeb\xa3\xd1Z\xc7\xd1\xf9\x18O\x8f\xf5;\xc5\xca\x18\t\x85e\xacn~\x9f\x81\x01\xae\xf1\x03\x8b{\xf7\xfb\xa4G\x8e\x1c\xf5\x97I\xdaŹ\x1e\xa3\xa5\xeaQ\x8dŸE\xba9\x00\xd13뛗JzfJ\x92\xaeH\x8f\xc5Q\x0f\x88\xae*/4]ju\xf4\x84f쬎'\xc0O\x9fd?\x12\x93\x12\xd7~\xb9\x0f\x06z弓\x9e\xda\x12\x96\x82D\x96\x9c\xae\x17\x9cjAh\x92`7\xbe\xd8\xf2\\#\f\x90\x1d\xe1u\xf6A-\xc8\x1a@\xfa\x11T!B\xfd\u007f~\xf4(\x8cz\x8a\xb2\xa8'(\x8a\xea\xe8\xad&\t/\xf3\t\xc8\xd8V\x03\xbeـ\xd4-\x02Yɨ\x8c\x04}m\xa7惘^\x9d\xa0|ϛ\xb3\xd6\xc7[3\xcb?\xfd˿\xfc\xf1_\xc6\x16\x01U~f,M_\x9d_\x9f\xff|\xfb\xe9\x02\xfb\\\xc5-\xf4\x19\ua7f0\xbc>R\xa2\xb4\xe3\xd1\b\xc8`\xadT\xd8\x12*\xde\xd5b\xac\x02\xe7/\xb6\x0eYՈ=E\x9b\v\xc8P>\x03'\x89\x17J#<./i\xfbꤸ\x15\xc9}o\xeb\xf7\xf0\xee\xe2\xc6\x02\xaa\r\xe0\b\xccS\xee]\xb2\x8c/D\xb6\xb0w<\xdd]\xdc bb\xf6Ҽ\x8b>tt\x95-\xcd\xfc|\xe5\xb3M:\x89\x80\xc9\xf2\xc2\xddfF\x89\x04\x9a1\xa5Y\x82_\x8a\tz\xf9af\x19\x9e\x9d\xf2*\xac\xfc\xc3\x0f>ɥ6\xf8㏭c\b]\x06\u007f\xac\x99b\xdd\x04q\xc5?\x83V\xf1DZ\x85\xd3&\xa4\xbf\x9fn\xd0*b\xc6k\xd4*~=\x12/\xf2\xc5B\u00ad\x16E\xaf\xec\x00\v\xe2Ir\x03\xfc\xcdC\x9b\xc2\xf7$\r\xdeD{K\xe7\xf9\xcdU\xe5{\x16\xad\xa0;\xa6f\x04\xc2Te2\xf7q\x0e\x0eJ\x9db\x1a@YX\x9f\x93\xbf\",4\x94XH\xc0\xfb\x96\x04?\xa9j\xce\x11\x11\xc0폠\x93\xd0s\x81~\x11\x97\x1d\xe1\xa2j~\x93\xfa%\x1b$\x92\xaa9`wyxd\xf5u\xe8T\tnÞn\xd3X\xb0\xe9\xcc\x14)\xa8R6\xf0\xa5\xeb\x05\xd8O܈\xf4\xf00T\x05kL\x86\xcc$M\x80\x14 \x99H\t\xf6AK\xc5\x03'\x13\x98\xed\xbeEuu8z5\x93\xf4\xc7\xc0h;\x80\xd1\xd0\xeav\xbf@\xa0\x1f[\x97\x00\xb8\xe6\x1d\x89\xa8\xf3\xa3\x1d>B髝\x16\x83\xe5ZH\xfc%Ͳe}\xc8\x02\xa1\xba\xea?]m\xcd:\xb2C\xcf\x01n͋\xe7\xc7\x18R\xc6\u007f\x8b@\xebF\xfa\xc2\x1b\xb1i2\x0f\xa7\x82\xc04\xf6!\xfdf\xdf1\xa4\xdfl\x1dC\xfa\x8d\x1fC\xfa͐~3\xa4\xdf\f\xe97C\xfaMk\xbc\n\xc7ܐ~3\xa4߬\x8e!\xfd&x\f\xe97\x9bǐ~\xb3u\f\xe97[Ɛ~\x13>\x86\xf4\x9b\xb5\xf1[\v\x94\r\xe97\xbf\xd5@ِ~\xb3\xdf\xcbC\xfa\xcd\xce1\xa4\xdf\f\xe97C\xfa\xcd\x1e\xdf\x1e\xb4\x8a!\xfd淭U\xfcz$^\x8f\xfeMA/\xf9\x8c\x93\x1b)&э\x9cn06\xcd\x12\x97\xae\"\xa6Q!u?\x95q}\xc1z\xa3O\xaf\xef\x99\x11t٭\xbd\x84ۧ\xd0t\xf6K\tmb\xb1\u007f\x04\xdd7^R\xa7\x85\xb0\xff\xaf\x8e\x9f7\x02\xe7֯\xb5?ˏ\x13\xa4\xe1\x11\xf3}\xa2\xe5u\xec;4\xe1iS\xa4u\xa71\x05\xc2m%=E\xa40}Vo\xe2\x13\xa5-mOY\"\x85\x88\xb1\xb1\xa3ҕ\x06Ki\xaf\xb1=-i\xb0\x94>\xaf\xa5\xf4\xdam\x01\xcdr\x10\xa5~5f\xc0Ü%\xf3\xa6\xb6\xc1rPD\x94\xf1)\xd4F\x8fpS\xea\f\xb6=\xef\x055\xbf!\xcb!\x82\xc2\xc2\xdc\xde\x1d>\x9f\x95\xde+u\"P\xc0z\xa9\"\x94\xbc\xbb\xbe\xfd\xf9\xbb\xf3?_~7&\x974\x997[=qB\x03\xc5\x1a\xf2\x9a9]\x00\xa1\xa4\xe4\xec諒\x99\x90\x1cU_9~\xa1;\xc8#$\x87\xe1,\x01\a\xbd\xb5)\xdf1\x85\rq\x10\x86kQ \x14\x84^\xfeږ%\xe4\xd2\x00\xb1\xfa!ʝ9H 3\xb6\b2T\fL\x9b\xffChZ5}0\a՜\x12&8\xa1\x13Q\x06\xb1\xc69\x10\x0eڜ\xe0\xca/%\xb8j\xf5\t+\x15\x04]\v8)\xf1:\xb3B\xb2\x9cJ\x96-\x9b\x13\xa4٘\\\v\xafq/\xc3t\x81&\xea\xde}\xb8\xbc%\xd7\x1f\xeeH!\xb1ՒͶ\xc1\u007f\x0fܨ\t\x98m\xb1\x9b\x9c\x8e\xc99_Z0\x96K3E\x8c\x9a\rY\xec\x85\xeb\x18\b1\a\xa6\xe7\xae~\xb4\x15\x86þv\x8e_S}J%\xcf\xfb\xc4\xd3?\x96\xbc\xddu\xab\x88\x95R\xb9HaLn\xacH\x06Ն\x15\xdf\n\x82J \x06 \u05ccfْ\x18\xebmA3\xb0\t\xfcX;\x17\xac`ugSMi\xa6\x02\xd9s\xac\\5\x8a\xcb{c\xa2\xf6ع\n\x06I\x81\v\xed\xec\xe5\b\xba\x17S\x84E\xac\xcd\xdcHZkɯ\b\xe5\xb0\x16\xabLyL\xdfT\xb3ƈH \xccR\x81\xea\x16\xab\x95\x15\x1d\x91\x03\"\x81\xa6X\xdb[P=\xb7Y\x159U\xf7\x90\xda\x1f\xa2\xb4b\xe7e\xb0\xb3\xad\x16}\xb7,\x80L\x81\xea284\x83ڰ\xcdQ\x01N'Y\xa8\x03#\xba}\x02M?\xf0l\xf9Q\b\xfduU\x8aڃl\u007fp6M;ra\x14\xdcPƀs\x1b\xe1\xc6!\x1bhT\xcazj\vuƨ\x97d\x02\xb2\xe4\xe7\xea\x1b)\xca@\x91\xbe\xa6Z\u007fs\xf5\x0eyai\xed\x0f\xe0Z.\xb1\r@8#趯\xc8\xf7\xe6ܹ\x93\x16\xaa\xb2x\x160%%W\xa0\xc7\xe4=]\x12\x9a)\xe1ͺ`k\xf6\x06\xb3\xfc\x9a\xfe\x971\xba\xe7,02\x11:\x94\xaf\xac\x80C\x16\xb0\xfe\x95PߞA\xa6\r\xc8V\xbe83\xbf\x15\xa8\xa1@\xe9=(RHH \x05\x9e\x04\xd2j#\xb6\xfa\xa7\u007f~\x91\xb4-\xa4\xf2k\xc1\r\x03\xe9A\xe7W!\\\x10U&s\x8fK&x\xe5\x0er\xb9\xb5\x11\x91\xb55泉\x9d\x84\xba\xdbk\xe6\xf3\x8f\xc3Nz\x89\xbe\xef\x15Ȟ\x92\xef\xfbg\x97|\xf1n%\xc3O\xda;\x85l\x80\xe4\xa0iJ5\r\xbb\x0e\x1f!\xf2F\xbf\x98\x81\x90W\x80\xfe\xca䢂\xef\x18/\x1fmrk_\xe7\xea\xed%\x02#.xb\xed\x84P\x81S\x14\x19\xb3-\xf2V:A[F^\x85\x13{\t\b/Ӑ\x91\xd3,\x13F\xa8\x87k\xfe\x94\xa7\"_[\xb61\xe6\xa0\xd5G|\x8c\x1c?\x14\xfep\xacj\xa0\xbd\x8eU\xbc\xfb:\x83\x05\x04\xb7?\\\xed\x8bn`\x18\xa3\xce\xd3\t\x02\x8d\xf0\nft\x02\x99U\xbe\xec)Q\xeb\xa7$\xd2[\x18\xe5j\x94\"\xeb[\xa2\xf8Qd\x98'J+\xe4\x18\xa0\xbf\x01\xdc\xe0\xab\xfdp\x83^\x9a\x16n\"\xbdɯ\r7e\xb0\xc6EVqc\x94\xb66n\f\xd0_=n\"]\xf0\n\x92D\xe4ō\x14S\x16z$ׄ\xb8\x03V炠'6&\xec\xd8\xce\tF\xcfH\vt\x84\v\xbe\x90b\xc1RH\x8d]\x8a2\xccg\xaa\xfc\u007f\xd1v8r\xe3\x93\x15\xfd\xc0/^,@ʰ\xfb\x06Hݡ\u0603y1i%\x12\x9aac\xf2\x18J \xab\u0530\n\x8e0\xef\xfd\x888h\x98<\x82P\\\x9e\x97\xed\u058c\xbfD\xb7\x8a\xe0\"\x85F\x1f\xcb\x12/\xa2\xb8\xb3\xd5\r\x06r\x04H_\xe8bt\r\x9f$\x94\xfa\x9c\x0f\xf3\xbd\x98p\x9ep\xcd\xff|\x01%ED\x03O\x19\x9f\xa1w?\xa6\x19\xa4\x84\x8cb\xe1\xa9cX\xf7\xd6\xf1s\x88\xa7\xceM<\x02\xac?\xa4~\xbbP7f\x82\xbb\xd9\v\x1e\x9c\x02Hl\xf7fT=\xa7\xc8\xe3\f\xeb>\xf8ΓWp\x0f\xe6\xcf-\x99\x0f\xec\x1a*_`L\fɌ{\xc6SW\xd1\xd3B\xb9s/Ŝ2k=\x8d\xc9'l\xdb\xef\xd9\x18\x95pF\xfe\xc6I\x85\xf2\bУ\x1dG8\xe6\\\xb8#\xb5v\x84?Z\xf3,.|b'\xbb5<\x17\x01\xd1/}u\xaa\xdfs\x9b3`\x96+z!\xcd75\xa3\xd9m\x11\xda͛\xac\xd2\xe27\xefo\xcf\xdb\x00\xe3Z7?\xe0\xcd^\x06\xd7\x06\"\xa1iΔ\xc28\x05L\xe6B\xdcG\x80<\xf2)\xd43\xa6\xe7\xe5d\x9c\x88\xbc\x91M=Rl\xa6Nݙ\x1c\x19\xbc\x1cG|\x83\xf1\x8c\xf1F&\x05\xde`\xe5|\xe0f!\x11 \x93\n\x9bHp\xeer\x10\x97\x04\xb9\x8e\xee\xeb\xb8\"~\xec\x85\xf7\xa2J\xcb:\xe9]G\xb5<\xdcA~\x91\xf8p\xfd\xd2\x1b5\xf1\x96\x10\xeb݈\xd1C\xcd\xfeY\xe3\xf3e\xbdZ>(\xf4\x04\x18\xc6\xe0\x90\x03e8\x99\x13\xaf\xd4km\xcd\x03\x1b\x00\xd7C\x9bft\xf6Z\x1a\x12\x0e\xd7\x06u\x8e\xe1\xda 7\x86k\x83\xdac\xb86h\xb86ȏ\xe1ڠ\xe1ڠ\xee1\\\x1b\x84c\xb86h\xb86h\xb86h\xb86\b\xc7pm\xd0>c\xb86\xa89\x86k\x83\x9ac\xb86h\x9f1\\\x1b\xf4\x0f\xdc\f{\xb86\xe8u5\xc3\x1e\xae\r\xda6^{\xab\xf0\xe1ڠW\xe2\xa5'õAõA\x8d1\\\x1b4\\\x1bT\x8d\xe1ڠ\x8dc\xb86Ȏ\xe1ڠ\r\xe3\x1f\xd7R\x1a\xae\rz]\x96\xd2k\xb7\x05\x86k\x83\x86k\x83\x82\xde\nL\xa3LY@\x83\xf1}\xfa\xe6\x057\x8a\xf7=7\b%\x93r:\x05\x89\xba!\xcel-\x8f$\x00\xac\xefn\xec\x13\x1b}\xbe\x87\x02}\x82\x8d\xfal=M\x88\xf6\xdf9%\xdf8\xe4\x81.\x15\x91\xa0\xc2j\xca\x18'\x97\x1f\xbe\xae\r\xaa\xf0\x86\u007f1\x1d\x8fp%\x1fx\x12\x9b:[o}Ge]\bFm\x02Y\x92\tes\x9b,\x8a\x939\xe5\x1c2g\u007f\x04%\xf7̩\"\x13\x00ND\x01\xdcf\x0eR\xa2\x18\x9fe@\xa8\xd64\x99\x8f\xcd\xecCTd\xb7\xed\xae\x13{=K\xa5%\xd0\xdcn\xbf\x84<\xac\a\xbe\x99\x1e\xa1\x89\x14J\x91\xbc\xcc4+\xaa\t\x12\x05X\xb2\xa3B\xb3\x86\xfd\xa6b\x82\x14\xd84\x1eY\xc2I\xbd\x02\x8b\x94\x90i6{\xf1\xa2\x85v\x82W\x80\xe4\x85^VI\xc5@\xa6L\x06\x15\x92&\x19CC\x00\xd7k\xfb,\xe0\x1cO\xd0\x12\xd4\xd8Q\x1d1\x1a\"K,Jy\x8a:Q\xa1\x15&\xc96&\xe9>\x9a2\xe5\xf4g\x15\x92@G\xb5\x17},\x87\x1a\xa3H\xba)~6|\xc6\xee\xe5\xc6\x14\x1b\x8d\xfa\xeb\f\xea\x10\r\xc93;l\xce\xea\x99\xc9I\xf3>\x18_\xe6\x11\xe4e\xc0t\xb0\x9ai\xba\xf5#\xe9sX\x98\xb3\x0f\t\xb0E\xc8٧\x1b8߳2>\r2g\x1cӖ߃Rt\x067Aa\xabM\x06\x1dF\xaej\x12\tR\xe9\xb1\xe2W\x8b\x86fU\xa7M\x1e\xaa\xe6\x94\x03\x80\xe6vuU:\xfe\x83dZ\x03\x92,vU\xc68}\x90N\xbf6\xb1fw\xdb\xf7\xfes\xf63!\x02P\xa1\x9e\xc3S\x9b\x9e?\x012\x91\f\xa6d\xca8\xcd\\\x0e\xe1\tv]\f\xa1-\xeb\fQ\xca\x18\xfb\x82\xfb\x145\x8f\x951\xf9!\xb8\xac^˒'\x98\xc0\xe8\x92ѱZ\x9dM\xc9\f\xf3\x1a\xa5M\xa9\xff\xe77\xff\xf6\xa7\x00\xa0\x93\xa5\xd1I1H\xae\x85\xa6Y\xb5m\x19\xf0\x99\xa1(+ h\x16\u2e6bk\x8f\xab\xdd\xc7{\b-\x82\xdf\xfe\xe1~\x12\xa5\xaakANSX\x9c6\xe8q\x94\x89Y\xd7\r\x8f\xfb\xab\xc9\x11\x86u\xc7\x11\xc6\v\x83\"\x0f\xb1o\xe3J\xe6\xe2\xc1\xf6+\xefu\xde\xea\x94\xf8B\x14ef\x83\x19_W\x9d\x1c\xc2\xda\xe7\xacU\xc3vr\xaf0\xd3\xdcOkE\u07b8d]\xbf\x8c\xa0\xb5c\x99\x9cs2W\xdd[K\tc\xf25Ͳ\tM\xee\xef\xc4wb\xa6>\xf0K)\x83Z\xafz\x9c\xd9j \xaa4I\xe6%\xbf\xb7ר\xf9\xa9g\"\xc4'#J]\x94\xdaW\x1850Z\xad\xdd\xf6\xb7\t9\x1aV\x1dr\xaaKcf\xf0\x88\xa7\ue059\xa3\xcc\t\x98Շ\bs\xc3\x1721\xab欚\a\xf9\x0fo\xfe\xf9_-\x03\tY\xbd$\xff\xfa\x06\x8b\vԉ\x158(\xbd\x8d\u0098\xd3,\x03\x19\xcb\x1a\f\x89w\xb1\x82g\xe5\x04:\xf6\xd0?\x83\xe9zw\xf7W\xb4[\x99V\x90MOli\xaa\xef\xb9\x1f\x00\xf2\x10U\xabC'\v\x8d\xfe\xfe\xd2\xc6\xe1Bde\x0e\xef`\xc1\xe2\xaf\x13n\xc1\xf0\xd50\x19S\x9a\x88\x10\x93f\x92\x89䞤\x0eL#\xc7p\xf5.\xa3\xfd1\x12\x9cG\xb9q]\x8d{!)\xc9iQ\x84:\x87\xb1XP҇\xd62\x91[`3\x9d(gnl\x84\xc3~J@?\xe6\xfc\xa9\xc6M\x9b7\x9b_\xa2\x98\xb3\x85\xf8\x99X2N\xbb7GF^\xec\x16ЯAHӽ\xe1\b\xa8a\xee8\xaf\xc2\xd8\xe6x\x04\x037\x14\xe3\xa6F\x0e\xcf\x0e_\x8c/[$KQ\xd0Y\xc4e\xab+\xb8^\x05FR\xb0\x06FDI\x831G\x11\x9e\xf2\xddN\x11*\xa4U\x17\xb0\b\x90\xb6\x10\xab\x96\xa7\xded\xb1-&\x1e\x82s\xbe\t\xa1R\x94<\xb5>\xf5:\xbc\xf2~\x05\x11ׂ\x87O\x97\xa9\xaa\x8b\xa7Q|\x19dX\xfa\x8b\r\x02\x18'o\xc7o\xdf\xfcz\xc47\xaeaE|G\xb5Xj\xf0\xa5\x17[\xbd\xbfr\xab\x17\x06\xde;\xb7c}G\x16\x8b\xbb\xd9\xc6\xceg\xf4 \x99\x86\xc6E\xe2Gh\x1a\x19\v\xb7\xd1X\xe88<\xbb\xa0\xe7\x05|\xf1W\x90\x10\xa2\xcaɓ\xf3{˨\x83\xb1\x80L\xa6\xcb#\xadb!v\x88\x8a&\xaa\x0f\xc2;\\\x1eٙ\x1c*\xec<\x10\xbc\xd5\xd1\xc7\xc1m\xd3\xe5c\x11ܻ\xbc\xb5U\x97\x8f\x05E\xbfw\xd1\u07b3`D8a\xbcy\xcfb!v\xecٟaN\x17\x11\xf2L\xb1\x9ceTfK\xb3ٷ\x16\x83dRj\x02|\xc1\xa4\xe0y\xccU\xab\v*\x19\x9dd@$`3\x9f\x04\x14\xf9\xf2\xe8\xd3\xf9G\xcc,:6\x923\x18&\xf8])\x15\xe3\xb35\xeaoL\xb7\x1fo98X#`\x8f\x17CYᒘ\xa7\x15^\x8dƐ\x97\xba\xb4\xf7\x93>&Y\xa9\xd8\xe2\xa5\xe4E\x9c\x95Vi\xbb\xbf\x01#\xcd5Xy\xc7\x02\xf8\xc3J\x1b\x99\x9a\xe0ֺ\xb5\x04\x86\x83Q)\xab\x1b\x8au\xa6l\x04q\b\u007f\u007fb\xb3\x87\xacs&\xbb\xb6U6\xfd<\xbc\xef\xf8Zj\r6\r|Y\xb7r\x18\xf5\x06P` \xed\x85P\x9d\xcb\x11\xdcg\xcam\xa5Ծ\xe7zx[\u007f]N\x1f1\x01\x8f\xe2\x81\xdckebj\x93\">A\x06Rx\xa1\xf1@\x99\xae*\x13\x18g\xfa\"\xec\xc2e4Tl\xab\xba}\xb6;`\xa3\xf7܉\xbd\x1e۵M\xdb\xc9i\v\xf9\xec\xf8\xfa\xe6\xefn|\x91\xf1$+S\xb8\xc8J\xa5A~\x04%J\xd9\xe1\xe1_\x89\x8ev\xbe\xd3(:xp\xa1\x94\xc4>2R\x89(:\x0e\xbd\xac_\xadt\n7\xa1\xd4\x17\x16b\xbd\x8a5\x9c\xab\xee\vJ\v\t\x9d\x89P\xbc̲\x95\xf4wY\xae\x91\x8ay\xcah\b\x9d\x99\xc1\x9b5u?5c\xa2\xa9\x82\ue266\xc6㶙\x9d\xcaX\x82nl\xee\xff\xc1\xfe\x97\x99\xad\xfb\xc4ں\xec\xce\xd9<\x1bL^\xc4\xe8\xe2\t\xb6\x15\xe75|[/g?\xbb\xba\xe8\rn\xb4-Gd\x0f4\xadӚ\xff|\x10)\xd5O\xaf\xa0\xc8S\xc8n\f\xad\x13G\x13G5\xa5\xb9\xe7&4\xb9/\x8b׀0\xbca\xe8\x162\x94\xe3[\x91\xf5]\xf3I\x8b\xa8\x1c4]\xbc\x1d\xb7\xff\xc5ب,Ә\x85ڡ:=\xd8L:\x83'\xa3B0\x9e\xb2\x05KK\x9a\xb5\xa8\xac\x81\xa5\x1a\x99X\xa2\xc0\xb2u\xe3\x1c\x9b\x84\xb9\xb7[8%>\x1d*\xe8\fn\U000ce8ab\xc4(\xc3.!\xb2\x8b\x89\xb6\x1dp+/X̹\xb8\xa3\xbb\xe0Iy\xdc9\xd6l4\xf9\r\xa5\x8bw\xae\x01\x8c\u007f\n\xd7{~\xfd\xae[\x01\xd9\xe2\xbcnM\xf2|\xcbDܙ\xa8\xb6wN+\xb7\xe8&\xa9\x89\x99\xf2\xea\x84Pr\x0fK\x9b@I\xb9\xeb\xce\xe9A\xe0\xfd0N\xc0߃MU\xb0\xefu/|\xb7\xcb\xfa\x1e\xb6x\x83Z\xcb5\xdf\xf3\x01`\\\xb7\xf9\xa1\n\xe4UKuWnm\x93\xc7[\xa2u{H\u007f\x8f\x91=\xa7]!P\x82!'\xbb\xfdf\xee\xc6Z\xc3\xebv\x04WsV`\x11ΖY\xe3u\xc3S\x8f\xed\xea2\x16\v\xdcR\xd4\x15?!\xd7B\x9b\xff\xb9|dJ\xab\x1d=\xa6\xdf\tP\xd7B㳽Pb'\xb5'B\xec\xc3H\xa0\xdc\xf26,%A\xf8\xd5\xf2\xae\xa6\xee\xc2\n\xbb\xbe-\x8b`\x8a\\q\xc3d\xdcʫf\xd8\xca\x01\xf7\xf5B\\\xf0\x11r$\x0f}\v\xd0jӘ\xf2\xa8\x14\xb2\x85\xaf\r\x1f\xda\x02s\x02\xc4}\x1e}\xb8\xf6\x1dL\xcf-2\x9a@\xea\xdb\xe8R\x83\v\xaaa\xc6\x12\x92\x83\xdcz\xbdva\xf8\xd4\xe6\xad\xdb\x19\x06\xdbK\xd9\xed\xab\x9a\xdeC\xf7{\xa3\xed\xdb\x1b\xad\xb8:~\x8f\x02\xaes\xf54\xf5\x1d9ov\xf0\xa7\x1d\xf8Y\x97\x19\xf6\xa3N\xd0\xd2\xc2P\xf6\xff\x18v\x8a\x84\U000bf920L\xaa19w\x95\x04\x9d\xdfl>\xef4\x8f&h\x03\x95)bp\xbe\xa0\x19ضm\x94\x13\xb0E\xb1\x9d \xc5tM\xa2\x19C[(\xcbū\x90\xc8\xc1=,\x0fNZ'oS\x02\xdb\xc1\x15?\xa8\xb2\xec\xdb\xe7\xc0\xcb\x19\xdb\x1e\xf8\x00\xff\xed`\xbc&\x04;\xc1n\x15\x8c[(b\xe3?U\x9a\xee{\x9bX\xb3\xba\xcf\xfb\xd1\xc2\x16:X\xeb_\xd3\xfcZ\x8b\x10\x9ajiK\x85_\xff\x1c\x953\xd0]ʾ\xd3U1\xcc>&\xe7|\xb9\x06\xb5\xbb̺2\x91*\x8a*Z\x1dօt\x89\xdcM@.mF\xd1\xdc\xc2_ݓ\x8dHGA'\x17p-R\xb8\x11r=à\x1diX}\xba\xc3*l,]d)\xe6L\xe3\xa3k\vE=\xd4\xe9\xa0Oc¹\xef\xde|ھ\x8a\x8f\xd5cۧO\xb1\x9f\xafۍ\x9bO\x1bV\xa08-\xd4\\hr\xb4`\xd4U\x9d\x882uM\xe7\xe5Z\x8c\"rm*\x99CZf\xd0u/\xc9Z\x03\x1f\xff\xa0\xd7\xc2J\xce\xfe^\xb6\xafh\xf1\x9e\x1b\xf7\xf4:a\xd7x\xa8\xcc҆OѰ\x93?\xe3\xde\xf9\xef8{\xcc\xc15\x14\xdb\xe5\x11\xa8\x00Z\xda\x16Jc\x1d\t\u05cd\x96\x15\xde|K\\\xfb`\xf78S\xd5l\xbb\xc9{\xed\xd0w\x89\xbb\x91\x83\xbe\x12\x89\xed< 6C\xba\xf9v\x17\x1d\xdd\xda<\xea\x84\x16\xba\x94\xfeB\xa3R\xe2E\x03uCd\xea1\xe3\x90\xd0\x00\xbaI\xf5v\xbe0&\xf8\x1d\xcbAi\x9a\x17[w\xfeb\xfdy\x83\\!S;){\x9d@mF\xd7\xfd\xfc\u05edHZ\xdf\x1a\x91\x8e\x1b\x90-\x10ԅ\f`H\t,\x80\x13Wp\x81\xb1^k\xa2\xaf\x81\xb4\xb7\xcb\xca\x05z\xb8=\x14\xcc\xec\x9c\ni\xfb\xfcW\xd3^=j\xbe\xac6\xa5\x1aF\x1d\x05\x87{\x9c\xa9\x0e\x89\x80\xc9\xd9\xdbY\x05f\xaf;%!\xc1,#\xb3\x95Yf\xdf\xf5\xf9\xe3\xf6\x02\x11\xf2\x00\x12\xc8\f\xb8Aj\x87?\xcc)\x8d\xb6\xbd\xbbA\xa5;\x89\x95S\xe3\xcev\xc27\xb6\xba\x9d\x1a\xca؊\xe3oR\xb0\xcc\x03t\xb6\xe1Lt\x15\x14\xbb\\\xfd\x8f@\xd5z\xf6Kk\xf9_7\x9ftv\x80]\xb95S\xa9\xbdb\xc3^K\xc4$t\x10\xb7\x9b\x8c\xc0\xaf\xeeyn\t)\xe6Tmgs7扪\xe9~\xe3\xb8U\x1c\xeec\xe7\\\x80\x97\xf9*\xe0\x11\xb9\x86\x87\xb5߾F\x82F\xeb\xad됌\xc8\x15\xbf\x91b&\xd7\xfb_\x8d\xfc\x81Y\xa3\x82\x11\xb9\xa1R3\x9ae˯\xbb\xba]\xfb\xaf\xee\x8d'7\x81\x1dR\xdb>T\xab{\x8c\xdb\x13e\xa8\x90N\xb0\xff{M\x88\x87\xaa\xa6ѵ\x8d\xf4\x1f\x1c\x1b#\x0e\xbcQ\xcf\xda 1eG\xe9\x11L\xa7B\xdaKc\xc9hD\xd8\xd4\xf1\xc0uAJYf\xef\x9a\xc6`\x0fa\xba6\xb1*\xa1!$\xa1|I$\x12\xe3\tޘB\x97֩L\x93\xa44\x87\xeeTi\xba.\x1d\xa2\x9dQh\x9492괙\xda\xde\xce\xe6\xd3խhU\a\x06\x04f\x116\xa7\v\u007f\xd27\\\xa7\x8b\xf5̕\xb6\xa7\xcc\xe9\xe92\xbd\xb67\r\xc0\xfa\xb2\xabM\x86e;,T=\xea'n\x8b\xd3֦/\x9aj\xe8&\x17\x1aS\xfeE\xb3C\xc9\x1c\xfb\x89\xe8\xb9\x14\xe5l\xee\x89m\x13\x1b\xecv\xa6\x95X.Yd\xe5̐\xafsp\xe9R\xf2\x86U\xe0\\^i=\xd5\xcd \xb7!n\xa3\xae\xacZ2j\xbb\x12\xd6ztO)l\xa4n\aw\xb7\x05\xc1\xafP~.*\xd6x\xb9[\x92~Zyx%\x14`dj\r\xcf˿#\xb6\x1e\x04B\xafabf\xbbz\xeb\xe4\v\xb9\xf4\x1f\xa8\xe4\x8c϶/\xf7\a\xf7P\x87\xea\xe0\xde\u007f>\xe5\xc1O\xb0\xad>\xac\x81\xb4\x14\x1e\xaa>t\x9c\x8e\x95\x9f\x16 \x95u\x1f\xbe\xad\xffBl\xd9ا\xfb\ab\xa99m\xe0\xdeM\xc5\xfdRk߶\xba\xdf\xc5\xda,\xda\xef\x19O\xcf|\x06Y\x91\x95\x92f\xee\xcfDp\xcb\x11\xd4\x19\xf9\xf1\xa7/\x88\xc3\xc0'?\x0f\xf3\xe3\xff\v\x00\x00\xff\xffX*\xbb\xdby\xbe\x01\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xec[\x94\xee?\xb3|\xfc\xb3Yru\xbe\xff\xb8F\xcb>\x9e\x16k\\\x17\\\xa4\xa8i\x85r\xfd\xfd\x0f\xcb\x1f\x97?\x9c\x00$\x1ai\xfa=\xcf\xd0X\x96\xe5+\x90\x85\x10'\x00\x92e\xb8\x02\x93\xec0-\x04\x9a\xe5\x1e\x05j\xb5\xe4\xea\xc4\xe4\x98\xd0\xe2iJ\x181q\xab\xb9\xb4\xa8/\x94(2\x8f\xc9\x02\xfer\xf7\xed\xe6\x96\xd9\xdd\n\x96\xc62[\x98e\xbec\x06\t\xcb\x14M\xa2yn\t\x97\xbb\xb0\x04\xf8a`\x8ad\a\xcc\xc0\r>\x9d_J\xb6\x16\x98\xd2$\x8f\xd0\x1d\r\xa2\x0e{\xc8\x1d\x86Vs\xb9=Z2\xc7dY\"\u007f\xbc\xe6\x85V\x12\xf09\xd7h\x1cA %\xf2\xca-<\xedP\x82U\xa0\v\tv\x87\xb0f\xc9c\x917\xd7o\u009c\xc4\xc0b\x96\vfqi\xad8\xc6\xe2'\xf5\x04B\xc9mc%\x03f\xa7\n\x91\xc2\x1aA\xa3e\\b\n\x1b\xa5\x1b\x18|\xa6\x81p\u007f\u007f=\x8d\x83'\xbc`\xc6~\xae7\xd2\xc2\xe1\x9a\x19\v\x96g\b,\xa0\x00O\xcc\xd0\xfe7J\x83\xddq\x03-:z$hZ\x03\xa6\xc7\"e\x16\xbb8\x94\xe2\xba<\x12\xb5\x06\xb8O[<\x06\xb3ժ\xc8WP\v\x9e\x1f\x1d$\xddkI\x8b\x1d\x82\x1b\xfbs\xab\xfb\x9a\x1bK?\xe5\xa2\xd0L4\xe4\x99z\r\x97\xdbB0\xbdjn\xd1\t\x05\xea=\xfe\"\x1f\xa5z\x92_9\x8aԬ`\xc3\x04I\xafI\x94\xc3\xf1\xc6a\x92\xb3\x84\x84\xd3\x14k\x1d\x14լ\xe0\xd7\xdfN\x00\xf6L\xf0\x94\xf6\xeb\xd1U9\xcaO\xb7W\x0f?:\xd42\xe6;\x874\x81\x1b`\xf0@\xfb\x86\x120\xd8\x1d\xb3\xa0\x91Г֍\xc85.J\xc4S\bBB\xbbE\xcdUʓRVhjC\xb0\n\xb9\fcs\xadrԖ\x97Tu\xada\xa8\xaa\xbe\x0e\xa6\x1f\xdcV\xfc\x18\xaf;hH\x88\x83\x81\xc1\x94\b\x9a1P\x1b/B\x15\xdeD\x92\x06XpC\x98\x04\xb5\xfe\a&v\tw\x8e\xf4\xbaR\x83D\xc9=j\xb7\xefDm%\xffW\x05\xd98-uK:\xf5\nL.\x1b\x19#ɄcB\x81g\xc0d\n\x19;\x80F\xb7\x06\x14\xb2\x01\x8d\x86\x98%\xfcUi\x04.7j\x05;ks\xb3:?\xdfr[\x9a\xe6DeY!\xb9=\x9c\x93\x81\xe5\xeb\xc2*m\xceSܣ87|\xbb`:\xd9q\x8b\x89-4\x9e\xb3\x9c/\bqI\x96y\x99\xa5\xffW\x89LJ\x06\xa6\x1d\xd5\xf5\x8d\xe4z\x90\xeeN\xbc\xbdx\xf8i\x1e\xff\x9a\xbc'\xa2H1\xad\xdcU\x0f5:\xbb\xbc<\x9aBQ%\xe3\xd2I\x93\xf3\xb1\x0eIY\xff\xea\xbcK\xef&\x99Fp\xeaϥ\x87\b\xbc\x19T\xf5m\x86[\xccz1\x1c\x91;\xdf\\\xd4\xeab\xc5\x15X]\x1cKK9\x9fi\xcd\x0e\x83T\xfa^9\xf1X\"U3\x82Q\x16\xdd|\xc1t\x9cP\x10+\x91G\xdb\xf9\xd4A\xb9\xb9|8\x06\xc4o&\x04T\xd5\t\xcb\xe7\xa3\u0380\xc1#\x1e|\x14\xc4$8F1K\xf9\u0601\x83\xc41\x91(1F&\xe2\x11\x0f\x04(\xe4\xba\"\xe6Nj\x86o\x8fx\x88\x1b\xd8!\xa5\xc3,d\x020\xc1\xd3j)\xaf\x0fWr,\xean\xb7\x1be\xaf\xe4\x19\\>s\xe3Г)|Qhn\x94\xa5\x9e7#\xacG\xffEd\xf5SI\xf5\xa47\xf3\x8e\x1e\xcd\x04i\x94\xd0\xfbv\xe5O\x98\x15\xab\xb8\x81+\xe9\xceJ\x81.\x94\xe6&\x98\xf1bI(e\x85\xa1L\xa8TrA\x8evٳV4\xcc\xc0\x1e\xa5[\xdci\xa2\xd7X6\x1a\xaa;\xd0y\xd4\xee\x9d\xef\xf1\x10|\xfa^\xb0\x04SH\v\"*\x8b\x86h\xacf\x16\xb7<\x81\f\xf5\x16!w\xbe \x96\x1b\xd1\xf6ٷ\xd92\x17\x1b\x1a\x94-\x18\xfa4\x06\xa5\x85\xd3\xeb\xa8q%\xfb#\x06\xf7\xe6\xa3\xc7\a\xc7\xec\x8d\x1c4\xc51\x11\xd4n^\xfb\xce\xf1\x12\xb3\xb8s\x1c?x\xf4\xbc\u007f\xcd\x18%J\u007fu.\x92\x84\xfd7\xc8\x19\xd7QZ\xfe\x89n\xfd\x04\xb6f\x87\xac[s!\xb7\x067\xe08\xbeg\xa2{\xdb1\xb0E\xe5,\x10\n\x1f\n\xa8\xcdQ\xe4s\x06O;e\xbcG\xdep\x1cH\x0e\xb7\x1b7p\xfa\x88\x87ӳ#\xbbtz%O}\x88\xd0\xd5\xfa\b\xb0Uġ\xa48\xc0)\xcd>\xfd\xcf©h\xe9\x8c\x1cHw\xc3\xf1\x81\xb8;ɖф\x9bZ]>\xba\x10z\x1c\xfbH\xd9̕\xb13\x10\xbaU\xc6\xfa\x8ch+\xe0\x9d\x97o\x03/W!\xcf\x06lcQ\x83\xb1J\x97W}\xceHv\xd2Ǝ\x8bf\xea\xc0\xe1\x18[e\xefTF\x17_v|\xb8(g\xd7,\xa8:\xfa/I\x87Z\xae\xe8\xbeBc\x8b\x93\xc7Y\xfdYa\xb3T\xb6\x99\xfap\x90s\x95~0\xb0\xe1\xda\xd8\x1a\xd9h\x98\xdc\xd0%\xe9\u06dd\xe5\xe4\xa5\xd6/<\xca}\xf3s\x1bɸ\x9dz\xaa.\xf4\x87/~\xfb\x1a]\x8f!\xf0\rp\v(\x13UHJ\x1a9c@\x8bxv\xc4\v2\xc4\xfa\xbd\xba\xa1,\xb2XB,H\x12\xb9\x9c\xc8/5'|e\\\xbc\x15\x1b-\xcfP\x15\x13\x8e\xb9n\xedz\x04?\xb7U\xa9\x91\xb1g\x9e\x15\x19\xb0\xcc1\"\x9a\xe4.\xda\xe0\x19\xb6e\x00\x9e\x18\xb7\xa1\x92\xce_ \x82U\xd1 \x13\x95\xe5\x02-\xc2\x1a7J\x93\xbe\x1b\x9eb\xe5\xfa\x83\\\xa8\xe1{\xc7nc\xb0a\\\x14:\xda\xea\xce\xe4Ƽ\x13R0<\xaf{\xf0\x89EaA\xe4\x8bJGG\x87\xb4S\x9e \xd7s\x02\xda[\x8d\xaf\x1d>\xe6\x9a;YTS\x11\xe4\x04D\x8a/\xdb\x11d\x10Q&\x0fC!\xe4\x04L\xc2\xe2=\x84|\x0f!\xe3྇\x90\xef!\xe4t{\x0f!\xdfCȘ\t\xef!\xe4{\b9\x1f\x85\xff~\b9\x8dقr\x9f\x83?G`\x13UB0\x8e\xec\xe8*\xa1\x1a\xe6B\x14Ƣ\x8e\xaf\xb9\xbd\xea\x9f\xd7S\u007f\x9d\xf8!\v\xfaV\xa7_6\xear\x8b\xdaeUE\xb8N\xd9JE\xf1\xf5\xfa\x93\xd1qdq\xedP\x9dv\\)\xd7T\x01W\xbb\x06\xb9*\x9e*\x8b\x90\xfb\xadFX:p\xcb\u007f\xf1Ѭ\x06j\xd7aQd^b\xfb;\xaaO\x8e*\xb1\x9a(\xac\x1a/\xe1V\xe5\x1a\x03Tl%\xe0\xdb\xe4ӭ2\xe2\xdf!\xf5&k\x9f\x86+\x9e\u008d\x1cZ\xb6\xff\xb8l\xffbU\xa8\u007f\x82'nw\xbd\x9b\xa2oP\xdcqQn\x9b\x85ѥ,\x86o\xbc\xbaT\x05\xa5Ar\xd1_\xd3\xe0\b^\xceo\x91\x1b\xbe\xe5\xfeP\xfa\"\xfd\x9d:&\xc5\xd6H\xbd\xb82\xaa]\xf74h\xe0\xe7_\xe0\xcd)+\x8f\xaf}\x9a*U\x9aS\xf1Ԭf\x1a\x01\x19[\xe7\x14w❬izA%St]\xe5\xab\\W\xc6\xd5*\xbdE\x85Ҍ\xba\xa4v\xbd\xd1\x04\xdcy\xd5H\x91d\x8a\xa9<\x9a]o\x14j{&\xf6\x13Qe4X=4\x01\xba\xa7\x8ei\xbafh\x8a\xfc-T^\xa5R\xe8\x05\xf5A\xaf[G\xfcZQ\xf7X\xb5OD\x8dOD\\>\x85iD\x15ϼڝ\b\x1a\xbe\xb0N\xa7\xaa\xc2\x19\\{nuN\xbb\xf6f\x10lLM\xce@\xc5\xcd \xcc\xd1J\x9c\xd8:\x9bA\xe8\x93\xee{BrF\u007fV:E=\x114\xc7\xcb̄\xbc\xb4\x93_\x9d\x95;_5\x94_úQ\xcd`\xbc\x9fN\xaa\xaa\xb9O\xe0g.SO^'#\r\xb7L\x9f\xceS]P\x15#\x90\x94\xf6B,C\xb0\xce!\xc0`Μ\xbdJa}\xf0\xa9\a\xb3\x84K\x96\xec\xda\x03{A\xee\x98q\aˌY8\xad\xceS\xe7\xe5<\xd7s\xba\x04\xf8\xaa\xaa\xe3k\xf3k8ó\\\xf4\xab}a\x10N\xdb`^~<\x18\x90\x13#Ynv\xaa\xfc\xf4y\xf2\x84p\xd7\x1e\xdfsD/?|N\x84*\xd2\n\xfe {\x99<\xc0\xed\x03\x05!\xf4AhR\u007f*\x1b\u008c2\xe4\xef~I\xdb\xff\x15\xfb\f\x92\f\x1dٍU\x9am\xf1Z%\x8dg>\xc6h\xd2\x1e\xdfz\xc5!\x18\x892)\x17\xaa\xd7\xfa\x8f7aG]pu.>\xe8N\x9d\xd7p\x98\xf6ۏQ\x8d\xb5VLn\xea\xfe\xfe\xdao\xc4\xf2\f\x97_\n\x9f.Y\xe4L\x1bt\xb4-7\xe8'\xad\x87\x1cɮ\xf9\x12\xce\xe7.\xfe͇pf\xef\xc2\u007fE_\ndI\xaei\x11~\xe8\x9f\xd78\xa15\x98F\xfa<$\xbbC\x90\x981*\xe1dM\xdc\xf9\xd8'\xdc\xdf\xe2\xc3\xef\xe1\xc0aP\xe9\v\x83ߞ$\xea梁\x99+\xe9\xf92\xfa\xbc\xc3/G\xd3Jf\xf6\x19\x00g\xb9:Ï=\x94\xac^F\xa2\a\x84\xbc\xe9%R\x95\xcf\\t\x895\xaa\xd7C:\xdd\x17\xe2-\xfaޖXT\x0f]\x9cL\xd0ѿ\xbe4\xfdR\x88\u007f\xf6*a\xb9-tp\u007fI\xa1\xe9\xabw\a\x02\xfd\xc7\xe1\xf3\xdf\n\xa9\x9f}\x1a\xe5\xd9u5\xac>\xc0\xd6oB}\x1ex\x13\xea\xae\xff\xd5\r\x18z\x8e\xc3{>\xff\xb6\xd3\xc2\xc1\x9eϴ\x1e\xf9\xa6W\x01Fww\xebFT\x97\x9d\x81\xac4\xad|K``'}\xb7Y\v\xb8\xc1\xa7\xa3\xbe\xe6#e\xcd\xfe\xaf\x8c\vL\x1f\xaa\x87\xa0b7U?\x1dE\xf7\x83G:\xdf6S\x9d\xc1\x9d$&\x13\xa2\x01\xcf\xdf\x05\x1a\xf8\u007f~\xec[(3\x91\xb8\x9d\xfc\xa9\xf3ۀ\xe1\x191:\xfd\x06\xa7GI:]\xf5\xfbt\x1f\xeb\xff\xc2{r\xfe\xa1\xb0\xbd\xbfV\xa7\a\xba҆\xac\x04g\x1czj\xcdcI\x82\xb9\rI\xf2\xe6\xc3a\xa7\xa7\xf4O\xf9.\x18\xfd\x9b(\xe9C]\xb3\x82\xbf\xfd\xfd\x04\x82\xe3|(\xf1p\x9d\xff\x0e\x00\x00\xff\xff\xee\xf9\n5\xcbO\x00\x00"), []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4V=\x8f\xe36\x13\xee\xf5+\x06\xf7\x16\u05fc\x92\xefpM\xa0.p\x12`\xf3\xb1Y\xac/\xdb\x04)hjd3K\x91\ng\xe8\x8d\x13\xe4\xbf\a\x1cJ\xb6%˷wE\xd4i8\x1f\x0f\x9f\xf9\xe0\x14eY\x16\xaa7O\x18\xc8xW\x83\xea\r\xfe\xc9\xe8\xd2\x1fU\xcf_Qe\xfc\xea\xf0~\x8b\xac\xde\x17\xcf\xc655\xac#\xb1\xef\x1e\x91|\f\x1a\xbf\xc1\xd68\xc3ƻ\xa2CV\x8dbU\x17\x00\xca9\xcf*\x89)\xfd\x02h\xef8xk1\x94;t\xd5s\xdc\xe26\x1a\xdb`\x90\bc\xfcû\xeaC\xf5\xae\x00\xd0\x01\xc5\xfc\xa3\xe9\x90Xu}\r.Z[\x008\xd5a\r\x84!\x19\xb1\xe2H\x01\xff\x88HL\xd5\x01-\x06_\x19_P\x8fZp4\x8d\x80S\xf6!\x18\xc7\x18\xd6\xde\xc6.\x83*\xe1\xfb\xcd\xcf\xf7\x0f\x8a\xf75T\xd9S\xd5\xef\x15\xa1\x00n\x90t0=\v\xac\x8dD\x83\x8d(\xc1c\x8e\a\xd9\x06(\xea=(\x82{|Y=\x04\xaf\x91\b\x1b\xf1\x91\xa1f+\x11\xf0\xb1O\xd89\x18\xb7+\x00v\xc1Ǿ\x863\xecl2P\x96\xe9Ρ\xb3\x8f!\xb0\x9cZC\xfc\xc3-\x8d\x1f͠\xd5\xdb\x18\x94]\xa6K\x14h\xef\x03ߟ\x83\x96@\x14\xf2\x89q\xbbhUX4.\x00\xfa\x80r\xf0\x8b{v\xfe\xc5}g\xd06TC\xab\xac0Hڧ\xbb\x8a\xeb^ia\x84\xe26\fu3\x84\xcbNk\xf8\xfb\x9f\x02ࠬi$\xeb\xf9\xd0\xf7\xe8\xbe~\xb8{\xfa\xb0\xd1{\xecT\x16.ffry0\x04\n\x06\xa0\xc0\x1e\x94N9\x01\x1dC@wJ\x9bq\xad\x0f\x9d\x84\x1b\x1c\x03\xa8\xad\x8f\f\xbcGx\x92\x9c\fW\xaf\x06\x85>\xf8\x1e\x03\x9b\x11\xbd\x98\x9c\xbb\xe7$\x9ba|\x9b.\x91u\xa0I\xfd\x82$1\x86\xaa\xc7\x06H.\b\xbe\x05\xde\x1b\x82\x80B\xae\xe3):\xe1\xa4\x05\xe5\xc0o\u007fG\xcd\xd5p{JY\x8c\xb6IMv\xc0\xc0\x10P\xfb\x9d3\u007f\x9dt\xb1\x9b\xc7+\xd3[u%\x9b\xbe]\xaf\xe4\x1f\xf2\xe3\xb23\x8e>}\x9b\xac#\xcf\xd5\xe5Ƚ\x18\xb5\x83\x1b\bѹԑ\xde%\xf1\xcc)L'\xf2\xec\xd40vW8\x16\x91ܹ\xd6\xcb2\xa2RHŹOpH\xea\x10##\xbarw+\xa7\xf9\x9b\x8f\xa2\xcf 0\u007f\xb2%|\xb9a\x1a\x1d&\xe0B\xccR\xb0,\x88S\xa4+\xf1b\xc7\fȢ\xb5jk\xb1\x06\x0eqn\x99\xedT\b\xea8\xad\x8a\xb1\x8cΫ\xdb'\v\xe4J=\xd5\xfe\xcb\x1eݭ\n\x87\x17EK\xb9\xc9n`{\xbce\xb8>\xed\xa0\xf3&\xc9eYC\x9a\xba%\x9b+\x96>\x83\x88\x85,\xe5R]\xd8\x0e\xaeH\xd8\\j\x8e\xbd?)\xf8qY\x98#\xbf\x11|!\xa93\xd1y\xe5~\u007f\xfe\x1b\xf6⼷\xca\xc1p\x8b\xe6\xe2\xe6\xc4>\xa8\xdd\xc8\xc5y\xb6\xa65\xabgl\xee\xe7+\xec\x9b7\x93]T~\xb5wy3\xa7\x1a~\xfd\xad\xc8^\xb1y\x1aq$\xe1\xbf\x01\x00\x00\xff\xff\x8a\x80\xfd\r\x9e\f\x00\x00"), - []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4WO\x8f۶\x13\xbd\xfbS\f\x92\xc3^\"9\x8b\\~\xd0\xe5\x87Ŧ\x05\xd2\xe6\xcf\"\xde\xec\xa5\xe8\x81\x16G\x16k\x8aTgHoݢ߽\x18RZ۲\x9cMPT\x17C\xf4p\xf8\xe6ͼ\x19jQ\x14\xc5B\xf5\xe6\x01\x89\x8dw\x15\xa8\xde\xe0\x1f\x01\x9d\xbcq\xb9\xfd\x1f\x97\xc6/w\xd7k\f\xeaz\xb15NWp\x1b9\xf8\xee3\xb2\x8fT\xe3[l\x8c3\xc1x\xb7\xe80(\xad\x82\xaa\x16\x00\xca9\x1f\x94,\xb3\xbc\x02\xd4\xde\x05\xf2\xd6\"\x15\x1bt\xe56\xaeq\x1d\x8d\xd5H\xe9\x84\xf1\xfc\xdd\xeb\xf2M\xf9z\x01P\x13\xa6\xed\xf7\xa6C\x0e\xaa\xeb+p\xd1\xda\x05\x80S\x1dV\xb0\xf36v\xc8N\xf5\xdc\xfa`}\x9d\x0f+wh\x91|i\xfc\x82{\xac\x13\x14\xad\x13>e\xefȸ\x80t+[3\xae\x02~Z}\xfax\xa7B[A)\x1bʞ\xfc\xceh\xa4\x04:\x1fuw\xbc\x14\xf6=V\xc0\x81\x8c\xdbL\x1d\x8c\x04\x94g\xe0\x8f\xbc\xddl\xf0ȑVA^7\xe4c_\xc1\x01|\xb6\x1e\xb8˼?\xa4\x88WC\xc4\uf1c8\x93\x815\x1c~\xfe\x8a\xd1{\xc3!\x19\xf66\x92\xb2\x17\xd9K6l\xdc&ZE\x97\xac\x16\x00=!#\xed\xf0\x8b\xdb:\xff\xe8~4h5W\xd0(\xcb\x12\r\xd7^b\xfb(\x11\xf4\xaaF-kqMC\xc9p\x05\u007f\xfd\xbd\x00\xd8)ktr\x99\xc3\xf4=\xba\x9b\xbbw\x0foVu\x8b\x9dʋ\x00\x1a\xb9&\xd3'\xbb\v\xf1\x81aP0\x02\x84\xc7\x16\t\xe1!\x91\t\x1cyf\b>\x1diU\xc0!\xcd\xe3\x93\xca\xdd)+TG|\x05\xcai\xe8\xd4\x1e\b\xe5\f\x88\xee\xc8[2\xe1\x12>xB0\xae\xf1\x15\xb4!\xf4\\-\x97\x1b\x13\xc6VP\xfb\xae\x8b΄\xfd2\tڬc\xf0\xc4K\x8d;\xb4K6\x9bBQݚ\x80u\x88\x84K՛\"\x01wY\x9c\x9d~\xf9T\x04WGH'\xa2\xcaO\xaa\xfa\x8b\xbcK\xb9\xe7\xb4\xe7m\x19\xff\x81^Y\x12V>\xff\xb0\xba\x87\xf1Д\x82S\xce\x13ۇm| ^\x882\xaeAʉk\xc8w\xc9#:\xdd{\xe3Bz\xa9\xadAwJ:\xc7ug\x82d\xfa\xf7\x88\x1c$?%ܦ\x86\bk\x84؋\xe6u\t\xef\x1cܪ\x0e\xed\xadb\xfc\xcfi\x17\x86\xb9\x10J\x9f'\xfe\xb8\x8f\x9f\x1af\xb6\x0e\"\x1a:\xecl\x86敺\xea\xb1>\x11\x8a\xf80\x8d\x19\x94\xdbx\x02u\xc2\xe6\xa0\xe2yo\xe5\x91需!\x0f\x9e\xc6lN\xd7N\x87\xc2\xfc\xbe\x8b\xf4\xcc\xc4z\x9bΐr\x94\x00\xc6\x11R\x8c\xb1\r\x18\"\rA\xa6vY.\xe6Κ0\x9c\x02 ԒIe\xa7\x00O1<\x99\xa5Y\xab\x8c\xcb\x04\x1f\xb6\xa7\xf2\xa2n\xe8\x98.\xa0ө5Op\xf8T\xa5\x8c\x1a\x1eMhs\xf1\xdb\xe3i\xf3<\xe7\xf2lq\u007f\xbe8\xc1|ߢ\xd8\xe5\xe6\x88\xc0X\x13\x06A\xc0hE\x96\xa2\xb9\x12\xe0C\xe4$\x1d\x95GƌW\x18\xf7nq?%\xf6\x99D\x0es\xf99\xa8W2\xcdF\xa0\x84\r\x12\xba0+[\xb9ڐÀI\xb9\xda\xd7,\xa2\xad\xb1\x0f\xbc\xf4;\xa4\x9d\xc1\xc7壧\xadq\x9bB(.r\xd2y\x99F\xfe\xf2e\xfa\x99\r\xf2\xfe\xd3\xdbO\x15\xdch\r>\xb4H\x92\xa5&ڱ\xa0\x8e\xe6ի\xd4=_A4\xfa\xffW\xdfˇ\xef\xb32\x9e\xe5d\x95\xea{/\xf36\xc1\x11jV9\x0f\x9e@z\xa0$\xb7\x1b\xb2\x97U?\x97\xbd\x8cf\xed\xbdE5-1领PO\xc1\x14\xe2\xfb[%4*\xf2\xab\x02\x1a\xafy\"c\x89d\xdc4&=\xdf \xd2}Bmp^\xbeg\x8c\xce\xc1/\xe0\xe4\x92\xf9\x15\xec\x1cT\x88\xfc\xbd-6m\x1a,\xd7C\x9b\xad#I\xc1\x0e\x1e\xc17'\xf0տo\xb3}\xab\xf8LE߀\xf6N\xf6\x8d\x94[\xd3`\xbd\xaf-fw\xe9FtV/\xdf\fU\x1et\xb1;/\x9d\x9b\x9d2V\xad-\x9e\xfd\xf3ũ\v\xff]H\xf0L\xde&K\x87o\x9b\xeb\xc3\xdb\xf0\xf51|\xcb\\狷\\|(\xb5a\xe5P\f\xaa\x96n\x82\xfa\xe3\xf4\x13\xe1ŋ\x93[~z\xad\xbdˣ\x8e+\xf8\xe5\xd7E\xf6\x8a\xfaa\xc4!\x8b\xff\x04\x00\x00\xff\xff\xf0h\x1a\xc0\a\x0e\x00\x00"), + []byte("\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xb4VK\x8f#5\x10\xbe\xf7\xaf(-\x87\xbdН\x1d\xed\x05\xf5m\x14@ZX\x86\xd1f7\x17\xc4\xc1\xb1\xab\x133n۸\xcaY\x06\xc4\u007fG~\xf4$\x9d\xe9\f D\xdf\\]\x8f\xaf\xbez\xd8M۶\x8d\xf0z\x8b\x81\xb4\xb3=\b\xaf\xf17F\x9bN\xd4=|E\x9dv\xab\xe3\xcd\x0eY\xdc4\x0fڪ\x1e֑؍\x1f\x90\\\f\x12\xbf\xc6A[\xcd\xda\xd9fD\x16J\xb0\xe8\x1b\x00a\xadc\x91Ĕ\x8e\x00\xd2Y\x0e\xce\x18\f\xed\x1em\xf7\x10w\xb8\x8b\xda(\f9\xc2\x14\xff\xf8\xa6{۽i\x00d\xc0l\xfeQ\x8fH,F߃\x8d\xc64\x00V\x8c\xd8\xc3љ8\"Y\xe1\xe9\xe0\xd88Y\x82uG4\x18\\\xa7]C\x1ee\x86\xa2T\xc6'\xcc}Ж1\xac\x93i\xc1\xd5\xc2w\x9b\x1f\xef\xee\x05\x1fz\xe8\x92A\xe7\x83;j\x85!\x83.\xa1\xee\xcfE\xfc\xe8\xb1\a\xe2\xa0\xed\xfe\xd2\xc1D@\xf7\f\xfc\x99\xb7\xdb=\x9e9R\x82\xd3q\x1f\\\xf4=\x9c\xc0\x17\xed\xca]\xe1}\x9b3\xdeԌ\xdf\u05cc\xb3\x82\xd1\xc4߿\xa0\xf4^\x13gEob\x10\xe6*{Y\x87\xb4\xddG#\xc25\xad\x06\xc0\a$\fG\xfcd\x1f\xac\xfbl\xbf\xd5h\x14\xf50\bC)\x1b\x92.\xe5v\x972\xf0B\xa2J\xb2\xb8\v\xb5e\xa8\x87?\xfel\x00\x8e\xc2h\x95]\x964\x9dG{{\xffn\xfbv#\x0f8\x8a\"\x04PH2h\x9f\xf5\xae\xe4\a\x9a@\xc0\x04\x10>\x1f0 l3\x99@\xec\x02Rͥ\xba\x04\x98\x92\xa2\xae\x8a|p\x1e\x03\xeb\x89\xf3\xf4\x9d\rƓ\xec\x02\xcf\xeb\x04\xb8\xe8\x80J\xa3\x80\x04|@\xa8\r\x8d\n('\x03n\x00>h\x82\x80\x99<˧\xeaM\x9f\x1b@Xp\xbb_Pr\a\x9bDp \xa0\x83\x8bF\xa5\xf99b`\b(\xdd\xde\xeaߟ<\x13\xb0\xcb!\x8d`\xace\x9e\xbe\xdc\xeeV\x98Du\xc4/AX\x05\xa3x\x84\x80)\x06D{\xe6-\xabP\a?\xb8\x80\xa0\xed\xe0z80{\xeaW\xab\xbd\xe6i\x15H7\x8e\xd1j~\\\xe5\x81ֻ\xc8.\xd0J\xe1\x11͊\xf4\xbe\x15A\x1e4\xa3\xe4\x18p%\xbcn3p[\x86sT_<5\xc1\xeb3\xa4\x17CU\xbe\xdc\xf5WyO\xed^\xca^\xcc\n\xfe\x13\xbdI\x94X\xf9\xf0\xcd\xe6#LAs\t\xe6\x9cg\xb6Oft\">\x11\xa5퀡\x14n\bn\xcc\x1e\xd1*\xef\xb4\xe5|\x90F\xa3\x9d\x93Nq7jN\x95\xfe5\"q\xaaO\a\xeb\xbc\x10a\x87\x10}\x9ay\xd5\xc1;\vk1\xa2Y\v\xc2\xff\x9d\xf6\xc40\xb5\x89ҿ'\xfe|\x8f\xcf\x15\v[\xa7!\xaa\x1bv\xb1B˓\xba\xf1(g\x83\x92|\xe8A\xd7\xc9\x1d\\\x001c\xb3N\xf1\xb2\xb7\xeeLui\x80\xa1\\<\x83\xde\xcfe\xf3Ka\xd9\xee*=\v\xb9\xaes\x8cԎ)\x81\xe9\ni\xa7\xdc*\x86\x18j\x92y]v\xcdR\xac\v\x86kb\xd9\xdd%\xbc\x19\x82\xe9\x8eJ\x18\x12\xad\x93Q\xd9;X\xd7_^\x86b\x8f˱\x9f\xe5\x99:X\a\x9cMa\v\xb3\x1b\xf2\x05\xecĂ#\xfd\xdb\xfe\xc8FUsW{D\xc6\x10\xd0r\xf5\bn\x98\xc1\x17\xff\xbdG\xfcA\x10\xbe\xc8\xef\xb2\xef\xfbd7Qn\xf4\x80\xf2Q\x1a,\xee\xf2:\u007f\xd6Q\xff\x18j\xfa\xd0\xc6\xf1\x12U\v\xb7G\xa1\x8d\xd8\x19|\xf6\xe7\x93\x15W\xfe])\xf0B\xdd.D\xa7\x87\xd9\xcd\xe9T\x9fN\xf5!vS^\rik\xaa\x1e8\xc4\x12\xbc\xb6Z\x95\x9c\x9aAH\x89\x9eQ\xdd]\xbeo^\xbd\x9a=Q\xf2Q:[\xe6\x94z\xf8\xe9\xe7\xa6xE\xb5\x9dp$\xe1_\x01\x00\x00\xff\xffF)\xacD\xc4\n\x00\x00"), } var CRDs = crds() diff --git a/pkg/apis/velero/v1/volume_snapshot_location.go b/pkg/apis/velero/v1/volume_snapshot_location.go index 080832e8d..e1c124e07 100644 --- a/pkg/apis/velero/v1/volume_snapshot_location.go +++ b/pkg/apis/velero/v1/volume_snapshot_location.go @@ -16,10 +16,7 @@ limitations under the License. package v1 -import ( - corev1api "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -60,10 +57,6 @@ type VolumeSnapshotLocationSpec struct { // Config is for provider-specific configuration fields. // +optional Config map[string]string `json:"config,omitempty"` - - // Credential contains the credential information intended to be used with this location - // +optional - Credential *corev1api.SecretKeySelector `json:"credential,omitempty"` } // VolumeSnapshotLocationPhase is the lifecycle phase of a Velero VolumeSnapshotLocation. diff --git a/pkg/apis/velero/v1/zz_generated.deepcopy.go b/pkg/apis/velero/v1/zz_generated.deepcopy.go index f2efd4e45..145c5eb7a 100644 --- a/pkg/apis/velero/v1/zz_generated.deepcopy.go +++ b/pkg/apis/velero/v1/zz_generated.deepcopy.go @@ -1653,11 +1653,6 @@ func (in *VolumeSnapshotLocationSpec) DeepCopyInto(out *VolumeSnapshotLocationSp (*out)[key] = val } } - if in.Credential != nil { - in, out := &in.Credential, &out.Credential - *out = new(corev1.SecretKeySelector) - (*in).DeepCopyInto(*out) - } return } diff --git a/pkg/cmd/cli/snapshotlocation/create.go b/pkg/cmd/cli/snapshotlocation/create.go index 940c8a2cc..824156eac 100644 --- a/pkg/cmd/cli/snapshotlocation/create.go +++ b/pkg/cmd/cli/snapshotlocation/create.go @@ -23,11 +23,9 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/spf13/pflag" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" - "github.com/vmware-tanzu/velero/pkg/builder" "github.com/vmware-tanzu/velero/pkg/client" "github.com/vmware-tanzu/velero/pkg/cmd" "github.com/vmware-tanzu/velero/pkg/cmd/util/flag" @@ -56,19 +54,15 @@ func NewCreateCommand(f client.Factory, use string) *cobra.Command { } type CreateOptions struct { - Name string - Provider string - Config flag.Map - Labels flag.Map - Credential flag.Map - secretName string - secretKey string + Name string + Provider string + Config flag.Map + Labels flag.Map } func NewCreateOptions() *CreateOptions { return &CreateOptions{ - Config: flag.NewMap(), - Credential: flag.NewMap(), + Config: flag.NewMap(), } } @@ -76,7 +70,6 @@ func (o *CreateOptions) BindFlags(flags *pflag.FlagSet) { flags.StringVar(&o.Provider, "provider", o.Provider, "Name of the volume snapshot provider (e.g. aws, azure, gcp).") flags.Var(&o.Config, "config", "Configuration key-value pairs.") flags.Var(&o.Labels, "labels", "Labels to apply to the volume snapshot location.") - flags.Var(&o.Credential, "credential", "The credential to be used by this location as a key-value pair, where the key is the Kubernetes Secret name, and the value is the data key name within the Secret. Optional, one value only.") } func (o *CreateOptions) Validate(c *cobra.Command, args []string, f client.Factory) error { @@ -88,15 +81,6 @@ func (o *CreateOptions) Validate(c *cobra.Command, args []string, f client.Facto return errors.New("--provider is required") } - if len(o.Credential.Data()) > 1 { - return errors.New("--credential can only contain 1 key/value pair") - } - - for k, v := range o.Credential.Data() { - o.secretName = k - o.secretKey = v - break - } return nil } @@ -113,9 +97,8 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { Labels: o.Labels.Data(), }, Spec: api.VolumeSnapshotLocationSpec{ - Provider: o.Provider, - Config: o.Config.Data(), - Credential: builder.ForSecretKeySelector(o.secretName, o.secretKey).Result(), + Provider: o.Provider, + Config: o.Config.Data(), }, } diff --git a/pkg/cmd/cli/snapshotlocation/set.go b/pkg/cmd/cli/snapshotlocation/set.go index f6b8ac368..851542661 100644 --- a/pkg/cmd/cli/snapshotlocation/set.go +++ b/pkg/cmd/cli/snapshotlocation/set.go @@ -27,10 +27,8 @@ import ( kbclient "sigs.k8s.io/controller-runtime/pkg/client" velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" - "github.com/vmware-tanzu/velero/pkg/builder" "github.com/vmware-tanzu/velero/pkg/client" "github.com/vmware-tanzu/velero/pkg/cmd" - "github.com/vmware-tanzu/velero/pkg/cmd/util/flag" "github.com/vmware-tanzu/velero/pkg/cmd/util/output" ) @@ -41,6 +39,9 @@ func NewSetCommand(f client.Factory, use string) *cobra.Command { Use: use + " NAME", Short: "Set specific features for a snapshot location", Args: cobra.ExactArgs(1), + // Mark this command as hidden until more functionality is added + // as part of https://github.com/vmware-tanzu/velero/issues/2426 + Hidden: true, Run: func(c *cobra.Command, args []string) { cmd.CheckError(o.Complete(args, f)) cmd.CheckError(o.Validate(c, args, f)) @@ -53,18 +54,14 @@ func NewSetCommand(f client.Factory, use string) *cobra.Command { } type SetOptions struct { - Name string - Credential flag.Map + Name string } func NewSetOptions() *SetOptions { - return &SetOptions{ - Credential: flag.NewMap(), - } + return &SetOptions{} } -func (o *SetOptions) BindFlags(flags *pflag.FlagSet) { - flags.Var(&o.Credential, "credential", "Sets the credential to be used by this location as a key-value pair, where the key is the Kubernetes Secret name, and the value is the data key name within the Secret. Optional, one value only.") +func (o *SetOptions) BindFlags(*pflag.FlagSet) { } func (o *SetOptions) Validate(c *cobra.Command, args []string, f client.Factory) error { @@ -72,10 +69,6 @@ func (o *SetOptions) Validate(c *cobra.Command, args []string, f client.Factory) return err } - if len(o.Credential.Data()) > 1 { - return errors.New("--credential can only contain 1 key/value pair") - } - return nil } @@ -99,11 +92,6 @@ func (o *SetOptions) Run(c *cobra.Command, f client.Factory) error { return errors.WithStack(err) } - for name, key := range o.Credential.Data() { - location.Spec.Credential = builder.ForSecretKeySelector(name, key).Result() - break - } - if err := kbClient.Update(context.Background(), location, &kbclient.UpdateOptions{}); err != nil { return errors.WithStack(err) }