From 3c6a04f884a12e21e73d0641286641c7195c4eca Mon Sep 17 00:00:00 2001 From: Ariel Mashraki <7413593+a8m@users.noreply.github.com> Date: Sat, 18 Apr 2020 12:28:50 +0300 Subject: [PATCH] entc/gen: add default-funcs and validators for userdefined id (#436) Fixes #432 --- entc/gen/internal/bindata.go | 12 +++++----- entc/gen/template/builder/create.tmpl | 7 +++--- entc/gen/template/meta.tmpl | 5 ++-- entc/gen/template/runtime.tmpl | 5 ++-- entc/gen/type.go | 12 ++++++++-- entc/integration/customid/customid_test.go | 9 +++---- entc/integration/customid/ent/blob/blob.go | 2 ++ entc/integration/customid/ent/blob_create.go | 4 ++++ entc/integration/customid/ent/pet/pet.go | 5 ++++ entc/integration/customid/ent/pet_create.go | 5 ++++ entc/integration/customid/ent/runtime.go | 25 ++++++++++++++++++++ entc/integration/customid/ent/schema/blob.go | 3 ++- 12 files changed, 74 insertions(+), 20 deletions(-) diff --git a/entc/gen/internal/bindata.go b/entc/gen/internal/bindata.go index 67dbad1fc..5cc4f1ab1 100644 --- a/entc/gen/internal/bindata.go +++ b/entc/gen/internal/bindata.go @@ -145,7 +145,7 @@ func templateBaseTmpl() (*asset, error) { return a, nil } -var _templateBuilderCreateTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x56\x51\x6f\xdb\x36\x10\x7e\x96\x7e\xc5\x55\x50\x01\x29\x70\xe4\xb4\x6f\x4b\xe0\x01\x5d\x9a\x6e\x06\xb6\x6e\x80\x93\xa2\x40\x5b\x14\x8c\x74\xb2\x09\x4b\xa4\x4a\x52\x6e\x02\x43\xff\x7d\x38\x52\xa2\x25\xd7\xed\x96\x3e\x89\x12\xef\xbe\xbb\xfb\xee\xe3\x51\xfb\xfd\xfc\x2c\xbc\x96\xcd\xa3\xe2\xeb\x8d\x81\x97\x17\x2f\x7e\x39\x6f\x14\x6a\x14\x06\xde\xb0\x1c\xef\xa5\xdc\xc2\x52\xe4\x19\xbc\xaa\x2a\xb0\x46\x1a\x68\x5f\xed\xb0\xc8\xc2\xdb\x0d\xd7\xa0\x65\xab\x72\x84\x5c\x16\x08\x5c\x43\xc5\x73\x14\x1a\x0b\x68\x45\x81\x0a\xcc\x06\xe1\x55\xc3\xf2\x0d\xc2\xcb\xec\x62\xd8\x85\x52\xb6\xa2\x08\xb9\xb0\xfb\x7f\x2e\xaf\x6f\xde\xae\x6e\xa0\xe4\x15\x42\xff\x4d\x49\x69\xa0\xe0\x0a\x73\x23\xd5\x23\xc8\x12\xcc\x28\x98\x51\x88\x59\x78\x36\xef\xba\x30\xdc\xef\xa1\xc0\x92\x0b\x84\x28\x57\xc8\x0c\x46\xd0\x75\xf4\x35\x6e\xb6\x6b\xb8\x5c\xc0\x3d\xd3\x08\x71\x76\x2d\x45\xc9\xd7\xd9\x3f\x2c\xdf\xb2\x35\x42\xef\x6a\xb0\x6e\x2a\x66\x10\xa2\x0d\xb2\x02\x55\x04\xf1\xb7\x5b\xbc\x6e\xa4\x32\xc3\x96\x7b\x83\x24\x0c\xf6\xfb\x73\x50\x4c\xac\x11\xe2\x86\x99\x0d\x05\x8b\xb3\x15\xbf\xaf\xb8\x58\x2f\xad\x95\x26\x8f\x20\x88\x6c\x3a\x64\xd2\x75\x91\xf3\x43\x51\xd0\x5e\x6a\x43\xc5\xf7\x2d\xaf\x88\xae\xcb\x05\x34\x8a\x0b\x03\x49\xc3\x74\xce\x2a\x88\xb3\xb7\xac\xc6\x14\xa2\xeb\x69\x6d\x0a\x73\xe4\x3b\xe7\xe1\xd7\x1e\x86\xd2\x9c\xcf\x61\x8c\xdc\x75\xd4\x1d\xa2\x76\xf8\x52\x4a\x05\x96\x31\x2e\xd6\xc0\xac\xb1\x0d\x46\xa6\x28\x0c\x37\x8f\x59\x68\x1e\x1b\x3c\x86\xd1\x46\xb5\xb9\x81\x7d\x18\xe4\x96\xd2\x30\xa8\x5b\xc3\x0c\x97\x02\xce\xf6\x7b\x80\x38\xfb\xab\x7f\xef\xd1\xc2\x60\x23\xe5\x56\xc3\x87\x4f\x7f\x48\xb9\x0d\x1d\xbb\x5f\xb9\xd9\x00\x3e\x18\xe2\x21\x86\xe8\x37\x87\x1f\x4d\x6a\x08\x26\x5d\xd0\x68\x0c\x59\x64\x3d\x07\x3d\x83\x54\xe8\x8a\xed\xd0\xd5\x82\xae\xc6\x49\x31\xbd\xa4\x0a\x66\x18\x69\x21\x0b\xcb\x56\xe4\x90\x4c\x68\xec\x3a\x9b\xfc\x28\x7a\x6a\x51\x93\xdc\x3c\x40\x2e\x85\xc1\x07\x43\x12\xa2\x67\x0a\xc9\xd9\x38\xc0\x0c\x50\x29\xa9\x52\xa2\x84\x5a\x1b\x7b\x3e\x7c\x3b\x0f\x81\xa2\x6c\xd8\x8d\xfa\x12\xbd\x86\x3e\xcf\x20\x2e\x9d\x88\xde\x70\xac\x8a\x5e\x3c\x64\xc1\x4b\x90\x0a\xe2\x32\x7b\x8d\x25\x6b\x2b\x03\x89\x90\x86\xde\xff\x6e\x08\x8a\x55\xa9\xb3\x0d\x78\x09\x9f\x67\x20\xb7\x04\x43\x39\xfa\x54\xba\x2e\xa3\xf7\xd2\x37\xe7\x77\x34\xd0\x75\x49\x7a\x05\xcf\xe4\x96\x52\x0f\x7c\xa8\x51\x1c\x87\x1a\x04\xbb\x01\x70\x74\x80\x7a\xc0\xde\xb4\x27\x63\xbf\x3f\x24\xbb\xd4\xb7\xbc\x46\xb7\xba\xbb\x5b\xbe\xb6\xf1\x0e\x9d\x0b\x5c\xc8\x69\x92\x2b\x34\x0e\x76\x65\x65\x66\x89\x20\xbf\x5d\xea\x33\xc4\x4a\xa3\xf7\x57\x68\x5a\x25\x40\xf0\xaa\x6f\x83\xce\xde\xe2\xd7\x24\x1a\x06\x40\xd7\x5d\x42\xcd\xb5\x26\x91\x2b\xfc\xd2\x72\x85\x05\x94\x16\xf5\x63\xe4\x22\xf5\x99\x7f\x8c\xa2\x51\x0c\x9f\xe2\xd0\x02\xff\x85\x5e\xac\x7a\x5d\x91\xef\x58\xc5\x0b\x66\xa4\xd2\xae\xd0\x1b\xd1\xd6\x87\x66\xec\x9e\xda\x0c\xdf\x0b\x5e\x52\x3d\xdf\xa7\xdd\xc7\x75\xec\x5c\x59\xeb\x67\x0b\x62\xa2\x47\x98\x70\x53\xd6\x26\xbb\x21\x7e\xca\x29\x37\x3b\x0f\x53\x32\x5e\x11\x37\xb4\x3c\xcd\xcf\x25\x3c\xdf\x45\x96\x66\x47\xd4\x49\x7e\x8e\xd7\x23\x71\xa3\x13\xf7\x4d\xb1\xc6\xa9\xb6\xad\x98\xd1\x8b\xb9\xa7\x6f\x50\x23\x66\x77\x82\x7f\x69\x7d\xcf\xff\x4b\xe3\x78\xa4\x9d\xe5\xeb\x89\xca\x8f\x25\xc4\x4b\xa8\x50\x24\xff\x0f\x49\x27\x69\x0a\x8b\x05\x5c\x8c\xb0\x0e\x6a\xfe\x29\x31\x62\xb1\xc6\x9e\x6b\x3c\xd6\xe2\x8f\xc8\xdd\x31\x45\x97\x50\x40\x7d\xb7\xc1\xc2\x20\x10\x74\x0b\x4f\x86\x53\x18\xa4\xe1\xb8\xc4\xd1\xc4\xcb\xec\x58\x1e\x95\x43\xde\x36\x71\x70\xc4\x8e\x6d\x2d\xe6\xca\x48\xe5\x44\x38\xcc\xc6\x34\x0c\x3a\xc7\x26\x01\x50\x4a\x75\x6b\xc0\xca\x5a\x12\x8c\x5d\xe1\x9b\x56\xe4\x09\x4d\xdd\x53\xe3\x74\x06\x35\x0c\xe7\x20\x85\xe4\x1d\xab\x5a\x1c\x8f\xd4\xc0\xdf\x2f\x43\xd3\xeb\xac\x1f\xc0\x47\x17\x4d\xda\x1f\xba\xc3\x40\xfb\xde\x09\x68\x05\x3e\x34\x98\x1b\x2c\xc0\xf7\xdc\xde\x75\xcf\x6f\xa3\x19\xd4\x9e\xfb\xe3\xf1\x04\x0b\x6f\x4f\xbb\x3f\x47\xd8\x21\xad\xc1\x3d\x0c\x02\x9b\x3c\x9d\x3d\x4e\x15\xfe\xa0\x5b\xe7\xf0\xe2\x0a\x38\xfc\xba\x80\x8b\x2b\xe0\xe7\xe7\x9e\xa2\x13\x39\x58\x97\x0f\xfc\x53\x52\xb7\x86\xf0\xa9\x24\x77\x7a\xfa\xd1\x52\xb7\xc6\x91\x68\x73\x9b\x1d\x1f\xa7\x13\x53\xe5\x48\xe2\x0e\xb4\x0b\xbf\x2d\xe9\x70\x33\xbf\x87\x9c\x55\x95\x76\xb7\x34\x13\x05\x34\x4c\xf0\x5c\xd3\xd9\xb6\x9f\x9c\xab\x06\x26\x5c\xd7\x9f\x74\x41\xbf\x3f\x7d\x43\x4f\xce\x00\x65\xbe\x9b\x8d\xc7\xe9\x98\xa4\x51\x67\xfa\x99\x3b\xaa\xd7\xa6\x9a\xb8\x89\x77\xa8\x72\xf7\xc4\x9f\x98\xd8\xd4\x4d\xe5\xff\x06\x4a\x88\x0a\xce\x2a\xcc\xcd\xfc\xb9\x9e\x0f\x3f\xad\x63\xb1\x58\xa7\x07\xff\xeb\xe3\xdc\x8f\xff\x7b\xfc\xf2\xdf\x00\x00\x00\xff\xff\x63\x35\x51\xc8\xc6\x0b\x00\x00") +var _templateBuilderCreateTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x56\x6f\x6f\xdb\x36\x13\x7f\x2d\x7d\x8a\xab\xa0\x02\x52\x60\xcb\x69\xdf\x3d\x09\xfc\x00\x5d\x92\x6e\x06\xb6\x6e\x80\x9b\xa2\x40\x5b\x0c\x8c\x74\xb2\x09\x4b\xa4\x4a\x52\x6e\x02\x43\xdf\x7d\x38\x52\xa2\x25\xd7\xed\xd6\xbe\x12\x45\xde\xdf\xdf\xfd\xee\xc8\xc3\x61\x71\x11\xde\xc8\xe6\x49\xf1\xcd\xd6\xc0\xcb\xcb\x17\xff\x9b\x37\x0a\x35\x0a\x03\xaf\x59\x8e\x0f\x52\xee\x60\x25\xf2\x0c\x5e\x55\x15\x58\x21\x0d\x74\xae\xf6\x58\x64\xe1\xdb\x2d\xd7\xa0\x65\xab\x72\x84\x5c\x16\x08\x5c\x43\xc5\x73\x14\x1a\x0b\x68\x45\x81\x0a\xcc\x16\xe1\x55\xc3\xf2\x2d\xc2\xcb\xec\x72\x38\x85\x52\xb6\xa2\x08\xb9\xb0\xe7\xbf\xaf\x6e\xee\xde\xac\xef\xa0\xe4\x15\x42\xbf\xa7\xa4\x34\x50\x70\x85\xb9\x91\xea\x09\x64\x09\x66\xe4\xcc\x28\xc4\x2c\xbc\x58\x74\x5d\x18\x1e\x0e\x50\x60\xc9\x05\x42\x94\x2b\x64\x06\x23\xe8\x3a\xda\x8d\x9b\xdd\x06\xae\x96\xf0\xc0\x34\x42\x9c\xdd\x48\x51\xf2\x4d\xf6\x17\xcb\x77\x6c\x83\xd0\xab\x1a\xac\x9b\x8a\x19\x84\x68\x8b\xac\x40\x15\x41\xfc\xf5\x11\xaf\x1b\xa9\xcc\x70\xe4\xfe\x20\x09\x83\xc3\x61\x0e\x8a\x89\x0d\x42\xdc\x30\xb3\x25\x67\x71\xb6\xe6\x0f\x15\x17\x9b\x95\x95\xd2\xa4\x11\x04\x91\x0d\x87\x44\xba\x2e\x72\x7a\x28\x0a\x3a\x4b\xad\xab\xf8\xa1\xe5\x15\xc1\x75\xb5\x84\x46\x71\x61\x20\x69\x98\xce\x59\x05\x71\xf6\x86\xd5\x98\x42\x74\x33\xcd\x4d\x61\x8e\x7c\xef\x34\xfc\xda\x9b\xa1\x30\x17\x0b\x18\x5b\xee\x3a\xaa\x0e\x41\x3b\xec\x94\x52\x81\x45\x8c\x8b\x0d\x30\x2b\x6c\x9d\x91\x28\x0a\xc3\xcd\x53\x16\x9a\xa7\x06\x4f\xcd\x68\xa3\xda\xdc\xc0\x21\x0c\x72\x0b\x69\x18\xd4\xad\x61\x86\x4b\x01\x17\x87\x03\x40\x9c\xfd\xd1\xff\xf7\xd6\xc2\x60\x2b\xe5\x4e\xc3\x87\x4f\xbf\x49\xb9\x0b\x1d\xba\x5f\xb8\xd9\x02\x3e\x1a\xc2\x21\x86\xe8\x17\x67\x3f\x9a\xe4\x10\x4c\xaa\xa0\xd1\x18\x92\xc8\x7a\x0c\x7a\x04\x29\xd1\x35\xdb\xa3\xcb\x05\x5d\x8e\x93\x64\x7a\x4a\x15\xcc\x30\xe2\x42\x16\x96\xad\xc8\x21\x99\xc0\xd8\x75\x36\xf8\x91\xf7\xd4\x5a\x4d\x72\xf3\x08\xb9\x14\x06\x1f\x0d\x51\x88\xbe\x29\x24\x17\x63\x07\x33\x40\xa5\xa4\x4a\x09\x12\x2a\x6d\xec\xf1\xf0\xe5\x3c\x3a\x8a\xb2\xe1\x34\xea\x53\x9c\x43\x5c\x72\xac\x0a\xed\xf8\xf3\xda\xad\xbb\xee\x70\x00\x5e\x42\x9c\xad\x6e\xb3\x7b\x8d\xea\xd6\x92\xbc\x70\x07\x83\xc6\x12\x58\xd3\x58\x08\xfb\x0d\x12\x77\x22\x3d\x3c\x63\x92\x96\xd6\x43\x39\x38\x08\x03\x7b\xc8\x4b\x90\x0a\xe2\x32\xbb\xc5\x92\xb5\x95\x81\x84\x89\x02\x12\x21\x0d\x6d\xfe\xd9\x50\xac\xac\x4a\x21\x11\xd6\x04\x79\x48\x53\xa7\x1e\xf0\x12\xfe\x9e\x81\xdc\x91\x61\x0a\xcb\x67\xde\x75\x99\x0d\xd3\x73\xe1\x57\x34\xd0\x75\x49\x7a\x0d\xcf\xe4\x8e\x90\x0a\xbc\xf7\x91\x6b\x67\x35\x08\xf6\x83\xc1\x51\xbf\xf6\x06\x7b\xd1\x1e\x7b\x07\x92\x8b\x7f\xa5\xdf\xf2\x1a\xdd\xea\xfe\xde\xe2\x90\xa4\x23\x24\x9c\xcb\x69\x90\x6b\x34\xce\xec\xda\xb2\xda\x82\x4f\x7a\xfb\xd4\x47\x88\x95\x46\xaf\xaf\xd0\xb4\x4a\x80\xe0\x55\x5f\x75\x9d\xbd\xc1\x2f\x49\x34\xcc\x9b\xae\xbb\x82\x9a\x6b\x4d\x3d\xa5\xf0\x73\xcb\x15\x16\x60\x11\x87\x8f\x91\xf3\xd4\x47\xfe\x31\x8a\x46\x3e\x7c\x88\x43\x55\xfc\x0e\xfd\xd8\x66\x71\x49\xbe\x63\x15\x2f\x98\x91\x4a\xbb\x44\xef\x44\x5b\x1f\x8b\xb1\xff\xd1\x62\xf8\x5a\xf0\x92\xf2\xf9\x36\xec\xde\xaf\x43\xe7\xda\x4a\x3f\x5b\x12\x12\xbd\x85\x09\x36\x65\x6d\xb2\x3b\xc2\xa7\x9c\x62\xb3\xf7\x66\x4a\xc6\x2b\xc2\x86\x96\xe7\xf1\xb9\x82\xe7\xfb\xc8\xc2\xec\x80\x3a\x8b\xcf\xe9\xba\xa7\x3a\xba\x66\xba\x2b\x36\x38\xa5\xba\xa5\x35\x7a\x5a\xf7\xd0\x0d\x4c\xc4\xec\x5e\xf0\xcf\xad\xaf\xf7\xbf\xf1\x1b\x4f\x78\xb3\xba\x9d\x30\xfc\x94\x3e\xbc\x84\x0a\x45\xf2\xdf\x2c\xe9\x24\x4d\x61\xb9\x84\xcb\x91\xad\x23\x93\x7f\x8a\x88\x58\x6c\xb0\xc7\x19\x4f\x79\xf8\x3d\x60\xf7\x4c\xd1\x7d\x17\x50\xcd\xad\xb3\x30\x08\x04\x5d\xf8\x93\x39\x18\x06\x69\x38\x4e\x71\x34\x5c\x33\x7b\x03\x8c\xd2\x21\x6d\x1b\x38\x38\x60\xc7\xb2\xd6\xe6\xda\x48\xe5\x08\x38\x8c\xe1\x34\x0c\x3a\x87\x26\x19\xa0\x90\xea\xd6\x80\xa5\xb4\x24\x33\x76\x85\xaf\x5b\x91\x27\x34\xe0\xcf\x4d\xee\x19\xd4\x30\xf4\x40\x0a\xc9\x3b\x56\xb5\x38\x9e\xde\x81\xbf\xca\x86\xa2\xd7\x59\x3f\xeb\x4f\xee\xb4\xb4\x6f\xb8\xe3\x30\xfb\x16\xfb\x5b\x81\x8f\x0d\xe6\x06\x0b\xf0\x35\xb7\xd7\xea\xf3\xb7\xd1\x0c\x6a\x8f\xfd\xe9\x68\x82\xa5\x97\xa7\xd3\x9f\x03\xec\x18\xd6\xa0\x1e\x06\x81\x0d\x9e\xfa\x8e\x53\x86\xdf\xa9\xd6\x1c\x5e\x5c\x03\x87\xff\x2f\xe1\xf2\x1a\xf8\x7c\xee\x21\x3a\x13\x83\x55\xf9\xc0\x3f\x25\x75\x6b\xc8\x3e\xa5\xe4\xba\xa7\x1f\x2b\x75\x6b\x1c\x88\x36\xb6\xd9\x69\x3b\x9d\x99\x28\x27\x14\x77\x46\xbb\xf0\xeb\x94\x8e\x8f\x80\xf7\x90\xb3\xaa\xd2\xee\x41\x40\xd7\x58\xc3\x04\xcf\x35\xf5\xb6\xdd\x72\xaa\x1a\x98\x70\x55\xff\xa1\xb7\xc0\xfb\xf3\x8f\x81\x49\x0f\x50\xe4\xfb\xd9\x78\x94\x8e\x41\x1a\x55\xa6\x9f\xb7\xa3\x7c\x6d\xa8\x89\x9b\x76\xc7\x2c\xf7\x3f\xf8\x5e\x8a\x4d\xdd\x54\xfe\xe1\x51\x42\x54\x70\x56\x61\x6e\x16\xcf\xf5\x62\x78\x1f\x8f\xc9\x62\x95\x1e\xfd\x2b\xcb\xa9\x9f\x3e\xb1\xfc\xf2\x9f\x00\x00\x00\xff\xff\x62\xc6\x4f\x53\x31\x0c\x00\x00") func templateBuilderCreateTmplBytes() ([]byte, error) { return bindataRead( @@ -160,7 +160,7 @@ func templateBuilderCreateTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template/builder/create.tmpl", size: 3014, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "template/builder/create.tmpl", size: 3121, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -945,7 +945,7 @@ func templateImportTmpl() (*asset, error) { return a, nil } -var _templateMetaTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x57\xdd\x6e\xdb\xb8\x12\xbe\x96\x9e\x62\x20\xb8\x80\x1d\x24\x72\xdb\xbb\x63\x20\x17\x3d\x49\x8a\x1a\xa7\x28\x0a\x24\xed\xcd\xc1\xa2\xa0\xc5\x91\x4d\x94\x22\x55\x92\x72\x9a\x15\xf4\xee\x8b\x21\xa9\xbf\xc4\xde\xdd\xf6\xc6\x30\xc9\xf9\xfd\x38\xf3\x71\xd4\xb6\xeb\x8b\xf4\x46\xd7\x4f\x46\xec\x0f\x0e\xde\xbe\x7e\xf3\x9f\xab\xda\xa0\x45\xe5\xe0\x3d\x2b\x70\xa7\xf5\x77\xd8\xaa\x22\x87\x77\x52\x82\x17\xb2\x40\xe7\xe6\x88\x3c\x4f\x1f\x0e\xc2\x82\xd5\x8d\x29\x10\x0a\xcd\x11\x84\x05\x29\x0a\x54\x16\x39\x34\x8a\xa3\x01\x77\x40\x78\x57\xb3\xe2\x80\xf0\x36\x7f\xdd\x9f\x42\xa9\x1b\xc5\x53\xa1\xfc\xf9\xc7\xed\xcd\xdd\xa7\xfb\x3b\x28\x85\x44\x88\x7b\x46\x6b\x07\x5c\x18\x2c\x9c\x36\x4f\xa0\x4b\x70\x13\x67\xce\x20\xe6\xe9\xc5\xba\xeb\xd2\xb4\x6d\x81\x63\x29\x14\x42\x56\xa1\x63\x19\x84\xcd\x2b\x78\x14\xee\x00\xf8\xd3\xa1\xe2\xb0\x80\xec\x33\x2b\xbe\xb3\x3d\x66\xb0\xc8\xe3\x5f\xb8\xea\xba\x34\x69\x5b\x70\x58\xd5\x92\x39\x84\xec\x80\x8c\xa3\xc9\x20\x27\x2b\x6d\x0b\xa4\x1b\x9d\x8c\x42\xa2\xaa\xb5\x71\x19\x2c\xfc\x51\xa1\x95\x75\xb0\x4c\x93\xf5\x1a\x3e\xb2\x1d\x4a\x38\x68\xc9\xad\xcf\xc2\x3a\x23\xd4\x1e\xa4\xdf\xe6\xa8\xb4\xa3\x25\x9d\xb4\x2d\x48\xfd\x88\x06\x16\xf9\x27\x56\x21\x74\x1d\xb8\xa7\x7a\x48\x9f\x33\xc7\x76\xcc\x62\x9e\x26\xc1\xe6\x35\x64\x6d\x0b\x8b\x3c\xac\xba\x2e\xf3\xfe\xfc\xd6\xf6\x36\xbf\xa1\x18\x98\x72\x64\xe6\x85\xf7\x99\x5f\xc1\xa1\x14\x28\xf9\x09\x47\xa7\x8c\xf5\x6e\xb7\xb7\xf9\xbd\xd3\x86\xed\xf1\x7f\xf8\x14\xdc\x13\xc4\x86\xa9\x3d\xc2\xa2\x84\xcd\x35\x2c\xf2\xf7\x64\xd8\x12\xaa\xa4\x13\xdc\xd0\x41\x39\x9a\xf4\x88\xf7\x91\x07\x89\x7f\x0c\x79\x84\xaa\x1c\xb0\x3a\xa2\x71\xf8\x13\x6a\xa3\x6b\x34\xee\xe9\x44\x36\xc9\xcc\x43\xcc\xa3\x3c\x99\x45\x7f\xc9\xa4\x12\x33\xc2\x90\xd1\x1d\xdf\xa3\x05\x1f\x33\x09\x2e\x90\xef\xc3\x09\x4e\x51\x1a\x33\xf2\xe7\xbf\x90\x10\x0e\x09\x79\x4d\x45\x0b\xa1\xa0\x6a\x1c\x73\x42\x2b\xdb\xe7\xd1\xdb\x8d\x69\x0c\x6a\x27\x12\x58\xb8\xaa\x96\x14\x63\x6d\x84\x72\x25\x64\x5c\x30\x89\x85\x5b\xbf\xb2\x6b\xea\x8f\x75\x11\x03\xb7\xd4\x09\x11\x0e\x88\x8d\xf0\x73\x28\xf2\x60\xc6\x57\xf8\xca\x97\x7f\xd8\x38\x6f\xf6\xc8\x8c\x60\x3b\x89\xcf\xcd\xb6\x2d\x88\x12\x0e\xcc\x3e\xcc\x4d\xff\x9d\xc7\x79\xe3\x89\x12\x34\xf5\xc9\x07\x66\x6f\xb1\x64\x8d\x74\x61\xf1\x95\x49\xc1\x99\xd3\xc6\x52\x13\x35\xd5\x07\xad\xbf\xdb\x70\xf4\x59\x4b\x51\xd0\x0d\xa7\x00\x00\xfe\xea\x54\x2f\xe0\x2f\x76\x10\x9f\x88\x88\xf2\x94\xf2\x4b\x03\xd7\xc0\x38\x9f\xac\xdf\x4c\x8d\xc4\xb8\x93\xde\xa0\x9a\x38\xf2\x65\xf2\x49\x3b\x04\x77\x60\xce\x97\xc2\x80\x1a\xec\x50\xea\x47\x60\x86\x0a\x40\x38\xc1\xa4\xf8\x13\x39\xec\x9e\x02\x1b\x36\xca\x89\x0a\x83\x85\x3a\xb2\x97\x0e\x35\x3f\x88\xfb\x92\x09\x4c\x89\xc0\xea\x5a\x8a\xc2\x6f\xe5\xf0\x70\x40\x83\xa5\x36\x78\x19\x2c\x08\x07\xf6\xa0\x1b\xc9\x61\x87\x10\xd8\x0c\x07\x46\xa8\x98\x50\xc0\x2c\x94\x5a\x4a\xfd\x68\x37\x5e\xc5\xff\x24\x41\x14\xbe\x45\x52\xb8\xd1\xaa\x14\xfb\x81\x4d\xbb\x6e\x1d\xe3\xcc\xa2\xce\x14\x90\x23\x33\x44\x92\x67\x80\x49\xc2\xff\xff\x93\xdd\xc9\xc9\x1f\xa8\x5c\x4e\x8b\xa8\xd8\x1b\x4b\x4e\xdf\x57\x92\x24\x71\x41\x7a\xe1\xef\x29\xcd\x93\xb4\x15\xf4\xa3\x61\x46\x6f\x46\x99\xf7\xf5\xb6\x54\xda\xd1\x7a\x6b\xef\x54\x53\xad\xa2\x6c\xe0\x04\x1e\x65\x02\xd3\x45\x8d\xd8\x9f\x5e\x2a\x72\x43\x2f\x37\xa3\x87\x7e\xf3\xc8\x64\xe3\x6f\xb4\x30\x18\xee\xb1\xd4\xa6\x27\x8b\x09\xef\x79\x42\xcb\xa3\xf3\x99\xcd\xb1\x51\x28\xcc\x07\x51\x61\xf8\xf7\xe5\xcb\xf6\x16\xba\xae\x6c\x54\xb1\x5c\xc1\xd0\x59\xc1\xec\x03\x3d\x39\x63\xe2\x03\x48\x03\xbe\x65\xfe\xa5\xe6\xcc\xe1\xed\xe0\xe8\x5c\xe2\x33\xb9\xdf\x4e\xbf\xf1\x56\x7e\x33\xf9\x31\xf3\xdf\xca\xd7\xcf\x0b\x8b\x32\x9f\xf0\xca\x34\x5d\x4f\xce\x21\xd7\x41\x62\x26\xe0\xdf\xef\xcd\x35\x0c\x14\x49\x31\xc0\xf2\x95\x5d\x01\x1a\xa3\x4d\xf6\x2c\x82\x1e\x19\x15\xd3\x13\x16\x18\x21\x11\x4d\xf7\x18\x64\x33\x10\xb2\x88\x02\x6c\x1d\x29\x14\x4c\xca\x91\x26\x76\x8d\x90\x1c\x0d\x91\x09\x75\x3b\x58\x76\xc4\x11\xaf\xde\x8f\x27\xf3\x33\x40\x4c\x17\xab\x39\x0f\xaf\x2f\xfa\x39\xab\x68\xac\xd3\x55\x98\x57\x28\x4a\x54\x4d\x15\xc2\xb2\xe0\x67\xb2\xf1\x1d\xfd\x76\x79\x62\x3a\xf0\xc4\xdf\xdf\x17\x35\x54\xef\x7b\x7d\x01\xba\x12\x81\x19\x7b\x96\xf3\x51\x97\x86\xfc\x1d\xd0\xfb\xcc\x83\x93\xf8\x32\x92\xfa\xe6\x1a\x9c\x11\x55\x4f\x44\x11\xe6\xfc\x3e\xbc\xbd\x8b\x09\x43\x4d\x9e\xea\xe0\x37\xe6\x64\x07\xeb\x67\x6a\x6f\xcc\x91\x00\xf5\x82\x53\x2b\xe1\x99\x4f\xd3\x69\xe7\xcc\x7b\x86\xf6\xd7\x17\x00\xa5\x50\xdc\xdb\xf7\xaa\xfe\x21\x38\xd3\x0f\x94\x67\x1c\x98\xa6\xac\x45\x90\xf6\x85\x48\xe0\xcd\xaa\x54\x94\x80\x3f\xe8\x7c\xf4\xff\xd5\xf7\x56\x94\x79\x51\xca\x64\xc1\xe7\xb8\x18\x65\x5e\xd6\xe5\x34\xb6\x49\xda\xa1\xb6\x92\x30\x01\x07\xbc\xe6\x04\x00\xd7\x53\x4b\x43\x94\xf3\xbe\x3b\x55\x7c\x2f\xef\xc9\x43\xe2\x07\xa2\x61\xe0\xfe\xb7\xb0\xbc\xcc\x73\x66\xb9\x1f\xaa\xc2\x3c\x15\x8c\x8e\x41\xad\x28\x96\xd0\xc9\x76\xaa\xb6\x82\x50\x5e\xcb\x55\x3f\xe3\xb5\xa4\x6c\xd0\x35\x46\xc5\xad\xa5\x5d\xa5\x49\xd2\xa5\xe9\xa4\x01\x9f\x33\xc8\xd5\x50\xca\xcc\xec\xe9\xd4\x60\x81\xe2\x18\xc6\xdd\xff\x86\x86\x7e\x1f\xc7\xd8\xf4\x97\x38\x83\xec\x0d\x84\x11\xca\x2d\x82\xf8\x4b\xe4\xe1\x73\x9f\xf8\x5c\x8e\xb6\xe7\x78\x78\x92\x0b\x28\xd8\x47\xe1\x8a\x03\x4c\x25\xfd\x5d\x14\xcc\xfa\xbe\x89\x77\x26\x4e\xdc\x59\xa0\x06\x45\xa7\xf0\x1a\xba\xee\xf2\x19\x85\xdf\x3b\xd3\x14\xae\x47\xa4\x6d\xa1\x66\xb6\x60\x32\xdc\xdf\x20\xbb\x09\x95\x19\x6f\x43\x09\xe9\xd7\xb1\x84\xe7\x87\x65\xe5\xf2\x3b\x0a\xbd\x5c\x86\xb1\x66\x64\x8b\x0d\x08\xe5\xc1\x9d\xa0\xe7\x31\x3e\xf1\x2e\x6d\xe0\xd5\x8f\xec\x72\x92\x32\x5d\x7d\xd2\xf9\xfb\x4f\x46\x22\x3d\xf7\x4d\xe9\x67\x68\xc6\xb9\xa0\xc7\x9f\xc9\xfe\xe3\xf2\x39\x03\xbf\x1b\x55\x3c\x75\x14\x4c\xd1\x0c\xa7\x8f\x68\x8c\xe0\x61\x88\xd3\xc6\x7f\x78\x6b\x3f\xa6\x8e\x26\xc3\x17\x7a\x5f\x21\x9e\xc1\x22\xc7\xe6\x03\x6b\x4f\x3f\xa4\x67\xd1\x4c\xa0\x4d\xff\x0a\x00\x00\xff\xff\x63\x70\x08\x4f\x35\x10\x00\x00") +var _templateMetaTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x57\x5f\x6f\xdb\x36\x10\x7f\x96\x3e\xc5\x41\x70\x01\x3b\x48\xe4\xb6\x6f\x0b\x90\x87\x2e\x49\xd1\x60\x45\x51\x20\x49\x5f\x86\xa1\xa0\xc5\x93\x4d\x94\x22\x55\x92\x72\x9a\x09\xfe\xee\x03\x8f\x94\x44\x25\xce\xb6\xf6\xc5\x30\xc9\xbb\xdf\xfd\xe1\xdd\x8f\xa7\xbe\x5f\x9f\xe4\x97\xba\x7d\x34\x62\xbb\x73\xf0\xf6\xf5\x9b\xdf\xce\x5a\x83\x16\x95\x83\xf7\xac\xc2\x8d\xd6\xdf\xe0\x46\x55\x25\xbc\x93\x12\x48\xc8\x82\x3f\x37\x7b\xe4\x65\x7e\xb7\x13\x16\xac\xee\x4c\x85\x50\x69\x8e\x20\x2c\x48\x51\xa1\xb2\xc8\xa1\x53\x1c\x0d\xb8\x1d\xc2\xbb\x96\x55\x3b\x84\xb7\xe5\xeb\xe1\x14\x6a\xdd\x29\x9e\x0b\x45\xe7\x1f\x6f\x2e\xaf\x3f\xdd\x5e\x43\x2d\x24\x42\xdc\x33\x5a\x3b\xe0\xc2\x60\xe5\xb4\x79\x04\x5d\x83\x4b\x8c\x39\x83\x58\xe6\x27\xeb\xc3\x21\xcf\xfb\x1e\x38\xd6\x42\x21\x14\x0d\x3a\x56\x40\xd8\x3c\x83\x07\xe1\x76\x80\x3f\x1c\x2a\x0e\x0b\x28\x3e\xb3\xea\x1b\xdb\x62\x01\x8b\x32\xfe\x85\xb3\xc3\x21\xcf\xfa\x1e\x1c\x36\xad\x64\x0e\xa1\xd8\x21\xe3\x68\x0a\x28\x3d\x4a\xdf\x83\xd7\x8d\x46\x26\x21\xd1\xb4\xda\xb8\x02\x16\x74\x54\x69\x65\x1d\x2c\xf3\x6c\xbd\x86\x8f\x6c\x83\x12\x76\x5a\x72\x4b\x51\x58\x67\x84\xda\x82\xa4\x6d\x8e\x4a\x3b\xbf\xf4\x27\x7d\x0f\x52\x3f\xa0\x81\x45\xf9\x89\x35\x08\x87\x03\xb8\xc7\x76\x0c\x9f\x33\xc7\x36\xcc\x62\x99\x67\x01\xf3\x02\x8a\xbe\x87\x45\x19\x56\x87\x43\x41\xf6\x68\xeb\xe6\xaa\xbc\xf4\x3e\x30\xe5\x3c\xcc\x33\xeb\x33\xbb\x82\x43\x2d\x50\xf2\x23\x86\x8e\x81\x0d\x66\x6f\xae\xca\x5b\xa7\x0d\xdb\xe2\x1f\xf8\x18\xcc\xfb\x14\x1b\xa6\xb6\x08\x8b\x1a\xce\x2f\x60\x51\xbe\xf7\xc0\xd6\x67\xd5\xeb\x04\x33\xfe\xa0\x9e\x20\x29\xe3\x83\xe7\x41\xe2\x3f\x5d\x9e\x52\x55\x8f\xb9\xda\xa3\x71\xf8\x03\x5a\xa3\x5b\x34\xee\xf1\x48\x34\xd9\xcc\x42\x8c\xa3\x3e\x1a\xc5\x70\xc9\x5e\x25\x46\x84\x21\xa2\x6b\xbe\x45\x0b\xe4\xb3\x17\x5c\x20\xdf\x86\x13\x4c\xb3\x34\x45\x44\xe7\x3f\x11\x10\x8e\x01\x91\xa6\xf2\x0b\xa1\xa0\xe9\x1c\x73\x42\x2b\x3b\xc4\x31\xe0\xc6\x30\x46\xb5\x23\x01\x2c\x5c\xd3\x4a\xef\x63\x6b\x84\x72\x35\x14\x5c\x30\x89\x95\x5b\xbf\xb2\x6b\xdf\x1f\xeb\x2a\x3a\x6e\x7d\x27\xc4\x74\x40\x6c\x84\x1f\x63\x91\x07\x18\xaa\xf0\x15\x95\x7f\xd8\x78\x19\x76\xcf\x8c\x60\x1b\x89\x4f\x61\xfb\x1e\x44\x0d\x3b\x66\xef\xe6\xd0\xff\x66\x71\xde\x78\xa2\x06\xed\xfb\xe4\x03\xb3\x57\x58\xb3\x4e\xba\xb0\xf8\xc2\xa4\xe0\xcc\x69\x63\x7d\x13\x75\xcd\x07\xad\xbf\xd9\x70\xf4\x59\x4b\x51\xf9\x1b\xce\x01\x00\xe8\xea\xd4\x20\x40\x17\x3b\x8a\x27\x22\xa2\x3e\xa6\xfc\x1c\xe0\x02\x18\xe7\xc9\xfa\x4d\x0a\x12\xfd\xce\x06\x40\x95\x18\xa2\x32\xf9\xa4\x1d\x82\xdb\x31\x47\xa5\x30\x66\x0d\x36\x28\xf5\x03\x30\xe3\x0b\x40\x38\xc1\xa4\xf8\x1b\x39\x6c\x1e\x03\x1b\x76\xca\x89\x06\x03\x42\x1b\xd9\x4b\x87\x9a\x1f\xc5\xa9\x64\x02\x53\x22\xb0\xb6\x95\xa2\xa2\xad\x12\xee\x76\x68\xb0\xd6\x06\x4f\x03\x82\x70\x60\x77\xba\x93\x1c\x36\x08\x81\xcd\x70\x64\x84\x86\x09\x05\xcc\x42\xad\xa5\xd4\x0f\xf6\x9c\x54\xe8\x27\x0b\xa2\xf0\x35\x92\xc2\xa5\x56\xb5\xd8\x8e\x6c\x7a\x38\xac\xa3\x9f\x45\xd4\x49\x13\xb2\x67\xc6\x93\xe4\x0b\x89\xc9\xc2\xff\x3f\x3d\x6e\x72\xf2\x17\x2a\x57\xfa\x45\x54\x1c\xc0\xb2\xe3\xf7\x95\x65\x59\x5c\x78\xbd\xf0\xf7\x98\x66\xe0\x05\x3b\x63\x2d\x22\x2d\x82\xbc\xb9\x2a\xef\x2d\x9a\x2b\x7a\x54\x38\x24\x6c\x46\x77\xdf\xb6\xf4\xa0\xc4\x0d\x2f\x1e\x44\x66\x16\x66\xc4\x58\x0f\x16\xbc\x83\xd1\x73\x46\x18\xe5\x50\xd0\x4b\xa5\x9d\x5f\xdf\xd8\x6b\xd5\x35\xab\x28\x1b\x9c\xe5\x51\x26\x50\x69\xd4\x88\x04\x40\x52\x91\x7c\x06\xb9\x19\xff\x0c\x9b\x7b\x26\x3b\x2a\x99\xca\x60\x28\x94\x5a\x9b\x81\x8d\x12\x62\x25\x5f\xcb\x68\x7c\x86\x39\x75\xa2\x77\xf3\x4e\x34\x18\xfe\xdd\xdf\x53\x06\xea\x4e\x55\xcb\x15\x8c\x89\x08\xb0\x77\xfe\x4d\x9b\x02\x1f\x73\x34\x5e\x60\x5d\xde\xb7\x9c\x39\xbc\x1a\x0d\xbd\x14\xf8\x4c\xee\x97\xc3\xef\x08\xe5\x17\x83\x9f\x22\xff\xa5\x78\x69\x20\x59\xd4\x65\x42\x5c\x69\xb8\xc4\xfe\x21\xd6\x51\x62\x26\x40\x03\xc2\xf9\x05\x8c\x1c\xec\x7d\x80\xe5\x2b\xbb\x02\x34\x46\x9b\xe2\x89\x07\x43\x66\x54\x0c\x4f\x58\x60\x3e\x13\x11\x7a\xc8\x41\x31\x4b\x42\x11\xb3\x00\x37\xce\x2b\x54\x4c\xca\x89\x87\x36\x9d\x90\x1c\x8d\x67\x2b\x4f\x27\x60\xd9\x1e\xa7\x7c\x0d\x76\xe8\xb5\x78\x21\x11\xe9\x62\x35\x27\xfa\xf5\xc9\x30\xc8\x55\x9d\x75\xba\x09\x03\x91\xf7\x12\x55\xd7\x40\xec\x22\x1a\xfa\xa6\x87\xfa\xd9\xe8\x41\xaf\xca\x70\x57\xbe\x99\x06\xbb\xeb\x13\xd0\x8d\x08\xb4\x3b\x50\x28\x79\x5c\x1b\x6f\x6b\x87\x64\xaf\x0c\x06\xe2\xb3\xeb\xd5\xcf\x2f\xc0\x19\xd1\x0c\x2c\x17\x53\x5c\xde\x86\x87\x7d\x91\xd0\x5f\x32\x07\x04\xbb\x31\x1e\x3b\xa2\xbf\x50\x77\x53\x7c\x3e\x99\x24\x98\xa2\x84\x19\x22\xcf\xd3\xae\x99\xf7\x8b\xdf\x5f\x9f\x00\xd4\x42\x71\xc2\x27\x55\x7a\x65\x5e\xe8\x05\x1f\x67\x9c\xc6\x52\xc2\xfa\x7a\x3a\xcc\x3e\x75\xe9\x93\x37\xab\x50\x51\x03\x7e\xf7\xe7\x93\xfd\x2f\xd4\x57\x51\xe6\x59\x19\x7b\x04\x8a\x71\x31\xc9\x3c\xaf\xc9\xd4\xb7\x24\xec\x50\x57\x59\x18\xaf\x43\xbe\xe6\xcd\x0f\x17\x29\xd2\xe8\xe5\xbc\xe7\x8e\x15\xde\xf3\x7b\xa2\x94\xd0\xb4\x35\x4e\xf3\xff\x37\x2d\xcf\xe3\x9c\x21\x0f\x13\x5b\x18\xd6\x02\xe8\xe4\xd4\xca\xfb\x12\xba\xd8\xa6\x6a\x2b\x08\xe5\xb5\x5c\x0d\x03\x64\xef\x95\x0d\xba\xce\xa8\xb8\xb5\xb4\xab\x3c\xcb\x0e\x79\x9e\x34\xdf\x53\xf6\x38\x1b\x4b\x99\x99\xad\x3f\x35\x58\xa1\xd8\x87\x59\xfa\xf7\xd0\xcc\xef\xe3\x8c\x9c\xff\x14\x5f\x78\xbc\x91\x2c\x42\xb9\xc5\x24\xfe\x14\x71\x50\xec\x89\xcd\xe5\x84\x3d\xcf\x07\x11\x5c\xc8\x82\x7d\x10\xae\xda\x41\x2a\x49\x77\x51\x31\x4b\x7d\x13\xef\x4c\x1c\xb9\xb3\x40\x0d\xca\x9f\xc2\x6b\x38\x1c\x4e\x9f\xd0\xf7\xad\x33\x5d\xe5\x86\x8c\xf4\x3d\xb4\xcc\x56\x4c\x86\xfb\x1b\x65\xcf\x43\x65\xc6\xdb\x50\x42\xd2\x3a\x96\xf0\xfc\xb0\x6e\x5c\x79\xed\x5d\xaf\x97\x61\x66\x9a\xd8\xe2\x1c\x84\xa2\xe4\x26\xd9\xa3\x1c\x1f\x79\x93\xce\xe1\xd5\xf7\xe2\x34\x09\xd9\x5f\x7d\x76\xa0\xfb\xcf\x26\x12\x7d\xe9\x83\x95\x06\x74\xc6\xb9\xf0\x0f\x3f\x93\xc3\x97\xeb\x53\xf6\x7d\x37\xa9\x10\x75\x54\x4c\xf9\x01\x51\xef\xd1\x18\xc1\xc3\x84\xa8\x0d\x7d\xd5\x6b\x9a\x81\x27\xc8\xf0\xf9\x3f\x54\x08\x31\x58\xe4\xd8\x72\x64\xec\xf4\x2b\x7d\xe6\x4d\x3a\x3e\xfd\x13\x00\x00\xff\xff\x9f\x55\xe0\x31\x92\x10\x00\x00") func templateMetaTmplBytes() ([]byte, error) { return bindataRead( @@ -960,7 +960,7 @@ func templateMetaTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template/meta.tmpl", size: 4149, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "template/meta.tmpl", size: 4242, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1045,7 +1045,7 @@ func templatePrivacyTmpl() (*asset, error) { return a, nil } -var _templateRuntimeTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\x4b\x6f\xdb\xca\x15\x5e\x8b\xbf\xe2\x54\x50\x01\x29\x95\x47\x76\x76\x75\xa1\x45\x9a\x07\xae\x81\x26\x0d\xe0\x24\x5d\x18\x41\x30\x22\x0f\xc5\xb9\xa6\x66\xd8\x99\xa1\x63\x41\xe0\x7f\x2f\xce\x3c\xc8\xa1\x1e\xbe\xc5\x2d\x0a\xdc\x8d\xc5\xe1\x9c\xe7\x77\x9e\xf4\xe1\xb0\x7a\x95\xbd\x55\xcd\x5e\x8b\x6d\x65\xe1\xf5\xf5\xcd\x5f\xaf\x1a\x8d\x06\xa5\x85\x0f\x3c\xc7\x8d\x52\x8f\x70\x27\x73\x06\x6f\xea\x1a\x1c\x91\x01\xba\xd7\x4f\x58\xb0\xec\x4b\x25\x0c\x18\xd5\xea\x1c\x21\x57\x05\x82\x30\x50\x8b\x1c\xa5\xc1\x02\x5a\x59\xa0\x06\x5b\x21\xbc\x69\x78\x5e\x21\xbc\x66\xd7\xf1\x16\x4a\xd5\xca\x22\x13\xd2\xdd\xff\xe3\xee\xed\xfb\x4f\xf7\xef\xa1\x14\x35\x42\x78\xa7\x95\xb2\x50\x08\x8d\xb9\x55\x7a\x0f\xaa\x04\x9b\x28\xb3\x1a\x91\x65\xaf\x56\x5d\x97\x65\xce\x87\x2f\xc4\xd2\x4a\x2b\x76\x08\x16\x77\x4d\xcd\x2d\xc2\x16\x25\x6a\x6e\xd1\x38\x89\x26\xaf\x70\xc7\xaf\x8c\x15\x36\xaf\x84\xdc\x42\xad\xb6\x22\x07\x2e\x0b\xa8\x54\x5d\x38\xa2\x6c\xa7\x8a\xb6\x46\x78\x42\x6d\x84\x22\x4b\xb8\x85\x9f\xdc\x40\x4b\x1e\x59\xd5\x8b\x74\x12\xb9\x31\x68\x0d\xcb\xb2\x3b\x0b\x15\x37\xf0\x1a\x4a\xa5\x77\xdc\x1a\x06\x6f\x60\x1a\xcc\x99\x42\xc3\xf3\x47\xbe\x45\x2f\xcc\x54\xaa\xad\x0b\xd8\x20\xe0\xae\xb1\xfb\x2b\xb1\x6b\x94\xb6\x58\x04\xbf\xb3\x1d\x17\xb2\xe7\x28\x95\x0e\x66\x1b\xf8\x29\x6c\x05\x95\x52\x8f\x06\x94\x86\x46\xd5\x22\x17\x68\x60\xde\x28\x8b\xd2\x0a\x5e\x43\xbe\xcf\x6b\x91\x07\x89\x0b\xe6\x30\x31\x98\x2b\x59\x04\xbb\x28\x3c\xd1\x81\x34\x3e\x53\x94\xb6\x37\x73\xe9\x10\x49\x8d\x03\x61\x32\xa9\x2c\x48\xcc\xd1\x18\xae\xf7\x30\x97\x0a\x54\x63\x09\x21\x32\xf1\x48\x31\x9c\x2a\x8e\xf0\x3d\x22\x36\xd9\x86\xe7\x8f\x3f\xb9\x2e\xcc\x55\xae\x76\x0d\xb7\x62\x23\x6a\x61\xf7\xde\xc3\x46\xe3\x93\x50\xad\x89\x21\x30\x14\x7a\x94\x76\x88\x36\x14\x58\x0a\x89\x3d\xc0\x2b\x67\x7d\xd7\x65\x00\x00\x87\xc3\x10\xfe\x21\x02\x33\xba\x3e\x1c\x00\x65\x01\x17\x84\x34\x8f\xdb\x54\x88\xb3\x05\x9f\x2d\x71\xcc\x60\xfa\xd9\x63\x33\x4d\x64\x06\xda\xcb\x4a\x59\x22\x2e\x28\x9e\x1c\x0e\x30\x0b\x29\x76\xbb\x86\x19\xfb\xe8\x9e\xef\x64\xa9\xe2\xb5\x28\x29\xbc\x81\x88\x7d\x0b\x79\x18\xcf\xf7\xed\xce\x11\xe6\x4a\x1a\x0b\xf3\x6c\x32\x39\x1c\xae\xbc\xb1\xc7\x2c\x44\x36\x99\xc4\xd3\x1a\xa6\x87\x83\x33\x69\x0a\xab\x15\xc4\xd7\x1e\x5b\x57\xbb\x5b\x94\x2c\xc8\x8b\xd6\x9e\x0a\x8f\xfa\x27\x13\x7a\x3a\x12\x4a\xaf\x5e\x16\xb8\x70\x2e\x86\xd3\x8b\xf1\x98\xc6\xf7\x03\xb0\x15\xf2\x02\x75\xc0\x95\xae\x66\xbe\x1a\x6e\xd7\x70\x1d\xe4\x69\x2e\xb7\x08\x33\xe9\xc1\xfd\xa4\x0a\x34\x3d\xec\xb2\xdd\xfd\x12\xe9\x67\x92\x7d\x8a\xc7\xae\xf3\xa8\xcf\x24\xfb\x85\x9b\xcf\x54\x57\x7b\xff\x72\x60\x59\x03\x2f\x8a\xe4\x7c\xe3\x09\xd2\xa8\x56\x29\xa1\x3f\x0c\xf4\x23\x6f\x89\x5a\xdb\xe6\x71\x4b\x96\x94\xbc\x36\xd8\xdb\x50\x71\xf3\x41\x60\xed\x52\xee\x3e\x57\x8d\x83\x61\xa0\x5f\x03\xfe\x1b\x66\xcc\xdd\xb0\x90\x92\x23\xc4\xc6\x90\x92\x53\x9e\xb1\xeb\x80\xba\x24\xdc\x18\x1b\x2b\xf2\x2a\xb6\xcb\x55\xf8\x65\x5b\x05\xae\xc4\x42\x16\x06\x27\x62\x12\x4f\xce\x25\xf9\x4a\xe3\x56\x18\x4b\x51\x99\x45\x24\xd0\x3b\x94\x4d\x26\xab\x95\xef\x04\xe7\xfb\xee\xa8\x17\x09\x49\x55\x32\x63\x6f\x95\x2c\xc5\xb6\xf7\xad\xeb\x12\xeb\x8e\x73\x27\x02\xb7\x7a\x05\xaf\x87\x4e\x43\xc9\x66\x2f\xf9\x44\x5d\xec\x8f\xe5\xd7\x0b\xfe\x9d\x54\x89\x9b\x74\x10\x4d\x0b\xfa\xa1\xe2\xb2\xa8\x51\x1b\x6a\xaf\x76\xdf\x60\xec\xe3\xc6\x7b\x7e\xa6\xd5\x0d\xce\x75\x5d\x16\x5a\xfc\x3c\x4b\x8a\x3d\x9a\x7b\xef\x35\x38\xa7\xfb\x4a\xcf\x46\x15\x4d\xcf\x97\xaa\xce\xf1\x9c\xf3\xdd\xd5\x56\xf2\x62\x2c\x33\x9b\x4c\xb7\xc2\x56\xed\x86\xe5\x6a\xb7\x2a\xc3\x16\x22\x64\xde\x6e\xb8\x55\xda\xb5\xfb\x6c\x91\x65\x59\x88\x83\x90\xc2\x42\xd9\xca\xdc\xcd\x23\x8d\xbc\x30\xc0\xeb\x3a\xe2\x53\xa0\xc9\xb5\x68\xac\xd2\x61\x86\x06\x18\x88\xdd\xed\x2c\xf3\x02\x4b\xde\xd6\x16\x9e\x78\xdd\xa2\x59\xd2\xaf\x28\xb8\x63\x50\xda\x8f\xdc\x85\x1b\x8a\x3e\xd4\x68\x40\x58\xe2\x26\xc0\x2b\x14\xba\x1f\xd7\x4f\x5c\x0b\xbe\xa9\xd1\xb0\x8c\xec\x71\x96\xcd\x17\x70\xc8\x5e\x42\x89\xee\x66\xa1\x1b\x8c\x61\x09\x77\xc1\x8f\xdb\x35\x6c\xb8\xc1\xb3\xd1\x21\xba\xd3\x16\xe6\x9a\x2f\x34\x5a\x48\xeb\x35\x4c\x99\xbf\xa3\xc0\xc3\xda\x65\xa6\x89\x42\x98\x0f\xca\x27\xbe\x73\x55\xd5\x05\xd2\xf9\xe2\x8c\x14\xd7\xd4\x48\xc8\xc3\xf5\x77\x58\x3b\xec\xe7\x12\x9f\xad\x9b\xd3\x1f\x5b\x4b\xd8\x2d\xd2\x03\x1c\x68\x64\x68\xb4\xad\x96\xc3\x7b\xfc\x40\x8c\x8e\x3b\xb7\xcf\x90\x2b\x69\xf1\xd9\x92\x7b\xf4\xbb\x84\xdd\x40\x2a\x94\x5c\xc0\x9c\x8e\xdf\x28\x48\x4b\x40\xad\x49\x87\x93\x3b\x11\x25\x9d\x09\xa1\xcb\xfe\xb2\xf7\x4f\xbc\x8e\xb2\x48\xdf\x12\x76\x8b\xbf\x39\xbe\x3f\xad\x41\x8a\x3a\xc8\x8a\x56\x4a\x51\x3b\x2d\xee\xa5\x9b\x78\xfd\x0d\x19\xe9\x1d\x88\x72\xe8\xba\xa3\xbf\xdd\x69\x75\xf8\xb8\x24\xe3\xe6\x14\xd0\x1e\xcf\xe0\xc2\x0b\x51\x71\xa4\x2e\x28\xb4\x78\x89\x25\x54\xc4\xe3\x73\xeb\xa2\x54\xe7\xd9\xe5\x20\x8a\xb3\x03\xf0\x2f\x37\x7d\xeb\xa1\x20\x57\x17\xbd\xa3\x75\xc5\xb1\xbe\x0b\x75\xe4\x4f\xdf\x86\x2a\x3a\xda\x25\x24\xfb\x28\x9e\xb1\xb8\x93\xff\x12\xb6\x0a\x4c\xff\xd4\x3d\x7d\x58\x30\xc8\x73\x3f\xbb\x3e\x8a\x67\x21\x7f\x1b\x1a\x47\xe6\xa0\x39\xe6\x75\x33\xd5\x0d\xfe\x07\xc6\xd8\xf7\x87\xef\x94\x48\xee\xa5\x8f\x79\x52\x9e\x62\x09\xb3\x1f\x44\xf9\x1c\xeb\x95\x42\xe7\x2d\xf0\x76\x9d\x48\x7f\xa0\xb3\x20\x98\xbc\x4c\x33\x5f\x2c\x7b\xb1\xfd\x2a\x35\xe9\x2e\x2f\x57\x32\x30\x9e\x78\x3e\x18\xfe\xb2\xeb\x51\x2f\x71\xff\x08\x95\x9d\x4a\x38\xa7\x3a\x71\xb8\x0c\x3b\xd1\x91\x15\x57\x30\xa3\xe6\x49\x97\x69\xe6\xbc\x43\x93\x4f\x61\x56\xb2\x7b\xab\xdb\xdc\xfa\x85\x65\xe0\x59\xbd\x02\x94\xed\x0e\xc6\x5d\x35\x8c\xa9\x02\x24\x72\x1d\xda\x66\x81\x79\xcd\xb5\x2b\x48\x03\x73\xfa\xfe\x49\xc6\xd7\x82\x85\xc9\x3d\x49\xf2\x6c\x4e\x5d\x78\x56\xb2\x98\x69\x73\x37\xd0\x4b\x76\x67\xde\xcb\x76\xb7\x58\xd0\xf3\xd7\xa6\xe0\x16\xfb\x5c\x2c\xd9\x71\x22\xf6\x02\x67\x25\xfb\xac\x8c\x20\xfd\x31\x23\xfb\x18\xaf\x56\x0e\x44\xe7\x7f\xd7\xd1\x50\x1f\x3e\x21\x93\x91\xe2\x3e\x7f\x88\xb0\x8c\xd1\x80\x92\xf0\x60\x43\xa6\x44\x11\xb7\x69\x58\x92\xb4\x7c\xf0\xec\xa9\x25\x42\xde\xc9\x02\x9f\x29\xa5\x8e\x6f\xfb\x0b\xf6\xae\x37\xc2\xc7\xdd\x47\xb8\x5f\x52\xfe\xff\x3e\x9c\x37\xff\xb7\x0c\x94\x69\xae\x8c\x12\x52\x94\xf0\x72\x78\xc7\x89\xe9\x49\x8e\x72\x93\x4d\x13\xfe\xe0\x4d\x96\x42\xe1\xb9\xba\x6e\xf8\xe4\x1f\x27\x2a\x28\x09\xb9\x46\xde\x7f\xdb\x12\xc5\x25\x70\x8e\x44\xae\x53\xb8\xa3\x11\x6c\x3e\x7c\xd4\x91\x27\x5f\xc4\x0e\xfd\xd3\xd7\xaf\x77\xef\xa0\xeb\xdc\xfc\x5b\x0c\x1f\x89\x5e\xd9\x17\x2a\x85\xae\x5b\x9c\xab\x5c\x9f\xba\xe3\x3c\xff\x6f\xa1\x19\x71\xfd\x5e\x80\x5a\x27\xe4\x7f\x83\x67\x64\x48\x04\x69\x40\xe8\xf7\xe0\xe2\x9b\xe9\x99\x82\x77\xb0\x48\xb2\xef\x2c\x26\xa7\x93\xe7\x0a\x66\xae\x17\xd1\x4a\xe6\xe8\x4b\x98\xba\x8d\x6e\xfe\x67\xb3\xf0\xbb\xc7\x34\xb1\x26\x01\x50\x06\x14\x84\x01\x3e\x2c\x92\x3d\x54\xd3\x11\x56\xd3\x00\x16\xdc\xb9\x7f\xcd\xe4\xbc\xa6\x0e\xb9\xd9\x3b\xd2\x4d\x2b\xea\x82\xf6\xfa\x0d\x96\x4a\x23\x18\xfe\x84\x2c\x69\x87\xf4\x29\x38\xf2\xf5\x66\x68\x6f\x83\x1d\x63\xd0\x07\xea\x87\xeb\xef\x0e\x74\xef\xa7\x07\xf4\xa4\x83\x8c\x05\x0d\x01\x89\x4c\x71\x65\x4a\x16\xe6\xdb\x4b\x0a\x3d\x65\x29\x87\x31\xec\xe4\x8d\xa3\xea\xa1\x8d\x62\xd3\x31\xf5\xeb\x32\xac\xce\x71\x2e\x9f\xeb\xeb\x23\x53\x5c\x63\xfa\xd5\x75\xa2\xf9\x45\x55\x61\x52\x1f\xf7\xa6\xb8\xf1\xc5\x95\x2f\xe1\xff\xbb\x0f\x4b\x9c\x7a\xf0\xa2\x03\x14\xf6\x1f\x4b\x28\xe5\xb0\xa4\x11\x02\xf1\x3a\x59\x5c\x4b\x79\x5e\xfe\xd9\x15\x35\xd9\xa5\xc3\x82\x3a\x58\xdc\xff\x0e\x7b\x6c\xea\x51\x37\x5f\x9c\x6d\xbe\xe9\x4e\xd7\x7f\x79\x9e\x7b\xf4\xff\x5a\x08\x87\xff\x04\x00\x00\xff\xff\x81\x3a\x42\x8c\x3f\x16\x00\x00") +var _templateRuntimeTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\x5b\x8f\xdb\xba\x11\x7e\xb6\x7e\xc5\xd4\x50\x01\x3b\xf5\xd2\x49\xde\x9a\xc2\x0f\x69\x36\xc1\x59\xa0\x49\x03\x6c\x92\x3e\x2c\x82\x80\x96\x46\x16\xcf\xca\xa4\x4a\x52\x9b\x5d\x18\xfa\xef\xc5\xf0\x22\x51\xbe\xec\x29\x4e\x51\xe0\xbc\xac\x45\x72\x66\x38\xf3\xcd\x95\x7b\x38\xac\x5f\x64\xef\x54\xfb\xa4\xc5\xae\xb6\xf0\xfa\xe5\xab\xbf\x5e\xb5\x1a\x0d\x4a\x0b\x1f\x78\x81\x5b\xa5\xee\xe1\x46\x16\x0c\xde\x36\x0d\x38\x22\x03\x74\xae\x1f\xb0\x64\xd9\x97\x5a\x18\x30\xaa\xd3\x05\x42\xa1\x4a\x04\x61\xa0\x11\x05\x4a\x83\x25\x74\xb2\x44\x0d\xb6\x46\x78\xdb\xf2\xa2\x46\x78\xcd\x5e\xc6\x53\xa8\x54\x27\xcb\x4c\x48\x77\xfe\x8f\x9b\x77\xef\x3f\xdd\xbe\x87\x4a\x34\x08\x61\x4f\x2b\x65\xa1\x14\x1a\x0b\xab\xf4\x13\xa8\x0a\x6c\x72\x99\xd5\x88\x2c\x7b\xb1\xee\xfb\x2c\x73\x36\x7c\x21\x96\x4e\x5a\xb1\x47\xb0\xb8\x6f\x1b\x6e\x11\x76\x28\x51\x73\x8b\xc6\x49\x34\x45\x8d\x7b\x7e\x65\xac\xb0\x45\x2d\xe4\x0e\x1a\xb5\x13\x05\x70\x59\x42\xad\x9a\xd2\x11\x65\x7b\x55\x76\x0d\xc2\x03\x6a\x23\x14\x69\xc2\x2d\xfc\xe4\x06\x3a\xb2\xc8\xaa\x41\xa4\x93\xc8\x8d\x41\x6b\x58\x96\xdd\x58\xa8\xb9\x81\xd7\x50\x29\xbd\xe7\xd6\x30\x78\x0b\xf3\xa0\xce\x1c\x5a\x5e\xdc\xf3\x1d\x7a\x61\xa6\x56\x5d\x53\xc2\x16\x01\xf7\xad\x7d\xba\x12\xfb\x56\x69\x8b\x65\xb0\x3b\xdb\x73\x21\x07\x8e\x4a\xe9\xa0\xb6\x81\x9f\xc2\xd6\x50\x2b\x75\x6f\x40\x69\x68\x55\x23\x0a\x81\x06\x16\xad\xb2\x28\xad\xe0\x0d\x14\x4f\x45\x23\x8a\x20\x71\xc9\x1c\x26\x06\x0b\x25\xcb\xa0\x17\xb9\x27\x1a\x90\xfa\x67\x8e\xd2\x0e\x6a\xae\x1c\x22\xa9\x72\x20\x4c\x26\x95\x05\x89\x05\x1a\xc3\xf5\x13\x2c\xa4\x02\xd5\x5a\x42\x88\x54\x3c\xba\x18\x4e\x2f\x8e\xf0\xdd\x23\xb6\xd9\x96\x17\xf7\x3f\xb9\x2e\xcd\x55\xa1\xf6\x2d\xb7\x62\x2b\x1a\x61\x9f\xbc\x85\xad\xc6\x07\xa1\x3a\x13\x5d\x60\xc8\xf5\x28\xed\xe8\x6d\x28\xb1\x12\x12\x07\x80\xd7\x4e\xfb\xbe\xcf\x00\x00\x0e\x87\xd1\xfd\xa3\x07\x72\x3a\x3e\x1c\x00\x65\x09\x17\x84\xb4\xf7\xbb\x54\x88\xd3\x05\x1f\x2d\x71\xe4\x30\xff\xec\xb1\x99\x27\x32\x03\xed\xe5\x4b\x59\x22\x2e\x5c\x3c\x3b\x1c\x20\x0f\x21\xf6\x66\x03\x39\xfb\xe8\xbe\x6f\x64\xa5\xe2\xb1\xa8\xc8\xbd\x81\x88\x7d\x0b\x71\x18\xd7\xb7\xdd\xde\x11\x16\x4a\x1a\x0b\x8b\x6c\x36\x3b\x1c\xae\xbc\xb2\xc7\x2c\x44\x36\x9b\xc5\xd5\x06\xe6\x87\x83\x53\x69\x0e\xeb\x35\xc4\x6d\x8f\xad\xcb\xdd\x1d\x4a\x16\xe4\x45\x6d\x4f\x85\xc7\xfb\x67\x33\xfa\x3a\x12\x4a\x5b\xcf\x0b\x5c\x3a\x13\xc3\xea\x59\x7f\xcc\xe3\xfe\x08\x6c\x8d\xbc\x44\x1d\x70\xa5\xa3\xdc\x67\xc3\x9b\x0d\xbc\x0c\xf2\x34\x97\x3b\x84\x5c\x7a\x70\x3f\xa9\x12\xcd\x00\xbb\xec\xf6\xbf\x44\xfa\x5c\xb2\x4f\x71\xd9\xf7\x1e\xf5\x5c\xb2\x5f\xb8\xf9\x4c\x79\xf5\xe4\x37\x47\x96\x0d\xf0\xb2\x4c\xd6\xaf\x3c\x41\xea\xd5\x3a\x25\xf4\x8b\x91\x7e\x62\x2d\x51\x6b\xdb\xde\xef\x48\x93\x8a\x37\x06\x07\x1d\x6a\x6e\x3e\x08\x6c\x5c\xc8\xdd\x16\xaa\x75\x30\x8c\xf4\x1b\xc0\x7f\x43\xce\xdc\x09\x0b\x21\x39\x41\x6c\x0a\x29\x19\xe5\x19\xfb\x1e\xa8\x4a\xc2\x2b\x63\x63\x46\x5e\xc5\x72\xb9\x0e\xbf\x6c\xa7\xc0\xa5\x58\x88\xc2\x60\x44\x0c\xe2\xd9\xb9\x20\x5f\x6b\xdc\x09\x63\xc9\x2b\x79\x44\x02\xbd\x41\xd9\x6c\xb6\x5e\xfb\x4a\x70\xbe\xee\x4e\x6a\x91\x90\x94\x25\x39\x7b\xa7\x64\x25\x76\x83\x6d\x7d\x9f\x68\x77\x1c\x3b\x11\xb8\xf5\x0b\x78\x3d\x56\x1a\x0a\x36\x7b\xc9\x26\xaa\x62\x7f\x2c\xbb\x9e\xb1\xef\x24\x4b\x5c\xa7\x83\xa8\x5a\xb8\x1f\x6a\x2e\xcb\x06\xb5\xa1\xf2\x6a\x9f\x5a\x8c\x75\xdc\x78\xcb\xcf\x94\xba\xd1\xb8\xbe\xcf\x42\x89\x5f\x64\x49\xb2\x47\x75\x6f\xfd\x0d\xce\xe8\x21\xd3\xb3\x49\x46\xd3\xf7\xa5\xac\x73\x3c\xe7\x6c\x77\xb9\x95\x6c\x4c\x65\x66\xb3\xf9\x4e\xd8\xba\xdb\xb2\x42\xed\xd7\x55\x98\x42\x84\x2c\xba\x2d\xb7\x4a\xbb\x72\x9f\x2d\xb3\x2c\x0b\x7e\x10\x52\x58\xa8\x3a\x59\xb8\x7e\xa4\x91\x97\x06\x78\xd3\x44\x7c\x4a\x34\x85\x16\xad\x55\x3a\xf4\xd0\x00\x03\xb1\xbb\x99\x65\x51\x62\xc5\xbb\xc6\xc2\x03\x6f\x3a\x34\x2b\xfa\x15\x25\x77\x0c\x4a\xfb\x96\xbb\x74\x4d\xd1\xbb\x1a\x0d\x08\x4b\xdc\x04\x78\x8d\x42\x0f\xed\xfa\x81\x6b\xc1\xb7\x0d\x1a\x96\x91\x3e\x4e\xb3\xc5\x12\x0e\xd9\x73\x28\xd1\x59\x1e\xaa\xc1\x14\x96\x70\x16\xec\x78\xb3\x81\x2d\x37\x78\xd6\x3b\x44\x77\x5a\xc2\x5c\xf1\x85\x56\x0b\x69\xfd\x0d\x73\xe6\xcf\xc8\xf1\xb0\x71\x91\x69\xa2\x10\xe6\x9d\xf2\x89\xef\x5d\x56\xf5\x81\x74\xb1\x3c\x23\xc5\x15\x35\x12\x72\xf7\xf2\x3b\x6c\x1c\xf6\x0b\x89\x8f\xd6\xf5\xe9\x8f\x9d\x25\xec\x96\xe9\x02\x0e\xd4\x32\x34\xda\x4e\xcb\x71\x1f\x3f\x10\xa3\xe3\x2e\xec\x23\x14\x4a\x5a\x7c\xb4\x64\x1e\xfd\xae\x60\x3f\x92\x0a\x25\x97\xb0\xa0\xe5\x37\x72\xd2\x0a\x50\x6b\xba\xc3\xc9\x9d\x89\x8a\xd6\x84\xd0\x65\x7b\xd9\xfb\x07\xde\x44\x59\x74\xdf\x0a\xf6\xcb\xbf\x39\xbe\x3f\x6d\x40\x8a\x26\xc8\x8a\x5a\x4a\xd1\xb8\x5b\xdc\xa6\xeb\x78\xc3\x09\x29\xe9\x0d\x88\x72\xe8\xb8\xa7\xbf\xfd\x69\x76\x78\xbf\x24\xed\xe6\x14\xd0\x01\xcf\x60\xc2\x33\x5e\x71\xa4\xce\x29\x34\x78\x89\x15\xd4\xc4\xe3\x63\xeb\xa2\x54\x67\xd9\x65\x27\x8a\xb3\x0d\xf0\x2f\xaf\x86\xd2\x43\x4e\xae\x2f\x5a\x47\xe3\x8a\x63\xbd\x0e\x79\xe4\x57\xdf\xc6\x2c\x3a\x9a\x25\x24\xfb\x28\x1e\xb1\xbc\x91\xff\x12\xb6\x0e\x4c\xff\xd4\x03\x7d\x18\x30\xc8\x72\xdf\xbb\x3e\x8a\x47\x21\x7f\x1b\x1a\x47\xe6\xa0\x39\xe6\x75\x3d\xd5\x35\xfe\x3b\xc6\xd8\xf7\xbb\xef\x14\x48\x6e\xd3\xfb\x3c\x49\x4f\xb1\x82\xfc\x07\x51\x3e\xc6\x7c\x25\xd7\x79\x0d\xbc\x5e\x27\xd2\xef\x68\x2d\x08\x26\x2f\xd3\x2c\x96\xab\x41\xec\x30\x4a\xcd\xfa\x73\xc3\x55\x5e\x0d\xaa\xe5\x32\xb0\xa7\x13\xc9\xcd\x35\xfb\x6a\x50\x5f\xbb\x0a\x5e\x86\x61\x20\xf0\x6c\x80\xb7\xad\x9b\x4f\xc3\x86\xa3\x9f\x4e\x26\x09\xea\x55\x14\x3e\x05\x68\xc4\xe6\x79\x74\xa3\x69\xc4\xfd\x23\x14\x8f\x54\xc2\x39\xeb\x12\x4c\x2b\x67\xe2\x91\x0e\x57\x90\x53\x75\xa6\xa3\x34\x34\xaf\xd1\x14\x73\xc8\x2b\x76\x6b\x75\x57\x58\x3f\x11\x8d\x3c\xeb\x17\x80\xb2\xdb\xc3\xb4\x6c\x87\x3e\x58\x82\x44\xae\x43\x5d\x2e\xb1\x68\xb8\x76\x19\x6f\x60\x41\x0f\xac\xa4\x3f\x2e\x59\x18\x0d\x66\x49\x20\x2f\xb8\xc3\x93\xc5\x50\x5e\xb8\x89\xa1\x62\x37\xe6\xbd\xec\xf6\xcb\x25\x7d\x7f\x6d\x4b\x6e\x71\x08\xf6\x8a\x1d\x47\xfa\x20\x30\xaf\xd8\x67\x65\x04\xdd\x1f\x43\x7e\x08\xa2\xf5\xda\x41\xe8\xec\xef\x7b\x9a\x1a\xc6\x37\x6a\xd2\xb3\xdc\xfb\xca\x39\x3d\xfa\x02\x1c\x88\x6c\x0c\xc5\x28\xe2\x4d\xea\x94\x24\xee\xef\x3c\x7b\xaa\x89\x90\x37\xb2\xc4\x47\x8a\xd9\xe3\xd3\xe1\x80\x5d\x0f\x4a\x78\xaf\x7b\xff\x0e\x53\xd0\xff\xdf\x86\xf3\xea\xff\x96\x82\x32\x8d\x95\x49\x38\x8a\x0a\x9e\x77\xef\x34\x30\x3d\xc9\x51\x6c\xb2\x79\xc2\x1f\xac\xc9\x52\x28\x3c\x57\xdf\x8f\xff\x53\x98\x06\x2a\x28\x09\x85\x46\x3e\x3c\x9e\x89\xe2\x12\x38\x47\x22\x37\x29\xdc\x51\x09\xb6\x18\x5f\x8d\x64\xc9\x17\xb1\x47\xff\xf5\xf5\xab\x2b\x07\xae\xc1\x2e\xc7\x57\xa8\xbf\xec\x0b\xa5\x42\xdf\x2f\xcf\xe5\xad\x0f\xdd\x69\x9c\xff\xb7\xd0\x4c\xb8\x7e\x2f\x40\x9d\x13\xf2\xbf\xc1\x33\x51\x24\x82\x34\x22\xf4\x7b\x70\x09\x85\xf4\x34\xe1\x1d\x2c\x92\xf4\x3b\x8b\xc9\x69\x6b\xbb\x82\xdc\xd5\x22\x9a\xf9\x1c\x7d\x05\x73\x37\x32\x2e\xfe\x6c\x96\x7e\xb8\x99\x27\xda\x24\x00\xca\x80\x82\x30\xc0\xc7\x49\x75\x80\x6a\x3e\xc1\x6a\x1e\xc0\x82\x1b\xf7\xbf\x9f\x82\x37\x54\x21\xb7\x4f\x8e\x74\xdb\x89\xa6\xa4\x87\xc3\x16\x2b\xa5\x11\x0c\x7f\x40\x96\x94\x43\x7a\x6b\x4e\x6c\x7d\x35\x96\xb7\x51\x8f\x29\xe8\x23\xf5\xdd\xcb\xef\x0e\x74\x6f\xa7\x07\xf4\xa4\x82\x4c\x05\x8d\x0e\x89\x4c\x71\x26\x4b\x26\xf2\x37\x97\x2e\xf4\x94\x95\x1c\xfb\xbc\x93\x37\xf5\xaa\x87\x36\x8a\x4d\x9b\xd4\xaf\xab\x30\x9b\xc7\xc6\x7f\xae\xae\x4f\x54\x71\x85\xe9\x57\x57\x89\x16\x17\xaf\x0a\xa3\xc0\x71\x6d\x8a\x23\x65\x9c\x29\x13\xfe\xbf\x7b\xb7\xc4\xae\x07\xcf\x1a\x40\x6e\xff\xb1\x82\x4a\x8e\x53\x20\x21\x10\x8f\x93\xc9\xb8\x92\xe7\xe5\x9f\x9d\x81\x93\x61\x3d\x4c\xc0\xa3\xc6\xc3\xef\x38\x28\xa7\x16\xf5\x8b\xe5\xd9\xe2\x9b\x0e\x8d\xc3\xd3\xf6\xdc\xa7\xff\xdf\x45\x58\xfc\x27\x00\x00\xff\xff\xf2\x16\x7f\x7a\xa0\x16\x00\x00") func templateRuntimeTmplBytes() ([]byte, error) { return bindataRead( @@ -1060,7 +1060,7 @@ func templateRuntimeTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template/runtime.tmpl", size: 5695, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "template/runtime.tmpl", size: 5792, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/entc/gen/template/builder/create.tmpl b/entc/gen/template/builder/create.tmpl index c98090b5c..a591f4b24 100644 --- a/entc/gen/template/builder/create.tmpl +++ b/entc/gen/template/builder/create.tmpl @@ -34,8 +34,9 @@ type {{ $builder }} struct { // Save creates the {{ $.Name }} in the database. func ({{ $receiver }} *{{ $builder }}) Save(ctx context.Context) (*{{ $.Name }}, error) { {{- $mutation := print $receiver ".mutation" }} - {{- range $_, $f := $.Fields }} - {{- if or $f.Default (not $f.Optional) }} + {{- $fields := $.Fields }}{{ if $.ID.UserDefined }}{{ $fields = append $fields $.ID }}{{ end }} + {{- range $f := $fields }} + {{- if or $f.Default (and (not $f.Optional) (ne $f $.ID)) }} if _, ok := {{ $mutation }}.{{ $f.MutationGet }}(); !ok { {{- if $f.Default }} v := {{ $.Package }}.{{ $f.DefaultName }}{{ if or $f.IsTime $f.IsUUID }}(){{ end }} @@ -53,7 +54,7 @@ func ({{ $receiver }} *{{ $builder }}) Save(ctx context.Context) (*{{ $.Name }}, } {{- end }} {{- end }} - {{- range $_, $e := $.Edges }} + {{- range $e := $.Edges }} {{- if not $e.Optional }} {{- if $e.Unique }} if _, ok := {{ $mutation }}.{{ $e.StructField }}ID(); !ok { diff --git a/entc/gen/template/meta.tmpl b/entc/gen/template/meta.tmpl index 5e7c5eeff..b388a0a67 100644 --- a/entc/gen/template/meta.tmpl +++ b/entc/gen/template/meta.tmpl @@ -57,7 +57,8 @@ const ( {{- if $.HasPolicy }} Policy ent.Policy {{- end }} - {{- range $f := $.Fields }} + {{- $fields := $.Fields }}{{ if $.ID.UserDefined }}{{ $fields = append $fields $.ID }}{{ end }} + {{- range $f := $fields }} {{- if and $f.Default (not $f.IsEnum) }} {{- $default := $f.DefaultName }} // {{ $default }} holds the default value on creation for the {{ $f.Name }} field. @@ -79,7 +80,7 @@ const ( {{ end }} {{/* define custom type for enum fields */}} -{{ range $_, $f := $.Fields -}} +{{ range $f := $.Fields -}} {{ if $f.IsEnum }} {{/* omit the package name from the type. */}} {{ $enum := trimPackage $f.Type.String $.Package }} diff --git a/entc/gen/template/runtime.tmpl b/entc/gen/template/runtime.tmpl index 45225f6a7..b97da3107 100644 --- a/entc/gen/template/runtime.tmpl +++ b/entc/gen/template/runtime.tmpl @@ -110,11 +110,12 @@ func init() { {{- end }} } {{- end }} - {{- with $n.Fields }} + {{- $fields := $n.Fields }}{{ if $n.ID.UserDefined }}{{ $fields = append $fields $n.ID }}{{ end }} + {{- with $fields }} {{ $pkg }}Fields := {{ $schema }}.{{ $n.Name }}{}.Fields() _ = {{ $pkg }}Fields {{- end }} - {{- range $i, $f := $n.Fields }} + {{- range $i, $f := $fields }} {{- $desc := print $pkg "Desc" $f.StructField }} {{- /* enum default values handled near their declarations (in type package). */}} {{- if or (and $f.Default (not $f.IsEnum)) $f.UpdateDefault $f.Validators }} diff --git a/entc/gen/type.go b/entc/gen/type.go index 9e1f4b340..c435fa34d 100644 --- a/entc/gen/type.go +++ b/entc/gen/type.go @@ -222,7 +222,11 @@ func (t Type) HasAssoc(name string) (*Edge, bool) { // HasValidators reports if any of the type's field has validators. func (t Type) HasValidators() bool { - for _, f := range t.Fields { + fields := t.Fields + if t.ID.UserDefined { + fields = append(fields, t.ID) + } + for _, f := range fields { if f.Validators > 0 { return true } @@ -232,7 +236,11 @@ func (t Type) HasValidators() bool { // HasDefault reports if any of this type's fields has default value on creation. func (t Type) HasDefault() bool { - for _, f := range t.Fields { + fields := t.Fields + if t.ID.UserDefined { + fields = append(fields, t.ID) + } + for _, f := range fields { if f.Default { return true } diff --git a/entc/integration/customid/customid_test.go b/entc/integration/customid/customid_test.go index b2549466e..ef9f6c144 100644 --- a/entc/integration/customid/customid_test.go +++ b/entc/integration/customid/customid_test.go @@ -91,10 +91,11 @@ func CustomID(t *testing.T, client *ent.Client) { require.Equal(t, 3, hub.ID) require.Equal(t, []int{1, 5}, hub.QueryUsers().Order(ent.Asc(user.FieldID)).IDsX(ctx)) - blb := client.Blob.Create().SetID(uuid.New()).SaveX(ctx) - require.NotEmpty(t, blb.ID) - require.NotEmpty(t, blb.UUID) - chd := client.Blob.Create().SetID(uuid.New()).SetParent(blb).SaveX(ctx) + blb := client.Blob.Create().SaveX(ctx) + require.NotEmpty(t, blb.ID, "use default value") + id := uuid.New() + chd := client.Blob.Create().SetID(id).SetParent(blb).SaveX(ctx) + require.Equal(t, id, chd.ID, "use provided id") require.Equal(t, blb.ID, chd.QueryParent().OnlyX(ctx).ID) lnk := client.Blob.Create().SetID(uuid.New()).AddLinks(chd, blb).SaveX(ctx) require.Equal(t, 2, lnk.QueryLinks().CountX(ctx)) diff --git a/entc/integration/customid/ent/blob/blob.go b/entc/integration/customid/ent/blob/blob.go index fb49b0392..7b196975d 100644 --- a/entc/integration/customid/ent/blob/blob.go +++ b/entc/integration/customid/ent/blob/blob.go @@ -52,4 +52,6 @@ var ( var ( // DefaultUUID holds the default value on creation for the uuid field. DefaultUUID func() uuid.UUID + // DefaultID holds the default value on creation for the id field. + DefaultID func() uuid.UUID ) diff --git a/entc/integration/customid/ent/blob_create.go b/entc/integration/customid/ent/blob_create.go index 14b9ec8ca..b3a1db153 100644 --- a/entc/integration/customid/ent/blob_create.go +++ b/entc/integration/customid/ent/blob_create.go @@ -75,6 +75,10 @@ func (bc *BlobCreate) Save(ctx context.Context) (*Blob, error) { v := blob.DefaultUUID() bc.mutation.SetUUID(v) } + if _, ok := bc.mutation.ID(); !ok { + v := blob.DefaultID() + bc.mutation.SetID(v) + } var ( err error node *Blob diff --git a/entc/integration/customid/ent/pet/pet.go b/entc/integration/customid/ent/pet/pet.go index a54ca0dfc..59309b427 100644 --- a/entc/integration/customid/ent/pet/pet.go +++ b/entc/integration/customid/ent/pet/pet.go @@ -61,3 +61,8 @@ var ( // primary key for the friends relation (M2M). FriendsPrimaryKey = []string{"pet_id", "friend_id"} ) + +var ( + // IDValidator is a validator for the "id" field. It is called by the builders before save. + IDValidator func(string) error +) diff --git a/entc/integration/customid/ent/pet_create.go b/entc/integration/customid/ent/pet_create.go index c7b577fa1..d60c9ccbe 100644 --- a/entc/integration/customid/ent/pet_create.go +++ b/entc/integration/customid/ent/pet_create.go @@ -100,6 +100,11 @@ func (pc *PetCreate) SetBestFriend(p *Pet) *PetCreate { // Save creates the Pet in the database. func (pc *PetCreate) Save(ctx context.Context) (*Pet, error) { + if v, ok := pc.mutation.ID(); ok { + if err := pet.IDValidator(v); err != nil { + return nil, fmt.Errorf("ent: validator failed for field \"id\": %v", err) + } + } var ( err error node *Pet diff --git a/entc/integration/customid/ent/runtime.go b/entc/integration/customid/ent/runtime.go index 4382c21b3..9a896d563 100644 --- a/entc/integration/customid/ent/runtime.go +++ b/entc/integration/customid/ent/runtime.go @@ -8,6 +8,7 @@ package ent import ( "github.com/facebookincubator/ent/entc/integration/customid/ent/blob" + "github.com/facebookincubator/ent/entc/integration/customid/ent/pet" "github.com/facebookincubator/ent/entc/integration/customid/ent/schema" "github.com/google/uuid" ) @@ -22,4 +23,28 @@ func init() { blobDescUUID := blobFields[1].Descriptor() // blob.DefaultUUID holds the default value on creation for the uuid field. blob.DefaultUUID = blobDescUUID.Default.(func() uuid.UUID) + // blobDescID is the schema descriptor for id field. + blobDescID := blobFields[0].Descriptor() + // blob.DefaultID holds the default value on creation for the id field. + blob.DefaultID = blobDescID.Default.(func() uuid.UUID) + petFields := schema.Pet{}.Fields() + _ = petFields + // petDescID is the schema descriptor for id field. + petDescID := petFields[0].Descriptor() + // pet.IDValidator is a validator for the "id" field. It is called by the builders before save. + pet.IDValidator = func() func(string) error { + validators := petDescID.Validators + fns := [...]func(string) error{ + validators[0].(func(string) error), + validators[1].(func(string) error), + } + return func(id string) error { + for _, fn := range fns { + if err := fn(id); err != nil { + return err + } + } + return nil + } + }() } diff --git a/entc/integration/customid/ent/schema/blob.go b/entc/integration/customid/ent/schema/blob.go index 022970e56..32637c1a8 100644 --- a/entc/integration/customid/ent/schema/blob.go +++ b/entc/integration/customid/ent/schema/blob.go @@ -20,7 +20,8 @@ type Blob struct { // Fields of the Blob. func (Blob) Fields() []ent.Field { return []ent.Field{ - field.UUID("id", uuid.UUID{}), + field.UUID("id", uuid.UUID{}). + Default(uuid.New), field.UUID("uuid", uuid.UUID{}). Default(uuid.New), }