Pman.Tab.AdminEnum.bjs
[Pman.Admin] / Pman.Tab.AdminEnum.bjs
1 {
2  "name" : "Pman.Tab.AdminEnum",
3  "parent" : "Pman.Tab.Admin",
4  "title" : "Pman.Tab.AdminEnum",
5  "path" : "/home/benny/gitlive/web.hhyc_membership_system/Pman.Admin/Pman.Tab.AdminEnum.bjs",
6  "permname" : "",
7  "modOrder" : "500",
8  "strings" : {
9   "2df80d5febcde0c10a66818488622b7c" : "Pulldown Options",
10   "13348442cc6a27032d2b4aa28b75a5d3" : "Search",
11   "d1228f5476d15142b1358ae4b5fa2454" : "Order #",
12   "fdff10eac021dfbb69e9c38204237fdc" : "Add new pulldown list",
13   "1206eb8aea05be4625371c9c12818785" : "Pulldown",
14   "801ab24683a4a8c433c6eb40c48bcd9d" : "Download",
15   "7af54708cf5a4286cf0cfa58ff5148a8" : "Internal #",
16   "be53a0541a6d36f6ecb879fa2c584b08" : "Image",
17   "1a87a3d29199e3435b8fb314624c008f" : "Merge Option",
18   "b48968e1c912da07df5e8d6d246291ec" : "Display Name",
19   "510bc6e58593b2b8002c9fe0c21f3fde" : "Displaying core_enum{0} - {1} of {2}",
20   "1ba4d808fc7b27a7f60ce2ff75a8af3a" : "No core_enum found",
21   "c550aeed26e71a81a88360c1889245ab" : "Upload Values",
22   "d9ec74f5aa29ceef6bf7b45f7fec5d0f" : "Add Value",
23   "b9c49611cfda3259a2b837b39489e650" : "Add Image",
24   "4d3d769b812b6faa6b76e1a8abaece2d" : "Active",
25   "f2a6c498fb90ee345d997f888fce3b18" : "Delete",
26   "49ee3087348e8d44e1feda1917443987" : "Name",
27   "d41d8cd98f00b204e9800998ecf8427e" : " "
28  },
29  "items" : [
30   {
31    "xtype" : "NestedLayoutPanel",
32    "$ xns" : "Roo",
33    "String region" : "center",
34    "String title" : "Pulldown Options",
35    "items" : [
36     {
37      "xtype" : "BorderLayout",
38      "$ xns" : "Roo",
39      "* prop" : "layout",
40      "items" : [
41       {
42        "Number width" : 200,
43        "xtype" : "LayoutRegion",
44        "$ xns" : "Roo",
45        "* prop" : "west",
46        "Boolean split" : true
47       },
48       {
49        "xtype" : "LayoutRegion",
50        "$ xns" : "Roo",
51        "* prop" : "center"
52       },
53       {
54        "listeners" : {
55         "|activate" : "function() {\n    _this.epanel = this;\n    //if (_this.egrid) {\n    //    _this.egrid.footer.onClick('first');\n    //}\n}"
56        },
57        "background" : false,
58        "region" : "west",
59        "title" : "Pulldown Options",
60        "xtype" : "GridPanel",
61        "$ xns" : "Roo",
62        "tableName" : "core_enum",
63        "items" : [
64         {
65          "listeners" : {
66           "beforeedit" : "function (e)\n{\n    if(e.field == 'name' && e.record.data.is_system_enum*1 == 1){\n        return false;\n    }\n}",
67           "cellclick" : "function (_self, rowIndex, columnIndex, e)\n{\n\n        var di = this.colModel.getDataIndex(columnIndex);\n        if (di != 'active') {\n            return;\n        }\n         \n        var rec = _this.grid.ds.getAt(rowIndex);\n        \n        rec.set('active', rec.data.active ? 0 : 1);\n        rec.commit();\n         \n        \n}",
68           "|render" : "function() \n{\n    _this.egrid = this; \n    //_this.dialog = Pman.Dialog.FILL_IN\n    if (_this.epanel.active) {\n       this.footer.onClick('first');\n    }\n}",
69           "celldblclick" : "function (_self, rowIndex, columnIndex, e)\n{\n    var rec = _this.egrid.ds.getAt(rowIndex);\n    Pman.Dialog.AdminEnumType.show(rec.data,function(){\n        \n        _this.egrid.footer.onClick('first');\n    });\n}",
70           "afteredit" : "function (e)\n{\n   e.record.commit();     \n}"
71          },
72          "autoExpandColumn" : "display_name",
73          "xtype" : "EditorGrid",
74          "loadMask" : true,
75          "clicksToEdit" : 1,
76          "$ xns" : "Roo.grid",
77          "* prop" : "grid",
78          "items" : [
79           {
80            "listeners" : {
81             "update" : "function (_self, record, operation)\n{\n    if (operation != Roo.data.Record.COMMIT) {\n        return;\n    }\n    // got commit..\n    new Pman.Request({\n        url : baseURL + '/Roo/Core_enum.php',\n        method : 'POST',\n        params : {\n            id : record.data.id,\n            etype : _this.grid.ds.getById(record.id).data.etype,\n            name : record.data.name,\n            active : record.data.active,\n            seqid : record.data.seqid,\n            display_name : record.data.display_name\n        }, \n        success : function(res) {\n            //Roo.log(data);\n            // update the ID if it's not set..\n            if (record.data.id * 1 < 1) {\n                record.set('id', res.data.id);\n            }\n        }\n    });\n    \n}",
82             "beforeload" : "function (_self, o)\n{\n    o.params['query[empty_etype]'] = 1; \n  \n}"
83            },
84            "xtype" : "Store",
85            "remoteSort" : true,
86            "$ sortInfo" : "{ field : 'display_name', direction: 'ASC' }",
87            "$ xns" : "Roo.data",
88            "* prop" : "dataSource",
89            "items" : [
90             {
91              "$ url" : "baseURL + '/Roo/core_enum.php'",
92              "xtype" : "HttpProxy",
93              "method" : "GET",
94              "$ xns" : "Roo.data",
95              "* prop" : "proxy"
96             },
97             {
98              "id" : "id",
99              "root" : "data",
100              "xtype" : "JsonReader",
101              "$ xns" : "Roo.data",
102              "$ fields" : "[\n    {\n        'name': 'id',\n        'type': 'int'\n    },\n    {\n        'name': 'etype',\n        'type': 'string'\n    },\n    {\n        'name': 'name',\n        'type': 'string'\n    },\n    {\n        'name': 'active',\n        'type': 'int'\n    },\n    {\n        'name': 'seqid',\n        'type': 'int'\n    }\n]",
103              "* prop" : "reader",
104              "totalProperty" : "total"
105             }
106            ]
107           },
108           {
109            "listeners" : {
110             "selectionchange" : "function (_self, selection)\n{\n    _this.grid.footer.onClick('first');\n}"
111            },
112            "xtype" : "CellSelectionModel",
113            "$ xns" : "Roo.grid",
114            "* prop" : "sm"
115           },
116           {
117            "pageSize" : 100,
118            "xtype" : "PagingToolbar",
119            "emptyMsg" : "No core_enum found",
120            "$ xns" : "Roo",
121            "displayInfo" : false,
122            "displayMsg" : " ",
123            "* prop" : "footer"
124           },
125           {
126            "xtype" : "Toolbar",
127            "$ xns" : "Roo",
128            "* prop" : "toolbar",
129            "items" : [
130             {
131              "listeners" : {
132               "|click" : "function()\n{\n    \n    var data = {\n        active:1,\n        display_name:'',\n        etype:'',\n        name:''\n    };\n    Pman.Dialog.AdminEnumType.show(data,function(){\n        \n        _this.egrid.footer.onClick('first');\n    });\n         \n         \n\n}\n"
133              },
134              "text" : "Add new pulldown list",
135              "xtype" : "Button",
136              "cls" : "x-btn-text-icon",
137              "$ icon" : "Roo.rootURL + 'images/default/dd/drop-add.gif'",
138              "$ xns" : "Roo.Toolbar"
139             }
140            ]
141           },
142           {
143            "xtype" : "ColumnModel",
144            "header" : "Pulldown",
145            "width" : 200,
146            "$ renderer" : "function(v,x,r) { \n\n\n    return String.format('<span qtip=\"{1}\">{0}</span>', (''+v).length ? v : r.data.name, r.data.name); \n}",
147            "$ xns" : "Roo.grid",
148            "* prop" : "colModel[]",
149            "dataIndex" : "display_name"
150           },
151           {
152            "xtype" : "ColumnModel",
153            "header" : "Active",
154            "width" : 50,
155            "$ renderer" : "function(v) {  \n    var state = v> 0 ?  '-checked' : '';\n\n    return '<img class=\"x-grid-check-icon' + state + '\" src=\"' + Roo.BLANK_IMAGE_URL + '\"/>';\n                \n }",
156            "$ xns" : "Roo.grid",
157            "* prop" : "colModel[]",
158            "dataIndex" : "active"
159           }
160          ]
161         }
162        ]
163       },
164       {
165        "listeners" : {
166         "|activate" : "function() {\n    _this.panel = this;\n    if (_this.grid) {\n        _this.grid.footer.onClick('first');\n    }\n}"
167        },
168        "background" : false,
169        "region" : "center",
170        "fitToframe" : true,
171        "title" : "Pulldown Options",
172        "xtype" : "GridPanel",
173        "$ xns" : "Roo",
174        "tableName" : "core_enum",
175        "items" : [
176         {
177          "listeners" : {
178           "keypress" : "function (e)\n{\n    if(e.keyCode == 13){\n        _this.grid.footer.onClick('first');\n    }\n}",
179           "beforeedit" : "function (e)\n{\n    if(e.field == 'name' && e.record.data.is_system_enum*1 == 1){\n        return false;\n    }\n}",
180           "|render" : "function() \n{\n    _this.grid = this; \n    //_this.dialog = Pman.Dialog.FILL_IN\n    if (_this.panel.active) {\n       this.footer.onClick('first');\n    }\n}",
181           "cellclick" : "function (_self, rowIndex, columnIndex, e)\n{\n\n        var di = this.colModel.getDataIndex(columnIndex);\n        var rec = _this.grid.ds.getAt(rowIndex);\n            \n        if (di == 'active') {\n            \n            rec.set('active', rec.data.active ? 0 : 1);\n            rec.commit();\n            return;\n        }\n        if (di == 'id' ) {\n            \n            if (!e.ctrlKey && !e.shiftKey) { // shift or control not pressed -clear selection.\n            \n                this.dataSource.each(function(rr) {\n                    rr.selected = 0;\n                    rr.set('sel', 0);\n                });\n            }\n            \n            if (this.last_selected && e.shiftKey) {\n                // the highlight all the lines between the one last selected, and this one.\n                var s = this.dataSource.indexOf(this.last_selected);\n                var e = this.dataSource.indexOf(rec);\n                var ss = Math.min(s,e);\n                var ee = Math.max(s,e) +1;\n                for(var i = ss; i < ee; i++) {\n                    var rr = this.dataSource.getAt(i);\n                    rr.selected = 1;\n                    rr.set('sel', 1);\n                }\n                this.last_selected = rec;\n                return;\n\n            }\n            \n            rec.selected = rec.selected ? 0 : 1;\n            this.last_selected = rec.selected ? rec : false;\n            rec.set('sel', rec.data.sel ? 0 : 1);\n        }\n         \n\n         \n        \n}",
182           "afteredit" : "function (e)\n{\n   e.record.commit();     \n}"
183          },
184          "autoExpandColumn" : "display_name",
185          "xtype" : "EditorGrid",
186          "loadMask" : true,
187          "clicksToEdit" : 1,
188          "$ xns" : "Roo.grid",
189          "* prop" : "grid",
190          "items" : [
191           {
192            "listeners" : {
193             "update" : "function (_self, record, operation)\n{\n    if (operation != Roo.data.Record.COMMIT) {\n        return;\n    }\n    // got commit..\n    new Pman.Request({\n        url : baseURL + '/Roo/Core_enum.php',\n        method : 'POST',\n        params : {\n            id : record.data.id,\n            etype : _this.grid.ds.getById(record.id).data.etype,\n            name : record.data.name,\n            active : record.data.active,\n            seqid : record.data.seqid,\n            display_name : record.data.display_name\n        }, \n        success : function(res) {\n            //Roo.log(data);\n            // update the ID if it's not set..\n            if (record.data.id * 1 < 1) {\n                record.set('id', res.data.id);\n            }\n        }\n    });\n    \n}",
194             "beforeload" : "function (_self, options)\n{\n\n    var s =     _this.egrid.getSelectionModel().getSelectedCell();\n    \n\n    if (!s) {\n        return false;\n    }\n    var d = _this.egrid.dataSource.getAt(s[0]);\n    \n    options.params.etype = d.data.name;\n    options.params['query[search]'] = _this.searchBox.getValue();\n    if (!options.params.etype.length) {\n        return false;\n    }\n}"
195            },
196            "xtype" : "Store",
197            "remoteSort" : true,
198            "$ sortInfo" : "{ field : 'etype', direction: 'ASC' }",
199            "$ xns" : "Roo.data",
200            "* prop" : "dataSource",
201            "items" : [
202             {
203              "$ url" : "baseURL + '/Roo/core_enum.php'",
204              "method" : "GET",
205              "xtype" : "HttpProxy",
206              "$ xns" : "Roo.data",
207              "* prop" : "proxy"
208             },
209             {
210              "id" : "id",
211              "root" : "data",
212              "xtype" : "JsonReader",
213              "$ xns" : "Roo.data",
214              "$ fields" : "[\n    {\n        'name': 'id',\n        'type': 'int'\n    },\n    {\n        'name': 'etype',\n        'type': 'string'\n    },\n    {\n        'name': 'name',\n        'type': 'string'\n    },\n    {\n        'name': 'active',\n        'type': 'int'\n    },\n    {\n        'name': 'seqid',\n        'type': 'int'\n    }\n]",
215              "* prop" : "reader",
216              "totalProperty" : "total"
217             }
218            ]
219           },
220           {
221            "pageSize" : 25,
222            "xtype" : "PagingToolbar",
223            "emptyMsg" : "No core_enum found",
224            "$ xns" : "Roo",
225            "displayInfo" : true,
226            "displayMsg" : "Displaying core_enum{0} - {1} of {2}",
227            "* prop" : "footer",
228            "items" : [
229             {
230              "listeners" : {
231               "click" : "function (_self, e)\n{\n    new Pman.Download({\n        grid : _this.grid\n    });\n    Roo.MessageBox.alert(\"Downloading\", \"File is downloading\");\n}"
232              },
233              "text" : "Download",
234              "xtype" : "Button",
235              "$ xns" : "Roo.Toolbar"
236             },
237             {
238              "listeners" : {
239               "click" : "function (_self, e)\n{\n\n  var s =     _this.egrid.getSelectionModel().getSelectedCell();\n    \n\n    if (!s) {\n        Roo.MessageBox.alert(\"Error\", \"Select a pulldown\");\n    }\n    \n    var d = _this.egrid.dataSource.getAt(s[0]);\n \n\n    var etype = d.data.name;\n    \n    if(!etype.length){\n        Roo.MessageBox.alert('Error', 'Please select a pulldown');\n        return;\n    }\n    \n    Pman.Dialog.Image.show(\n       {\n            _url : baseURL+'/Admin/Import/Enum?' + Roo.urlEncode({'etype' : etype})\n        \n       },\n       function () {\n            _this.grid.footer.onClick('first');\n       }\n   );\n}"
240              },
241              "text" : "Upload Values",
242              "xtype" : "Button",
243              "$ xns" : "Roo.Toolbar"
244             }
245            ]
246           },
247           {
248            "xtype" : "Toolbar",
249            "$ xns" : "Roo",
250            "* prop" : "toolbar",
251            "items" : [
252             {
253              "listeners" : {
254               "|click" : "function()\n{\n    \n    // if we do not have a selected type... - what should we show..?\n    \n    \n    var s =     _this.egrid.getSelectionModel().getSelectedCell();\n    \n\n    if (!s) {\n        Roo.MessageBox.alert(\"Error\", \"Select a pulldown\");\n    }\n    \n    var d = _this.egrid.dataSource.getAt(s[0]);\n \n\n    var ds = _this.grid.getDataSource();\n\n    var add = ds.reader.newRow({    \n             id: 0, \n             display_name : '', \n             name : '', \n             etype: d.data.name, \n             active: 1, \n             seqid: 0\n      });\n\n    ds.insert(0  , add);  \n    \n    _this.grid.startEditing(0, _this.grid.colModel.findColumnIndex('name')); // name... \n}\n"
255              },
256              "text" : "Add Value",
257              "xtype" : "Button",
258              "cls" : "x-btn-text-icon",
259              "$ icon" : "rootURL + '/Pman/templates/images/search.gif'",
260              "$ xns" : "Roo.Toolbar"
261             },
262             {
263              "listeners" : {
264               "|click" : "function()\n{\n    \n    // if we do not have a selected type... - what should we show..?\n    /*\n    var et = _this.etypeCombo.getValue();\n    \n    if (!et) {\n        Roo.MessageBox.alert(\"Error\", \"Select a pulldown\");\n        return;\n    }\n    */\n    \n    var sc = _this.egrid.getSelectionModel().getSelectedCell();\n    \n    if (!sc) {\n        Roo.MessageBox.alert(\"Error\", \"Select a pulldown\");\n        return;\n    }\n    \n    var ds = _this.egrid.ds.getAt(sc[0]);\n    \n    if (!ds) {\n        Roo.MessageBox.alert(\"Error\", \"Select enum\");\n        return;\n    }\n    \n    Roo.log(ds);\n    Pman.Dialog.AdminEnumImages.show({onid:ds.data.id}, function(){\n        _this.grid.footer.onClick('first');\n    });\n    \n}\n"
265              },
266              "text" : "Add Image",
267              "xtype" : "Button",
268              "cls" : "x-btn-text-icon",
269              "$ icon" : "Roo.rootURL + 'images/default/dd/drop-add.gif'",
270              "$ xns" : "Roo.Toolbar"
271             },
272             {
273              "listeners" : {
274               "render" : "function (_self)\n{\n    _this.searchBox = this;\n}"
275              },
276              "String name" : "search",
277              "xtype" : "TextField",
278              "String fieldLabel" : "Search",
279              "$ xns" : "Roo.form"
280             },
281             {
282              "listeners" : {
283               "click" : "function (_self, e)\n{\n    _this.grid.footer.onClick('first');\n}"
284              },
285              "String cls" : "x-btn-icon",
286              "xtype" : "Button",
287              "$ xns" : "Roo.Toolbar",
288              "$ icon" : "rootURL + '/Pman/templates/images/search.gif'"
289             },
290             {
291              "listeners" : {
292               "click" : "function (_self, e)\n{\n     _this.searchBox.setValue('');\n     _this.grid.footer.onClick('first');\n}"
293              },
294              "String cls" : "x-btn-icon",
295              "xtype" : "Button",
296              "$ icon" : "rootURL + '/Pman/templates/images/edit-clear.gif'",
297              "$ xns" : "Roo.Toolbar"
298             },
299             {
300              "xtype" : "Fill",
301              "$ xns" : "Roo.Toolbar"
302             },
303             {
304              "listeners" : {
305               "|click" : "function()\n{\n    var ids = [];\n    _this.grid.dataSource.each(function(rr) {\n        if (rr.selected) {\n            ids.push(rr.data.id);\n        }\n    });   \n    if (!ids.length) {\n        Roo.MessageBox.alert(\"Error\", \"Select rows by clicking on the Internal# column\");\n        return;\n    }\n    \n    Roo.MessageBox.confirm(\n        \"Confirm\", \n        \"Confirm Deletion of selected rows (some rows can not be deleted if they are referenced elsewhere\", \n        function(res) {\n            if(res != 'yes') {\n                return;\n            }\n            new Pman.Request({\n                method : 'POST',\n                url : baseURL + '/Roo/Core_enum',\n                params : {\n                    _delete  : ids.join(',')\n                },\n                success : function() {\n                    _this.grid.footer.onClick('refresh');\n                }\n            });\n        }\n    );\n    \n    \n}\n\n        "
306              },
307              "text" : "Delete",
308              "xtype" : "Button",
309              "cls" : "x-btn-text-icon",
310              "$ icon" : "rootURL + '/Pman/templates/images/trash.gif'",
311              "$ xns" : "Roo.Toolbar"
312             },
313             {
314              "xtype" : "Separator",
315              "$ xns" : "Roo.Toolbar"
316             },
317             {
318              "listeners" : {
319               "|click" : "function()\n{\n    \n    var s = _this.grid.getSelectionModel().getSelections();\n    \n    if (!s.length)  {\n        Roo.MessageBox.alert(\"Error\", \"Select a Row\");\n        return;\n    }\n    console.log(_this.grid.ds);\n    var d = _this.grid.ds.getAt(s[0]);\n\n    Pman.Dialog.AdminEnumMerge.show(d.data, function() {\n        _this.grid.footer.onClick('refresh');\n    }); \n    \n}\n"
320              },
321              "text" : "Merge Option",
322              "xtype" : "Button",
323              "cls" : "x-btn-text-icon",
324              "$ icon" : "Roo.rootURL + 'images/default/tree/leaf.gif'",
325              "$ xns" : "Roo.Toolbar"
326             }
327            ]
328           },
329           {
330            "xtype" : "ColumnModel",
331            "width" : 75,
332            "header" : "Internal #",
333            "$ renderer" : "function(v,x,r) { \n    var fmt = '{0}';\n    if (r.selected) {\n        fmt = '<span style=\"color:orange;font-weight:bold;\">{0}</span>';\n    }\n    return String.format(fmt, v); }",
334            "$ xns" : "Roo.grid",
335            "Boolean sortable" : true,
336            "* prop" : "colModel[]",
337            "dataIndex" : "id"
338           },
339           {
340            "xtype" : "ColumnModel",
341            "width" : 75,
342            "header" : "Image",
343            "$ renderer" : "function(v,x,r) { return String.format('<img src=\"{0}/Images/Thumb/25/{1}/{2}\" width=\"25\" height=\"25\">', baseURL, v, r.data.images_id_filename); }",
344            "$ xns" : "Roo.grid",
345            "* prop" : "colModel[]",
346            "dataIndex" : "images_id_id"
347           },
348           {
349            "xtype" : "ColumnModel",
350            "header" : "Name",
351            "width" : 200,
352            "$ renderer" : "function(v) { return String.format('{0}', v); }",
353            "$ xns" : "Roo.grid",
354            "Boolean sortable" : true,
355            "* prop" : "colModel[]",
356            "dataIndex" : "name",
357            "items" : [
358             {
359              "xtype" : "GridEditor",
360              "$ xns" : "Roo.grid",
361              "* prop" : "editor",
362              "items" : [
363               {
364                "xtype" : "TextField",
365                "$ xns" : "Roo.form",
366                "* prop" : "field"
367               }
368              ]
369             }
370            ]
371           },
372           {
373            "xtype" : "ColumnModel",
374            "width" : 200,
375            "header" : "Display Name",
376            "$ renderer" : "function(v) { return String.format('{0}', v); }",
377            "$ xns" : "Roo.grid",
378            "Boolean sortable" : true,
379            "* prop" : "colModel[]",
380            "dataIndex" : "display_name",
381            "items" : [
382             {
383              "xtype" : "GridEditor",
384              "$ xns" : "Roo.grid",
385              "* prop" : "editor",
386              "items" : [
387               {
388                "xtype" : "TextField",
389                "$ xns" : "Roo.form",
390                "* prop" : "field"
391               }
392              ]
393             }
394            ]
395           },
396           {
397            "xtype" : "ColumnModel",
398            "width" : 75,
399            "header" : "Active",
400            "$ renderer" : "function(v) {  \n    var state = v> 0 ?  '-checked' : '';\n\n    return '<img class=\"x-grid-check-icon' + state + '\" src=\"' + Roo.BLANK_IMAGE_URL + '\"/>';\n                \n }",
401            "$ xns" : "Roo.grid",
402            "Boolean sortable" : true,
403            "* prop" : "colModel[]",
404            "dataIndex" : "active"
405           },
406           {
407            "xtype" : "ColumnModel",
408            "sortable" : true,
409            "header" : "Order #",
410            "width" : 75,
411            "$ renderer" : "function(v) { return String.format('{0}', v); }",
412            "$ xns" : "Roo.grid",
413            "Boolean sortable" : true,
414            "* prop" : "colModel[]",
415            "dataIndex" : "seqid",
416            "items" : [
417             {
418              "xtype" : "GridEditor",
419              "$ xns" : "Roo.grid",
420              "* prop" : "editor",
421              "items" : [
422               {
423                "allowNegative" : true,
424                "xtype" : "NumberField",
425                "allowDecimals" : false,
426                "decimalPrecision" : 0,
427                "$ xns" : "Roo.form",
428                "* prop" : "field"
429               }
430              ]
431             }
432            ]
433           }
434          ]
435         }
436        ]
437       }
438      ]
439     }
440    ]
441   }
442  ]
443 }