diff --git a/app/Console/Commands/GenerateAssets.php b/app/Console/Commands/GenerateAssets.php new file mode 100644 index 00000000..1a1260b2 --- /dev/null +++ b/app/Console/Commands/GenerateAssets.php @@ -0,0 +1,143 @@ +where('status', 'created')->where('type', 'tentcard')->first(); + if(!is_null($job)) { + //$user = DB::table("users")->where('user_id', $job->user_id)->first(); + //$response = LambdaRequest::getrequest('ums', 'contact/get_all', ['search' => json_encode([]), 'keyword' => "", 'start' => 0, 'length' => 9999, 'fields' => '["msl_code","doctor_image","user_info"]', 'belowme' => true, 'source' => 'dynamodb' ], $user->access_token ); + $conts = DB::table("contacts")->select('id', 'name', 'contact_id', 'user_id', 'employee_code', 'rep_name', 'position_name', 'msl_code')->whereBetween('created_date', [date("Y-m-d H:i:s", strtotime($job->start_date) + 19800 ), date("Y-m-d H:i:s", strtotime($job->end_date) + 19800 ) ])->get(); + + $files = []; + $contacts = []; + foreach($conts as $cont) { + $contacts[$cont->msl_code] = $cont; + } + foreach($contacts as $contact) { + //$contact->name = str_replace(" ", "_", $contact->name); + print_r($contact); + $file = $this->generate($contact, $job); + $files[] = $file; + } + + print_r(count($contacts)); + + // $folder = storage_path('app/public/'.$job->type); + // $fileName = $contact->user_info->employee_code.'-'.$user->name.'-'.date("Y-m-d", strtotime($job->start_date)).'-'.date("Y-m-d", strtotime($job->start_date)).'.zip'; + // exec('cd '.$folder.'; zip "'.$fileName.'" ' . implode(' ', $files)); + + + // $zip = new \ZipArchive(); + // $folder = storage_path('app/public/'.$job->type); + // $fileName = $contact->user_info->employee_code.'('.$user->name.')-'.$job->start_date.'-'.$job->start_date.'.zip'; + // if ($zip->open($folder, \ZipArchive::CREATE)== TRUE) + // { + // foreach ($files as $value){ + // $zip->addFile($folder.'/'.$value, $value); + // } + // $zip->close(); + // } + //print_r($fileName); + } + + + + //print_r($job); + } + + protected function generate($contact, $job) { + $folder = storage_path('app/public/'.$job->type); + $templatename = 'template.png'; + switch($job->type) { + case 'tentcard': + $pdfname = str_replace(' ', '_', $contact->employee_code).'-'.str_replace(' ', '_', $contact->name).'-Tent-Standee.pdf'; + if(!file_exists($folder.'/'.$pdfname)) { + $outputImage = $this->retimage($folder.'/'.$templatename); + $font = storage_path('app').'/fonts/Poppins-Medium.ttf'; + $white = imagecolorallocatealpha($outputImage, 255, 255, 255, 0); + imagettftext($outputImage, 28, 0, 120, 1290, $white, $font, 'Dr. ' . str_replace('Dr', '', str_replace('.', '', $contact->name) )); + exec('qrencode -o '.$folder.'/qrcode-'.$contact->id.'.png -s 5 -m 2 https://breathefree.cttr.in/tracking/'.$contact->contact_id.'/'.$contact->user_id); + + //file_put_contents($folder.'/'.'qrcode-'.$contact->id.'.png', file_get_contents( 'https://api.qrserver.com/v1/create-qr-code/?size=200&data=https://breathefree.cttr.in/tracking/'.$contact->id.'/'.$contact->user_id )); + + $qrimg = $this->retimage($folder.'/'.'qrcode-'.$contact->id.'.png'); + imagecopyresized($outputImage,$qrimg,645,905,0,0,220,220,225,225); + + $filename = 'tentcard-'.$contact->id.'.png'; + imagepng($outputImage, $folder.'/'.$filename); + imagedestroy($outputImage); + //imagedestroy($templatePDF); + exec('convert ' .$folder.'/'.$filename. ' '.$folder.'/'.str_replace(' ', '_', $contact->employee_code).'-'.str_replace(' ', '_', $contact->name).'-Tent-Standee.pdf'); + exec('rm '.$folder.'/'.$filename); + exec('rm '.$folder.'/'.'qrcode-'.$contact->id.'.png'); + + } + return $pdfname; + break; + + } + + + } + + protected function retimage($image) { + $size = getimagesize($image); + switch ($size['mime']) { + case 'image/jpeg': + $photoimg = imagecreatefromjpeg($image); + break; + case 'image/png': + $photoimg = imagecreatefrompng($image); + break; + case 'image/jpeg': + $photoimg = imagecreatefrompng($image); + break; + default: + # code... + break; + } + return $photoimg; + } + +} diff --git a/app/Console/Commands/GenerateAssetsCsv.php b/app/Console/Commands/GenerateAssetsCsv.php new file mode 100644 index 00000000..8c550df3 --- /dev/null +++ b/app/Console/Commands/GenerateAssetsCsv.php @@ -0,0 +1,148 @@ +where('status', 'created')->where('type', 'tentcard')->first(); + if(!is_null($job)) { + //$user = DB::table("users")->where('user_id', $job->user_id)->first(); + //$response = LambdaRequest::getrequest('ums', 'contact/get_all', ['search' => json_encode([]), 'keyword' => "", 'start' => 0, 'length' => 9999, 'fields' => '["msl_code","doctor_image","user_info"]', 'belowme' => true, 'source' => 'dynamodb' ], $user->access_token ); + $conts = DB::table("contacts")->select('id', 'name', 'contact_id', 'user_id', 'employee_code', 'rep_name', 'position_name', 'msl_code', 'created_date')->whereBetween('created_date', [date("Y-m-d H:i:s", strtotime($job->start_date) + 19800 ), date("Y-m-d H:i:s", strtotime($job->end_date) + 19800 ) ])->get(); + $contacts = []; + foreach($conts as $cont) { + $contacts[$cont->msl_code] = $cont; + } + + $headers = ['TM', 'Emp ID', 'HQ', 'Dr Name', 'MSL Code', 'Created Date']; + $csv = implode(',', $headers) . "\n";//Column headers + foreach($contacts as $contact) { + $csv.= $contact->rep_name.','.$contact->employee_code.','.$contact->position_name.','.$contact->name.','.$contact->msl_code.','.$contact->created_date."\n"; + } + + $folder = storage_path('app/public'); + $fileName = date("Y-m-d", strtotime($job->start_date)).'-'.date("Y-m-d", strtotime($job->end_date)).'.csv'; + print_r($folder); + print_r($fileName); + $csv_handler = fopen ($folder .'/'. $fileName,'w'); + fwrite ($csv_handler,$csv); + fclose ($csv_handler); + + + + // $folder = storage_path('app/public/'.$job->type); + // $fileName = $contact->user_info->employee_code.'-'.$user->name.'-'.date("Y-m-d", strtotime($job->start_date)).'-'.date("Y-m-d", strtotime($job->start_date)).'.zip'; + // exec('cd '.$folder.'; zip "'.$fileName.'" ' . implode(' ', $files)); + + + // $zip = new \ZipArchive(); + // $folder = storage_path('app/public/'.$job->type); + // $fileName = $contact->user_info->employee_code.'('.$user->name.')-'.$job->start_date.'-'.$job->start_date.'.zip'; + // if ($zip->open($folder, \ZipArchive::CREATE)== TRUE) + // { + // foreach ($files as $value){ + // $zip->addFile($folder.'/'.$value, $value); + // } + // $zip->close(); + // } + //print_r($fileName); + } + + + + //print_r($job); + } + + protected function generate($contact, $job) { + $folder = storage_path('app/public/'.$job->type); + $templatename = 'template.png'; + switch($job->type) { + case 'stickeraw': + $pdfname = str_replace(' ', '_', $contact->employee_code).'-'.str_replace(' ', '_', $contact->name).'-Sticker.pdf'; + print_r($pdfname); + if(!file_exists($folder.'/'.$pdfname)) { + $outputImage = $this->retimage($folder.'/'.$templatename); + file_put_contents($folder.'/'.'qrcode-'.$contact->id.'.png', file_get_contents( 'https://api.qrserver.com/v1/create-qr-code/?size=200&data=https://breathefree.cttr.in/tracking/'.$contact->id.'/'.$contact->user_id )); + + $qrimg = $this->retimage($folder.'/'.'qrcode-'.$contact->id.'.png'); + imagecopyresized($outputImage,$qrimg,70,312,0,0,190,190,250,250); + + $font = storage_path('app').'/fonts/Poppins-Bold.ttf'; + $white = imagecolorallocatealpha($outputImage, 255, 255, 255, 0); + imagettftext($outputImage, 27, 0, 309, 340, $white, $font, 'Dr. ' . str_replace('Dr', '', str_replace('.', '', $contact->name) ) ); + + $filename = 'sticker-'.$contact->id.'.png'; + imagepng($outputImage, $folder.'/'.$filename); + imagedestroy($outputImage); + exec('convert ' .$folder.'/'.$filename. ' '.$folder.'/'.str_replace(' ', '_', $contact->employee_code).'-'.str_replace(' ', '_', $contact->name).'-Sticker.pdf'); + exec('rm '.$folder.'/'.$filename); + exec('rm '.$folder.'/'.'qrcode-'.$contact->id.'.png'); + + } + return $pdfname; + break; + + } + + + } + + protected function retimage($image) { + $size = getimagesize($image); + switch ($size['mime']) { + case 'image/jpeg': + $photoimg = imagecreatefromjpeg($image); + break; + case 'image/png': + $photoimg = imagecreatefrompng($image); + break; + case 'image/jpeg': + $photoimg = imagecreatefrompng($image); + break; + default: + # code... + break; + } + return $photoimg; + } + +} diff --git a/app/Console/Commands/GenerateStickerAssets.php b/app/Console/Commands/GenerateStickerAssets.php new file mode 100644 index 00000000..95f585a3 --- /dev/null +++ b/app/Console/Commands/GenerateStickerAssets.php @@ -0,0 +1,144 @@ +where('status', 'created')->where('type', 'stickeraw')->first(); + if(!is_null($job)) { + //$user = DB::table("users")->where('user_id', $job->user_id)->first(); + //$response = LambdaRequest::getrequest('ums', 'contact/get_all', ['search' => json_encode([]), 'keyword' => "", 'start' => 0, 'length' => 9999, 'fields' => '["msl_code","doctor_image","user_info"]', 'belowme' => true, 'source' => 'dynamodb' ], $user->access_token ); + $conts = DB::table("contacts")->select('id', 'name', 'contact_id', 'user_id', 'employee_code', 'rep_name', 'position_name', 'msl_code')->where('status', 0)->whereBetween('created_date', [date("Y-m-d H:i:s", strtotime($job->start_date) + 19800 ), date("Y-m-d H:i:s", strtotime($job->end_date) + 19800 ) ])->get(); + + $files = []; + $contacts = []; + foreach($conts as $cont) { + $contacts[$cont->msl_code] = $cont; + } + foreach($contacts as $contact) { + //$contact->name = str_replace(" ", "_", $contact->name); + print_r($contact); + $file = $this->generate($contact, $job); + $files[] = $file; + } + + print_r(count($contacts)); + + // $folder = storage_path('app/public/'.$job->type); + // $fileName = $contact->user_info->employee_code.'-'.$user->name.'-'.date("Y-m-d", strtotime($job->start_date)).'-'.date("Y-m-d", strtotime($job->start_date)).'.zip'; + // exec('cd '.$folder.'; zip "'.$fileName.'" ' . implode(' ', $files)); + + + // $zip = new \ZipArchive(); + // $folder = storage_path('app/public/'.$job->type); + // $fileName = $contact->user_info->employee_code.'('.$user->name.')-'.$job->start_date.'-'.$job->start_date.'.zip'; + // if ($zip->open($folder, \ZipArchive::CREATE)== TRUE) + // { + // foreach ($files as $value){ + // $zip->addFile($folder.'/'.$value, $value); + // } + // $zip->close(); + // } + //print_r($fileName); + } + + + + //print_r($job); + } + + protected function generate($contact, $job) { + $folder = storage_path('app/public/'.$job->type); + $templatename = 'template.png'; + switch($job->type) { + case 'stickeraw': + $pdfname = str_replace(' ', '_', $contact->employee_code).'-'.str_replace(' ', '_', $contact->name).'-Sticker.pdf'; + print_r($pdfname); + if(!file_exists($folder.'/'.$pdfname)) { + $outputImage = $this->retimage($folder.'/'.$templatename); + //file_put_contents($folder.'/'.'qrcode-'.$contact->id.'.png', file_get_contents( 'https://api.qrserver.com/v1/create-qr-code/?size=200&data=https://breathefree.cttr.in/tracking/'.$contact->id.'/'.$contact->user_id )); + + exec('qrencode -o '.$folder.'/qrcode-'.$contact->id.'.png -s 5 -m 2 https://breathefree.cttr.in/tracking/'.$contact->contact_id.'/'.$contact->user_id); + + $qrimg = $this->retimage($folder.'/'.'qrcode-'.$contact->id.'.png'); + imagecopyresized($outputImage,$qrimg,70,312,0,0,190,190,225,225); + + $font = storage_path('app').'/fonts/Poppins-Bold.ttf'; + $white = imagecolorallocatealpha($outputImage, 255, 255, 255, 0); + imagettftext($outputImage, 27, 0, 309, 340, $white, $font, 'Dr. ' . str_replace('Dr', '', str_replace('.', '', $contact->name) ) ); + + $filename = 'sticker-'.$contact->id.'.png'; + imagepng($outputImage, $folder.'/'.$filename); + imagedestroy($outputImage); + exec('convert ' .$folder.'/'.$filename. ' '.$folder.'/'.str_replace(' ', '_', $contact->employee_code).'-'.str_replace(' ', '_', $contact->name).'-Sticker.pdf'); + exec('rm '.$folder.'/'.$filename); + exec('rm '.$folder.'/'.'qrcode-'.$contact->id.'.png'); + + } + return $pdfname; + break; + + } + + + } + + protected function retimage($image) { + $size = getimagesize($image); + switch ($size['mime']) { + case 'image/jpeg': + $photoimg = imagecreatefromjpeg($image); + break; + case 'image/png': + $photoimg = imagecreatefrompng($image); + break; + case 'image/jpeg': + $photoimg = imagecreatefrompng($image); + break; + default: + # code... + break; + } + return $photoimg; + } + +} diff --git a/app/Console/Commands/GenerateZips.php b/app/Console/Commands/GenerateZips.php new file mode 100644 index 00000000..9ff8623c --- /dev/null +++ b/app/Console/Commands/GenerateZips.php @@ -0,0 +1,104 @@ +where('status', 'created')->where('type', 'tentcard')->first(); + if(!is_null($job)) { + $contacts = DB::table("contacts")->select('id', 'name', 'contact_id', 'user_id', 'employee_code', 'rep_name', 'position_name', 'depot_name')->where('status', 0)->whereBetween('created_date', [date("Y-m-d H:i:s", strtotime($job->start_date) + 19800 ), date("Y-m-d H:i:s", strtotime($job->end_date) + 19800 ) ])->get(); + + $users = []; + $depots = []; + foreach($contacts as $contact) { + if(!isset($users[$contact->user_id])) { + $users[$contact->user_id]['userinfo'] = ['name' => $contact->rep_name, 'employee_code' => $contact->employee_code, 'position_name' => $contact->position_name]; + $users[$contact->user_id]['contacts'] = []; + } + if( !in_array($contact->name, $users[$contact->user_id]['contacts']) ) { + $users[$contact->user_id]['contacts'][] = $contact->name; + } + //if(!array_key_exists($contact->user_id, $depots) ){ + $depots[$contact->employee_code] = $contact->depot_name; + //} + } + + print_r($depots); + $zips = []; + $folder = storage_path('app/public/'.$job->type); + foreach($users as $user_id => $user) { + $files = []; + if( isset($user['contacts']) && sizeof($user['contacts']) > 0 ) { + foreach($user['contacts'] as $cont) { + $fileName = str_replace(' ', '_', $user['userinfo']['employee_code']).'-'.str_replace(' ', '_', $cont).($job->type=='tentcard'?'-Tent-Standee.pdf':'-Sticker.pdf') ; + if(file_exists($folder .'/'. $fileName)) { + $files[] = $fileName; + } + } + } + $zipName = $user['userinfo']['position_name'].'-'.$user['userinfo']['employee_code'].'-'.$user['userinfo']['name'].'.zip'; + $zips[ $depots[ $user['userinfo']['employee_code'] ] ][] = $zipName; + //print_r('cd '.$folder.'; zip "zips/'.$zipName.'" ' . implode(' ', $files)); + exec('cd '.$folder.'; zip "zips/'.$zipName.'" ' . implode(' ', $files)); + } + $zipNames = []; + // $zipss = array_chunk($zips, 100); + foreach($zips as $depot => $zip) { + $zipName = $depot . '-' .date("Y-m-d", strtotime($job->start_date)).'-'.date("Y-m-d", strtotime($job->end_date)).'.zip'; + //print_r('cd '.$folder.'/zips; zip "'.$zipName.'" "' . implode('" "', $zip) . '"'); + exec('cd '.$folder.'/zips; zip "'.$zipName.'" "' . implode('" "', $zip) . '"'); + exec('aws s3 cp ' . $folder .'/zips/'. $zipName. ' s3://rapportapp/breathefree/'.$job->type.'/'); + $zipNames[] = 'https://did94hhhcgq1d.cloudfront.net/breathefree/'.$job->type.'/'.$zipName; + //exec('cd '.$folder.'/zips; rf -rf "' . implode('" "', $zip) . '"'); + + } + + print_r($zipNames); + + } + + + + //print_r($job); + } + +} diff --git a/app/Console/Commands/IndexActivities.php b/app/Console/Commands/IndexActivities.php new file mode 100644 index 00000000..76682fa0 --- /dev/null +++ b/app/Console/Commands/IndexActivities.php @@ -0,0 +1,53 @@ +table("activity_index")->where("is_active", 0)->first(); + if($activityIndex) { + $total = $activityIndex->total_activities; + for($completed = 0; $completed <= $total; $completed+=10) { + LambdaRequest::getrequest('catalog', 'activity/step', ['id'=>$activityIndex->import_id, 'step'=>'index_data_chunk', 'start_from' => $completed, 'limit' => 10], env('LAMBDA_ACCESS_TOKEN')); + DB::connection("primary")->table("activity_index")->where("id", $activityIndex->id)->update(['is_active' => 1, 'indexed_activities' => $completed ]); + } + LambdaRequest::getrequest('catalog', 'activity/step', ['id'=>$activityIndex->import_id, 'step'=>'complete'], env('LAMBDA_ACCESS_TOKEN')); + } + return 0; + } +} diff --git a/app/Helpers/Formhelper.php b/app/Helpers/Formhelper.php index 54420463..38591d5b 100644 --- a/app/Helpers/Formhelper.php +++ b/app/Helpers/Formhelper.php @@ -2,7 +2,7 @@ namespace App\Helpers; use App\Http\Requests\LambdaRequest; - +use DB; class Formhelper { public static function getMultiformData($partition, $form_id, $user_id, $startdate = false, $enddate = false) { @@ -13,5 +13,17 @@ class Formhelper } return $history; } + + public static function getformdefination($partition, $form_id, $user_id) { + $history = LambdaRequest::postrequest('form', 'formentity/getformdefination', ['form_id' => $form_id, 'user_id' => $user_id, 'partition' => $partition ]); + return $history; + } + + public static function getuserdropdown($partition, $filter) { + list($app, $domain) = explode('-', $partition); + $token = DB::table('users')->select("access_token")->where("domain", $domain)->orderBy('updated_at', 'desc')->skip(0)->take(1)->get(); + $history = LambdaRequest::getrequest('ums', 'users/dropdown', ['filter' => $filter ], $token[0]->access_token); + return $history; + } } diff --git a/app/Http/Controllers/ActivityimportController.php b/app/Http/Controllers/ActivityimportController.php new file mode 100644 index 00000000..39d59998 --- /dev/null +++ b/app/Http/Controllers/ActivityimportController.php @@ -0,0 +1,129 @@ +middleware('auth'); + $this->_service = 'catalog'; + $this->_module = 'activity'; + $this->_viewname = 'activity'; + $this->_title = 'Activity Import'; + $this->_base_url = '/activityimport'; + } + + protected function get_list_fields(){ + return [ + 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ], + 'title' => ['title' => 'Title', 'type' => 'text'], + 'status' => ['title' => 'Status', 'type' => 'text'], + 'createdAt' => ['title' => 'Created At', 'type' => 'text'], + ]; + } + + public function list(Request $request) { + $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/import_list'); + //echo '
'; print_r($response); exit;
+ if($response->statusCode == 401) {
+ return redirect('/unauthorised');
+ }
+ $fields = $this->get_list_fields();
+ //echo ''; print_r($fields); exit;
+ return $this->view($this->_listtype)->with([
+ 'title' => $this->_title,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ 'items' => $response->data->items,
+ 'buttons' => $this->get_list_buttons()
+ ]);
+ }
+
+ protected function get_form_fields($type, $values){
+ $mappings = $this->getlambda('get', 'metric', 'injestion_mapping', 'get_all');
+ $mappings_dd = [];
+ foreach($mappings->data->items as $mapping){
+ $mappings_dd[$mapping->id] = $mapping->name;
+ }
+ //echo ''; print_r($mappings_dd); exit;
+ return [
+ 'title' => ['title' => 'Title', 'type' => 'text', 'required' => true],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
+ 'file' => ['title' => 'File Upload', 'type' => 'file', 'required' => true],
+ 'mapping_id' => ['title' => 'Select Mapping', 'type' => 'select', 'values' => $mappings_dd ],
+ ];
+ }
+
+ public function form($type, $id = null) {
+ $values = [];
+ if($type == 'edit') {
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/import_detail', ['id' => $id]);
+ $values = $response->data->item;
+ //echo ''; print_r($values); exit;
+ }
+ //echo ''; print_r($values); exit;
+ $data = $this->_beforeform($type, $values);
+ $fields = $this->get_form_fields($type, $values);
+ //echo ''; print_r($fields); exit;
+ return $this->view('form')->with([
+ 'title' => $this->_title,
+ 'mode' => $type,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ 'item' => $values,
+ ]);
+ }
+
+ protected function _beforesave($type, $request) {
+ $data = $request->except('_token');
+ if( $request->file('file') ) {
+ $data['file'] = $this->_uploadMedia($request, 'file', 'activity_import');
+ }
+ return $data;
+ }
+
+ protected function _beforeform($type, $values) {
+ // if($type == 'edit') {
+ // $values->channels = explode('#', $values->channels);
+ // }
+ //echo ''; print_r($values); exit;
+ return $values;
+ }
+
+ public function processimport(Request $request) {
+ $id = $request->input('id', 0);
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/step', ['id'=>$id, 'step'=>'status']);
+ //echo ''; print_r($response); exit;
+ return $this->view('processimport')->with(['id'=>$id, 'title'=>$response->data->status->title, 'status'=>$response->data->status->status, 'context'=>$response->data->status->context ]);
+ }
+
+ public function step(Request $request) {
+ $id = $request->input('id', 0);
+ $step = $request->input('step', 0);
+ try {
+ LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/step', ['id'=>$id, 'step'=>$step]);
+ } catch (ConnectionException $e) {
+ return redirect('/activityimport/stepresponse?id='.$id.'&step='.$step);
+ }
+ }
+
+ public function stepresponse(Request $request) {
+ $id = $request->input('id', 0);
+ $step = $request->input('step', 0);
+ return $this->view('stepresponse')->with(['id'=>$id, 'step'=>$step]);
+ }
+
+ public function checkstatus(Request $request) {
+ $id = $request->input('id', 0);
+ $step = $request->input('step', 0);
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/step', ['id'=>$id, 'step'=>'status']);
+ return response()->json($response->data->status);
+ }
+
+}
diff --git a/app/Http/Controllers/AppController.php b/app/Http/Controllers/AppController.php
new file mode 100644
index 00000000..cf3ac820
--- /dev/null
+++ b/app/Http/Controllers/AppController.php
@@ -0,0 +1,47 @@
+middleware('auth');
+ $this->_service = 'detailing';
+ $this->_module = 'app';
+ $this->_viewname = 'app';
+ $this->_title = 'App';
+ $this->_base_url = '/app';
+ }
+
+ protected function get_list_fields(){
+ return [
+ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ],
+ 'name' => ['title' => 'Name', 'type' => 'text'],
+ 'android_min_version' => ['title' => 'Android Min Version', 'type' => 'text'],
+ 'ios_min_version' => ['title' => 'IOS Min Version', 'type' => 'text'],
+ 'status' => ['title' => 'Status', 'type' => 'select'],
+ ];
+ }
+
+ protected function get_form_fields($type, $values){
+ $channels = $this->getlambda('get', 'ums', 'channel', 'dropdown');
+ $channels_dd = [];
+ foreach($channels->data->items as $channel){
+ $channels_dd[$channel->id] = $channel->name;
+ }
+ return [
+ 'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled']],
+ 'android_package' => ['title' => 'Android Package', 'type' => 'text', 'required' => true],
+ 'ios_package' => ['title' => 'IOS Package', 'type' => 'text', 'required' => true],
+ 'android_min_version' => ['title' => 'Android Min Version', 'type' => 'text', 'required' => true],
+ 'ios_min_version' => ['title' => 'IOS Min Version','type' => 'text', 'required' => true],
+ 'android_store_link' => ['title' => 'Android Store Link', 'type' => 'text', 'required' => true],
+ 'ios_store_link' => ['title' => 'IOS Store Link', 'type' => 'text', 'required' => true],
+ ];
+ }
+}
diff --git a/app/Http/Controllers/AppreciationcategoryController.php b/app/Http/Controllers/AppreciationcategoryController.php
index 56415aac..a3ebe043 100644
--- a/app/Http/Controllers/AppreciationcategoryController.php
+++ b/app/Http/Controllers/AppreciationcategoryController.php
@@ -66,10 +66,10 @@ class AppreciationcategoryController extends Controller
'points' => ['title' => 'Points', 'type' => 'text', 'required' => true],
'groups' => ['title' => 'Groups', 'type' => 'multiselect', 'required' => true, 'values' => $groups_dd ],
'roles' => ['title' => 'Roles', 'type' => 'multiselect', 'required' => true, 'values' => $roles_dd ],
- 'mapped_metric' => ['title' => 'Metric', 'type' => 'select', 'values' => $metric_dd ],
-
'icon' => ['title' => 'Icon', 'type' => 'image', 'required' => true ],
+ 'mapped_metric' => ['title' => 'Point Metric', 'type' => 'select', 'values' => $metric_dd ],
+ 'count_metric' => ['title' => 'Count Metric', 'type' => 'select', 'values' => $metric_dd ],
];
return $fields;
diff --git a/app/Http/Controllers/BadgelistController.php b/app/Http/Controllers/BadgelistController.php
index a52d6b44..e398a6eb 100644
--- a/app/Http/Controllers/BadgelistController.php
+++ b/app/Http/Controllers/BadgelistController.php
@@ -50,7 +50,11 @@ class BadgelistController extends Controller
foreach($groups->data->items as $group){
$groups_dd[$group->id] = $group->name;
}
-
+ $metrics = $this->getlambda('get', 'metric', 'metric', 'get_all');
+ $metric_dd = [];
+ foreach($metrics->data->items as $metric){
+ $metric_dd[$metric->id] = $metric->name;
+ }
$fields = [
'title' => ['title' => 'Title', 'type' => 'text', 'required' => true],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
@@ -60,6 +64,8 @@ class BadgelistController extends Controller
'image' => ['title' => 'Image', 'type' => 'image', 'required' => true ],
'conditions' => ['title' => 'Conditions', 'type' => 'text', 'required' => true],
+ 'mapped_metric' => ['title' => 'Point Metric', 'type' => 'select', 'values' => $metric_dd ],
+ 'count_metric' => ['title' => 'Count Metric', 'type' => 'select', 'values' => $metric_dd ],
];
return $fields;
@@ -77,7 +83,9 @@ class BadgelistController extends Controller
if ($type == 'edit') {
$values->groups = explode('#', $values->groups);
$values->roles = explode('#', $values->roles);
+ $values->conditions = implode('#', $values->conditions);
}
+ //echo ''; print_r($values); exit;
return $values;
}
}
diff --git a/app/Http/Controllers/BannerController.php b/app/Http/Controllers/BannerController.php
index 48a1e0c3..4242d02f 100644
--- a/app/Http/Controllers/BannerController.php
+++ b/app/Http/Controllers/BannerController.php
@@ -33,13 +33,51 @@ class BannerController extends Controller
foreach($channels->data->items as $channel){
$channels_dd[$channel->id] = $channel->name;
}
+ $groups = $this->getlambda('get', 'ums', 'group', 'dropdown');
+ $groups_dd = [];
+ foreach($groups->data->items as $group){
+ $groups_dd[$group->id] = $group->name;
+ }
+ $roles = $this->getlambda('get', 'ums', 'roles', 'dropdown');
+ $roles_dd = [];
+ foreach($roles->data->items as $role){
+ $roles_dd[$role->id] = $role->name;
+ }
+ $forms = $this->getlambda('get', 'form', 'formentity', 'dropdown');
+ $forms_dd = [];
+ foreach($forms->data->items as $form){
+ $forms_dd[$form->id] = $form->title;
+ }
+
+ $forms = $this->getlambda('get', 'form', 'survey', 'dropdown');
+ foreach($forms->data->items as $form){
+ $forms_dd[$form->id] = $form->title . ' (Survey)';
+ }
+
+ $quizs = $this->getlambda('get', 'form', 'quiz', 'dropdown');
+ foreach($quizs->data->items as $form){
+ $forms_dd[$form->id] = $form->name . ' (Quiz)';
+ }
+
return [
'title' => ['title' => 'Title', 'type' => 'text', 'required' => true],
'channels' => ['title' => 'Channels', 'type' => 'multiselect', 'required' => true, 'values' => $channels_dd ],
- 'scheduled' => ['title' => 'Scheduled', 'type' => 'yesno', 'required' => true, 'fullwidth' => true],
+ 'groups' => ['title' => 'Groups', 'type' => 'multiselect', 'required' => true, 'values' => $groups_dd ],
+ 'roles' => ['title' => 'Roles', 'type' => 'multiselect', 'required' => true, 'values' => $roles_dd ],
+
+ 'scheduled' => ['title' => 'Scheduled', 'type' => 'yesno', 'required' => true],
+ 'position' => ['title' => 'Position', 'type' => 'select', 'required' => true, 'values' => ['default' => 'Default', 'below_stats' => 'Below Stats', 'popup' => 'Pop Up']],
+
'schedule_start_date' => ['title' => 'Schedule start date', 'type' => 'date'],
'schedule_end_date' => ['title' => 'Schedule end date', 'type' => 'date'],
'media_url' => ['title' => 'Banner Image', 'type' => 'image', 'required' => true],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled']],
+
+ 'has_cta' => ['title' => 'Has CTA', 'type' => 'yesno', 'required' => true, 'fullwidth' => true],
+ 'target_type' => ['title' => 'Target Type', 'type' => 'select', 'values' => ['internal_action' => 'Internal Action', 'form' => 'Web Form', 'survey' => 'Surveys', 'quiz' => 'Quizs', 'doctorlist' => 'Doctor List', 'external' => 'External Webpage'] ],
+ 'form_id' => ['title' => 'Form', 'type' => 'select', 'values' => $forms_dd ],
+ 'external_url' => ['title' => 'External Url / Internal Action', 'type' => 'text'],
+
];
}
@@ -51,12 +89,21 @@ class BannerController extends Controller
if( $request->file('media_url') ) {
$data['media_url'] = $this->_uploadMedia($request, 'media_url', 'banners');
}
+ $data['groups'] = implode('#', $data['groups']);
+ $data['roles'] = implode('#', $data['roles']);
+ $data['form_id'] = isset($data['form_id']) ? $data['form_id'] : 'none';
+
+ //echo ''; print_r($data); exit;
return $data;
}
protected function _beforeform($type, $values) {
if($type == 'edit') {
$values->channels = explode('#', $values->channels);
+ $values->groups = !isset($values->groups) ? '' : $values->groups;
+ $values->roles = !isset($values->roles) ? '' : $values->roles;
+ $values->groups = explode('#', $values->groups);
+ $values->roles = explode('#', $values->roles);
}
return $values;
}
diff --git a/app/Http/Controllers/BdeimportController.php b/app/Http/Controllers/BdeimportController.php
new file mode 100644
index 00000000..19b2d2a6
--- /dev/null
+++ b/app/Http/Controllers/BdeimportController.php
@@ -0,0 +1,129 @@
+middleware('auth');
+ $this->_service = 'catalog';
+ $this->_module = 'activity';
+ $this->_viewname = 'bdeimport';
+ $this->_title = 'BDE Import';
+ $this->_base_url = '/bdeimport';
+ }
+
+ protected function get_list_fields(){
+ return [
+ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ],
+ 'title' => ['title' => 'Title', 'type' => 'text'],
+ 'status' => ['title' => 'Status', 'type' => 'text'],
+ 'createdAt' => ['title' => 'Created At', 'type' => 'text'],
+ ];
+ }
+
+ public function list(Request $request) {
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/import_list');
+ //echo ''; print_r($response); exit;
+ if($response->statusCode == 401) {
+ return redirect('/unauthorised');
+ }
+ $fields = $this->get_list_fields();
+ //echo ''; print_r($fields); exit;
+ return $this->view($this->_listtype)->with([
+ 'title' => $this->_title,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ 'items' => $response->data->items,
+ 'buttons' => $this->get_list_buttons()
+ ]);
+ }
+
+ protected function get_form_fields($type, $values){
+ $mappings = $this->getlambda('get', 'metric', 'injestion_mapping', 'get_all');
+ $mappings_dd = [];
+ foreach($mappings->data->items as $mapping){
+ $mappings_dd[$mapping->id] = $mapping->name;
+ }
+ //echo ''; print_r($mappings_dd); exit;
+ return [
+ 'title' => ['title' => 'Title', 'type' => 'text', 'required' => true],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
+ 'file' => ['title' => 'File Upload', 'type' => 'file', 'required' => true],
+ 'mapping_id' => ['title' => 'Select Mapping', 'type' => 'select', 'values' => $mappings_dd ],
+ ];
+ }
+
+ public function form($type, $id = null) {
+ $values = [];
+ if($type == 'edit') {
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/import_detail', ['id' => $id]);
+ $values = $response->data->item;
+ //echo ''; print_r($values); exit;
+ }
+ //echo ''; print_r($values); exit;
+ $data = $this->_beforeform($type, $values);
+ $fields = $this->get_form_fields($type, $values);
+ //echo ''; print_r($fields); exit;
+ return $this->view('form')->with([
+ 'title' => $this->_title,
+ 'mode' => $type,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ 'item' => $values,
+ ]);
+ }
+
+ protected function _beforesave($type, $request) {
+ $data = $request->except('_token');
+ if( $request->file('file') ) {
+ $data['file'] = $this->_uploadMedia($request, 'file', 'activity_import');
+ }
+ return $data;
+ }
+
+ protected function _beforeform($type, $values) {
+ // if($type == 'edit') {
+ // $values->channels = explode('#', $values->channels);
+ // }
+ //echo ''; print_r($values); exit;
+ return $values;
+ }
+
+ public function processimport(Request $request) {
+ $id = $request->input('id', 0);
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/bdestep', ['id'=>$id, 'step'=>'status']);
+ //echo ''; print_r($response); exit;
+ return $this->view('processimport')->with(['id'=>$id, 'title'=>$response->data->status->title, 'status'=>$response->data->status->status, 'context'=>isset($response->data->status->context)?$response->data->status->context:[] ]);
+ }
+
+ public function step(Request $request) {
+ $id = $request->input('id', 0);
+ $step = $request->input('step', 0);
+ try {
+ LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/bdestep', ['id'=>$id, 'step'=>$step]);
+ } catch (ConnectionException $e) {
+ return redirect('/activityimport/stepresponse?id='.$id.'&step='.$step);
+ }
+ }
+
+ public function stepresponse(Request $request) {
+ $id = $request->input('id', 0);
+ $step = $request->input('step', 0);
+ return $this->view('stepresponse')->with(['id'=>$id, 'step'=>$step]);
+ }
+
+ public function checkstatus(Request $request) {
+ $id = $request->input('id', 0);
+ $step = $request->input('step', 0);
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/bdestep', ['id'=>$id, 'step'=>'status']);
+ return response()->json($response->data->status);
+ }
+
+}
diff --git a/app/Http/Controllers/BrandController.php b/app/Http/Controllers/BrandController.php
new file mode 100644
index 00000000..4c20f345
--- /dev/null
+++ b/app/Http/Controllers/BrandController.php
@@ -0,0 +1,68 @@
+middleware('auth');
+ $this->_service = 'catalog';
+ $this->_module = 'brand';
+ $this->_viewname = 'brand';
+ $this->_title = 'Brand';
+ $this->_base_url = '/brand';
+ }
+
+ protected function get_list_fields(){
+ return [
+ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ],
+ 'name' => ['title' => 'Brand Name', 'type' => 'text'],
+ 'type' => ['title' => 'Brand Type', 'type' => 'text'],
+ 'division' => ['title' => 'Division', 'type' => 'text'],
+ 'company' => ['title' => 'Company', 'type' => 'text'],
+ 'status' => ['title' => 'Status', 'type' => 'select'],
+ ];
+ }
+
+ protected function get_form_fields($type, $values){
+ // $channels = $this->getlambda('get', 'ums', 'channel', 'dropdown');
+ // $channels_dd = [];
+ // foreach($channels->data->items as $channel){
+ // $channels_dd[$channel->id] = $channel->name;
+ // }
+ return [
+ 'name' => ['title' => 'Brand Name', 'type' => 'text', 'required' => true],
+ 'type' => ['title' => 'Brand Type', 'type' => 'select', 'values' => ['MDI'=>'MDI', 'DPI'=>'DPI', 'Oral'=>'Oral'] ],
+ 'division' => ['title' => 'Division', 'type' => 'text'],
+ 'company' => ['title' => 'Company', 'type' => 'text'],
+ 'focus_brand' => ['title' => 'Focus Brand', 'type' => 'text'],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
+ ];
+ }
+
+ protected function _beforesave($type, $request) {
+ $data = $request->except('_token');
+ // if($type == 'edit') {
+ // $values->channels = explode('#', $values->channels);
+ // }
+ if( $request->file('media_url') ) {
+ $data['media_url'] = $this->_uploadMedia($request, 'media_url', 'banners');
+ }
+ $data['type'] = isset($data['type']) ? $data['type'] : '';
+ $data['division'] = isset($data['division']) ? $data['division'] : '';
+ $data['company'] = isset($data['company']) ? $data['company'] : '';
+ $data['focus_brand'] = isset($data['focus_brand']) ? $data['focus_brand'] : '';
+ return $data;
+ }
+
+ protected function _beforeform($type, $values) {
+ // if($type == 'edit') {
+ // $values->channels = explode('#', $values->channels);
+ // }
+ return $values;
+ }
+}
diff --git a/app/Http/Controllers/ComcampaignController.php b/app/Http/Controllers/ComcampaignController.php
index 5ff43dcc..b48093cc 100644
--- a/app/Http/Controllers/ComcampaignController.php
+++ b/app/Http/Controllers/ComcampaignController.php
@@ -50,7 +50,7 @@ class ComcampaignController extends Controller
$channels[$chan->id] = $chan->name;
}
- $conlists = $this->getlambda('get', 'ums', 'contact_list', 'dropdown');
+ $conlists = $this->getlambda('get', 'contact', 'contact_list', 'dropdown');
$contactlists = [];
foreach ($conlists->data->items as $conlist) {
$contactlists[$conlist->id] = $conlist->name;
diff --git a/app/Http/Controllers/CompetitionController.php b/app/Http/Controllers/CompetitionController.php
index d22c0f74..4632be50 100644
--- a/app/Http/Controllers/CompetitionController.php
+++ b/app/Http/Controllers/CompetitionController.php
@@ -77,6 +77,12 @@ class CompetitionController extends Controller
$teams_dd[$team->id] = $team->name;
}
+ $roles = $this->getlambda('get', 'ums', 'roles', 'dropdown');
+ $roles_dd = [];
+ foreach($roles->data->items as $role){
+ $roles_dd[$role->id] = $role->name;
+ }
+
$fields = [
'title' => ['title' => 'Title', 'type' => 'text', 'required' => true],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
@@ -85,6 +91,10 @@ class CompetitionController extends Controller
'description' => ['title' => 'Description', 'type' => 'textarea', 'required' => true, 'fullwidth' => true ],
'validity_start' => ['title' => 'Validity start', 'type' => 'date', 'required' => true],
'validity_end' => ['title' => 'Validity end', 'type' => 'date', 'required' => true],
+ 'ranking_method' => ['title' => 'Ranking Method', 'type' => 'select', 'required' => true, 'values' => ['Total' => 'Total', 'Average' => 'Average'] ],
+ 'points_unit' => ['title' => 'Points Units', 'type' => 'text', 'required' => true, ],
+ 'response_roles' => ['title' => 'Accept Response from Roles', 'type' => 'multiselect', 'values' => $roles_dd, 'required' => true],
+
'cover_image' => ['title' => 'Cover Image', 'type' => 'image', 'required' => true],
'target_metrics' => ['title' => 'Choose Metric', 'type' => 'multiselect', 'required' => true, 'values' => $metrics_dd, 'fullwidth' => true ],
'observers' => ['title' => 'Observers', 'type' => 'multiselect', 'values' => $users_dd, 'required' => true, 'fullwidth' => true],
diff --git a/app/Http/Controllers/CompetitionreportController.php b/app/Http/Controllers/CompetitionreportController.php
new file mode 100644
index 00000000..971fc3ad
--- /dev/null
+++ b/app/Http/Controllers/CompetitionreportController.php
@@ -0,0 +1,90 @@
+_service = 'competition';
+ $this->_module = 'contest';
+ $this->_viewname = 'competition_contest';
+ $this->_title = 'Competition Contests';
+ $this->_base_url = '/competitionreport';
+ }
+
+ public function dashboard(Request $request) {
+ $id = $request->input('id', false);
+ $domain = $request->input('domain', false);
+ $user = DB::table('users')->where("domain", $domain)->select("access_token")->orderBy('updated_at', 'desc')->first();
+ $competition = LambdaRequest::getrequest($this->_service, $this->_module.'/contest_dashboard', ['id' => $id ], $user->access_token );
+ $competition = $competition->data->item;
+ if (\View::exists('competition_contest.'.$competition->partition.'.dashboard-'.$competition->id)) {
+ return view('competition_contest.'.$competition->partition.'.dashboard-'.$competition->id)->with(['competition' => $competition]);
+ } elseif (\View::exists('competition_contest.dashboard-'.$competition->id)) {
+ return view('competition_contest.dashboard-'.$competition->id)->with(['competition' => $competition]);
+ } else {
+ return view('competition_contest.dashboard')->with(['competition' => $competition]);
+ }
+ //return $this->deliverform($competition->data->item);
+ }
+
+ public function teamdashboard(Request $request) {
+ $id = $request->input('id', false);
+ $team = $request->input('team', false);
+ $domain = $request->input('domain', false);
+
+ $user = DB::table('users')->where("domain", $domain)->select("access_token")->orderBy('updated_at', 'desc')->first();
+ $competition = LambdaRequest::getrequest($this->_service, $this->_module.'/team_dashboard', ['id' => $id, 'team' => $team ], $user->access_token );
+ $competition = $competition->data->item;
+ //echo ''; print_r($competition); exit;
+ if (\View::exists('competition_contest.'.$competition->partition.'.team_dashboard-'.$competition->id)) {
+ return view('competition_contest.'.$competition->partition.'.team_dashboard-'.$competition->id)->with(['competition' => $competition]);
+ } elseif (\View::exists('competition_contest.team_dashboard-'.$competition->id)) {
+ return view('competition_contest.team_dashboard-'.$competition->id)->with(['competition' => $competition]);
+ } else {
+ return view('competition_contest.team_dashboard')->with(['competition' => $competition]);
+ }
+ //return $this->deliverform($competition->data->item);
+ }
+
+ public function contestmailer(Request $request) {
+ $id = $request->input('id', false);
+ $domain = $request->input('domain', false);
+ $user = DB::table('users')->where("domain", $domain)->select("access_token")->orderBy('updated_at', 'desc')->first();
+ $competition = LambdaRequest::getrequest($this->_service, $this->_module.'/contest_dashboard', ['id' => $id ], $user->access_token );
+ $competition = $competition->data->item;
+ if (\View::exists('competition_contest.'.$competition->partition.'.mailer-'.$competition->id)) {
+ return view('competition_contest.'.$competition->partition.'.mailer-'.$competition->id)->with(['competition' => $competition]);
+ } elseif (\View::exists('competition_contest.mailer-'.$competition->id)) {
+ return view('competition_contest.mailer-'.$competition->id)->with(['competition' => $competition]);
+ } else {
+ return view('competition_contest.mailer')->with(['competition' => $competition]);
+ }
+ //return $this->deliverform($competition->data->item);
+ }
+
+ public function contestteammailer(Request $request) {
+ $id = $request->input('id', false);
+ $team = $request->input('team', false);
+ $domain = $request->input('domain', false);
+
+ $user = DB::table('users')->where("domain", $domain)->select("access_token")->orderBy('updated_at', 'desc')->first();
+ $competition = LambdaRequest::getrequest($this->_service, $this->_module.'/team_dashboard', ['id' => $id, 'team' => $team ], $user->access_token );
+ $competition = $competition->data->item;
+ //echo ''; print_r($competition); exit;
+ if (\View::exists('competition_contest.'.$competition->partition.'.team_mailer-'.$competition->id)) {
+ return view('competition_contest.'.$competition->partition.'.team_mailer-'.$competition->id)->with(['competition' => $competition]);
+ } elseif (\View::exists('competition_contest.team_mailer-'.$competition->id)) {
+ return view('competition_contest.team_mailer-'.$competition->id)->with(['competition' => $competition]);
+ } else {
+ return view('competition_contest.team_mailer')->with(['competition' => $competition]);
+ }
+ //return $this->deliverform($competition->data->item);
+ }
+}
diff --git a/app/Http/Controllers/ContactController.php b/app/Http/Controllers/ContactController.php
index d497dc77..4143e72a 100644
--- a/app/Http/Controllers/ContactController.php
+++ b/app/Http/Controllers/ContactController.php
@@ -6,13 +6,15 @@ use App\Http\Requests\LambdaRequest;
use DB;
use League\Csv\Reader;
use Log;
+use Maatwebsite\Excel\Facades\Excel;
+use App\Exports\InvoicesExport;
class ContactController extends Controller
{
public function __construct()
{
$this->middleware('auth');
- $this->_service = 'ums';
+ $this->_service = 'contact';
$this->_module = 'contact';
$this->_viewname = 'contact';
$this->_title = 'Contact';
@@ -32,12 +34,91 @@ class ContactController extends Controller
]);
}
+ public function aggrid(Request $request) {
+ $fields = [
+ //'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ],
+ 'name' => ['title' => 'Name', 'type' => 'text', 'editable' => false],
+ 'msl_code' => ['title' => 'MSL Code', 'type' => 'text', 'editable' => false],
+ 'position_name' => ['title' => 'Position', 'type' => 'text', 'editable' => false],
+ 'user_name' => ['title' => 'Rep Name', 'type' => 'text', 'editable' => false],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'editable' => false],
+ ];
+ $response = LambdaRequest::signedrequest('get', $this->_service, 'contactattribute/get_all');
+ foreach($response->data->items as $item) {
+ $fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'editable' => $item->editable == 'yes' ? true : false, 'options' => $item->options ];
+ }
+ //echo ''; print_r($fields); exit;
+
+ //echo $this->_listtype; exit;
+ return $this->view('aggrid')->with([
+ 'title' => $this->_title,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ //'items' => $response->data->items,
+ 'buttons' => $this->get_list_buttons()
+ ]);
+ }
+
+ public function aggridajaxlist(Request $request) {
+ $params = $request->input();
+ $search = [];
+ $fields = $this->get_list_fields();
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all', ['start' => 0, 'length' => 100, 'search' => json_encode($search), 'keyword' => '' ]);
+
+ $users = [];
+ foreach($response->data->items as $item) {
+ $user = [];
+ if(isset($item->id)) {
+ $user['id'] = $item->id;
+ }
+ foreach($fields as $field => $props){
+ if($field != 'actions') {
+ switch($props['type']){
+ case('image'):
+ $user[$field] = '
';
+ break;
+ case('text'):
+ case('select'):
+ $user[$field] = isset($item->{$field}) ? $item->{$field} : '';
+ break;
+ case('date'):
+ $user[$field] = date("d M Y", strtotime($item->{$field}));
+ break;
+ }
+ } else {
+ // $user['actions'] = [];
+ // foreach($props['buttons'] as $key => $button){
+ // switch($button) {
+ // case 'edit':
+ // $user['actions'][] = ['link' => '/edit?id='.$item->id, 'icon' => 'square-edit-outline text-warning'];
+ // break;
+ // case 'delete':
+ // $user['actions'][] = ['link' => '/delete?id='.$item->id, 'icon' => 'delete text-danger'];
+ // break;
+ // default:
+ // $querystring = $button['querystring'];
+ // foreach((array)$item as $k => $v) {
+ // if(strpos($querystring,'{'.strtoupper($k).'}') !== false)
+ // $querystring = str_replace('{'.strtoupper($k).'}', $v, $querystring);
+ // }
+ // $user['actions'][] = ['link' => '/'.$key.'?'.$querystring, 'icon' => $button['icon']];
+ // break;
+ // }
+ // }
+ }
+ }
+ $users[] = $user;
+ }
+
+ return response()->json($users);
+ }
+
protected function get_list_buttons() {
- return [ ['title' => 'Add New', 'link' => $this->_base_url.'/addnew' ], ['title' => 'Import Users', 'link' => $this->_base_url.'/import'] ];
+ return [ ['title' => 'Add New', 'link' => $this->_base_url.'/addnew' ], ['title' => 'Import Users', 'link' => $this->_base_url.'/import'], ['title' => 'Export Users', 'link' => $this->_base_url.'/export'] ];
}
protected function get_import_fields($records){
- $response = LambdaRequest::signedrequest('get', 'ums', 'contactattribute/get_all');
+ $response = LambdaRequest::signedrequest('get', $this->_service, 'contactattribute/get_all');
$hierar = $this->getlambda('get', 'ums', 'hierarchy', 'dropdown');
$hierar_dd = [];
foreach($hierar->data->items as $hier){
@@ -63,7 +144,6 @@ class ContactController extends Controller
}
$fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'required' => $item->required=='yes'?true:false, 'values' => $values];
}
-
return $fields;
}
@@ -99,7 +179,7 @@ class ContactController extends Controller
}
protected function get_form_fields($type, $values){
- $response = LambdaRequest::signedrequest('get', 'ums', 'contactattribute/get_all');
+ $response = LambdaRequest::signedrequest('get', $this->_service, 'contactattribute/get_all');
$hierar = $this->getlambda('get', 'ums', 'hierarchy', 'dropdown');
$hierar_dd = [];
foreach($hierar->data->items as $hier){
@@ -170,6 +250,49 @@ class ContactController extends Controller
}
+ public function export(Request $request) {
+ $attributes = LambdaRequest::signedrequest('get', $this->_service, 'contactattribute/get_all', []);
+ $fields = [];
+ foreach($attributes->data->items as $attri) {
+ $fields[] = $attri->code;
+ }
+ $fields[] = 'user_info';
+ $fields[] = 'msl_code';
+ $fields[] = 'position';
+ //echo ''; print_r($response); exit;
+
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all', ['source' => 'dynamodb', 'belowme' => 'yes', 'search' => json_encode([]), 'keyword' => "", 'fields' => json_encode($fields) ]);
+ //echo ''; print_r($response); exit;
+
+ $headers = ['Name', 'Email', 'Phone', 'MSL Code', 'Position', 'Rep Name', 'Rep Employee Code', 'Position Name', 'Position Code', 'Status'];
+ foreach($attributes->data->items as $attri) {
+ $headers[] = $attri->attribute;
+ }
+
+ $exceldata[] = $headers;
+ foreach($response->data->items as $user) {
+ $row = [];
+ $row[] = isset($user->name) ? $user->name : '-';
+ $row[] = isset($user->email) ? $user->email : '-';
+ $row[] = isset($user->phone) ? $user->phone : '-';
+ $row[] = isset($user->msl_code) ? $user->msl_code : '-';
+ $row[] = isset($user->position) ? $user->position : '-';
+
+ $row[] = isset($user->user_info->name) ? $user->user_info->name : '-';
+ $row[] = isset($user->user_info->employee_code) ? $user->user_info->employee_code : '-';
+
+ $row[] = isset($user->hierarchy_info->name) ? $user->hierarchy_info->name : '-';
+ $row[] = isset($user->hierarchy_info->code) ? $user->hierarchy_info->code : '-';
+ $row[] = isset($user->status) ? $user->status : '-';
+
+ foreach($attributes->data->items as $attri) {
+ $row[] = isset($user->{$attri->code}) ? $user->{$attri->code} : '-';
+ }
+ $exceldata[] = $row;
+ }
+ return Excel::download(new InvoicesExport($exceldata), 'contacts.xlsx');
+ }
+
// public function postimport(Request $request) {
// if( $request->file('importfile') ) {
diff --git a/app/Http/Controllers/ContactattributeController.php b/app/Http/Controllers/ContactattributeController.php
index 24aeb184..c73f424b 100644
--- a/app/Http/Controllers/ContactattributeController.php
+++ b/app/Http/Controllers/ContactattributeController.php
@@ -10,7 +10,7 @@ class ContactattributeController extends Controller
public function __construct()
{
$this->middleware('auth');
- $this->_service = 'ums';
+ $this->_service = 'contact';
$this->_module = 'contactattribute';
$this->_viewname = 'contactattribute';
$this->_title = 'Contact Attributes';
@@ -43,17 +43,29 @@ class ContactattributeController extends Controller
return [
'attribute' => ['title' => 'Attribute', 'type' => 'text', 'required' => true],
'code' => ['title' => 'Code (small caps without spaces and special chars except "_")', 'type' => 'text', 'required' => true],
- 'type' => ['title' => 'Attribute Type', 'type' => 'select', 'required' => true, 'values' => ['text' => 'Text', 'number' => 'Number', 'date' => 'Date', 'email' => 'Email', 'url' => 'Url', 'select' => 'Dropdown', 'checkbox' => 'Checkbox', 'radio' => 'Radio'] ],
'required' => ['title' => 'Is Required', 'type' => 'yesno', 'required' => true],
+ 'editable' => ['title' => 'Is Editable', 'type' => 'yesno', 'required' => true],
+ 'type' => ['title' => 'Attribute Type', 'type' => 'select', 'required' => true, 'values' => ['text' => 'Text', 'number' => 'Number', 'date' => 'Date', 'email' => 'Email', 'url' => 'Url', 'select' => 'Dropdown', 'checkbox' => 'Checkbox', 'radio' => 'Radio'] ],
+
'sort_order' => ['title' => 'Sort Order', 'type' => 'number', 'required' => true],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
'options' => ['title' => 'Options', 'type' => 'mapping', 'fullwidth' => true ],
];
}
+ protected function _beforeform($type, $values) {
+ if($type == 'edit') {
+ $this->_request->session()->put('entity_id', $values->id);
+ }
+ return $values;
+ }
+
protected function _beforesave($type, $request) {
$data = $request->except('_token');
- $data['entity_id'] = $request->session()->get('entity_id');
+ $data['id'] = $request->session()->get('entity_id');
+ if(!$data['id']) {
+ unset($data['id']);
+ }
$options = [];
if(isset($data['option_value'])) {
foreach($data['option_value'] as $k => $ov) {
@@ -63,6 +75,7 @@ class ContactattributeController extends Controller
unset($data['option_value']);
unset($data['option_name']);
}
+ //echo ''; print_r($data); exit;
return $data;
}
}
\ No newline at end of file
diff --git a/app/Http/Controllers/ContactlistController.php b/app/Http/Controllers/ContactlistController.php
index f2dad58c..52912e23 100644
--- a/app/Http/Controllers/ContactlistController.php
+++ b/app/Http/Controllers/ContactlistController.php
@@ -12,7 +12,7 @@ class ContactlistController extends Controller
public function __construct()
{
$this->middleware('auth');
- $this->_service = 'ums';
+ $this->_service = 'contact';
$this->_module = 'contact_list';
$this->_viewname = 'contactlist';
$this->_title = 'Contact List';
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index c3f567ba..80291f32 100755
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -10,6 +10,9 @@ use Illuminate\Http\Request;
use App\Http\Requests\LambdaRequest;
use League\Csv\Reader;
use Log;
+use Auth;
+use DB;
+use App\Jobs\Importdata;
class Controller extends BaseController
{
@@ -168,14 +171,42 @@ class Controller extends BaseController
public function postimport(Request $request) {
if( $request->file('importfile') ) {
+
$path = $request->file('importfile')->store('user_import');
- $request->session()->put('user_import_path', $path);
- return redirect($this->_base_url.'/importmap')->withMessage('Successfully Uploaded !!!');
+ $csv = Reader::createFromPath(storage_path('app') .'/' . $path, 'r');
+ $csv->setHeaderOffset(0);
+
+ $header = $csv->getHeader(); //returns the CSV header record
+ $records = $csv->getRecords(); //returns all the CSV records as an Iterator object
+ $fields = $this->get_import_fields($records);
+ if($this->validateImport($header, $records)) {
+ $path = $request->file('importfile')->store('user_import', 's3');
+ $user = Auth::user();
+ $id = DB::table('import_jobs')->insertGetId(['user_id' => $user->id, 'domain' => $user->domain, 'service' => $this->_service, 'module' => $this->_module, 'filepath' => $path, 'status' => 1 ]);
+ Importdata::dispatch($id);
+ return redirect($this->_base_url.'/importprocess?id='.$id)->withMessage('Successfully Uploaded !!!');
+ } else {
+ return \Redirect::back()->withMessage('CSV File incorrect. Either not all required fields have values or data type is incorrect. Please check and try again!');
+ }
} else {
return \Redirect::back()->withMessage('Some Error occured!');
}
}
+ public function importprocess(Request $request) {
+ $id = $request->input('id', 0);
+ $import = DB::table('import_jobs')->where('id', $id)->first();
+ return $this->view('importprocess')->with(['baseurl' => $this->_base_url, 'id' => $id]);
+ }
+
+ public function importstatus(Request $request) {
+ $id = $request->input('id', 0);
+ $import = DB::table('import_jobs')->where('id', $id)->first();
+ return response()->json($import);
+ }
+
+
+
public function importmap(Request $request) {
$path = $request->session()->get('user_import_path');
$csv = Reader::createFromPath(storage_path('app') .'/' . $path, 'r');
@@ -301,7 +332,15 @@ class Controller extends BaseController
protected function _uploadMedia($request, $name = 'image', $folder = 'image') {
$path = '';
try {
- if( $request->file($name) ) {
+ if(is_array($request->file($name))) {
+ $paths = [];
+ foreach($request->file($name) as $file) {
+ $path = $file->store($folder, 's3');
+ $path = env('AWS_URL').'/'.$path;
+ $paths[] = $path;
+ }
+ $path = implode(',', $paths);
+ } else if( $request->file($name) ) {
$path = $request->file($name)->store($folder, 's3');
$path = env('AWS_URL').'/'.$path;
}
diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php
index 489bfae1..2971ae58 100644
--- a/app/Http/Controllers/DashboardController.php
+++ b/app/Http/Controllers/DashboardController.php
@@ -29,9 +29,15 @@ class DashboardController extends Controller
} else {
$campaigns = [];
}
- //echo ''; print_r($campaigns); exit;
+ $widgets = [];
+ // if(isset($widgets) && $widgets->statusCode == 200) {
+ // $widgets = $widgets->data->campaigns;
+ // } else {
+ // $widgets = [];
+ // }
+ //echo ''; print_r($widgets); exit;
- return view('index')->with(['metrics' => isset($reports->data->metrics) ? $reports->data->metrics : [], 'widgets' => $widgets->data->widgets, 'campaigns' => $campaigns]);
+ return view('index')->with(['metrics' => isset($reports->data->metrics) ? $reports->data->metrics : [], 'widgets' => $widgets, 'campaigns' => $campaigns]);
}
diff --git a/app/Http/Controllers/DetailingcontestController.php b/app/Http/Controllers/DetailingcontestController.php
index 630b8b5f..3765a217 100644
--- a/app/Http/Controllers/DetailingcontestController.php
+++ b/app/Http/Controllers/DetailingcontestController.php
@@ -19,9 +19,19 @@ class DetailingcontestController extends Controller
//
protected function get_list_fields(){
return [
- 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete', 'responses' => ['icon' => 'image-multiple', 'querystring' => 'id={ID}'], 'report' => ['icon' => 'text-box-outline', 'querystring' => 'id={ID}'] ] ],
+ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete', 'metrics' => ['icon' => 'book-arrow-right', 'querystring' => 'id={ID}'], 'responses' => ['icon' => 'image-multiple', 'querystring' => 'id={ID}'], 'report' => ['icon' => 'chart-pie', 'querystring' => 'id={ID}'], ] ], // 'report' => ['icon' => 'text-box-outline', 'querystring' => 'id={ID}']
'name' => ['title' => 'Title', 'type' => 'text'],
'marks' => ['title' => 'Marks', 'type' => 'text'],
+
+ 'no_of_participants' => ['title' => 'No of participants', 'type' => 'text'],
+ 'no_of_uploads' => ['title' => 'No of uploads', 'type' => 'text'],
+ 'no_of_evaluations' => ['title' => 'No of evaluations', 'type' => 'text'],
+ 'pass_count' => ['title' => 'Pass Count', 'type' => 'text'],
+ 'fail_count' => ['title' => 'Fail Count', 'type' => 'text'],
+ 'published_on' => ['title' => 'Published On', 'type' => 'date'],
+
+ 'is_published' => ['title' => 'Published', 'type' => 'select'],
+ 'is_result_published' => ['title' => 'Result Published', 'type' => 'select'],
'status' => ['title' => 'Status', 'type' => 'select'],
];
}
@@ -59,24 +69,46 @@ class DetailingcontestController extends Controller
'groups' => ['title' => 'Groups', 'type' => 'multiselect', 'required' => true, 'values' => $groups_dd ],
'evaluators' => ['title' => 'Evaluators', 'type' => 'multiselect', 'required' => true, 'values' => $users_dd ],
'observers' => ['title' => 'Observers', 'type' => 'multiselect', 'required' => true, 'values' => $users_dd ],
-
'evaluation_parameters' => ['title' => 'Evaluation Parameters', 'type' => 'multiselect', 'required' => true, 'values' => $params_dd ],
- 'evaluation_workflow' => ['title' => 'Evaluator Type', 'type' => 'select', 'required' => true, 'values' => ['ANY' => 'ANY', 'ALL' => 'ALL'] ],
- 'media_type' => ['title' => 'Media Type', 'type' => 'select', 'required' => true, 'values' => ['audio' => 'Audio', 'video' => 'Video', 'pdf' => 'PDF', 'image' => 'Image',] ],
- 'media' => ['title' => 'Media', 'type' => 'file', 'required' => true],
+
+ 'dashboard_image' => ['title' => 'Dashboard Image', 'type' => 'image', 'required' => true],
'cover_image' => ['title' => 'Cover Image', 'type' => 'image', 'required' => true],
+ 'media_type' => ['title' => 'Media Type', 'type' => 'select', 'required' => true, 'values' => ['audio' => 'Audio', 'video' => 'Video', 'pdf' => 'PDF', 'image' => 'Image',] ],
+ 'response_sources' => ['title' => 'Response Sources', 'type' => 'multiselect', 'required' => true, 'values' => ['CAMERA' => 'CAMERA', 'GALLERY' => 'GALLERY'] ],
+ 'media' => ['title' => 'Media', 'type' => 'file', 'required' => true],
+
'response_types' => ['title' => 'Response Types', 'type' => 'checkbox', 'required' => true, 'values' => ['audio' => 'Audio', 'video' => 'Video', 'pdf' => 'PDF', 'image' => 'Image',] ],
'response_sources' => ['title' => 'Response Sources', 'type' => 'multiselect', 'required' => true, 'values' => ['CAMERA' => 'CAMERA', 'GALLERY' => 'GALLERY'] ],
- 'response_self_delete' => ['title' => 'Response Deletion Access', 'type' => 'yesno', 'required' => true],
+ 'limits_audio' => ['title' => 'Audio Duration Limit (in sec)', 'type' => 'number', 'required' => true],
+ 'limits_video' => ['title' => 'Video Duration Limit (in sec)', 'type' => 'number', 'required' => true],
+ 'limits_size' => ['title' => 'Max file Size (in MB)', 'type' => 'number', 'required' => true],
+
+ 'response_self_delete' => ['title' => 'Can delete self Response before Evaluation', 'type' => 'yesno', 'required' => true],
+ 'allow_self_evaluation' => ['title' => 'Is Self Evaluation Enabled', 'type' => 'yesno', 'required' => true],
+ 'evaluation_workflow' => ['title' => 'Evaluator Type', 'type' => 'select', 'required' => true, 'values' => ['ANY' => 'ANY', 'ALL' => 'ALL'] ],
+
'result_publish_count' => ['title' => 'Result Publish Count', 'type' => 'number', 'required' => true],
'marks' => ['title' => 'Marks', 'type' => 'number', 'required' => true],
- 'is_published' => ['title' => 'Is Published', 'type' => 'yesno', 'required' => true],
+ 'is_reattempt_allowed' => ['title' => 'Is Reattempt allowed', 'type' => 'yesno', 'required' => true],
+ 'no_of_reattempts' => ['title' => 'No of Reattempts', 'type' => 'number', 'required' => true],
+
+ 'validate_evaluations' => ['title' => 'Validate Evaluations', 'type' => 'yesno', 'required' => true],
+ 'validation_type' => ['title' => 'Validation Type', 'type' => 'select', 'required' => true, 'values' => ['none' => 'None', 'warning' => 'Warning', 'warning_for_top' => 'Warning for top', 'stop' => 'Stop', 'stop_for_top' => 'Stop for top',]],
+
+ // 'is_result_published' => ['title' => 'Is Result Published', 'type' => 'yesno', 'required' => true],
+
'additional_evaluators' => ['title' => 'Additional Evaluators', 'type' => 'checkbox', 'required' => true, 'values' => ['level_1_manager' => '1st line manager', 'level_2_manager' => '2nd line manager', 'random_manager' => 'Random Manager',]],
- 'response_roles' => ['title' => 'Accept Response from Roles', 'type' => 'multiselect', 'values' => $roles_dd, 'required' => true]
+ 'response_roles' => ['title' => 'Accept Response from Roles', 'type' => 'multiselect', 'values' => $roles_dd, 'required' => true],
+ 'show_pass_fail_icon' => ['title' => 'Show Pass/Fail icons on Responses', 'type' => 'yesno', 'required' => true, 'fullwidth' => true],
+ 'pass_icon' => ['title' => 'Pass Icon', 'type' => 'image', 'required' => true],
+ 'fail_icon' => ['title' => 'Fail Icon', 'type' => 'image', 'required' => true],
+
+ //'metrics' => ['title' => 'Choose Metric', 'type' => 'mapping', 'required' => true, 'metrics' => $metrics_dd, 'types' => ['unit' => 'Units', 'count' => 'Count'] , 'fullwidth' => true ]
];
+
}
protected function _beforesave($type, $request) {
@@ -87,11 +119,31 @@ class DetailingcontestController extends Controller
if( $request->file('media') ) {
$data['media'] = $this->_uploadMedia($request, 'media', 'detailing');
}
+ if( $request->file('dashboard_image') ) {
+ $data['dashboard_image'] = $this->_uploadMedia($request, 'dashboard_image', 'detailing');
+ }
+ if( $request->file('pass_icon') ) {
+ $data['pass_icon'] = $this->_uploadMedia($request, 'pass_icon', 'detailing');
+ }
+ if( $request->file('fail_icon') ) {
+ $data['fail_icon'] = $this->_uploadMedia($request, 'fail_icon', 'detailing');
+ }
+ $data['limits'] = ['video' => $data['limits_video'], 'audio' => $data['limits_audio'], 'size' => $data['limits_size'] ];
+ unset($data['limits_video']);
+ unset($data['limits_audio']);
+ unset($data['limits_size']);
+ //echo ''; print_r($data); exit;
return $data;
}
protected function _beforeform($type, $values) {
if($type == 'edit') {
+ //echo ''; print_r($values); exit;
+ if(isset($values->limits)) {
+ $values->limits_video = $values->limits->video ?? 0;
+ $values->limits_audio = $values->limits->audio ?? 0;
+ $values->limits_size = $values->limits->size ?? 0;
+ }
//echo ''; print_r($values); exit;
if(isset($values->groups))
$values->groups = explode('#', $values->groups);
@@ -136,11 +188,79 @@ class DetailingcontestController extends Controller
}
}
- public function report(Request $request) {
- $con_id = $request->input('id', 0);
- $response = LambdaRequest::signedrequest('get', $this->_service, 'contest_response/get_all', ['con_id' => $con_id]);
- echo ''; print_r($response); exit;
+ public function metrics(Request $request) {
+ $id = $request->input('id', 0);
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_one', ['id' => $id]);
+ $parameters = $this->getlambda('get', 'detailing', 'parameter', 'get_all');
+ $params_dd = [];
+ $params_dd['no_of_uploads'] = 'No. of uploads';
+ $params_dd['total_score'] = 'Total score';
+ $params_dd['average_score'] = 'Average score';
+ foreach($parameters->data->items as $param){
+ $params_dd[$param->id] = $param->title . ' (Scale: ' . $param->scale . ')';
+ }
+ $metrics = $this->getlambda('get', 'metric', 'metric', 'get_all');
+ $metrics_dd = [];
+ foreach($metrics->data->items as $metric){
+ $metrics_dd[$metric->id] = $metric->name;
+ }
+ //echo ''; print_r($response->data->item); exit;
+ return $this->view('metrics')->with([
+ 'parameters' => $params_dd,
+ 'metrics' => $metrics_dd,
+ 'item' => $response->data->item,
+ ]);
+ }
- echo $con_id; exit;
+ public function postmetrics(Request $request) {
+ $post = $request->except('_token');
+ //echo ''; print_r($post); exit;
+ $mapping = [];
+ foreach($post['metric'] as $i => $metric) {
+ $mapping[] = ['metric' => $metric, 'parameter' => $post['parameter'][$i] ];
+ }
+ $data = ['id' => $post['id'], 'metrics' => json_encode($mapping), 'metric_mapping_auth_key' => $post['metric_mapping_auth_key'] ];
+ $response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/update', $data);
+ return redirect('/detailingcontests')->withMessage('Contest Metrics Saved!');
+ }
+
+ public function report(Request $request) {
+ $id = $request->input('id', 0);
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/detailreport', ['id' => $id]);
+ return $this->view('report')->with([
+ 'parameters' => $response->data->parameters,
+ 'users' => $response->data->users,
+ ]);
+ }
+
+ protected function get_list_buttons() {
+ return [ ['title' => 'Add New', 'link' => $this->_base_url.'/addnew' ],
+ ['title' => 'Export Contests', 'link' => $this->_base_url.'s' ],
+ ['title' => 'Send Reminders', 'link' => $this->_base_url.'s' ] ];
+ }
+
+ public function status(Request $request) {
+ $id = $request->input('id', 0);
+ $action = $request->input('action', 0);
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_one', ['id' => $id]);
+ $toupdate = [];
+ switch($action) {
+ case 'publish':
+ $toupdate = ['is_published' => 'yes', 'is_result_published' => 'no'];
+ break;
+ case 'unpublish':
+ $toupdate = ['is_published' => 'no', 'is_result_published' => 'no'];
+ break;
+ case 'publish_result':
+ $toupdate = ['is_published' => 'yes', 'is_result_published' => 'yes'];
+ break;
+ case 'unpublish_result':
+ $toupdate = ['is_published' => 'yes', 'is_result_published' => 'no'];
+ break;
+ }
+ $toupdate['id'] = $id;
+ //echo ''; print_r($toupdate); exit;
+ $response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/update', $toupdate);
+ return redirect('/detailingcontest/edit?id='.$id)->withMessage('Detailing Contest Updated!');
}
}
diff --git a/app/Http/Controllers/DetailingcontestresponseController.php b/app/Http/Controllers/DetailingcontestresponseController.php
index 236a1f79..13af0150 100644
--- a/app/Http/Controllers/DetailingcontestresponseController.php
+++ b/app/Http/Controllers/DetailingcontestresponseController.php
@@ -23,7 +23,7 @@ class DetailingcontestresponseController extends Controller
return redirect('/magazines')->withError('Magazine not found!');
}
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all', ['con_id' => $con_id]);
- //echo ''; print_r($response->data->evaluations); exit;
+ echo ''; print_r($response->data); exit;
$items = [];
foreach ($response->data->items as $item) {
$item->user_name = $item->user_info->name;
@@ -33,7 +33,7 @@ class DetailingcontestresponseController extends Controller
$fields = $this->get_list_fields();
return $this->view('list')->with([
- 'title' => $this->_title,
+ 'title' => $this->_title . ' : ' . $response->data->contest->name,
'fields' => $fields,
'base_url' => $this->_base_url,
'items' => $items,
@@ -54,6 +54,10 @@ class DetailingcontestresponseController extends Controller
'user_name' => ['title' => 'User Name', 'type' => 'text'],
'title' => ['title' => 'Media Name', 'type' => 'text'],
'media_type' => ['title' => 'Media Type', 'type' => 'text'],
+ 'createdAt' => ['title' => 'Submitted On', 'type' => 'date'],
+ 'marks' => ['title' => 'Avg. Marks', 'type' => 'text'],
+ 'total' => ['title' => 'Avg. Total', 'type' => 'text'],
+ 'result' => ['title' => 'Result', 'type' => 'text'],
'no_of_evaluations' => ['title' => 'No of Evaluations', 'type' => 'text'],
'likes_count' => ['title' => 'Likes', 'type' => 'text'],
'comments_count' => ['title' => 'Comments', 'type' => 'text'],
diff --git a/app/Http/Controllers/DoctorController.php b/app/Http/Controllers/DoctorController.php
index 3b9b0664..3194059f 100644
--- a/app/Http/Controllers/DoctorController.php
+++ b/app/Http/Controllers/DoctorController.php
@@ -21,17 +21,42 @@ class DoctorController extends Controller
public function list(Request $request)
{
$post = $request->input();
- echo ''; print_r($post); exit;
-
- if ($token != '') {
- $request->session()->put('metric_access_key', $token);
+ if (isset($post['code'])) {
+ $request->session()->put('metric_access_key', $post['code']);
} else {
- $token = $request->session()->get('metric_access_key');
+ $post['code'] = $request->session()->get('metric_access_key');
}
- $response = LambdaRequest::getrequest($this->_service, $this->_module . '/get_my_contacts', [], $token);
- $fields = $this->get_list_fields();
+
+ $response = LambdaRequest::getrequest($this->_service, $this->_module . '/mydoctors', ['code' => $post['code']]);
+ $request->session()->put('hierarchy', $response->data->hierarchy);
+
+ //echo ''; print_r($response); exit;
+
+ $fields = [
+ //'actions' => ['title' => 'Actions', 'type' => 'button', 'buttons' => ['edit', 'delete']],
+ 'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
+ 'email' => ['title' => 'Email', 'type' => 'email', 'required' => true],
+ 'phone' => ['title' => 'Phone', 'type' => 'text', 'required' => true],
+ 'msl_code' => ['title' => 'MSL Code', 'type' => 'text'],
+ // 'position' => ['title' => 'Position', 'type' => 'select', 'required' => true, 'values' => $hierar_dd ],
+ // 'practice_type' => ['title' => 'Practice', 'type' => 'select', 'required' => true, 'values' => $values ],
+ //'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active', 'disabled']],
+ ];
+
+ foreach($response->data->attributes as $attribute) {
+ $options = [];
+ foreach($attribute->options as $opts) {
+ $options[$opts->value] = $opts->display;
+ }
+
+ $fields[$attribute->code] = ['title' => $attribute->attribute, 'type' => $attribute->type, 'values' => $options, 'required' => $attribute->required == 'yes' ];
+ }
+ $fields['status'] = ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active'=>'Active', 'disabled'=>'Disabled']];
+ //echo ''; print_r($fields); exit;
+
return $this->view('list')->with([
'title' => $this->_title,
+ 'user_id' => $response->data->user,
'fields' => $fields,
'base_url' => $this->_base_url,
'items' => $response->data->items,
@@ -39,106 +64,16 @@ class DoctorController extends Controller
]);
}
- public function form($type, $id = null)
- {
- $token = $this->_request->session()->get('metric_access_key');
- $values = [];
- if ($type == 'edit') {
- $response = LambdaRequest::getrequest($this->_service, $this->_module . '/get_one', ['id' => $id], $token);
- $values = $response->data->item;
- }
- $data = $this->_beforeform($type, $values);
- $fields = $this->get_form_fields($type, $values, $token);
- return $this->view('form')->with([
- 'title' => $this->_title,
- 'mode' => $type,
- 'fields' => $fields,
- 'base_url' => $this->_base_url,
- 'item' => $values,
- ]);
- }
- public function save($type, $request)
+ public function postsubmit( $request)
{
- $token = $request->session()->get('metric_access_key');
- if ($type == 'edit') {
- $url = '/update';
- } else {
- $url = '/create';
- }
- $data = $this->_beforesave($type, $request);
- $response = LambdaRequest::postrequest($this->_service, $this->_module . $url, $data, $token);
+ $token = $request->session()->get('metric_access_key');
+ $post = $request->except('_token');
+ $response = LambdaRequest::postrequest($this->_service, $this->_module . '/updatemydoctor', ['post' => $post, 'code' => $token]);
if ($response->statusCode == 200 && $response->status == "success") {
return redirect($this->_base_url . 's')->withMessage('Successfully Saved !!!');
} else {
return redirect($this->_base_url . 's')->withError('Some Error occured! ' . $response->body->message);
}
}
-
- public function createdoctor(Request $request)
- {
- return Doctor::create($request->only(['msl_code', 'email', 'contact_id', 'name', 'phone']))->id;
- }
-
- protected function get_list_fields()
- {
- return [
- 'actions' => ['title' => 'Actions', 'buttons' => ['edit', 'delete']],
- 'name' => ['title' => 'Name', 'type' => 'text'],
- 'msl_code' => ['title' => 'MSL Code', 'type' => 'text']
- ];
- }
-
- public function action($action, Request $request)
- {
- $this->_request = $request;
- switch ($action) {
- case 'edit':
- return $this->form('edit', $request->input('id'));
- break;
- case 'addnew':
- return $this->form('new');
- break;
- case 'delete':
- return $this->delete($request->input('id'));
- break;
- default:
- return $this->{$action}($request);
- break;
- }
- }
- protected function get_form_fields($type, $values, $token)
- {
- $response = LambdaRequest::getrequest('ums', 'contactattribute/get_all', [], $token);
- $fields = [
- 'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
- 'email' => ['title' => 'Email', 'type' => 'email', 'required' => true],
- 'phone' => ['title' => 'Phone', 'type' => 'text', 'required' => true],
- 'msl_code' => ['title' => 'MSL Code', 'type' => 'text'],
- 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled']],
- ];
-
- foreach ($response->data->items as $item) {
- $values = [];
- if (in_array($item->type, ['select', 'radio', 'checkbox'])) {
- foreach ($item->options as $op) {
- $values[$op->value] = $op->display;
- }
- }
- $fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'required' => $item->required == 'yes' ? true : false, 'values' => $values];
- }
-
- return $fields;
- }
- public function delete($id)
- {
- $token = $this->_request->session()->get('metric_access_key');
-
- $response = LambdaRequest::getrequest($this->_service, $this->_module . '/delete', ['id' => $id], $token);
- if ($response->statusCode == 200 && $response->status == "success") {
- return redirect($this->_base_url . 's')->withMessage('Successfully Marked Deleted !!!');
- } else {
- return redirect($this->_base_url . 's')->withError('Some Error occured! ' . $response->body->message);
- }
- }
-}
\ No newline at end of file
+}
diff --git a/app/Http/Controllers/DomainController.php b/app/Http/Controllers/DomainController.php
index e2b447d4..62f91cdb 100644
--- a/app/Http/Controllers/DomainController.php
+++ b/app/Http/Controllers/DomainController.php
@@ -80,7 +80,7 @@ class DomainController extends Controller
'10' => 'November',
'11' => 'December',
];
-
+
return [
'id' => ['title' => '', 'type' => 'hidden'],
'name' => ['title' => 'Domain Name', 'type' => 'text', 'required' => true],
@@ -90,17 +90,38 @@ class DomainController extends Controller
'logo' => ['title' => 'Group Image or Icon', 'type' => 'image', 'required' => true],
'description' => ['title' => 'Description', 'type' => 'textarea', 'required' => true],
'year_start_month' => ['title' => 'Year start month', 'type' => 'select', 'required' => true, 'values' => $months],
+
+ 'login_scheme' => ['title' => 'login Scheme', 'type' => 'select', 'required' => true, 'values' => ['OTP' => 'OTP', 'Password' => 'Password'] ],
+ 'otp_scheme' => ['title' => 'OTP Scheme', 'type' => 'select', 'required' => true, 'values' => ['email' => 'Email Only', 'email_wa_pull' => 'Email + Whatsapp Request', 'email_wa_push' => 'Email + Whatsapp Push', 'wa_pull' => 'Whatsapp Request Only', 'wa_push' => 'Whatsapp Push Only'] ],
+ 'force_change_password' => ['title' => 'Force Change Password', 'type' => 'select', 'required' => true, 'values' => ['Yes' => 'Yes', 'No' => 'No'] ],
+ 'enable_registration' => ['title' => 'Enable Registration', 'type' => 'select', 'required' => true, 'values' => ['Yes' => 'Yes', 'No' => 'No'] ],
+ 'registration_default_role' => ['title' => 'Registration default Role', 'type' => 'select', 'values' => $roles_dd],
+ 'registration_default_designation' => ['title' => 'Registration default Designation', 'type' => 'text'],
+
'use_default_otp' => ['title' => 'Use Default OTP', 'type' => 'select', 'required' => true, 'values' => ['Yes' => 'Yes', 'No' => 'No'] ],
'default_otp' => ['title' => 'Default OTP to be used', 'type' => 'number', 'required' => true],
+ 'static_otp_for_roles' => ['title' => 'Use Statis OTP for Roles', 'type' => 'multitextbox', 'values' => $roles_dd, 'fullwidth' => true],
'dynamic_otp_for_roles' => ['title' => 'Use Dynamic OTP for Roles', 'type' => 'multiselect', 'values' => $roles_dd],
+ 'message_recipient_list' => ['title' => 'Messages Recipient List', 'type' => 'select', 'required' => true, 'values' => ['show_all_users' => 'Show all users', 'show_users_under_hierarchy' => 'Show users under hierarchy', 'show_users_under_hierarchy_and_peers' => 'Show users under hierarchy & peers', 'show_users_under_hierarchy_same_level' => 'Show users under hierarchy & at same level'] ],
+ 'appreciation_recipient_list' => ['title' => 'Appreciation Recipient List', 'type' => 'select', 'required' => true, 'values' => ['show_all_users' => 'Show all users', 'show_users_under_hierarchy' => 'Show users under hierarchy', 'show_users_under_hierarchy_and_peers' => 'Show users under hierarchy & peers', 'show_users_under_hierarchy_same_level' => 'Show users under hierarchy & at same level'] ],
+ 'badges_recipient_list' => ['title' => 'Badges Recipient List', 'type' => 'select', 'required' => true, 'values' => ['show_all_users' => 'Show all users', 'show_users_under_hierarchy' => 'Show users under hierarchy', 'show_users_under_hierarchy_and_peers' => 'Show users under hierarchy & peers', 'show_users_under_hierarchy_same_level' => 'Show users under hierarchy & at same level'] ],
+
'terms_text' => ['title' => 'Login Terms & Conditions Text', 'type' => 'textarea', 'required' => true, 'fullwidth' => true],
'android_server_key' => ['title' => 'Android Server Key', 'type' => 'textarea', 'fullwidth' => true],
'ios_server_key' => ['title' => 'IOS Server Key', 'type' => 'textarea', 'fullwidth' => true],
];
}
+
protected function _beforesave($type, $request) {
$data = $request->except('_token');
+ $static_otp_for_roles = [];
+ foreach($data['static_otp_for_roles'] as $k => $v) {
+ if(!empty($v)) {
+ $static_otp_for_roles[] = ['role' => $k, 'otp' => $v];
+ }
+ }
+ $data['static_otp_for_roles'] = json_encode($static_otp_for_roles);
if( $request->file('logo') ) {
$data['logo'] = $this->_uploadMedia($request, 'logo', 'domain');
}
diff --git a/app/Http/Controllers/FormController.php b/app/Http/Controllers/FormController.php
index 04e9d247..9e72d06d 100644
--- a/app/Http/Controllers/FormController.php
+++ b/app/Http/Controllers/FormController.php
@@ -17,6 +17,7 @@ use Illuminate\Support\Facades\Cache;
use Aws\Ses\SesClient;
use Aws\Credentials\CredentialProvider;
use Illuminate\Support\Str;
+use Response;
class FormController extends Controller
{
@@ -31,11 +32,13 @@ class FormController extends Controller
protected function deliverform($formdata, $questions, $id = false) {
$additional_info = $this->get_additional_info($formdata);
- // if($formdata->form_id == '1672808391-a35fbd00-fbc8-40a6-ad40-6172011c546e') {
+ // if($formdata->form_id == '1711609582-e93dba24-9c98-43e7-b97a-b22d64d9b9fc') {
// echo ''; print_r($formdata); print_r($questions); exit;
// }
//echo ''; print_r($formdata); print_r($questions); exit;
$data = ['questions' => $questions, 'form' => $formdata, 'form_id' => $formdata->form_id, 'id' => false, 'id' => $id ];
+ Log::debug(print_r($data, true));
+ //echo ''; print_r($data); exit;
if(sizeof($additional_info) > 0) {
$data['additional'] = $additional_info;
}
@@ -94,6 +97,8 @@ class FormController extends Controller
return view('form.'.$finfo->data->formdata->partition.'.list-'.$finfo->data->formdata->form_id)->with(['questions' => $finfo->data->questions, 'submissions' => $finfo->data->submissions, 'formname' => $finfo->data->formdata->title, 'form_id' => $finfo->data->formdata->form_id, 'lastkey' => $finfo->data->lastkey, 'formdata' => $finfo->data->formdata ]);
} elseif (\View::exists('form.list-'.$finfo->data->formdata->form_id)) {
return view('form.list-'.$finfo->data->formdata->form_id)->with(['questions' => $finfo->data->questions, 'submissions' => $finfo->data->submissions, 'formname' => $finfo->data->formdata->title, 'form_id' => $finfo->data->formdata->form_id, 'lastkey' => $finfo->data->lastkey, 'formdata' => $finfo->data->formdata ]);
+ } elseif (\View::exists('form.'.$finfo->data->formdata->partition.'.list')) {
+ return view('form.'.$finfo->data->formdata->partition.'.list')->with(['questions' => $finfo->data->questions, 'submissions' => $finfo->data->submissions, 'formname' => $finfo->data->formdata->title, 'form_id' => $finfo->data->formdata->form_id, 'lastkey' => $finfo->data->lastkey, 'formdata' => $finfo->data->formdata ]);
} else {
return view('form.list')->with(['questions' => $finfo->data->questions, 'submissions' => $finfo->data->submissions, 'formname' => $finfo->data->formdata->title, 'form_id' => $finfo->data->formdata->form_id, 'lastkey' => $finfo->data->lastkey, 'formdata' => $finfo->data->formdata ]);
}
@@ -130,9 +135,9 @@ class FormController extends Controller
}
}
$html .= '';
- if( in_array('edit', $submission->actions) ){
+ //if( in_array('edit', $submission->actions) && (strtotime("now") - strtotime($submission->createdAt)) < 432000 ){
$html .= 'Edit';
- }
+ //}
$html .= '
';
}
@@ -144,12 +149,39 @@ class FormController extends Controller
$formdata = $request->session()->get('formdata');
//Log::debug(print_r($formdata, true));
$id = $request->input('id', false);
+ $action = $request->input('action', false);
+ Log::debug(print_r(['form_id' => $formdata->form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition, 'id' => $id ], true));
$finfo = LambdaRequest::postrequest('form', 'formentity/getformdefination', ['form_id' => $formdata->form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition, 'id' => $id ]);
//Log::debug(print_r($finfo, true));
+ $formdata->formdata = $finfo->data->formdata;
//echo ''; print_r($formdata); print_r($finfo); exit;
+ if($formdata->form_id == '1711947857-4fbd5d43-d176-4ec7-aff2-e4dec4b6e02a' && isset($action) && $action == 'delete') {
+ $contact_id = false;
+ foreach($finfo->data->questions as $que) {
+ if($que->code == 'contact_id') {
+ $contact_id = $que->value;
+ }
+ }
+ list($application, $domain) = explode("-", $formdata->partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_delete%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+ LambdaRequest::getrequest('contact', 'contact/delete', ['id' => $contact_id], $token[0]->access_token);
+ LambdaRequest::getrequest('form', 'formentity/deletesubmission', ['id' => $id, 'form_id' => $formdata->form_id], $token[0]->access_token);
+ return redirect('/form/history')->withMessage('Successfully Deleted !!!');
+ }
$formdata->title = $finfo->data->formdata->title;
return $this->deliverform($formdata, $finfo->data->questions, $id);
}
+
+ public function deletesubmission(Request $request) {
+ $formdata = $request->session()->get('formdata');
+ //Log::debug(print_r($formdata, true));
+ $id = $request->input('id', false);
+ $form_id = $request->input('form_id', false);
+ list($application, $domain) = explode("-", $formdata->partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_create%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+ LambdaRequest::getrequest('form', 'formentity/deletesubmission', ['form_id' => $form_id, 'id' => $id ], $token[0]->access_token);
+ return redirect('/form/history')->withMessage('Successfully Deleted !!!');
+ }
public function submit(Request $request) {
$post = $request->except('_token');
@@ -195,7 +227,10 @@ class FormController extends Controller
if(isset($post['id']) && $post['id']=='') unset($post['id']);
$formdata = $request->session()->get('formdata');
-
+ if(!$formdata) {
+ $formdata = (object)[];
+ }
+ $formdata->form_id = $post['form_id'];
// if($formdata->partition == 'rapport-copd') {
// return response()->json(['status' => 'failure']);
// }
@@ -206,14 +241,20 @@ class FormController extends Controller
if(isset($post['user_id']) && $post['user_id'] != '') {
$formdata->user_id = $post['user_id'];
}
+ if(isset($post['partition']) && $post['partition'] != '') {
+ $formdata->partition = $post['partition'];
+ }
+ $request->session()->put('formdata', $formdata);
if(isset($formdata) && !empty($formdata) && $formdata->user_id != '') {
$post = $this->processformdata($formdata->form_id, $post, $formdata->user_id, $formdata->partition);
-
- Log::debug(print_r($post, true));
$finfo = LambdaRequest::postrequest('form', 'formentity/submitform', ['formdata' => $post, 'entity_id' => $formdata->form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition ]);
+ Log::debug(print_r($finfo, true));
if($finfo->status == 'success') {
return response()->json(['status' => 'success']);
} else {
+ if($finfo->statusCode == 401) {
+ return response()->json(['status' => 'failure', 'message' => $finfo->data ]);
+ }
return response()->json(['status' => 'failure']);
}
} else {
@@ -224,12 +265,129 @@ class FormController extends Controller
public function ajaxsubmitmultiple(Request $request) {
$post = $request->except('_token');
$formdata = $request->session()->get('formdata');
-
+ $formdata->form_id = $post['form_id'];
// if($formdata->partition == 'rapport-copd') {
// return response()->json(['status' => 'failure']);
// }
+ if(isset($post['user_id']) && $post['user_id'] != '') {
+ $formdata->user_id = $post['user_id'];
+ }
+ $request->session()->put('formdata', $formdata);
+ Log::debug(print_r($formdata, true));
+
+ if($formdata->form_id == '1716267411-74ef7199-6298-4bae-8c8b-c069a405c864') {
+ $contacts = [];
+ foreach($post['contact_id'] as $i => $contact_id) {
+ $contacts[] = ['contact_id' => $contact_id, 'proxym_tuesday' => isset($post['proxym_tuesday'][$i])?'Yes':'No', 'ferium_xt_thursday' => isset($post['ferium_xt_thursday'][$i])?'Yes':'No', 'galact_saturday' => isset($post['galact_saturday'][$i])?'Yes':'No' ];
+ }
+ list($application, $domain) = explode("-", $formdata->partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_create%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+
+ foreach($contacts as $contact) {
+ $contactdata = [
+ 'domain' => $domain,
+ 'application' => $application,
+ 'user_id' => $post['user_id'],
+ 'hierarchy' => $post['hierarchy_id'],
+ 'proxym_tuesday' => $contact['proxym_tuesday'],
+ 'ferium_xt_thursday' => $contact['ferium_xt_thursday'],
+ 'galact_saturday' => $contact['galact_saturday'],
+ 'id' => $contact['contact_id'],
+ ];
+ $cont = LambdaRequest::postrequest('contact', 'contact/update', $contactdata, $token[0]->access_token);
+ }
+ return response()->json(['status' => 'success']);
+ }
+
+ //["rtm","telma_ln_ecme","zita_ecme"]
+ if($formdata->form_id == '1721281521-a4a857d7-84d7-4e4c-9df3-4e9c9f999d64') {
+ $contacts = [];
+ foreach($post['contact_id'] as $i => $contact_id) {
+ $contacts[] = ['contact_id' => $contact_id, 'zita_ecme' => isset($post['zita_ecme'][$i])?'Yes':'No', 'telma_ln_ecme' => isset($post['telma_ln_ecme'][$i])?'Yes':'No', 'rtm' => isset($post['rtm'][$i])?'Yes':'No' ];
+ }
+ list($application, $domain) = explode("-", $formdata->partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_create%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+ $post['contact_id'] = [];
+ $post['zita_ecme'] = [];
+ $post['telma_ln_ecme'] = [];
+ $post['rtm'] = [];
+ foreach($contacts as $i => $contact) {
+ $contactdata = [
+ 'domain' => $domain,
+ 'application' => $application,
+ 'user_id' => $post['user_id'],
+ //'hierarchy' => $post['hierarchy_id'],
+ 'zita_ecme' => $contact['zita_ecme'],
+ 'telma_ln_ecme' => $contact['telma_ln_ecme'],
+ 'rtm' => $contact['rtm'],
+ 'id' => $contact['contact_id'],
+ ];
+ $cont = LambdaRequest::postrequest('contact', 'contact/update', $contactdata, $token[0]->access_token);
+ $post['contact_id'][$i] = $contact['contact_id'];
+ $post['zita_ecme'][$i] = $contact['zita_ecme'];
+ $post['telma_ln_ecme'][$i] = $contact['telma_ln_ecme'];
+ $post['rtm'][$i] = $contact['rtm'];
+ }
+ return response()->json(['status' => 'success']);
+ }
+
+ if($formdata->form_id == '1716267411-74ef7199-6298-4bae-c2c-c069a405c864') {
+ $contacts = [];
+ foreach($post['contact_id'] as $i => $contact_id) {
+ $contacts[] = ['contact_id' => $contact_id, 'c2c' => isset($post['c2c'][$i])?'Yes':'No' ];
+ }
+
+ list($application, $domain) = explode("-", $formdata->partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_create%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+
+ foreach($contacts as $contact) {
+ $contactdata = [
+ 'domain' => $domain,
+ 'application' => $application,
+ 'user_id' => $post['user_id'],
+ 'hierarchy' => $post['hierarchy_id'],
+ 'c2c' => $contact['c2c'],
+ 'id' => $contact['contact_id'],
+ ];
+ $cont = LambdaRequest::postrequest('contact', 'contact/update', $contactdata, $token[0]->access_token);
+ }
+ return response()->json(['status' => 'success']);
+ }
+
+ if($formdata->form_id == '1723015306-c8d90868-1c50-4820-ab96-474cdff8e543') {
+ $contacts = [];
+ foreach($post['contact_id'] as $i => $contact_id) {
+ $contacts[] = ['contact_id' => $contact_id, 'glycoquic_f' => isset($post['glycoquic_f'][$i])?'Yes':'No' ];
+ }
+
+ list($application, $domain) = explode("-", $formdata->partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_create%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+
+ foreach($contacts as $contact) {
+ $contactdata = [
+ 'domain' => $domain,
+ 'application' => $application,
+ 'user_id' => $post['user_id'],
+ 'glycoquic_f' => $contact['glycoquic_f'],
+ 'id' => $contact['contact_id'],
+ ];
+ $cont = LambdaRequest::postrequest('contact', 'contact/update', $contactdata, $token[0]->access_token);
+ }
+ return response()->json(['status' => 'success']);
+ }
+
+ if($formdata->form_id == '1713426268-c89f38eb-ec32-43ba-a81b-b690a8f90d6a') {
+ if(DB::table('team3_nebyatra_doctors')->where('user_id', $formdata->user_id)->wherein('mobile_number', $post['mobile_number'])->exists() ){
+ $phones = DB::table('team3_nebyatra_doctors')->select("mobile_number")->where('user_id', $formdata->user_id)->wherein('mobile_number', $post['mobile_number'])->get();
+ $matched = [];
+ foreach($phones as $phone) {
+ $matched[] = $phone->mobile_number;
+ }
+ return response()->json(['status' => 'failure', 'message' => 'Some Mobile numbers you entered already exists. Numbers are ' . implode(', ', $matched) ]);
+ }
+ }
if(isset($formdata) && !empty($formdata) && $formdata->user_id != '') {
- $post = $this->processformdata($formdata->form_id, $post);
+ $post = $this->processformdata($formdata->form_id, $post, $formdata->user_id, $formdata->partition);
$finfo = LambdaRequest::postrequest('form', 'formentity/submitmultipleform', ['formdata' => $post, 'entity_id' => $post['form_id'], 'user_id' => $formdata->user_id, 'partition' => $formdata->partition ]);
//Log::debug(print_r($finfo, true));
if($finfo->status == 'success') {
@@ -245,21 +403,83 @@ class FormController extends Controller
public function approvereject(Request $request) {
$formdata = $request->session()->get('formdata');
$post = $request->all();
- $user = DB::table('users')->where('domain', str_replace('rapport-', '',$formdata->partition ) )->first();
+ //$user = DB::table('users')->where('domain', str_replace('rapport-', '',$formdata->partition ) )->first();
+
+ list($app, $domain) = explode('-', $formdata->partition);
+ $user = DB::table('users')->select("access_token")->where('domain', $domain )->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+ Log::debug(print_r($formdata, true));
- $finfo = LambdaRequest::postrequest('form', 'formentity/approvereject', ['submission_id' => $post['id'], 'action' => $post['action'] ], $user->access_token);
+ $finfo = LambdaRequest::postrequest('form', 'formentity/approvereject', ['submission_id' => $post['id'], 'action' => $post['action'] ], $user[0]->access_token);
Log::debug(print_r($user, true));
Log::debug(print_r($finfo, true));
-
- Log::debug(print_r($formdata, true));
Log::debug(print_r($post, true));
-
-
return response()->json($post);
}
+ public function approverejectmultiple(Request $request) {
+ $post = $request->all();
+ foreach($post['ids'] as $id) {
+ LambdaRequest::postrequest('form', 'formentity/approvereject', ['submission_id' => $id, 'action' => $post['action'] ], Auth::user()->access_token);
+ }
+ return response()->json($post);
+ }
+
+ public function allaprovers(Request $request) {
+ $post = $request->all();
+ $allapprovers = LambdaRequest::postrequest('form', 'formentity/allapprovers', ['submission_id' => $post['submission_id'], 'form_id' => $post['form_id'] ], Auth::user()->access_token);
+ return response()->json($allapprovers->data->approvals);
+ }
+
protected function processformdata($form, $post, $user_id = 0, $partition = '' ) {
switch($form) {
+ case '1711609582-e93dba24-9c98-43e7-b97a-b22d64d9b9fc':
+ case '1711609582-e93dba24-9c98-43e7-neb2-b22d64d9b9fc':
+ list($application, $domain) = explode("-", $partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_create%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+ $contactdata = [
+ 'domain' => $domain,
+ 'application' => $application,
+ 'user_id' => $user_id,
+ 'name' => $post['chemist_name'],
+ 'current_business' => $post['current_business'],
+ 'type' => 'chemist',
+ 'category' => isset($post['category']) ? $post['category'] : '',
+ 'msl_code' => strtotime("now").'-'.rand(1000,9999)
+ ];
+ if(isset($post['id'])) {
+ $contactdata['id'] = $post['contact_id'];
+ unset($post['contact_id']);
+ $contact = LambdaRequest::postrequest('contact', 'contact/update', $contactdata, $token[0]->access_token);
+ } else {
+ $contact = LambdaRequest::postrequest('contact', 'contact/create', $contactdata, $token[0]->access_token);
+ }
+ $post['contact_id'] = $contact->data->item->id;
+ break;
+ case '1711947857-4fbd5d43-d176-4ec7-aff2-e4dec4b6e02a':
+ list($application, $domain) = explode("-", $partition);
+ $token = DB::table('users')->select("access_token")->where("domain", $domain)->where("permissions", 'like', '%contact_create%')->orderBy('updated_at', 'desc')->skip(0)->take(1)->get();
+ $contactdata = [
+ 'domain' => $domain,
+ 'application' => $application,
+ 'user_id' => $user_id,
+ 'name' => $post['chemist_name'],
+ 'current_business' => $post['current_business'],
+ 'type' => 'chemist',
+ 'doctor_name' => $post['doctor_name'],
+ 'category' => $post['category'],
+ 'doctor_msl_code' => $post['msl_code'],
+ 'doctor_speciality' => $post['speciality'],
+ 'msl_code' => strtotime("now").'-'.rand(1000,9999)
+ ];
+ if(isset($post['id'])) {
+ $contactdata['id'] = $post['contact_id'];
+ unset($post['contact_id']);
+ $contact = LambdaRequest::postrequest('contact', 'contact/update', $contactdata, $token[0]->access_token);
+ } else {
+ $contact = LambdaRequest::postrequest('contact', 'contact/create', $contactdata, $token[0]->access_token);
+ }
+ $post['contact_id'] = $contact->data->item->id;
+ break;
case '1654748343-81b065ee-e05c-431c-a44d-706afc1c16f4':
if($post['contact_id'] == 'other') {
$post['contact_id'] = '';
@@ -390,7 +610,7 @@ class FormController extends Controller
break;
case '1669979081-e991fc27-e8c1-4120-9883-b42af09244d3':
case '1689236085-9aaa37ba-601b-4414-b1fc-a26e9cc722df':
- if(isset($post['execution_done']) && $post['execution_done'] == 'yes') {
+ if(isset($post['execution_done']) && $post['execution_done'] == 'yes' && isset($post['activity_type'])) {
$post[$post['activity_type']] = 1;
}
break;
@@ -486,6 +706,29 @@ class FormController extends Controller
$post = $first_post;
}
break;
+ case '1713426268-c89f38eb-ec32-43ba-a81b-b690a8f90d6a':
+ if(is_array($post['doctor_name']) ) {
+ $execCount = sizeof($post['doctor_name']);
+ $planed = LambdaRequest::postrequest('form', 'formentity/getformdefination', ['form_id' => '1713425460-8bdf7394-01b5-48f3-8985-343b465dd685', 'user_id' => $user_id, 'partition' => $partition, 'id' => $post['plan_id'] ]);
+ $plandata = $planed->data->formdata;
+ if(isset($plandata->execution_count)) {
+ $plandata->execution_count += $execCount;
+ } else {
+ $plandata->execution_count = $execCount;
+ }
+ $plandata->id = $post['plan_id'];
+ LambdaRequest::postrequest('form', 'formentity/submitform', ['formdata' => (array)$plandata, 'entity_id' => '1713425460-8bdf7394-01b5-48f3-8985-343b465dd685', 'user_id' => $user_id, 'partition' => $partition ]);
+ $post['plan_id'] = [];
+ foreach($post['doctor_name'] as $i => $dn) {
+ $post['plan_id'][] = $plandata->id;
+ DB::table('team3_nebyatra_doctors')->updateOrInsert(
+ ['user_id' => $user_id, 'mobile_number' => $post['mobile_number'][$i] ],
+ ['doctor_name' => $dn, 'email_id' => $post['email_id'][$i], 'speciality' => $post['speciality'][$i], 'location' => $post['location'][$i], 'district' => $post['district'][$i], 'state' => $post['state'][$i], 'date_added' => $post['record_date'][$i] ]
+ );
+ }
+
+ }
+ break;
}
return $post;
@@ -493,12 +736,49 @@ class FormController extends Controller
public function history(Request $request) {
$formdata = $request->session()->get('formdata');
+ //Log::debug(print_r($formdata, true));
$form_id = $request->input('form_id', $formdata->form_id);
+ $formdata->form_id = $form_id;
+ $request->session()->put('formdata', $formdata);
//echo ''; print_r($formdata); exit;
$history = LambdaRequest::postrequest('form', 'formentity/getformhistory', ['form_id' => $form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition ]);
//echo ''; print_r($history); print_r($formdata); exit;
+ //Log::debug(print_r($history, true));
+ if($form_id == '1713426268-c89f38eb-ec32-43ba-a81b-b690a8f90d6a') {
+ $plan_id = $request->input('plan_id', '');
+ $submissions = [];
+ foreach($history->data->submissions as $sub) {
+ if(isset($sub->formdata->plan_id) && $sub->formdata->plan_id == $plan_id) {
+ $submissions[] = $sub;
+ }
+ }
+ $data = ['form' => $history->data->form, 'questions' => $history->data->questions, 'submissions' => $submissions, 'formname' => $history->data->formname, 'form_id' => $form_id ];
+ } else {
+ $data = ['form' => $history->data->form, 'questions' => $history->data->questions, 'submissions' => $history->data->submissions, 'formname' => $history->data->formname, 'form_id' => $form_id ];
+ }
+
+ if($request->input('export', false)) {
+ $exceldata = [];
+ $exceldata[] = [$formdata->title];
+ $exceldata[] = [''];
+ $headers = ['Submission Date', 'Submitted By', 'Approval Status'];
+ foreach($history->data->questions as $question) {
+ $headers[] = $question->label;
+ }
+ $exceldata[] = $headers;
+ foreach($history->data->submissions as $submission) {
+ $row = [];
+ $row[] = $submission->createdAt;
+ $row[] = isset($submission->user_info->name) ? $submission->user_info->name : '';
+ $row[] = isset($submission->workflow_status) ? $submission->workflow_status : '';
+ foreach($history->data->questions as $q => $v) {
+ $row[] = isset($submission->formdata->{$q}) ? $submission->formdata->{$q} : '-';
+ }
+ $exceldata[] = $row;
+ }
+ return Excel::download(new InvoicesExport($exceldata), $formdata->title.'.xlsx');
+ }
- $data = ['questions' => $history->data->questions, 'submissions' => $history->data->submissions, 'formname' => $history->data->formname, 'form_id' => $form_id ];
if (\View::exists('form.'.$formdata->partition.'.'.$formdata->form_id.'-history')) {
return view('form.'.$formdata->partition.'.'.$formdata->form_id.'-history')->with($data);
} elseif (\View::exists('form.'.$formdata->form_id.'-history')) {
@@ -517,13 +797,13 @@ class FormController extends Controller
//'user_id' => $formdata->user_id,
$finfo = LambdaRequest::postrequest('form', 'formentity/getformdefination', ['form_id' => $formdata->form_id, 'partition' => $formdata->partition, 'id' => $id ]);
$formdata->title = $finfo->data->formdata->title;
- Log::debug(print_r(['form_id' => $formdata->form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition, 'id' => $id ], true));
+ //Log::debug(print_r($finfo->data->formdata, true));
if (\View::exists('form.'.$formdata->partition.'.'.$formdata->form_id)) {
- return view('form.'.$formdata->partition.'.'.$formdata->form_id)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id ]);
+ return view('form.'.$formdata->partition.'.'.$formdata->form_id)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]);
} elseif (\View::exists('form.'.$formdata->form_id)) {
- return view('form.'.$formdata->form_id)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id ]);
+ return view('form.'.$formdata->form_id)->with(['questions' => $finfo->data->questions,'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]);
} else {
- return view('form.common')->with(['questions' => $finfo->data->questions, 'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id ]);
+ return view('form.common')->with(['questions' => $finfo->data->questions, 'form_id' => $formdata->form_id, 'form' => $formdata, 'id' => $id, 'formdata' => $finfo->data->formdata ]);
}
}
@@ -567,12 +847,17 @@ class FormController extends Controller
public function metricreport(Request $request) {
$post = $request->input();
+ Log::debug(print_r($post, true));
$token = $request->header('Authorization');
if($token != '') {
$request->session()->put('metric_access_key', $token);
+ } elseif(array_key_exists('authorization', $post)) {
+ $token = $post['authorization'];
+ $request->session()->put('metric_access_key', $token);
} else {
$token = $request->session()->get('metric_access_key');
}
+ //Log::debug('Token is:' . $token);
$download = (isset($post['download']) && $post['download'] == 1) ? 1 : 0;
$email = (isset($post['email']) && $post['email'] == 1) ? 1 : 0;
$s3 = (isset($post['s3']) && $post['s3'] == 1) ? 1 : 0;
@@ -581,7 +866,7 @@ class FormController extends Controller
unset($post['s3']);
$response = LambdaRequest::postrequest('metric', 'metric_report/view', $post, $token);
- //Log::debug(print_r($response, true));
+ Log::debug(print_r($response, true));
//echo ''; print_r($response); print_r($post); exit;
$breadcrumbs = [];
@@ -684,6 +969,11 @@ class FormController extends Controller
$row = [];
$row[] = $contact->name;
$row[] = $contact->msl_code;
+
+ if(!isset($response->data->graph->values->users->{$contact->id})) {
+ continue;
+ }
+
$user = $response->data->graph->values->users->{$contact->id};
$row[] = $user->name;
@@ -776,7 +1066,7 @@ class FormController extends Controller
}
}
- protected function deliverpersonalization($formdata, $questions, $personalizations) {
+ protected function deliverpersonalization($formdata, $questions, $personalizations) {
$additional_info = $this->get_additional_info($formdata);
//echo ''; print_r($formdata); print_r($questions); print_r($personalizations); exit;
$data = ['questions' => $questions, 'form' => $formdata, 'form_id' => $formdata->form_id, 'personalizations' => $personalizations ];
@@ -938,6 +1228,22 @@ class FormController extends Controller
imagettftext($outputImage, $pos->size, 0, $pos->x, $pos->y, $white, $font, $text);
}
break;
+
+ case 'multiline':
+ if(isset($form_info[$pos->field_name])) {
+ $font = storage_path('app').'/fonts/'.$pos->font;
+ $pos->color = explode('-',$pos->color);
+ $white = imagecolorallocate($outputImage, $pos->color[0], $pos->color[1], $pos->color[2]);
+ $text = $form_info[$pos->field_name];
+ $lines = wordwrap($text, $pos->linechars, "\n", true);
+ $xPosition = $pos->x;
+ $yPosition = $pos->y;
+ foreach (explode("\n", $lines) as $line) {
+ imagettftext($outputImage, $pos->size, 0, $xPosition, $yPosition, $white, $font, $line);
+ $yPosition += $pos->linehieght;
+ }
+ }
+ break;
}
}
@@ -1188,6 +1494,7 @@ class FormController extends Controller
} else {
//echo '';print_r($form_info); exit;
$res = ['folder' => 'personalized/'.$form_info['form_id'].'/', 'images' => $form_info['genareted_image'] ];
+ $res['form_info'] = $form_info;
if(isset($form_info['pdf_file'])) {
$res['pdf_file'] = $form_info['pdf_file'];
}
@@ -1204,6 +1511,136 @@ class FormController extends Controller
//return view('form.download')->with($res);
}
+ public function downloadtempletepdf(Request $request) {
+ $post = $request->all();
+ $id = $post['id'];
+ $formdata = $request->session()->get('formdata');
+ $finfo = LambdaRequest::postrequest('form', 'formentity/getformdefination', ['form_id' => $formdata->form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition, 'id' => $id ]);
+ //echo ''; print_r($finfo); exit;
+ foreach($finfo->data->personalizations as $pers) {
+ if($pers->id == $finfo->data->formdata->personalization_id) {
+ $personalisation = $pers;
+ }
+ }
+
+ $genareted_image = [];
+ $pdf_images = [];
+ foreach($personalisation->templates as $i => $template) {
+ $temp = pathinfo($template);
+ if(!file_exists(storage_path('app/public/personalized/'.$formdata->form_id.'/template-'.$personalisation->id.'_'.$i.'.'.$temp['extension'] ))) {
+ //Log::debug(print_r($form_info['form_info'], true));
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $template);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // good edit, thanks!
+ curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // also, this seems wise considering output is image.
+ $data = curl_exec($ch);
+ curl_close($ch);
+ Storage::disk('public')->put('personalized/'.$formdata->form_id.'/template-'.$personalisation->id.'_'.$i.'.'.$temp['extension'], $data);
+ }
+
+ $folder = storage_path('app/public/personalized/'.$formdata->form_id);
+ $templatename = 'template-'.$personalisation->id.'_'.$i.'.'.$temp['extension'];
+ $outputImage = $this->retimage($folder.'/'.$templatename);
+ $templatesize = getimagesize( $folder.'/'.$templatename );
+ $pdfparams = ["width"=>$templatesize[0],"height"=>$templatesize[1]];
+
+ //echo ''; print_r($templatesize); echo '
'; exit;
+ $positions = json_decode($personalisation->positions[$i]);
+ $maskimages = [];
+ foreach($positions as $pos) {
+ if($pos->type == 'image' && isset($pos->fill) && $pos->fill == 'mask') {
+ $maskimages[] = $pos;
+ }
+ }
+ if(sizeof($maskimages) > 0) {
+ $w = imagesx($outputImage);
+ $h = imagesy($outputImage);
+ $tempimage = imagecreatetruecolor($w, $h);
+ }
+ foreach($maskimages as $pos) {
+ $image = storage_path( str_replace('/storage', 'app/public', $finfo->data->formdata->{$pos->field_name} ) );
+ $photoimg = $this->retimage( $image );
+ $photosize = getimagesize( $image );
+ imagecopyresized($tempimage,$photoimg,$pos->x,$pos->y,0,0,$pos->width,$pos->height, $photosize[0], $photosize[1]);
+ }
+ if(sizeof($maskimages) > 0) {
+ imagecopyresized($tempimage,$outputImage,0,0,0,0,$w,$h,$w,$h);
+ $outputImage = $tempimage;
+ }
+ foreach(json_decode($personalisation->positions[$i]) as $pos) {
+ // if($pos->field_name == 'link') {
+ // $pdfparams['link_params_x'] = $pos->x;
+ // $pdfparams['link_params_y'] = $pos->y;
+ // $pdfparams['link_params_url'] = $finfo->data->formdata->{$pos->field_name};
+ // continue;
+ // }
+ switch($pos->type) {
+ case 'image':
+ if(!(isset($pos->fill) && $pos->fill == 'mask')) {
+ $image = storage_path( str_replace('/storage', 'app/public', $finfo->data->formdata->{$pos->field_name} ) );
+ $photoimg = $this->retimage( $image );
+ $photosize = getimagesize( $image );
+ imagecopyresized($outputImage,$photoimg,$pos->x,$pos->y,0,0,$pos->width,$pos->height, $photosize[0], $photosize[1]);
+ }
+ break;
+ case 'text':
+ case 'date':
+ if(isset($finfo->data->formdata->{$pos->field_name})) {
+ $font = storage_path('app').'/fonts/'.$pos->font;
+ $pos->color = explode('-',$pos->color);
+ $white = imagecolorallocate($outputImage, $pos->color[0], $pos->color[1], $pos->color[2]);
+ $text = $finfo->data->formdata->{$pos->field_name};
+ if(isset($pos->prefix) && !empty($pos->prefix)) {
+ $text = $pos->prefix . $text;
+ }
+ if($pos->type == 'date') {
+ $text = date($pos->format, strtotime($text));
+ }
+ if(isset($pos->suffix) && !empty($pos->suffix)) {
+ $text = $text . $pos->suffix;
+ }
+ if(isset($pos->align) && $pos->align == 'center') {
+ $box = imagettfbbox($pos->size, 0, $font, $text);
+ $pos->x = explode('-', $pos->x);
+ $pos->x = $pos->x[0] + (($pos->x[1] - $pos->x[0]) - $box[2])/2;
+ }
+ imagettftext($outputImage, $pos->size, 0, $pos->x, $pos->y, $white, $font, $text);
+ }
+ break;
+
+ case 'multiline':
+ if(isset($finfo->data->formdata->{$pos->field_name})) {
+ $font = storage_path('app').'/fonts/'.$pos->font;
+ $pos->color = explode('-',$pos->color);
+ $white = imagecolorallocate($outputImage, $pos->color[0], $pos->color[1], $pos->color[2]);
+ $text = $form_info[$pos->field_name];
+ $lines = wordwrap($text, $pos->linechars, "\n", true);
+ $xPosition = $pos->x;
+ $yPosition = $pos->y;
+ foreach (explode("\n", $lines) as $line) {
+ imagettftext($outputImage, $pos->size, 0, $xPosition, $yPosition, $white, $font, $line);
+ $yPosition += $pos->linehieght;
+ }
+ }
+ break;
+ }
+ }
+
+ $filename = 'generated-'.strtotime("now").'_'.$i.'.png';
+ $genareted_image[] = $filename;
+
+ imagepng($outputImage, $folder.'/'.$filename);
+ imagedestroy($outputImage);
+
+ $res = ['folder' => 'personalized/'.$formdata->form_id.'/', 'images' => $genareted_image, 'form_info' => (array)$finfo->data->formdata ];
+ if (\View::exists('form.'.$formdata->partition.'.download-'.$formdata->form_id)) {
+ return view('form.'.$formdata->partition.'.download-'.$formdata->form_id)->with($res);
+ } else {
+ return view('form.download')->with($res);
+ }
+ }
+ }
+
public function downloadpersonalizationzip($files, Request $request) {
$post = $request->input();
$files = json_decode(base64_decode($files));
@@ -1227,17 +1664,24 @@ class FormController extends Controller
public function downloaddata(Request $request) {
$formdata = $request->session()->get('formdata');
+ //$request->session()->put('finfo', $finfo);
$post = $request->all();
$form_id = $request->input('form_id', $formdata->form_id);
- //echo ''; print_r($formdata); exit;
- $history = LambdaRequest::postrequest('form', 'formentity/getformhistory', ['form_id' => $form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition, 'team_report' => 1 ]);
-
+ if(($form_id == '1718178830-d871301e-312b-4a60-9c68-15afa4ce6163' && (in_array('1655449173-a39a5017-8232-4d58-a253-90d06bc733d0', $formdata->roles) || in_array('1655449172-a39a5017-8232-4d58-a253-90d06bc733d0', $formdata->roles) || in_array('1655449171-a39a5017-8232-4d58-a253-90d06bc733d0', $formdata->roles) ) ) ||
+ (($form_id == '1713425460-8bdf7394-01b5-48f3-8985-343b465dd685' || $form_id == '1713426268-c89f38eb-ec32-43ba-a81b-b690a8f90d6a') && (in_array('1655449175-a39a5017-8232-4d58-edm-90d06bc733d0', $formdata->roles) || in_array('1655445669-148e5dc2-3983-4ec6-bfho-a52c494a92132', $formdata->roles) || in_array('1655449179-a39a5017-8232-4d58-rbm-90d06bc733d0', $formdata->roles) ) ) ) {
+ $finfo = $request->session()->get('finfo');
+ $history = LambdaRequest::postrequest('form', 'formentity/getforminfo', ['finfo' => $finfo]);
+ //echo ''; print_r($finfo); exit;
+ } else {
+ $history = LambdaRequest::postrequest('form', 'formentity/getformhistory', ['form_id' => $form_id, 'user_id' => $formdata->user_id, 'partition' => $formdata->partition, 'team_report' => 1 ]);
+ }
+ Log::debug(print_r($formdata, true));
//echo ''; print_r($history); exit;
$exceldata = [];
$exceldata[] = [$formdata->title];
$exceldata[] = [''];
- $headers = ['Submission Date', 'Submitted By'];
+ $headers = ['Submission Date', 'Submitted By', 'Approval Status'];
foreach($history->data->questions as $question) {
$headers[] = $question->label;
}
@@ -1246,6 +1690,7 @@ class FormController extends Controller
$row = [];
$row[] = $submission->createdAt;
$row[] = isset($submission->user_info->name) ? $submission->user_info->name : '';
+ $row[] = isset($submission->workflow_status) ? $submission->workflow_status : '';
foreach($history->data->questions as $q => $v) {
$row[] = isset($submission->formdata->{$q}) ? $submission->formdata->{$q} : '-';
}
@@ -1326,7 +1771,7 @@ class FormController extends Controller
}
public function getdoctorlist(Request $request) {
- $response = LambdaRequest::getrequest('ums', 'contact/get_my_contacts', ['hierarchy' => $request->input('hierarchy', ''), 'partition' => $request->input('partition', '') ]);
+ $response = LambdaRequest::getrequest('contact', 'contact/get_my_contacts', ['hierarchy' => $request->input('hierarchy', ''), 'partition' => $request->input('partition', '') ]);
$docs = [];
foreach($response->data->items as $item) {
$docs[] = ['value' => $item->id, 'display' => $item->name, 'contact' => $item];
@@ -1391,6 +1836,18 @@ class FormController extends Controller
$response = curl_exec($handler);
Log::debug(print_r($response, true));
}
+ if($formdata->form_id == '1711710347-b4f08442-60dc-4a4c-a9c7-a759d95c5cad') {
+ unset($post['form_id']);
+ Log::debug(print_r($post, true));
+ $handler = curl_init();
+ curl_setopt($handler, CURLOPT_URL, "https://gnpdoctor.buildrapport.co/neblogisticsave/faultynebulizer");
+ curl_setopt($handler, CURLOPT_POSTFIELDS, http_build_query($post));
+ curl_setopt($handler, CURLOPT_POST, 1);
+ curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
+ $response = curl_exec($handler);
+ Log::debug(print_r($response, true));
+ }
+
if($finfo->status == 'success') {
return response()->json(['status' => 'success']);
} else {
@@ -1488,4 +1945,100 @@ class FormController extends Controller
break;
}
}
+
+ public function iframeupload(Request $request) {
+ return view('form.iframeupload');
+ }
+
+ public function allsubmissions(Request $request) {
+ $post = $request->all();
+ $user = Auth::user();
+ $history = LambdaRequest::signedrequest('post', 'form', 'formentity/getallsubmissions', ['form_id' => $post['form_id'], 'partition' => $post['partition']], 120);
+
+ if(isset($post['download'])) {
+ $exceldata = [];
+ $headers = ['User Name','User Email','User Phone', 'Submitted On'];
+ foreach($history->data->questions as $que) {
+ $headers[] = $que->question;
+ }
+ $exceldata[] = $headers;
+ $submissions = json_decode(file_get_contents( $history->data->submission_json ), false);
+ foreach($submissions as $sub) {
+ $subs = [$sub->submitted_by, $sub->user_email, $sub->user_phone, $sub->submitted_on];
+ foreach($history->data->questions as $que) {
+ $subs[] = $sub->{$que->code};
+ }
+ $exceldata[] = $subs;
+ }
+ $report = Excel::raw(new InvoicesExport($exceldata), 'Xlsx');
+ $filename = 'reports/'.$post['form_id'].'-report.xlsx';
+ $res = Excel::store(new InvoicesExport($exceldata), 'public/'.$filename);
+ $headers = array( 'Content-Type: application/excel', );
+ return Response::download(storage_path('app/public')."/".$filename, $post['form_id'].'-report.xlsx', $headers);
+ } else {
+ //echo ''; print_r((array)$history->data); exit;
+ if (\View::exists('form.'.$post['partition'].'.'.$post['form_id'].'-allsubmissions')) {
+ return view('form.'.$post['partition'].'.'.$post['form_id'].'-allsubmissions')->with((array)$history->data);
+ } elseif (\View::exists('form.'.$post['form_id'].'-allsubmissions')) {
+ return view('form.'.$post['form_id'].'-allsubmissions')->with((array)$history->data);
+ } else {
+ return view('form.allsubmissions')->with((array)$history->data);
+ }
+ }
+ }
+
+ public function fullworkflow(Request $request) {
+ $post = $request->all();
+ $user = Auth::user();
+ $history = LambdaRequest::signedrequest('post', 'form', 'formentity/getallsubmissions', ['form_id' => $post['form_id'], 'approver' => Auth::user()->user_id, 'partition' => $post['partition']], 120);
+ //echo ''; print_r($history); exit;
+ if(isset($post['download'])) {
+ $exceldata = [];
+ $headers = ['User Name','User Email','User Phone', 'Submitted On'];
+ foreach($history->data->questions as $que) {
+ $headers[] = $que->question;
+ }
+ $exceldata[] = $headers;
+ $submissions = json_decode(file_get_contents( $history->data->submission_json ), false);
+ foreach($submissions as $sub) {
+ $subs = [$sub->submitted_by, $sub->user_email, $sub->user_phone, $sub->submitted_on];
+ foreach($history->data->questions as $que) {
+ $subs[] = $sub->{$que->code};
+ }
+ $exceldata[] = $subs;
+ }
+ $report = Excel::raw(new InvoicesExport($exceldata), 'Xlsx');
+ $filename = 'reports/'.$post['form_id'].'-report.xlsx';
+ $res = Excel::store(new InvoicesExport($exceldata), 'public/'.$filename);
+ $headers = array( 'Content-Type: application/excel', );
+ return Response::download(storage_path('app/public')."/".$filename, $post['form_id'].'-report.xlsx', $headers);
+ } else {
+ //echo ''; print_r((array)$history->data); exit;
+ if (\View::exists('form.'.$post['partition'].'.'.$post['form_id'].'-fullworkflow')) {
+ return view('form.'.$post['partition'].'.'.$post['form_id'].'-fullworkflow')->with((array)$history->data);
+ } elseif (\View::exists('form.'.$post['form_id'].'-fullworkflow')) {
+ return view('form.'.$post['form_id'].'-fullworkflow')->with((array)$history->data);
+ } else {
+ return view('form.fullworkflow')->with((array)$history->data);
+ }
+ }
+ }
+
+ public function uploadchunk(Request $request) {
+ $path = '';
+ $name = 'chunk_video';
+ $folder = 'chunk_video';
+ try {
+ if( $request->file($name) ) {
+ $path = $request->file($name)->store($folder);
+ $path = '/'.str_replace('public', 'storage', $path);
+ }
+ } catch (AwsException $e) {
+ Log::debug($e->getMessage());
+ }
+ return response()->json(['status' => 'success', 'filepath' => $path ]);
+ return $path;
+ }
+
+
}
\ No newline at end of file
diff --git a/app/Http/Controllers/FormactionController.php b/app/Http/Controllers/FormactionController.php
index 53c55c40..67d94e26 100644
--- a/app/Http/Controllers/FormactionController.php
+++ b/app/Http/Controllers/FormactionController.php
@@ -62,10 +62,10 @@ class FormactionController extends Controller
'groups' => ['title' => 'Groups', 'type' => 'multiselect', 'required' => true, 'values' => $groups_dd ],
'roles' => ['title' => 'Roles', 'type' => 'multiselect', 'required' => true, 'values' => $roles_dd ],
- 'target_type' => ['title' => 'Target Type', 'type' => 'select', 'required' => true, 'values' => ['form' => 'Web Form', 'survey' => 'Surveys', 'quiz' => 'Quizs', 'doctorlist' => 'Doctor List', 'external' => 'External Webpage', 'nativeform' => 'Native Form (coming soon)'] ],
+ 'target_type' => ['title' => 'Target Type', 'type' => 'select', 'required' => true, 'values' => ['form' => 'Web Form', 'survey' => 'Surveys', 'quiz' => 'Quizs', 'doctorlist' => 'Doctor List', 'external' => 'External Webpage', 'internal_action' => 'Internal Action'] ],
'form_id' => ['title' => 'Form', 'type' => 'select', 'values' => $forms_dd ],
'link_type' => ['title' => 'Menu Type (valid of forms only)', 'type' => 'select', 'required' => true, 'values' => ['form' => 'Web Form', 'list' => 'Submitted Data'] ],
- 'external_url' => ['title' => 'External Url', 'type' => 'text'],
+ 'external_url' => ['title' => 'External Url / Internal Action', 'type' => 'text'],
'visiblity_check' => ['title' => 'Enable Schedule', 'type' => 'yesno', 'required' => true],
'validity_start' => ['title' => 'Schedule Start Date', 'type' => 'datetime', 'required' => true],
'validity_end' => ['title' => 'Schedule End Date', 'type' => 'datetime', 'required' => true],
diff --git a/app/Http/Controllers/FormentityController.php b/app/Http/Controllers/FormentityController.php
index 95f2a4aa..de501765 100644
--- a/app/Http/Controllers/FormentityController.php
+++ b/app/Http/Controllers/FormentityController.php
@@ -42,7 +42,7 @@ class FormentityController extends Controller
$roles_dd[$role->id] = $role->name;
}
- $coattr = $this->getlambda('get', 'ums', 'contactattribute', 'get_all');
+ $coattr = $this->getlambda('get', 'contact', 'contactattribute', 'get_all');
$coattr_dd = [];
foreach($coattr->data->items as $coatt){
$coattr_dd[$coatt->code] = $coatt->attribute;
@@ -66,15 +66,15 @@ class FormentityController extends Controller
'roles_email_notification' => ['title' => 'Email Notification to Roles', 'type' => 'multiselect', 'values' => $roles_dd ],
'roles_push_notification' => ['title' => 'Push Notification to Roles', 'type' => 'multiselect', 'values' => $roles_dd ],
+ 'allow_non_hierarchy_submission' => ['title' => 'Allow Non Hierarchy Submission', 'type' => 'yesno', 'required' => true],
'workflow' => ['title' => 'Enable Workflow', 'type' => 'yesno', 'required' => true],
'workflow_type' => ['title' => 'Workflow type', 'type' => 'select', 'required' => true, 'values' => ['single' => 'Single Persoon', 'multiple' => 'Multiple person', 'sequencial' => 'Sequencial'] ],
'approver_can_edit' => ['title' => 'Approver can edit entry', 'type' => 'yesno', 'required' => true],
'is_personalized' => ['title' => 'Is Personalization Needed', 'type' => 'yesno', 'required' => true],
+ 'allow_delete_by_user' => ['title' => 'Allow Submission Delete by User', 'type' => 'yesno', 'required' => true],
+ 'export_fields' => ['title' => 'Export Fields', 'type' => 'textarea', 'required' => false, 'fullwidth' => true ],
'workflow_approvers' => ['title' => 'Metric', 'type' => 'mapping', 'required' => true, 'approvers' => $users_dd, 'fullwidth' => true ],
-
-
-
];
}
@@ -85,6 +85,7 @@ class FormentityController extends Controller
$values->manager1_push_notification = isset($values->manager1_push_notification) ? $values->manager1_push_notification : 'no';
$values->manager2_email_notification = isset($values->manager2_email_notification) ? $values->manager2_email_notification : 'no';
$values->manager2_push_notification = isset($values->manager2_push_notification) ? $values->manager2_push_notification : 'no';
+ $values->export_fields = isset($values->export_fields) ? $values->export_fields : '';
}
//echo ''; print_r($values); exit;
return $values;
@@ -121,11 +122,13 @@ class FormentityController extends Controller
// $forfields = ['is-aware-of-the-customer-perspective-potential-prescription-position','has-customer-plan-based-on-customer-perspective','rcpawardicu-quantified-rcpa-comp-taken-pob-dr-perspective-on-molecule-or-price-etc','call-objective-planned-question-opening-statement-materials-and-objection-anticipated','greeted-customer-appropriately','used-planned-opening-statement','gained-attention-of-the-customer','was-ready-with-tab-maintained-eye-contact-with-doctor-had-a-clear-voice','asked-planned-question-as-per-call-planning','asked-question-related-to-customer-behaviourbelief-service','listened-attentively-and-asked-follow-up-question-if-required','generated-desired-response-from-customer','maintained-the-sequence-of-product-as-per-the-speciality-p1p2p3','shared-benefit-of-productdevicesservices-as-per-marketing-strategy','shared-informationused-the-materialstools-as-per-plan-demonstrated-and-discussed-cipla-devices','utilized-the-tab-effectively-smooth-navigation-highlighted-studies-zoomed-graphs-etc','listened-attentively-acknowledged-concern','asked-questions-to-seek-clarity-on-questionobjection','shared-the-relevant-information','confirmed-if-objectionquestion-was-addressed-assured-follow-through-actions-if-required-and-returned-to-call-flow','summarized-the-key-discussion-points','gained-agreement-basis-call-objective-from-the-doctor','quantified-the-demand-with-rx','left-lblreminder-of-focused-product','total_score','area-of-strength','area-of-development','coaching-objective','development-time-frame','next-coaching-visit','development-action-plan'];
foreach ($records as $record) {
- $record['record_date'] = '2022-12-20';
- $record['created_date'] = '1671758762';
+ $record['record_date'] = '2024-04-02';
+ $record['created_date'] = strtotime("now");
$formdata = [];
foreach($forfields as $field) {
- $formdata[$field] = $record[$field] == 'Yes' ? 1 : ( $record[$field] == 'No' ? 0 : $record[$field] ) ;
+ if(isset($record[$field])) {
+ $formdata[$field] = $record[$field] == 'Yes' ? 1 : ( $record[$field] == 'No' ? 0 : $record[$field] ) ;
+ }
}
$recs[] = [
'entity_id' => $entity_id,
diff --git a/app/Http/Controllers/FormexportController.php b/app/Http/Controllers/FormexportController.php
index e34b2073..e1464a0b 100644
--- a/app/Http/Controllers/FormexportController.php
+++ b/app/Http/Controllers/FormexportController.php
@@ -68,6 +68,8 @@ class FormexportController extends Controller
protected function get_form_fields($type, $values){
$forms = $this->getlambda('get', 'form', 'formentity', 'dropdown');
+ //echo ''; print_r($forms); exit;
+
$forms_dd = [];
$uforms = Auth::user()->forms;
@@ -90,10 +92,12 @@ class FormexportController extends Controller
$this->_request->session()->put('form_list_dropdown', $forms_dd);
+ $this->_request->session()->put('form_questions_dropdown', $forms->data->questions);
//echo ''; print_r($forms_dd); exit;
return [
'form_id' => ['title' => 'Select Form', 'type' => 'select', 'required' => true, 'values' => $forms_dd],
+ 'date_field' => ['title' => 'Select Date Field', 'type' => 'select', 'required' => true, 'values' => []],
'start_date' => ['title' => 'Start Date', 'type' => 'date', 'required' => true],
'end_date' => ['title' => 'End Date', 'type' => 'date', 'required' => true],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
@@ -111,4 +115,24 @@ class FormexportController extends Controller
return $values;
}
+ public function form($type, $id = null) {
+ $values = [];
+ if($type == 'edit') {
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_one', ['id' => $id]);
+ $values = $response->data->item;
+ //echo ''; print_r($values); exit;
+ }
+ //echo ''; print_r($values); exit;
+ $data = $this->_beforeform($type, $values);
+ $fields = $this->get_form_fields($type, $values);
+ $questions = $this->_request->session()->get('form_questions_dropdown');
+ return $this->view('form')->with([
+ 'title' => $this->_title,
+ 'mode' => $type,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ 'item' => $values,
+ 'questions' => $questions
+ ]);
+ }
}
diff --git a/app/Http/Controllers/FormquestionController.php b/app/Http/Controllers/FormquestionController.php
index 58d6d80d..298bc1d9 100644
--- a/app/Http/Controllers/FormquestionController.php
+++ b/app/Http/Controllers/FormquestionController.php
@@ -43,21 +43,23 @@ class FormquestionController extends Controller
'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ],
//'media_thumb' => ['title' => 'Media Thumb', 'type' => 'image'],
'question' => ['title' => 'Question', 'type' => 'text'],
+ 'sort_order' => ['title' => 'Sort Order', 'type' => 'text'],
'status' => ['title' => 'Status', 'type' => 'select'],
];
}
protected function get_form_fields($type, $values){
- $groups = $this->getlambda('get', 'ums', 'group', 'dropdown');
- $groups_dd = [];
- foreach($groups->data->items as $group){
- $groups_dd[$group->id] = $group->name;
- }
+ // $groups = $this->getlambda('get', 'ums', 'group', 'dropdown');
+ // $groups_dd = [];
+ // foreach($groups->data->items as $group){
+ // $groups_dd[$group->id] = $group->name;
+ // }
return [
'question' => ['title' => 'Question', 'type' => 'text', 'required' => true, 'fullwidth' => true],
'code' => ['title' => 'Code (small caps without spaces and special chars except "_")', 'type' => 'text', 'required' => true],
'type' => ['title' => 'Question Type', 'type' => 'select', 'required' => true, 'values' => ['text' => 'Text', 'number' => 'Number', 'date' => 'Date', 'time' => 'Time', 'email' => 'Email', 'url' => 'Url', 'dropdown' => 'Dropdown', 'checkbox' => 'Checkbox', 'radio' => 'Radio', 'multitextbox' => 'Multi Text Boxes', 'contacts' => 'Contacts', 'file' => 'File Upload'] ],
'required' => ['title' => 'Is Required', 'type' => 'yesno', 'required' => true],
+ 'sort_order' => ['title' => 'Sort Order', 'type' => 'number', 'required' => false],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
'options' => ['title' => 'Options', 'type' => 'mapping', 'fullwidth' => true ],
];
@@ -80,7 +82,9 @@ class FormquestionController extends Controller
}
protected function _beforeform($type, $values) {
-
+ if($type == 'edit') {
+ $values->sort_order = isset($values->sort_order) ? $values->sort_order : 0;
+ }
return $values;
}
diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php
index d85d7493..e9dd5984 100644
--- a/app/Http/Controllers/GroupController.php
+++ b/app/Http/Controllers/GroupController.php
@@ -10,7 +10,7 @@ class GroupController extends Controller
public function __construct()
{
$this->middleware('auth');
- $this->_service = 'ums';
+ $this->_service = 'detailing';
$this->_module = 'group';
$this->_viewname = 'group';
$this->_title = 'Groups';
diff --git a/app/Http/Controllers/HierarchyController.php b/app/Http/Controllers/HierarchyController.php
index c175a5f8..59a89656 100644
--- a/app/Http/Controllers/HierarchyController.php
+++ b/app/Http/Controllers/HierarchyController.php
@@ -50,12 +50,21 @@ class HierarchyController extends Controller
foreach($users->data->items as $user){
$users_dd[$user->id] = $user->firstname . ' ' . $user->lastname . ' (' . $user->employee_code . ')';
}
- $positions = $this->getlambda('get', 'ums', 'hierarchy', 'dropdown');
- //echo ''; print_r($positions); exit;
+
$positions_dd = [];
- foreach($positions->data->items as $position){
- $positions_dd[$position->code] = $position->name . ' ('.$position->code.')';
+ // foreach($response->data->items as $item) {
+ // $positions_dd[$item->code] = $item->name . ' ('.$item->code.')';
+ // }
+ // asort($positions_dd);
+
+ $positions = $this->getlambda('get', 'ums', 'hierarchy', 'dropdown');
+ foreach($positions->data->items as $item) {
+ $positions_dd[$item->code] = $item->name . ' ('.$item->code.')';
}
+ asort($positions_dd);
+ // foreach($positions->data->items as $position){
+ // $positions_dd[$position->code] = $position->name . ' ('.$position->code.')';
+ // }
//echo ''; print_r($items); exit;
return $this->view('list')->with([
'title' => $this->_title,
diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php
index 305d4b2c..0fb95158 100644
--- a/app/Http/Controllers/LoginController.php
+++ b/app/Http/Controllers/LoginController.php
@@ -8,6 +8,7 @@ use App\Http\Requests\LambdaRequest;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use DB;
+use Log;
class LoginController extends Controller
{
@@ -53,6 +54,7 @@ class LoginController extends Controller
$post['device'] = 'portal';
$response = LambdaRequest::postrequest('ums', 'auth/verify', $post);
//echo ''; print_r($response); exit;
+ //Log::debug(print_r($response, true));
if($response->statusCode == 200 && $response->status == "success") {
User::updateOrCreate(
['email' => $response->data->user->domain . '-' . $response->data->user->email],
diff --git a/app/Http/Controllers/MagmediaController.php b/app/Http/Controllers/MagmediaController.php
index b3c34547..1c40c49e 100644
--- a/app/Http/Controllers/MagmediaController.php
+++ b/app/Http/Controllers/MagmediaController.php
@@ -60,17 +60,41 @@ class MagmediaController extends Controller
foreach($groups->data->items as $group){
$groups_dd[$group->id] = $group->name;
}
+
+ $forms = $this->getlambda('get', 'form', 'formentity', 'dropdown');
+ $forms_dd = [];
+ foreach($forms->data->items as $form){
+ $forms_dd[$form->id] = $form->title;
+ }
+
+ $forms = $this->getlambda('get', 'form', 'survey', 'dropdown');
+ foreach($forms->data->items as $form){
+ $forms_dd[$form->id] = $form->title . ' (Survey)';
+ }
+
+ $quizs = $this->getlambda('get', 'form', 'quiz', 'dropdown');
+ foreach($quizs->data->items as $form){
+ $forms_dd[$form->id] = $form->name . ' (Quiz)';
+ }
+ $metrics = $this->getlambda('get', 'metric', 'metric', 'get_all');
+ $metric_dd = ['NA' => 'Tracking Not Needed'];
+ foreach($metrics->data->items as $metric){
+ $metric_dd[$metric->id] = $metric->name;
+ }
$fields = [
'name' => ['title' => 'Media Name', 'type' => 'text', 'required' => true],
'points' => ['title' => 'Points', 'type' => 'text', 'required' => true],
'description' => ['title' => 'Media Description', 'type' => 'textarea', 'required' => true, 'fullwidth' => true],
- 'media_type' => ['title' => 'Media Types', 'type' => 'select', 'required' => true, 'values' => ['image' => 'Image', 'video' => 'Video', 'pdf' => 'PDF', 'audio' => 'Audio', 'gallery' => 'Gallery', 'form' => 'Form', 'external' => 'External Url', 'scorm' => 'Scorm'] ],
+ 'media_type' => ['title' => 'Media Types', 'type' => 'select', 'required' => true, 'values' => ['image' => 'Image', 'video' => 'Video', 'pdf' => 'PDF', 'audio' => 'Audio', 'gallery' => 'Gallery', 'form' => 'Form', 'quiz' => 'Quiz', 'survey' => 'Survey', 'external' => 'External Url', 'scorm' => 'Scorm'] ],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
-
+ 'form_id' => ['title' => 'Form', 'type' => 'select', 'values' => $forms_dd ],
//'media_thumb' => ['title' => 'Media Thumb', 'type' => 'image', 'required' => true],
'media_url' => ['title' => 'Media File (image, video, pdf, audio, scorm) (for gallery, upload zip file with all images)', 'type' => 'file'],
'gallery' => ['title' => 'Multiple Media File (only for gallery)', 'type' => 'multiimage'],
'ext_url' => ['title' => 'Media Url (form, external)', 'type' => 'text'],
+
+ 'mapped_metric' => ['title' => 'Point Metric', 'type' => 'select', 'values' => $metric_dd, 'required' => true ],
+ 'count_metric' => ['title' => 'Count Metric', 'type' => 'select', 'values' => $metric_dd, 'required' => true ],
];
return $fields;
}
@@ -126,6 +150,12 @@ class MagmediaController extends Controller
unset($values->comments_users);
unset($values->likes_count);
unset($values->comments_count);
+ if(!isset($values->mapped_metric)) {
+ $values->mapped_metric = '';
+ }
+ if(!isset($values->count_metric)) {
+ $values->count_metric = '';
+ }
//echo ''; print_r($values); exit;
}
diff --git a/app/Http/Controllers/MetricreportController.php b/app/Http/Controllers/MetricreportController.php
index 299bfacb..2e9aad5c 100644
--- a/app/Http/Controllers/MetricreportController.php
+++ b/app/Http/Controllers/MetricreportController.php
@@ -95,24 +95,35 @@ class MetricreportController extends Controller
switch($response->data->post->type) {
case 'leaderboard':
case 'scoreboard':
- $headings = ["Rank", "User", "User Id", "Employee Code", "Designation", 'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email', 'Zone', 'Region', "Area", "Territory", "Units", "Percent", "Active User"];
+ $headings = ["Rank", "User Id", "User Name", "Employee Code", "Designation"];
+ //'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email'
+ //echo ''; print_r((array)$response->data->graph->values[0]->user->parents); exit;
+ foreach((array)$response->data->graph->values[0]->user->parents as $par) {
+ $headings = array_merge($headings, ['Manager '.$par->level.' Name', 'Manager '.$par->level.' Emp Code']);
+ }
+ $headings = array_merge($headings, ['Zone', 'Region', "Area", "Territory", "Units (for Ranking)", "Percent of Highest", "Active User"]);
+ //echo ''; print_r($headings); exit;
if(count($response->data->graph->values) > 0 && isset($response->data->graph->values[0]->stats->prescribers) ){
$headings[] = "Prescribers";
}
foreach($response->data->graph->metrics as $val) {
$headings[] = $val->display;
}
-
$exceldata[] = $headings;
foreach($response->data->graph->values as $val) {
- $rowdata = [(string)$val->rank, (string)$val->user->name, (string)$val->user->id,(isset($val->user->owner_info) && isset($val->user->owner_info->employee_code) ? $val->user->owner_info->employee_code : '-'), $val->user->designation];
+ $rowdata = [(string)$val->rank, (string)$val->user->id,(string)$val->user->name, (string)$val->user->employee_code, $val->user->designation];
$user = $val->user;
- $rowdata[] = isset($user->manager1->name) ? $user->manager1->name : '-';
- $rowdata[] = isset($user->manager1->employee_code) ? $user->manager1->employee_code : '-';
- $rowdata[] = isset($user->manager1->email) ? $user->manager1->email : '-';
- $rowdata[] = isset($user->manager2->name) ? $user->manager2->name : '-';
- $rowdata[] = isset($user->manager2->employee_code) ? $user->manager2->employee_code : '-';
- $rowdata[] = isset($user->manager2->email) ? $user->manager2->email : '-';
+ foreach((array)$user->parents as $par) {
+ $rowdata[] = isset($par->name) ? $par->name : '-';
+ $rowdata[] = isset($par->employee_code) ? $par->employee_code : '-';
+ //$rowdata[] = isset($par->email) ? $par->email : '-';
+ }
+ // $rowdata[] = isset($user->manager1->name) ? $user->manager1->name : '-';
+ // $rowdata[] = isset($user->manager1->employee_code) ? $user->manager1->employee_code : '-';
+ // $rowdata[] = isset($user->manager1->email) ? $user->manager1->email : '-';
+ // $rowdata[] = isset($user->manager2->name) ? $user->manager2->name : '-';
+ // $rowdata[] = isset($user->manager2->employee_code) ? $user->manager2->employee_code : '-';
+ // $rowdata[] = isset($user->manager2->email) ? $user->manager2->email : '-';
$rowdata[] = isset($user->positions->Zone) ? $user->positions->Zone : (isset($user->positions->Country) ? $user->positions->Country : '-' );
$rowdata[] = isset($user->positions->Region) ? $user->positions->Region : '-';
@@ -193,7 +204,7 @@ class MetricreportController extends Controller
$row[] = isset($user->positions->Territory) ? $user->positions->Territory : '-';
$row[] = isset($user->roles) ? (is_array($user->roles) ? implode(',', $user->roles) : $user->roles) : '-';
foreach($response->data->graph->values->metrics as $metric) {
- $row[] = isset($metric->stats->{$user->id}) ? $metric->stats->{$user->id} : '-';
+ $row[] = isset($metric->stats->{$user->id}) ? $metric->stats->{$user->id} : 0;
}
$exceldata[] = $row;
}
@@ -220,6 +231,9 @@ class MetricreportController extends Controller
foreach($response->data->graph->contact_attributes as $attr) {
$row[] = isset($contact->{$attr}) ? $contact->{$attr} : '';
}
+ if(!isset($response->data->graph->values->users->{$contact->id})) {
+ continue;
+ }
$user = $response->data->graph->values->users->{$contact->id};
$row[] = $user->name;
@@ -240,12 +254,85 @@ class MetricreportController extends Controller
$row[] = isset($user->positions->Territory) ? $user->positions->Territory : '-';
foreach($response->data->graph->values->metrics as $metric) {
- $row[] = isset($metric->stats->{$contact->id}) ? $metric->stats->{$contact->id} : '-';
+ $row[] = isset($metric->stats->{$contact->id}) ? $metric->stats->{$contact->id} : 0;
}
$exceldata[] = $row;
}
}
break;
+ case 'incremental':
+ if($response->data->graph->chart == 'incremental') {
+ $headers = ['User', 'Employee Code', 'Email', 'Designation', 'Manager 1 Name', 'Manager 1 Emp Code', 'Manager 1 Email', 'Manager 2 Name', 'Manager 2 Emp Code', 'Manager 2 Email', 'Zone', 'Region', "Area", "Territory", "Role"];
+ // foreach($response->data->graph->values->metrics as $metric) {
+ // //$headers[] = $metric->metric;
+ // }
+ $graph = $response->data->graph;
+ $period = explode('-', $post['period'])[0];
+ $interval = 'P1D';
+ if($period == 'week') {
+ $interval = 'P1W';
+ } elseif($period == 'month') {
+ $interval = 'P1M';
+ }
+
+ $first_day = strtotime($graph->first_day);
+ $last_day = strtotime($graph->last_day);
+
+ $start = new \DateTime($graph->first_day);
+ $end = new \DateTime($graph->last_day);
+ $interval = new \DateInterval($interval);
+ $periods = new \DatePeriod($start, $interval, $end);
+ $colspan = 0;
+ foreach($periods as $date) {
+ $colspan++;
+ }
+ $subheaders = ["","","","","","","","","","","","","","",""];
+ foreach($graph->values->metrics as $metric){
+ $headers[] = $metric->metric;
+ //$headers = array_merge($headers, Array($colspan-1).fill(""));
+ foreach($periods as $date) {
+ $subheaders[] = $date->format('d M Y');
+ $headers[] = "";
+ }
+ $subheaders[] = "";
+ //unset($headers[sizeof($headers)-1]);
+ }
+
+ $exceldata[] = $headers;
+ $exceldata[] = $subheaders;
+ foreach($response->data->graph->values->users as $user) {
+ $row = [];
+ $row[] = $user->name;
+ $row[] = $user->employee_code;
+ $row[] = $user->email;
+ $row[] = $user->designation;
+
+ $row[] = isset($user->manager1->name) ? $user->manager1->name : '-';
+ $row[] = isset($user->manager1->employee_code) ? $user->manager1->employee_code : '-';
+ $row[] = isset($user->manager1->email) ? $user->manager1->email : '-';
+ $row[] = isset($user->manager2->name) ? $user->manager2->name : '-';
+ $row[] = isset($user->manager2->employee_code) ? $user->manager2->employee_code : '-';
+ $row[] = isset($user->manager2->email) ? $user->manager2->email : '-';
+
+ $row[] = isset($user->positions->Zone) ? $user->positions->Zone : '-';
+ $row[] = isset($user->positions->Region) ? $user->positions->Region : '-';
+ $row[] = isset($user->positions->Area) ? $user->positions->Area : '-';
+ $row[] = isset($user->positions->Territory) ? $user->positions->Territory : '-';
+ $row[] = isset($user->roles) ? (is_array($user->roles) ? implode(',', $user->roles) : $user->roles) : '-';
+
+ foreach($graph->values->metrics as $metric) {
+ foreach($periods as $date) {
+ $row[] = isset($metric->stats->{$user->id}->{$date->getTimestamp().'000'}) ? $metric->stats->{$user->id}->{$date->getTimestamp().'000'} : '-';
+ }
+ $row[] = "";
+ }
+ // foreach($response->data->graph->values->metrics as $metric) {
+ // //$row[] = isset($metric->stats->{$user->id}) ? $metric->stats->{$user->id} : '-';
+ // }
+ $exceldata[] = $row;
+ }
+ }
+ break;
}
//echo ''; print_r($exceldata); exit;
diff --git a/app/Http/Controllers/MetricviewController.php b/app/Http/Controllers/MetricviewController.php
index e2ba58af..2e5e9d96 100644
--- a/app/Http/Controllers/MetricviewController.php
+++ b/app/Http/Controllers/MetricviewController.php
@@ -42,7 +42,6 @@ class MetricviewController extends Controller
'validity_end' => ['title' => 'Validity end', 'type' => 'text'],
'agg_type' => ['title' => 'Aggregation type', 'type' => 'text'],
'status' => ['title' => 'Status', 'type' => 'select'],
-
];
}
@@ -74,7 +73,7 @@ class MetricviewController extends Controller
$roles_dd[$role->id] = $role->name;
}
- $coattr = $this->getlambda('get', 'ums', 'contactattribute', 'get_all');
+ $coattr = $this->getlambda('get', 'contact', 'contactattribute', 'get_all');
$coattr_dd = [];
foreach($coattr->data->items as $coatt){
$coattr_dd[$coatt->code] = $coatt->attribute;
@@ -119,10 +118,10 @@ class MetricviewController extends Controller
'operation' => ['title' => 'Operation', 'type' => 'select', 'required' => true, 'values' => ['sum' => 'Sum', 'avg' => 'Avg', 'value_count' => 'Count'] ],
'agg_type' => ['title' => 'Aggregation Type', 'type' => 'select', 'required' => true, 'values' => ['individual' => 'Individual', 'team' => 'Team'] ],
- 'graphical_views' => ['title' => 'Graphical views', 'type' => 'multiselect', 'required' => true, 'values' => ['progress' => 'Progress', 'percentile' => 'Percentile', 'pie' => 'Pie chart', 'bar' => 'Bar chart', 'line' => 'Line chart'] ],
+ 'graphical_views' => ['title' => 'Graphical views', 'type' => 'multiselect', 'values' => ['progress' => 'Progress', 'percentile' => 'Percentile', 'pie' => 'Pie chart', 'bar' => 'Bar chart', 'line' => 'Line chart'] ],
'details_views' => ['title' => 'Details views', 'type' => 'multiselect', 'required' => true, 'values' => ['tabular' => 'Tabular', 'contacts' => 'Doctor View', 'incremental' => 'Incremental View'] ],
- 'trend_views' => ['title' => 'Trend views', 'type' => 'multiselect', 'required' => true, 'values' => ['bar' => 'Bar chart', 'line' => 'Line chart', 'tabular' => 'Tabular'] ],
- 'leaderboard_views' => ['title' => 'Leaderboard views', 'type' => 'multiselect', 'required' => true, 'values' => ['leaderboard' => 'Leaderboard View'] ],
+ 'trend_views' => ['title' => 'Trend views', 'type' => 'multiselect', 'values' => ['bar' => 'Bar chart', 'line' => 'Line chart', 'tabular' => 'Tabular'] ],
+ 'leaderboard_views' => ['title' => 'Leaderboard views', 'type' => 'multiselect', 'values' => ['leaderboard' => 'Leaderboard View'] ],
'contacts_views' => ['title' => 'Doctor views', 'type' => 'multiselect', 'values' => ['contacts' => 'Doctor View'] ],
'intervals' => ['title' => 'Intervals', 'type' => 'multiselect', 'required' => true, 'values' => ['yearlycy' => 'Calender Year', 'yearlyfy' => 'Financial Year', 'monthly' => 'Monthly', 'weekly' => 'Weekly', 'daily' => 'Daily'] ],
@@ -151,7 +150,7 @@ class MetricviewController extends Controller
} else {
foreach($data['metric'] as $k => $metric) {
- $data['metrics'][] = ['metric' => $metric, 'display' => $data['display_unit'][$k], 'sort_order' => isset($data['sort_order'][$k]) ? $data['sort_order'][$k] : 0, 'list_view' => isset($data['list_view'][$k]) ? $data['list_view'][$k] : 'no' ];
+ $data['metrics'][] = ['metric' => $metric, 'display' => $data['display_unit'][$k], 'sort_order' => isset($data['sort_order'][$k]) ? $data['sort_order'][$k] : 0, 'list_view' => isset($data['list_view'][$k]) ? $data['list_view'][$k] : 'yes' ];
}
}
@@ -181,8 +180,12 @@ class MetricviewController extends Controller
if(!isset($values->combined_metrics)) {
$values->combined_metrics = '[]';
}
+ if(!isset($values->sort_order)) {
+ $values->sort_order = 0;
+ }
+
$metrics = $values->metrics;
- usort($metrics, fn($a, $b) => ($a->sort_order > $b->sort_order) );
+ usort($metrics, fn($a, $b) => ((isset($a->sort_order) && isset($b->sort_order)) && $a->sort_order > $b->sort_order) );
$values->metrics = $metrics;
//echo ''; print_r($metrics); exit;
diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php
new file mode 100644
index 00000000..3b67135d
--- /dev/null
+++ b/app/Http/Controllers/ProductController.php
@@ -0,0 +1,266 @@
+middleware('auth');
+ $this->_service = 'catalog';
+ $this->_module = 'product';
+ $this->_viewname = 'product';
+ $this->_title = 'Product';
+ $this->_base_url = '/product';
+ $this->_listtype = 'list';
+ }
+
+ public function list(Request $request) {
+ $fields = $this->get_list_fields();
+ //echo $this->_listtype; exit;
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all');
+ //echo ''; print_r($response); exit;
+ return $this->view($this->_listtype)->with([
+ 'title' => $this->_title,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ 'items' => $response->data->items,
+ 'buttons' => $this->get_list_buttons()
+ ]);
+ }
+
+ protected function get_list_buttons() {
+ return [ ['title' => 'Add New', 'link' => $this->_base_url.'/addnew' ], ['title' => 'Import', 'link' => $this->_base_url.'/import'], ['title' => 'Export', 'link' => $this->_base_url.'/export'] ];
+ }
+
+ protected function get_import_fields($records){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'productattribute/get_all');
+ //echo ''; print_r($response); exit;
+ $hierar = $this->getlambda('get', 'ums', 'hierarchy', 'dropdown');
+ $hierar_dd = [];
+ foreach($hierar->data->items as $hier){
+ $hierar_dd[$hier->code] = $hier->name . ' (' . $hier->code . ')';
+ }
+
+ //echo ''; print_r($response); exit;
+ $fields = [
+ 'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
+ 'sku' => ['title' => 'SKU', 'type' => 'text', 'required' => true],
+ 'division' => ['title' => 'Division', 'type' => 'text', 'required' => true],
+ 'company' => ['title' => 'Company', 'type' => 'text'],
+ 'brand' => ['title' => 'Brand', 'type' => 'select', 'required' => true, 'values' => $hierar_dd ],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
+ ];
+
+ foreach ($response->data->items as $item) {
+ $values = [];
+ if(in_array($item->type, ['select', 'radio', 'checkbox']) ) {
+ foreach($item->options as $op) {
+ $values[$op->value] = $op->display;
+ }
+ }
+ $fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'required' => $item->required=='yes'?true:false, 'values' => $values];
+ }
+ return $fields;
+ }
+
+ // public function list(Request $request) {
+ // $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all');
+ // //echo ''; print_r($items); exit;
+ // $items = [];
+ // foreach ($response->data->items as $item) {
+ // $item->position = $item->hierarchy_info->code;
+ // unset($item->hierarchy_info);
+ // $items[] = $item;
+ // }
+
+ // $fields = $this->get_list_fields();
+ // return $this->view('list')->with([
+ // 'title' => $this->_title,
+ // 'fields' => $fields,
+ // 'base_url' => $this->_base_url,
+ // 'items' => $items,
+ // 'buttons' => $this->get_list_buttons()
+ // ]);
+ // }
+
+ protected function get_list_fields(){
+ return [
+ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ],
+ 'name' => ['title' => 'Name', 'type' => 'text'],
+ 'sku' => ['title' => 'SKU', 'type' => 'text'],
+ 'division' => ['title' => 'Division', 'type' => 'text'],
+ 'company' => ['title' => 'Company', 'type' => 'text'],
+ 'status' => ['title' => 'Status', 'type' => 'select'],
+ ];
+ }
+
+ protected function get_form_fields($type, $values){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'productattribute/get_all');
+ $brandr = $this->getlambda('get', 'catalog', 'brand', 'dropdown');
+ $brandr_dd = [];
+ foreach($brandr->data->items as $bran){
+ $brandr_dd[$bran->id] = $bran->name;
+ }
+
+ $fields = [
+ 'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
+ 'sku' => ['title' => 'SKU', 'type' => 'text', 'required' => true],
+ 'division' => ['title' => 'Division', 'type' => 'text', 'required' => true],
+ 'company' => ['title' => 'Company', 'type' => 'text'],
+ 'brand' => ['title' => 'Brand', 'type' => 'select', 'required' => true, 'values' => $brandr_dd ],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
+ ];
+
+ foreach ($response->data->items as $item) {
+ $values = [];
+ if(in_array($item->type, ['select', 'radio', 'checkbox']) ) {
+ foreach($item->options as $op) {
+ $values[$op->value] = $op->display;
+ }
+ }
+ $fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'required' => $item->required=='yes'?true:false, 'values' => $values];
+ }
+
+ return $fields;
+ }
+
+ protected function _beforesave($type, $request) {
+ $data = $request->except('_token');
+ $options = [];
+ if(isset($data['option_value'])) {
+ foreach($data['option_value'] as $k => $ov) {
+ $options[] = ['value' => $ov, 'display' => $data['option_name'][$k] ];
+ }
+ $data['options'] = $options;
+ unset($data['option_value']);
+ unset($data['option_name']);
+ }
+ //echo ''; print_r($data); exit;
+ return $data;
+ }
+
+ public function editall(Request $request) {
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_my_contacts');
+ //echo ''; print_r($response); exit;
+ $fields = $this->get_list_fields();
+ return $this->view('editall')->with([
+ 'title' => $this->_title,
+ 'fields' => $response->data->attributes,
+ 'base_url' => $this->_base_url,
+ 'items' => $response->data->items
+ ]);
+ }
+
+ public function postsavelist(Request $request) {
+ Log::debug(print_r($request->except('_token'), true));
+ $response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/savelist', $request->except('_token'));
+ // //echo ''; print_r($response); exit;
+ // $fields = $this->get_list_fields();
+ // return $this->view('editall')->with([
+ // 'title' => $this->_title,
+ // 'fields' => $response->data->attributes,
+ // 'base_url' => $this->_base_url,
+ // 'items' => $response->data->items
+ // ]);
+ }
+
+
+ public function export(Request $request) {
+ $attributes = LambdaRequest::signedrequest('get', $this->_service, 'contactattribute/get_all', []);
+ $fields = [];
+ foreach($attributes->data->items as $attri) {
+ $fields[] = $attri->code;
+ }
+ $fields[] = 'user_info';
+ $fields[] = 'msl_code';
+ $fields[] = 'position';
+ //echo ''; print_r($response); exit;
+
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all', ['source' => 'dynamodb', 'belowme' => 'yes', 'search' => json_encode([]), 'keyword' => "", 'fields' => json_encode($fields) ]);
+ //echo ''; print_r($response); exit;
+
+ $headers = ['Name', 'Email', 'Phone', 'MSL Code', 'Position', 'Rep Name', 'Rep Employee Code', 'Position Name', 'Position Code', 'Status'];
+ foreach($attributes->data->items as $attri) {
+ $headers[] = $attri->attribute;
+ }
+
+ $exceldata[] = $headers;
+ foreach($response->data->items as $user) {
+ $row = [];
+ $row[] = isset($user->name) ? $user->name : '-';
+ $row[] = isset($user->email) ? $user->email : '-';
+ $row[] = isset($user->phone) ? $user->phone : '-';
+ $row[] = isset($user->msl_code) ? $user->msl_code : '-';
+ $row[] = isset($user->position) ? $user->position : '-';
+
+ $row[] = isset($user->user_info->name) ? $user->user_info->name : '-';
+ $row[] = isset($user->user_info->employee_code) ? $user->user_info->employee_code : '-';
+
+ $row[] = isset($user->hierarchy_info->name) ? $user->hierarchy_info->name : '-';
+ $row[] = isset($user->hierarchy_info->code) ? $user->hierarchy_info->code : '-';
+ $row[] = isset($user->status) ? $user->status : '-';
+
+ foreach($attributes->data->items as $attri) {
+ $row[] = isset($user->{$attri->code}) ? $user->{$attri->code} : '-';
+ }
+ $exceldata[] = $row;
+ }
+ return Excel::download(new InvoicesExport($exceldata), 'contacts.xlsx');
+ }
+
+
+ // public function postimport(Request $request) {
+ // if( $request->file('importfile') ) {
+ // $path = $request->file('importfile')->store('user_import');
+ // $request->session()->put('user_import_path', $path);
+
+ // $csv = Reader::createFromPath(storage_path('app') .'/' . $path, 'r');
+ // $csv->setHeaderOffset(0);
+
+ // $header = $csv->getHeader(); //returns the CSV header record
+ // $records = $csv->getRecords(); //returns all the CSV records as an Iterator
+ // $contacts = [];
+ // echo '';
+ // foreach($records as $record) {
+ // $contacts[] = (array)$record;
+ // }
+
+ // $created = 0;
+ // $updated = 0;
+ // $count = 0;
+ // $total = sizeof($contacts);
+
+ // while($count < $total) {
+ // $tempdata = array_slice($contacts, $count, 20);
+ // Log::debug(print_r($tempdata, true));
+ // $response = LambdaRequest::signedrequest('post', $this->_service, $this->_module.'/import', $tempdata);
+ // Log::debug(print_r($response, true));
+ // $count = $count + 20;
+ // $created = $created + $response->data->created_count;
+ // $updated = $updated + (isset($response->data->updated_count) ? $response->data->updated_count : 0);
+ // Log::debug(print_r(['$count' => $count, '$created' => $created, '$updated' => $updated], true));
+ // }
+
+ // //echo ''; print_r($response); exit;
+ // if($response->statusCode == 200 && $response->status == "success") {
+ // return redirect($this->_base_url.'s')->withMessage('Successfully Imported ' .$created. ' records and Updated ' .$updated. ' records out of ' .$total. ' records!!!');
+ // } else {
+ // return \Redirect::back()->withMessage('Some Error occured!');
+ // }
+
+
+ // exit;
+ // return redirect($this->_base_url.'/importmap')->withMessage('Successfully Uploaded !!!');
+ // } else {
+ // return \Redirect::back()->withMessage('Some Error occured!');
+ // }
+ // }
+}
diff --git a/app/Http/Controllers/ProductattributeController.php b/app/Http/Controllers/ProductattributeController.php
new file mode 100644
index 00000000..4f4bdc49
--- /dev/null
+++ b/app/Http/Controllers/ProductattributeController.php
@@ -0,0 +1,78 @@
+middleware('auth');
+ $this->_service = 'catalog';
+ $this->_module = 'productattribute';
+ $this->_viewname = 'productattribute';
+ $this->_title = 'Product Attributes';
+ $this->_base_url = '/productattribute';
+ }
+
+ public function list(Request $request) {
+ $response = LambdaRequest::signedrequest('get', $this->_service, $this->_module.'/get_all');
+ //echo ''; print_r($response); exit;
+ $fields = $this->get_list_fields();
+ return $this->view('list')->with([
+ 'title' => $this->_title,
+ 'fields' => $fields,
+ 'base_url' => $this->_base_url,
+ 'items' => $response->data->items,
+ 'buttons' => $this->get_list_buttons()
+ ]);
+ }
+
+ protected function get_list_fields(){
+ return [
+ 'actions' => ['title' => 'Actions', 'buttons' => [ 'edit', 'delete' ] ],
+ //'media_thumb' => ['title' => 'Media Thumb', 'type' => 'image'],
+ 'attribute' => ['title' => 'Attribute', 'type' => 'text'],
+ 'status' => ['title' => 'Status', 'type' => 'select'],
+ ];
+ }
+
+ protected function get_form_fields($type, $values){
+ return [
+ 'attribute' => ['title' => 'Attribute', 'type' => 'text', 'required' => true],
+ 'code' => ['title' => 'Code (small caps without spaces and special chars except "_")', 'type' => 'text', 'required' => true],
+ 'required' => ['title' => 'Is Required', 'type' => 'yesno', 'required' => true],
+ //'editable' => ['title' => 'Is Editable', 'type' => 'yesno', 'required' => true],
+ 'type' => ['title' => 'Attribute Type', 'type' => 'select', 'required' => true, 'values' => ['text' => 'Text', 'number' => 'Number', 'date' => 'Date', 'email' => 'Email', 'url' => 'Url', 'select' => 'Dropdown', 'checkbox' => 'Checkbox', 'radio' => 'Radio'] ],
+
+ 'sort_order' => ['title' => 'Sort Order', 'type' => 'number', 'required' => true],
+ 'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
+ 'options' => ['title' => 'Options', 'type' => 'mapping', 'fullwidth' => true ],
+ ];
+ }
+
+ protected function _beforeform($type, $values) {
+ if($type == 'edit') {
+ //$this->_request->session()->put('entity_id', $values->id);
+ }
+ return $values;
+ }
+
+ protected function _beforesave($type, $request) {
+ $data = $request->except('_token');
+ //$data['id'] = $request->session()->get('entity_id');
+ $options = [];
+ if(isset($data['option_value'])) {
+ foreach($data['option_value'] as $k => $ov) {
+ $options[] = ['value' => $ov, 'display' => $data['option_name'][$k] ];
+ }
+ $data['options'] = $options;
+ unset($data['option_value']);
+ unset($data['option_name']);
+ }
+ //echo ''; print_r($data); exit;
+ return $data;
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php
new file mode 100644
index 00000000..87940560
--- /dev/null
+++ b/app/Http/Controllers/ReportController.php
@@ -0,0 +1,177 @@
+middleware('auth');
+ $this->_service = 'ums';
+ $this->_module = 'group';
+ $this->_viewname = 'grid';
+ $this->_title = 'Summary';
+ $this->_base_url = '/report';
+ }
+
+ public function nybfsummary(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/nybfsummary', []);
+ return view('report.nybfsummary')->with(['follow_up' => $response->data->follow_up]);
+ }
+
+ public function nybfdoctorwise(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/nybfdoctorwise', []);
+ return view('report.nybfdoctorwise')->with(['follow_up' => $response->data->follow_up]);
+ }
+
+ public function nyexecutionfollowup(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/nyexecutionfollowup', [], 180);
+ //echo ''; print_r($response); exit;
+ return view('report.nyexecutionfollowup')->with(['executions' => json_decode(file_get_contents( $response->data->jsonfile ), true) ]);
+ }
+
+
+
+ public function summary(Request $request)
+ {
+ return view('grid.list')->with(['title' => $this->_title]);
+ }
+
+ public function activitywise(Request $request)
+ {
+ return view('grid.activitywise')->with(['title' => 'Activity Wise']);
+ }
+
+ public function bdesummary(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdesummaryreport', ["month" => "November 2023"]);
+ return view('report.bdesummary')->with(['days' => $response->data->days, 'ems' => $response->data->ems, 'zbms' => $response->data->zbms, 'rbms' => $response->data->rbms, 'totals' => $response->data->totals]);
+ }
+
+ public function bdescansvscalls(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdescansvscalls', ["month" => "November 2023"]);
+ return view('report.bdescansvscalls')->with(['zbms' => $response->data->zbms, 'rbms' => $response->data->rbms, 'totals' => $response->data->totals]);
+ }
+
+ public function rbmwiseweekly(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bderbmwiseweekly', ["month" => "November 2023"]);
+ return view('report.bdesummary')->with(['days' => $response->data->days, 'ems' => $response->data->ems, 'zbms' => $response->data->zbms, 'rbms' => $response->data->rbms]);
+ }
+ public function drreferralanalysis(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdedrreferralanalysis', ["month" => "November 2023"]);
+ //echo ''; print_r($response); exit;
+ return view('report.drreferralanalysis')->with(['doctors' => $response->data->doctors, 'days' => $response->data->days]);
+ }
+ public function drreferralsummary(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdedrreferralsummary', ["month" => "November 2023"]);
+ //echo ''; print_r($response); exit;
+ return view('report.drreferralsummary')->with(['regions' => $response->data->regions, 'days' => $response->data->days]);
+ }
+ public function bdedevicewise(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdedevicewise', ["month" => "November 2023"]);
+ //echo ''; print_r($response); exit;
+ return view('report.bdedevicewise')->with(['metrics' => $response->data->metrics]);
+ }
+ public function bderbmwise(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bderbmwise', ["month" => "November 2023"]);
+ //echo ''; print_r($response); exit;
+ return view('report.bderbmwise')->with(['rbms' => $response->data->rbms, 'weeks' => $response->data->weeks]);
+ }
+ public function bdeeducatorwiseaverage(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdeeducatorwiseaverage', ["month" => "November 2023"]);
+ //echo ''; print_r($response); exit;
+ return view('report.bdeeducatorwiseaverage')->with(['rbms' => $response->data->rbms, 'days' => $response->data->days]);
+ }
+
+ public function bdedevicedashboard(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdedevicedashboard', ["month" => "November 2023"]);
+ //echo ''; print_r($response); exit;
+ //return view('report.bdedevicewise')->with(['metrics' => $response->data->metrics]);
+ return response()->json( $response->data );
+ }
+ public function bdedashboardtrend(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdedashboardtrend', ["month" => "November 2023"]);
+ //echo ''; print_r($response); exit;
+ //return view('report.bdedevicewise')->with(['metrics' => $response->data->metrics]);
+ return response()->json( $response->data );
+ }
+
+ public function bdedoctorscans(Request $request){
+ return view('report.bdedoctorscans');
+ }
+ public function ajaxbdedoctorscans(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bdedoctorscans');
+ //echo ''; print_r($response); exit;
+ return response()->json( $response->data );
+ }
+
+
+
+ public function bfactivitywise(Request $request){
+ $teams = DB::connection('primary')->table('breathefree_team')->select('team')->distinct()->get();
+ $regions = DB::connection('primary')->table('breathefree_team')->select('region')->distinct()->get();
+ //echo ''; print_r($regions);print_r($teams); exit;
+ return view('report.bfactivitywise')->with(['teams' => $teams, 'regions' => $regions]);
+ }
+ public function postajaxdatabfactivitywise(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bfactivitywise', $request->except('_token'));
+ $request->session()->put('bfactivitywise_files', $response->data->files);
+ return response()->json(["total" => $response->data->total_count , "jsondata" => json_decode(file_get_contents( $response->data->jsonfile ), true)] );
+ }
+ public function ajaxdatabfactivitywise(Request $request){
+ $files = $request->session()->get('bfactivitywise_files');
+ $fileno = $request->input('fileno', '0');
+ return response()->json(json_decode(file_get_contents( $files[$fileno] ), true));
+ }
+
+ public function bfedudoctorwise(Request $request){
+ // $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bfedudoctorwise');
+ // echo ''; print_r($response); exit;
+ return view('report.bfedudoctorwise');
+ }
+ public function ajaxdatabfedudoctorwise(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bfedudoctorwise', ["month" => "July 2023"]);
+ //echo ''; print_r($response); exit;
+ return response()->json( json_decode(file_get_contents( $response->data->jsonfile ), true) );
+ }
+ public function bfdoctorwise(Request $request){
+ return view('report.bfdoctorwise');
+ }
+
+ public function bfeducatorwise(Request $request){
+ $specialities = DB::table("bfdashboard_contacts")->select("speciality")->distinct()->get();
+ //print_r($specialities); exit;
+ return view('report.bfeducatorwise')->with(["specialities" => $specialities]);
+ }
+ public function ajaxdatabfeducatorwise(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bfeducatorwise', ["month" => "July 2023"]);
+ //echo ''; print_r($response); exit;
+ return response()->json( json_decode(file_get_contents( $response->data->jsonfile ), true) );
+ }
+
+ public function bfsummary(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bfsummary', ["month" => "August 2023"]);
+ //echo ''; print_r($response); exit;
+ $specialities = DB::table("bfdashboard_contacts")->select("speciality")->distinct()->get();
+ $request->session()->put('bfsummary_jsonfile', $response->data->jsonfile);
+ return view('report.bfsummary')->with(['days' => $response->data->days, 'specialities' => $specialities, 'devices' => $response->data->devices, 'brands' => $response->data->brands, 'teams' => $response->data->teams ]);
+ }
+ public function ajaxdatabfsummary(Request $request){
+ $jsonfile = $request->session()->get('bfsummary_jsonfile');
+ return response()->json( json_decode(file_get_contents( $jsonfile ), true) );
+ }
+
+ public function bfsummary2(Request $request){
+ $response = LambdaRequest::signedrequest('get', 'catalog', 'activity/bfsummary2', ["month" => "August 2023"]);
+ //echo ''; print_r($response); exit;
+ $specialities = DB::table("bfdashboard_contacts")->select("speciality")->distinct()->get();
+ //$request->session()->put('bfsummary_jsonfile', $response->data->jsonfile);
+ return view('report.bfsummary2')->with(['days' => $response->data->days, 'specialities' => $specialities, 'metrics' => $response->data->metrics ]);
+ }
+
+}
diff --git a/app/Http/Controllers/SurveyController.php b/app/Http/Controllers/SurveyController.php
index c800da5f..d4990957 100644
--- a/app/Http/Controllers/SurveyController.php
+++ b/app/Http/Controllers/SurveyController.php
@@ -46,6 +46,7 @@ class SurveyController extends Controller
'title' => ['title' => 'Title', 'type' => 'text', 'required' => true],
'description' => ['title' => 'Description', 'type' => 'textarea', 'required' => true, 'fullwidth' => true],
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled'] ],
+ 'export_fields' => ['title' => 'Export Fields', 'type' => 'textarea', 'required' => false, 'fullwidth' => true ],
];
}
diff --git a/app/Http/Controllers/SurveysubmissionController.php b/app/Http/Controllers/SurveysubmissionController.php
index d8a6cfec..0e8c6d28 100644
--- a/app/Http/Controllers/SurveysubmissionController.php
+++ b/app/Http/Controllers/SurveysubmissionController.php
@@ -173,6 +173,8 @@ class SurveysubmissionController extends Controller
$reqdata = $request->session()->get('formdata_request');
//$reqdata = ["partition" => 'rapport-vitalis1', "form_id" => '1650365457-c86bd7f2-a33c-49a5-9671-3c2511b57f3b', "alldata" => true, "date_range" => '2022/_'.$enddate ];
$response = LambdaRequest::signedrequest('post', $this->_service, $this->_module . '/getformhistory', $reqdata);
+ //echo ''; print_r($response); exit;
+
$fields = ['Submitted By', 'User identification', 'Email', 'Employee Code', 'Record Date', 'Submitted On'];
$fieldoptions = ['', '', '', '', '', ''];
foreach ($response->data->questions as $qid => $question) {
@@ -225,6 +227,7 @@ class SurveysubmissionController extends Controller
case 'text':
case 'date':
case 'number':
+ case 'textarea':
$item[] = isset($submission->formdata->{$qid}) ? $submission->formdata->{$qid} : '';
break;
case 'dropdown':
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
index 1890d24f..4213b86b 100644
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -45,6 +45,7 @@ class UserController extends Controller
protected function get_form_fields($type, $values){
$domain = LambdaRequest::signedrequest('get', $this->_service, 'domain/get_one');
+ //echo ''; print_r($domain); exit;
$designations_dd = [];
foreach($domain->data->item->designations as $designation){
$designations_dd[$designation] = $designation;
@@ -59,7 +60,7 @@ class UserController extends Controller
foreach($channels->data->items as $channel){
$channels_dd[$channel->id] = $channel->name;
}
- return [
+ $fields = [
'firstname' => ['title' => 'Firstname', 'type' => 'text', 'required' => true],
'lastname' => ['title' => 'Lastname', 'type' => 'text', 'required' => true],
'email' => ['title' => 'Email', 'type' => 'email', 'required' => true],
@@ -75,6 +76,19 @@ class UserController extends Controller
'address' => ['title' => 'Address', 'type' => 'textarea'],
'avatar' => ['title' => 'Avatar', 'type' => 'image'],
];
+ if(isset($domain->data->item->login_scheme) && $domain->data->item->login_scheme == 'Password') {
+ $fields['password'] = ['title' => 'Password', 'type' => 'text', 'required' => true];
+ }
+ return $fields;
+ }
+
+ protected function validateImport($headers, $records) {
+ return true;
+ echo '';
+ foreach($records as $record){
+ print_r($record);
+ }
+ exit;
}
protected function get_import_fields($records){
diff --git a/app/Http/Controllers/WallController.php b/app/Http/Controllers/WallController.php
index 8191a0b3..554c72bc 100644
--- a/app/Http/Controllers/WallController.php
+++ b/app/Http/Controllers/WallController.php
@@ -29,7 +29,7 @@ class WallController extends Controller
protected function get_form_fields($type, $values){
$groups = $this->getlambda('get', 'ums', 'group', 'dropdown');
- $groups_dd = [];
+ $groups_dd = ['all'=>'All Users'];
foreach($groups->data->items as $group){
$groups_dd[$group->id] = $group->name;
}
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
index d58ae70b..b5887e7c 100755
--- a/app/Http/Middleware/VerifyCsrfToken.php
+++ b/app/Http/Middleware/VerifyCsrfToken.php
@@ -11,7 +11,7 @@ class VerifyCsrfToken extends Middleware
*
* @var array
*/
- protected $except = ['/form/metricreport*', '/form/submitpersonalized', '/formdatalist/zipmultiple'
+ protected $except = ['/form/*', '/form/metricreport*', '/form/submitpersonalized', '/formdatalist/zipmultiple'
//
];
}
diff --git a/app/Http/Requests/LambdaRequest.php b/app/Http/Requests/LambdaRequest.php
index fb7b0dd0..ac1af491 100644
--- a/app/Http/Requests/LambdaRequest.php
+++ b/app/Http/Requests/LambdaRequest.php
@@ -7,7 +7,7 @@ use Log;
class LambdaRequest
{
- protected const REMOTE_ENV = 'local';
+ protected const REMOTE_ENV = 'production';
protected const LOCAL_URLS = [
'ums' => 'http://localhost:3010/dev/',
'mag' => 'http://localhost:3012/dev/',
@@ -18,11 +18,15 @@ class LambdaRequest
'detailing' => 'http://localhost:3016/dev/',
'competition' => 'http://localhost:3017/dev/',
'communication' => 'http://localhost:3018/dev/',
+ 'catalog' => 'http://localhost:3020/dev/',
];
protected const PROD_URL = 'https://rapportapi.click/';
protected static function genurl($service, $url) {
switch(true) {
+ case self::REMOTE_ENV != 'local' && $service == 'ums' && $url == 'hierarchy/get_all':
+ return 'https://ljtw6cnu6kzxm3s76upgsvmz5u0ufrep.lambda-url.ap-south-1.on.aws/';
+ break;
case self::REMOTE_ENV != 'local' && $service == 'metric' && $url == 'metric_report/view':
return 'https://zbmttswaqimy3nmo5wactmja3i0uosyv.lambda-url.ap-south-1.on.aws/';
break;
@@ -32,6 +36,12 @@ class LambdaRequest
case self::REMOTE_ENV != 'local' && $service == 'form' && $url == 'formentity/getformhistory':
return 'https://sgrmuxa46z7xfouezyvg3tnhnq0yptjn.lambda-url.ap-south-1.on.aws/';
break;
+ case self::REMOTE_ENV != 'local' && $service == 'form' && $url == 'formentity/getforminfo':
+ return 'https://bopqsnxa2ssc2dqmrs26ekslhu0uqmzx.lambda-url.ap-south-1.on.aws/';
+ break;
+ case self::REMOTE_ENV != 'local' && $service == 'catalog' && $url == 'activity/nyexecutionfollowup':
+ return 'https://4sat7sjmmslqwq6nil2kxjxm6y0afoii.lambda-url.ap-south-1.on.aws/';
+ break;
case self::REMOTE_ENV == 'local':
return self::LOCAL_URLS[$service] . $url;
break;
@@ -39,7 +49,7 @@ class LambdaRequest
return self::PROD_URL . $service . '/' . $url;
break;
}
- // if(self::REMOTE_ENV == 'local') {
+ // if(self::REMOTE_ENV == 'local') {
// return self::LOCAL_URLS[$service] . $url;
// } else {
// return self::PROD_URL . $service . '/' . $url;
diff --git a/app/Jobs/Importdata.php b/app/Jobs/Importdata.php
new file mode 100644
index 00000000..410f492a
--- /dev/null
+++ b/app/Jobs/Importdata.php
@@ -0,0 +1,47 @@
+import_id = $import_id;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return void
+ */
+ public function handle()
+ {
+ $import_id = $this->import_id;
+ $import = DB::table('import_jobs')->where('id', $import_id)->first();
+
+ Log::debug(print_r($import, true));
+ $token = DB::table('users')->select('access_token')->where('id', $import->user_id)->first()->access_token;
+ echo $token;
+ $response = LambdaRequest::postrequest($import->service, $import->module.'/import', ['import_id' => $import->id ], $token );
+ echo ''; print_r($response); exit;
+ }
+}
diff --git a/app/Widgets/CompatitionDashboard.php b/app/Widgets/CompatitionDashboard.php
new file mode 100644
index 00000000..21082bf7
--- /dev/null
+++ b/app/Widgets/CompatitionDashboard.php
@@ -0,0 +1,31 @@
+ 'yes'] );
+ //echo ''; print_r($response); exit;
+ if($response->statusCode == 200) {
+ return view('widgets.compatition_dashboard', ['title' => $this->config['title'], 'scores' => $response->data->items]);
+ } else {
+ return '';
+ }
+ }
+}
diff --git a/app/Widgets/CompatitionTeamDashboard.php b/app/Widgets/CompatitionTeamDashboard.php
new file mode 100644
index 00000000..4149d67b
--- /dev/null
+++ b/app/Widgets/CompatitionTeamDashboard.php
@@ -0,0 +1,30 @@
+ 'yes'] );
+ //echo ''; print_r($response); exit;
+ if($response->statusCode == 200 && sizeof($response->data->items) > 0 && isset($response->data->items[0]->userscore) ) {
+ return view('widgets.compatition_team_dashboard', ['title' => $this->config['title'], 'scores' => $response->data->items]);
+ } else {
+ return '';
+ }
+ }
+}
diff --git a/bootstrap/app.php b/bootstrap/app.php
index 037e17df..dbfc56e4 100755
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -52,4 +52,8 @@ $app->singleton(
|
*/
+header('Access-Control-Allow-Origin: *');
+header('Access-Control-Allow-Methods: *');
+header('Access-Control-Allow-Headers: *');
+
return $app;
diff --git a/database/migrations/2024_02_27_150156_create_jobs_table.php b/database/migrations/2024_02_27_150156_create_jobs_table.php
new file mode 100644
index 00000000..1be9e8a8
--- /dev/null
+++ b/database/migrations/2024_02_27_150156_create_jobs_table.php
@@ -0,0 +1,36 @@
+bigIncrements('id');
+ $table->string('queue')->index();
+ $table->longText('payload');
+ $table->unsignedTinyInteger('attempts');
+ $table->unsignedInteger('reserved_at')->nullable();
+ $table->unsignedInteger('available_at');
+ $table->unsignedInteger('created_at');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('jobs');
+ }
+}
diff --git a/public/assets/js/html2canvas.min.js b/public/assets/js/html2canvas.min.js
new file mode 100644
index 00000000..aed6bfd7
--- /dev/null
+++ b/public/assets/js/html2canvas.min.js
@@ -0,0 +1,20 @@
+/*!
+ * html2canvas 1.4.1
+ * Copyright (c) 2022 Niklas von Hertzen
+ * Released under MIT License
+ */
+!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(A="undefined"!=typeof globalThis?globalThis:A||self).html2canvas=e()}(this,function(){"use strict";
+/*! *****************************************************************************
+ Copyright (c) Microsoft Corporation.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ ***************************************************************************** */var r=function(A,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(A,e){A.__proto__=e}||function(A,e){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(A[t]=e[t])})(A,e)};function A(A,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function t(){this.constructor=A}r(A,e),A.prototype=null===e?Object.create(e):(t.prototype=e.prototype,new t)}var h=function(){return(h=Object.assign||function(A){for(var e,t=1,r=arguments.length;ts[0]&&e[1]>10),s%1024+56320)),(B+1===t||16384>5],this.data[e=(e<<2)+(31&A)];if(A<=65535)return e=this.index[2048+(A-55296>>5)],this.data[e=(e<<2)+(31&A)];if(A>11)],e=this.index[e+=A>>5&63],this.data[e=(e<<2)+(31&A)];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},l);function l(A,e,t,r,B,n){this.initialValue=A,this.errorValue=e,this.highStart=t,this.highValueIndex=r,this.index=B,this.data=n}for(var C="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u="undefined"==typeof Uint8Array?[]:new Uint8Array(256),F=0;F>4,i[o++]=(15&t)<<4|r>>2,i[o++]=(3&r)<<6|63&B;return n}(y="KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA=="),L=Array.isArray(m)?function(A){for(var e=A.length,t=[],r=0;r=this._value.length?-1:this._value[A]},XA.prototype.consumeUnicodeRangeToken=function(){for(var A=[],e=this.consumeCodePoint();lA(e)&&A.length<6;)A.push(e),e=this.consumeCodePoint();for(var t=!1;63===e&&A.length<6;)A.push(e),e=this.consumeCodePoint(),t=!0;if(t)return{type:30,start:parseInt(g.apply(void 0,A.map(function(A){return 63===A?48:A})),16),end:parseInt(g.apply(void 0,A.map(function(A){return 63===A?70:A})),16)};var r=parseInt(g.apply(void 0,A),16);if(45===this.peekCodePoint(0)&&lA(this.peekCodePoint(1))){this.consumeCodePoint();for(var e=this.consumeCodePoint(),B=[];lA(e)&&B.length<6;)B.push(e),e=this.consumeCodePoint();return{type:30,start:r,end:parseInt(g.apply(void 0,B),16)}}return{type:30,start:r,end:r}},XA.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return"url"===A.toLowerCase()&&40===this.peekCodePoint(0)?(this.consumeCodePoint(),this.consumeUrlToken()):40===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:19,value:A}):{type:20,value:A}},XA.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),-1===this.peekCodePoint(0))return{type:22,value:""};var e,t=this.peekCodePoint(0);if(39===t||34===t){t=this.consumeStringToken(this.consumeCodePoint());return 0===t.type&&(this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0))?(this.consumeCodePoint(),{type:22,value:t.value}):(this.consumeBadUrlRemnants(),xA)}for(;;){var r=this.consumeCodePoint();if(-1===r||41===r)return{type:22,value:g.apply(void 0,A)};if(CA(r))return this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:22,value:g.apply(void 0,A)}):(this.consumeBadUrlRemnants(),xA);if(34===r||39===r||40===r||(0<=(e=r)&&e<=8||11===e||14<=e&&e<=31||127===e))return this.consumeBadUrlRemnants(),xA;if(92===r){if(!hA(r,this.peekCodePoint(0)))return this.consumeBadUrlRemnants(),xA;A.push(this.consumeEscapedCodePoint())}else A.push(r)}},XA.prototype.consumeWhiteSpace=function(){for(;CA(this.peekCodePoint(0));)this.consumeCodePoint()},XA.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(41===A||-1===A)return;hA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},XA.prototype.consumeStringSlice=function(A){for(var e="";0>8,r=255&A>>16,A=255&A>>24;return e<255?"rgba("+A+","+r+","+t+","+e/255+")":"rgb("+A+","+r+","+t+")"}function Qe(A,e){if(17===A.type)return A.number;if(16!==A.type)return 0;var t=3===e?1:255;return 3===e?A.number/100*t:Math.round(A.number/100*t)}var ce=function(A,e){return 11===e&&12===A.type||(28===e&&29===A.type||2===e&&3===A.type)},ae={type:17,number:0,flags:4},ge={type:16,number:50,flags:4},we={type:16,number:100,flags:4},Ue=function(A,e){if(16===A.type)return A.number/100*e;if(WA(A))switch(A.unit){case"rem":case"em":return 16*A.number;default:return A.number}return A.number},le=function(A,e){if(15===e.type)switch(e.unit){case"deg":return Math.PI*e.number/180;case"grad":return Math.PI/200*e.number;case"rad":return e.number;case"turn":return 2*Math.PI*e.number}throw new Error("Unsupported angle type")},Ce=function(A){return Math.PI*A/180},ue=function(A,e){if(18===e.type){var t=me[e.name];if(void 0===t)throw new Error('Attempting to parse an unsupported color function "'+e.name+'"');return t(A,e.values)}if(5===e.type){if(3===e.value.length){var r=e.value.substring(0,1),B=e.value.substring(1,2),n=e.value.substring(2,3);return Fe(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),1)}if(4===e.value.length){var r=e.value.substring(0,1),B=e.value.substring(1,2),n=e.value.substring(2,3),s=e.value.substring(3,4);return Fe(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),parseInt(s+s,16)/255)}if(6===e.value.length){r=e.value.substring(0,2),B=e.value.substring(2,4),n=e.value.substring(4,6);return Fe(parseInt(r,16),parseInt(B,16),parseInt(n,16),1)}if(8===e.value.length){r=e.value.substring(0,2),B=e.value.substring(2,4),n=e.value.substring(4,6),s=e.value.substring(6,8);return Fe(parseInt(r,16),parseInt(B,16),parseInt(n,16),parseInt(s,16)/255)}}if(20===e.type){e=Le[e.value.toUpperCase()];if(void 0!==e)return e}return Le.TRANSPARENT},Fe=function(A,e,t,r){return(A<<24|e<<16|t<<8|Math.round(255*r)<<0)>>>0},he=function(A,e){e=e.filter($A);if(3===e.length){var t=e.map(Qe),r=t[0],B=t[1],t=t[2];return Fe(r,B,t,1)}if(4!==e.length)return 0;e=e.map(Qe),r=e[0],B=e[1],t=e[2],e=e[3];return Fe(r,B,t,e)};function de(A,e,t){return t<0&&(t+=1),1<=t&&--t,t<1/6?(e-A)*t*6+A:t<.5?e:t<2/3?6*(e-A)*(2/3-t)+A:A}function fe(A,e){return ue(A,JA.create(e).parseComponentValue())}function He(A,e){return A=ue(A,e[0]),(e=e[1])&&te(e)?{color:A,stop:e}:{color:A,stop:null}}function pe(A,t){var e=A[0],r=A[A.length-1];null===e.stop&&(e.stop=ae),null===r.stop&&(r.stop=we);for(var B=[],n=0,s=0;sA.optimumDistance)?{optimumCorner:e,optimumDistance:r}:A},{optimumDistance:s?1/0:-1/0,optimumCorner:null}).optimumCorner}var Ke=function(A,e){var t=e.filter($A),r=t[0],B=t[1],n=t[2],e=t[3],t=(17===r.type?Ce(r.number):le(A,r))/(2*Math.PI),A=te(B)?B.number/100:0,r=te(n)?n.number/100:0,B=void 0!==e&&te(e)?Ue(e,1):1;if(0==A)return Fe(255*r,255*r,255*r,1);n=r<=.5?r*(1+A):r+A-r*A,e=2*r-n,A=de(e,n,t+1/3),r=de(e,n,t),t=de(e,n,t-1/3);return Fe(255*A,255*r,255*t,B)},me={hsl:Ke,hsla:Ke,rgb:he,rgba:he},Le={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},be={name:"background-clip",initialValue:"border-box",prefix:!1,type:1,parse:function(A,e){return e.map(function(A){if(_A(A))switch(A.value){case"padding-box":return 1;case"content-box":return 2}return 0})}},De={name:"background-color",initialValue:"transparent",prefix:!1,type:3,format:"color"},Ke=function(t,A){var r=Ce(180),B=[];return Ae(A).forEach(function(A,e){if(0===e){e=A[0];if(20===e.type&&-1!==["top","left","right","bottom"].indexOf(e.value))return void(r=se(A));if(ne(e))return void(r=(le(t,e)+Ce(270))%Ce(360))}A=He(t,A);B.push(A)}),{angle:r,stops:B,type:1}},ve="closest-side",xe="farthest-side",Me="closest-corner",Se="farthest-corner",Te="ellipse",Ge="contain",he=function(r,A){var B=0,n=3,s=[],o=[];return Ae(A).forEach(function(A,e){var t=!0;0===e?t=A.reduce(function(A,e){if(_A(e))switch(e.value){case"center":return o.push(ge),!1;case"top":case"left":return o.push(ae),!1;case"right":case"bottom":return o.push(we),!1}else if(te(e)||ee(e))return o.push(e),!1;return A},t):1===e&&(t=A.reduce(function(A,e){if(_A(e))switch(e.value){case"circle":return B=0,!1;case Te:return!(B=1);case Ge:case ve:return n=0,!1;case xe:return!(n=1);case Me:return!(n=2);case"cover":case Se:return!(n=3)}else if(ee(e)||te(e))return(n=!Array.isArray(n)?[]:n).push(e),!1;return A},t)),t&&(A=He(r,A),s.push(A))}),{size:n,shape:B,stops:s,position:o,type:2}},Oe=function(A,e){if(22===e.type){var t={url:e.value,type:0};return A.cache.addImage(e.value),t}if(18!==e.type)throw new Error("Unsupported image type "+e.type);t=ke[e.name];if(void 0===t)throw new Error('Attempting to parse an unsupported image function "'+e.name+'"');return t(A,e.values)};var Ve,ke={"linear-gradient":function(t,A){var r=Ce(180),B=[];return Ae(A).forEach(function(A,e){if(0===e){e=A[0];if(20===e.type&&"to"===e.value)return void(r=se(A));if(ne(e))return void(r=le(t,e))}A=He(t,A);B.push(A)}),{angle:r,stops:B,type:1}},"-moz-linear-gradient":Ke,"-ms-linear-gradient":Ke,"-o-linear-gradient":Ke,"-webkit-linear-gradient":Ke,"radial-gradient":function(B,A){var n=0,s=3,o=[],i=[];return Ae(A).forEach(function(A,e){var t,r=!0;0===e&&(t=!1,r=A.reduce(function(A,e){if(t)if(_A(e))switch(e.value){case"center":return i.push(ge),A;case"top":case"left":return i.push(ae),A;case"right":case"bottom":return i.push(we),A}else(te(e)||ee(e))&&i.push(e);else if(_A(e))switch(e.value){case"circle":return n=0,!1;case Te:return!(n=1);case"at":return!(t=!0);case ve:return s=0,!1;case"cover":case xe:return!(s=1);case Ge:case Me:return!(s=2);case Se:return!(s=3)}else if(ee(e)||te(e))return(s=!Array.isArray(s)?[]:s).push(e),!1;return A},r)),r&&(A=He(B,A),o.push(A))}),{size:s,shape:n,stops:o,position:i,type:2}},"-moz-radial-gradient":he,"-ms-radial-gradient":he,"-o-radial-gradient":he,"-webkit-radial-gradient":he,"-webkit-gradient":function(r,A){var e=Ce(180),B=[],n=1;return Ae(A).forEach(function(A,e){var t,A=A[0];if(0===e){if(_A(A)&&"linear"===A.value)return void(n=1);if(_A(A)&&"radial"===A.value)return void(n=2)}18===A.type&&("from"===A.name?(t=ue(r,A.values[0]),B.push({stop:ae,color:t})):"to"===A.name?(t=ue(r,A.values[0]),B.push({stop:we,color:t})):"color-stop"!==A.name||2===(A=A.values.filter($A)).length&&(t=ue(r,A[1]),A=A[0],ZA(A)&&B.push({stop:{type:16,number:100*A.number,flags:A.flags},color:t})))}),1===n?{angle:(e+Ce(180))%Ce(360),stops:B,type:n}:{size:3,shape:0,stops:B,position:[],type:n}}},Re={name:"background-image",initialValue:"none",type:1,prefix:!1,parse:function(e,A){if(0===A.length)return[];var t=A[0];return 20===t.type&&"none"===t.value?[]:A.filter(function(A){return $A(A)&&!(20===(A=A).type&&"none"===A.value||18===A.type&&!ke[A.name])}).map(function(A){return Oe(e,A)})}},Ne={name:"background-origin",initialValue:"border-box",prefix:!1,type:1,parse:function(A,e){return e.map(function(A){if(_A(A))switch(A.value){case"padding-box":return 1;case"content-box":return 2}return 0})}},Pe={name:"background-position",initialValue:"0% 0%",type:1,prefix:!1,parse:function(A,e){return Ae(e).map(function(A){return A.filter(te)}).map(re)}},Xe={name:"background-repeat",initialValue:"repeat",prefix:!1,type:1,parse:function(A,e){return Ae(e).map(function(A){return A.filter(_A).map(function(A){return A.value}).join(" ")}).map(Je)}},Je=function(A){switch(A){case"no-repeat":return 1;case"repeat-x":case"repeat no-repeat":return 2;case"repeat-y":case"no-repeat repeat":return 3;default:return 0}};(he=Ve=Ve||{}).AUTO="auto",he.CONTAIN="contain";function Ye(A,e){return _A(A)&&"normal"===A.value?1.2*e:17===A.type?e*A.number:te(A)?Ue(A,e):e}var We,Ze,_e={name:"background-size",initialValue:"0",prefix:!(he.COVER="cover"),type:1,parse:function(A,e){return Ae(e).map(function(A){return A.filter(qe)})}},qe=function(A){return _A(A)||te(A)},he=function(A){return{name:"border-"+A+"-color",initialValue:"transparent",prefix:!1,type:3,format:"color"}},je=he("top"),ze=he("right"),$e=he("bottom"),At=he("left"),he=function(A){return{name:"border-radius-"+A,initialValue:"0 0",prefix:!1,type:1,parse:function(A,e){return re(e.filter(te))}}},et=he("top-left"),tt=he("top-right"),rt=he("bottom-right"),Bt=he("bottom-left"),he=function(A){return{name:"border-"+A+"-style",initialValue:"solid",prefix:!1,type:2,parse:function(A,e){switch(e){case"none":return 0;case"dashed":return 2;case"dotted":return 3;case"double":return 4}return 1}}},nt=he("top"),st=he("right"),ot=he("bottom"),it=he("left"),he=function(A){return{name:"border-"+A+"-width",initialValue:"0",type:0,prefix:!1,parse:function(A,e){return WA(e)?e.number:0}}},Qt=he("top"),ct=he("right"),at=he("bottom"),gt=he("left"),wt={name:"color",initialValue:"transparent",prefix:!1,type:3,format:"color"},Ut={name:"direction",initialValue:"ltr",prefix:!1,type:2,parse:function(A,e){return"rtl"!==e?0:1}},lt={name:"display",initialValue:"inline-block",prefix:!1,type:1,parse:function(A,e){return e.filter(_A).reduce(function(A,e){return A|Ct(e.value)},0)}},Ct=function(A){switch(A){case"block":case"-webkit-box":return 2;case"inline":return 4;case"run-in":return 8;case"flow":return 16;case"flow-root":return 32;case"table":return 64;case"flex":case"-webkit-flex":return 128;case"grid":case"-ms-grid":return 256;case"ruby":return 512;case"subgrid":return 1024;case"list-item":return 2048;case"table-row-group":return 4096;case"table-header-group":return 8192;case"table-footer-group":return 16384;case"table-row":return 32768;case"table-cell":return 65536;case"table-column-group":return 131072;case"table-column":return 262144;case"table-caption":return 524288;case"ruby-base":return 1048576;case"ruby-text":return 2097152;case"ruby-base-container":return 4194304;case"ruby-text-container":return 8388608;case"contents":return 16777216;case"inline-block":return 33554432;case"inline-list-item":return 67108864;case"inline-table":return 134217728;case"inline-flex":return 268435456;case"inline-grid":return 536870912}return 0},ut={name:"float",initialValue:"none",prefix:!1,type:2,parse:function(A,e){switch(e){case"left":return 1;case"right":return 2;case"inline-start":return 3;case"inline-end":return 4}return 0}},Ft={name:"letter-spacing",initialValue:"0",prefix:!1,type:0,parse:function(A,e){return!(20===e.type&&"normal"===e.value||17!==e.type&&15!==e.type)?e.number:0}},ht={name:"line-break",initialValue:(he=We=We||{}).NORMAL="normal",prefix:!(he.STRICT="strict"),type:2,parse:function(A,e){return"strict"!==e?We.NORMAL:We.STRICT}},dt={name:"line-height",initialValue:"normal",prefix:!1,type:4},ft={name:"list-style-image",initialValue:"none",type:0,prefix:!1,parse:function(A,e){return 20===e.type&&"none"===e.value?null:Oe(A,e)}},Ht={name:"list-style-position",initialValue:"outside",prefix:!1,type:2,parse:function(A,e){return"inside"!==e?1:0}},pt={name:"list-style-type",initialValue:"none",prefix:!1,type:2,parse:function(A,e){switch(e){case"disc":return 0;case"circle":return 1;case"square":return 2;case"decimal":return 3;case"cjk-decimal":return 4;case"decimal-leading-zero":return 5;case"lower-roman":return 6;case"upper-roman":return 7;case"lower-greek":return 8;case"lower-alpha":return 9;case"upper-alpha":return 10;case"arabic-indic":return 11;case"armenian":return 12;case"bengali":return 13;case"cambodian":return 14;case"cjk-earthly-branch":return 15;case"cjk-heavenly-stem":return 16;case"cjk-ideographic":return 17;case"devanagari":return 18;case"ethiopic-numeric":return 19;case"georgian":return 20;case"gujarati":return 21;case"gurmukhi":case"hebrew":return 22;case"hiragana":return 23;case"hiragana-iroha":return 24;case"japanese-formal":return 25;case"japanese-informal":return 26;case"kannada":return 27;case"katakana":return 28;case"katakana-iroha":return 29;case"khmer":return 30;case"korean-hangul-formal":return 31;case"korean-hanja-formal":return 32;case"korean-hanja-informal":return 33;case"lao":return 34;case"lower-armenian":return 35;case"malayalam":return 36;case"mongolian":return 37;case"myanmar":return 38;case"oriya":return 39;case"persian":return 40;case"simp-chinese-formal":return 41;case"simp-chinese-informal":return 42;case"tamil":return 43;case"telugu":return 44;case"thai":return 45;case"tibetan":return 46;case"trad-chinese-formal":return 47;case"trad-chinese-informal":return 48;case"upper-armenian":return 49;case"disclosure-open":return 50;case"disclosure-closed":return 51;default:return-1}}},he=function(A){return{name:"margin-"+A,initialValue:"0",prefix:!1,type:4}},Et=he("top"),It=he("right"),yt=he("bottom"),Kt=he("left"),mt={name:"overflow",initialValue:"visible",prefix:!1,type:1,parse:function(A,e){return e.filter(_A).map(function(A){switch(A.value){case"hidden":return 1;case"scroll":return 2;case"clip":return 3;case"auto":return 4;default:return 0}})}},Lt={name:"overflow-wrap",initialValue:"normal",prefix:!1,type:2,parse:function(A,e){return"break-word"!==e?"normal":"break-word"}},he=function(A){return{name:"padding-"+A,initialValue:"0",prefix:!1,type:3,format:"length-percentage"}},bt=he("top"),Dt=he("right"),vt=he("bottom"),xt=he("left"),Mt={name:"text-align",initialValue:"left",prefix:!1,type:2,parse:function(A,e){switch(e){case"right":return 2;case"center":case"justify":return 1;default:return 0}}},St={name:"position",initialValue:"static",prefix:!1,type:2,parse:function(A,e){switch(e){case"relative":return 1;case"absolute":return 2;case"fixed":return 3;case"sticky":return 4}return 0}},Tt={name:"text-shadow",initialValue:"none",type:1,prefix:!1,parse:function(n,A){return 1===A.length&&jA(A[0],"none")?[]:Ae(A).map(function(A){for(var e={color:Le.TRANSPARENT,offsetX:ae,offsetY:ae,blur:ae},t=0,r=0;r>5],this.data[e=(e<<2)+(31&A)];if(A<=65535)return e=this.index[2048+(A-55296>>5)],this.data[e=(e<<2)+(31&A)];if(A>11)],e=this.index[e+=A>>5&63],this.data[e=(e<<2)+(31&A)];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},pr);function pr(A,e,t,r,B,n){this.initialValue=A,this.errorValue=e,this.highStart=t,this.highValueIndex=r,this.index=B,this.data=n}for(var Er="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Ir="undefined"==typeof Uint8Array?[]:new Uint8Array(256),yr=0;yr>10),s%1024+56320)),(B+1===t||16384>4,i[o++]=(15&t)<<4|r>>2,i[o++]=(3&r)<<6|63&B;return n}(br="AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA="),xr=Array.isArray(vr)?function(A){for(var e=A.length,t=[],r=0;rs.x||t.y>s.y;return s=t,0===e||A});return A.body.removeChild(e),t}(document);return Object.defineProperty(Xr,"SUPPORT_WORD_BREAKING",{value:A}),A},get SUPPORT_SVG_DRAWING(){var A=function(A){var e=new Image,t=A.createElement("canvas"),A=t.getContext("2d");if(!A)return!1;e.src="data:image/svg+xml,";try{A.drawImage(e,0,0),t.toDataURL()}catch(A){return!1}return!0}(document);return Object.defineProperty(Xr,"SUPPORT_SVG_DRAWING",{value:A}),A},get SUPPORT_FOREIGNOBJECT_DRAWING(){var A="function"==typeof Array.from&&"function"==typeof window.fetch?function(t){var A=t.createElement("canvas"),r=100;A.width=r,A.height=r;var B=A.getContext("2d");if(!B)return Promise.reject(!1);B.fillStyle="rgb(0, 255, 0)",B.fillRect(0,0,r,r);var e=new Image,n=A.toDataURL();e.src=n;e=Nr(r,r,0,0,e);return B.fillStyle="red",B.fillRect(0,0,r,r),Pr(e).then(function(A){B.drawImage(A,0,0);var e=B.getImageData(0,0,r,r).data;B.fillStyle="red",B.fillRect(0,0,r,r);A=t.createElement("div");return A.style.backgroundImage="url("+n+")",A.style.height="100px",Lr(e)?Pr(Nr(r,r,0,0,A)):Promise.reject(!1)}).then(function(A){return B.drawImage(A,0,0),Lr(B.getImageData(0,0,r,r).data)}).catch(function(){return!1})}(document):Promise.resolve(!1);return Object.defineProperty(Xr,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:A}),A},get SUPPORT_CORS_IMAGES(){var A=void 0!==(new Image).crossOrigin;return Object.defineProperty(Xr,"SUPPORT_CORS_IMAGES",{value:A}),A},get SUPPORT_RESPONSE_TYPE(){var A="string"==typeof(new XMLHttpRequest).responseType;return Object.defineProperty(Xr,"SUPPORT_RESPONSE_TYPE",{value:A}),A},get SUPPORT_CORS_XHR(){var A="withCredentials"in new XMLHttpRequest;return Object.defineProperty(Xr,"SUPPORT_CORS_XHR",{value:A}),A},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var A=!("undefined"==typeof Intl||!Intl.Segmenter);return Object.defineProperty(Xr,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:A}),A}},Jr=function(A,e){this.text=A,this.bounds=e},Yr=function(A,e){var t=e.ownerDocument;if(t){var r=t.createElement("html2canvaswrapper");r.appendChild(e.cloneNode(!0));t=e.parentNode;if(t){t.replaceChild(r,e);A=f(A,r);return r.firstChild&&t.replaceChild(r.firstChild,r),A}}return d.EMPTY},Wr=function(A,e,t){var r=A.ownerDocument;if(!r)throw new Error("Node has no owner document");r=r.createRange();return r.setStart(A,e),r.setEnd(A,e+t),r},Zr=function(A){if(Xr.SUPPORT_NATIVE_TEXT_SEGMENTATION){var e=new Intl.Segmenter(void 0,{granularity:"grapheme"});return Array.from(e.segment(A)).map(function(A){return A.segment})}return function(A){for(var e,t=mr(A),r=[];!(e=t.next()).done;)e.value&&r.push(e.value.slice());return r}(A)},_r=function(A,e){return 0!==e.letterSpacing?Zr(A):function(A,e){if(Xr.SUPPORT_NATIVE_TEXT_SEGMENTATION){var t=new Intl.Segmenter(void 0,{granularity:"word"});return Array.from(t.segment(A)).map(function(A){return A.segment})}return jr(A,e)}(A,e)},qr=[32,160,4961,65792,65793,4153,4241],jr=function(A,e){for(var t,r=wA(A,{lineBreak:e.lineBreak,wordBreak:"break-word"===e.overflowWrap?"break-word":e.wordBreak}),B=[];!(t=r.next()).done;)!function(){var A,e;t.value&&(A=t.value.slice(),A=Q(A),e="",A.forEach(function(A){-1===qr.indexOf(A)?e+=g(A):(e.length&&B.push(e),B.push(g(A)),e="")}),e.length&&B.push(e))}();return B},zr=function(A,e,t){var B,n,s,o,i;this.text=$r(e.data,t.textTransform),this.textBounds=(B=A,A=this.text,s=e,A=_r(A,n=t),o=[],i=0,A.forEach(function(A){var e,t,r;n.textDecorationLine.length||0e.height?new d(e.left+(e.width-e.height)/2,e.top,e.height,e.height):e.width