define("dojo/store/Observable",["../_base/kernel","../_base/lang","../_base/Deferred","../_base/array"],function(_1,_2,_3,_4){var_5=function(_6){var_7,_8=[],_9=0;_6=_2.delegate(_6);_6.notify=function(_a,_b){_9++;var_c=_8.slice();for(vari=0,l=_c.length;i<l;i++){_c[i](_a,_b);}};var_d=_6.query;_6.query=function(_e,_f){_f=_f||{};var_10=_d.apply(this,arguments);if(_10&&_10.forEach){var_11=_2.mixin({},_f);delete_11.start;delete_11.count;var_12=_6.queryEngine&&_6.queryEngine(_e,_11);var_13=_9;var_14=[],_15;_10.observe=function(_16,_17){if(_14.push(_16)==1){_8.push(_15=function(_18,_19){_3.when(_10,function(_1a){var_1b=_1a.length!=_f.count;vari,l,_16;if(++_13!=_9){thrownewError("Query is out of date, you must observe() the query prior to any data modifications");}var_1c,_1d=-1,_1e=-1;if(_19!==_7){for(i=0,l=_1a.length;i<l;i++){var_1f=_1a[i];if(_6.getIdentity(_1f)==_19){_1c=_1f;_1d=i;if(_12||!_18){_1a.splice(i,1);}break;}}}if(_12){if(_18&&(_12.matches?_12.matches(_18):_12([_18]).length)){var_20=_1d>-1?_1d:_1a.length;_1a.splice(_20,0,_18);_1e=_4.indexOf(_12(_1a),_18);_1a.splice(_20,1);if((_f.start&&_1e==0)||(!_1b&&_1e==_1a.length)){_1e=-1;}else{_1a.splice(_1e,0,_18);}}}else{if(_18){if(_19!==_7){_1e=_1d;}else{if(!_f.start){_1e=_6.defaultIndex||0;_1a.splice(_1e,0,_18);}}}}if((_1d>-1||_1e>-1)&&(_17||!_12||(_1d!=_1e))){var_21=_14.slice();for(i=0;_16=_21[i];i++){_16(_18||_1c,_1d,_1e);}}});});}var_22={};_22.remove=_22.cancel=function(){var_23=_4.indexOf(_14,_16);if(_23>-1){_14.splice(_23,1);if(!_14.length){_8.splice(_4.indexOf(_8,_15),1);}}};return_22;};}return_10;};var_24;function_25(_26,_27){var_28=_6[_26];if(_28){_6[_26]=function(_29){if(_24){return_28.apply(this,arguments);}_24=true;try{var_2a=_28.apply(this,arguments);_3.when(_2a,function(_2b){_27((typeof_2b=="object"&&_2b)||_29);});return_2a;}finally{_24=false;}};}};_25("put",function(_2c){_6.notify(_2c,_6.getIdentity(_2c));});_25("add",function(_2d){_6.notify(_2d);});_25("remove",function(id){_6.notify(undefined,id);});return_6;};_2.setObject("dojo.store.Observable",_5);return_5;});