diff --git a/.env b/.env
new file mode 100644
index 0000000000000000000000000000000000000000..aa2e3a98d266a53b6b4f1c54569ecf04c2b75ba4
--- /dev/null
+++ b/.env
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+# See https://docs.docker.com/compose/environment-variables/#the-env-file
+
+MYSQL_HOST=mysql
+MYSQL_PORT=8989
+MYSQL_DATABASE=motaraido
+MYSQL_ROOT_USER=root
+MYSQL_ROOT_PASSWORD=root
+MYSQL_USER=datafreaks
+MYSQL_PASSWORD=datafreaks
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..190b629cdda006348f5415b87822962d1221ff13
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+.DS_Store
+Thumbs.db
+npm-debug.log
+/data
+/bower_components
+/node_modules
+/vendor
\ No newline at end of file
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..2675219a8b14a68656b72cd0d5c1d59b6726e20a
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 (Winarto, Ray Andrew, Adrian HP)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/Tubes1/docker-compose.yml b/Tubes1/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7e25ab124ebdf843e169b408388f143c8223852c
--- /dev/null
+++ b/Tubes1/docker-compose.yml
@@ -0,0 +1,55 @@
+version: '3'
+services:
+    web:
+        image: nginx:latest
+        ports:
+            - "8000:80"
+            - "3000:443"
+        restart: always
+        env_file:
+            - ".env"
+        environment:
+            - MYSQL_DATABASE=${MYSQL_DATABASE}
+            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+            - MYSQL_USER=${MYSQL_USER}
+            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
+        volumes:
+            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
+            - "./etc/ssl:/etc/ssl"
+            - "./src:/var/www/html"
+        depends_on:
+            - php
+            - mysqldb
+    php:
+        image: nanoninja/php-fpm
+        restart: always
+        volumes:
+            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
+            - "./src:/var/www/html"
+    myadmin:
+        image: phpmyadmin/phpmyadmin
+        container_name: phpmyadmin
+        ports:
+            - "8080:80"
+        environment:
+            - PMA_ARBITRARY=1
+            - PMA_HOST=${MYSQL_HOST}
+        restart: always
+        depends_on:
+            - mysqldb
+    mysqldb:
+        image: mysql
+        user: "1000:50"
+        container_name: ${MYSQL_HOST}
+        restart: always
+        env_file:
+            - ".env"
+        environment:
+            - MYSQL_DATABASE=${MYSQL_DATABASE}
+            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+            - MYSQL_USER=${MYSQL_USER}
+            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
+        ports:
+            - "8989:3306"
+        volumes:
+            - "./data/db/mysql:/var/lib/mysql"
\ No newline at end of file
diff --git a/Tubes1/etc/nginx/default.conf b/Tubes1/etc/nginx/default.conf
new file mode 100755
index 0000000000000000000000000000000000000000..e0d7dadaca23760880b39a3ed0b0416e278489ba
--- /dev/null
+++ b/Tubes1/etc/nginx/default.conf
@@ -0,0 +1,87 @@
+# Nginx configuration
+
+server {
+    listen 80 default_server;
+    listen [::]:80 default_server;
+    server_name localhost;
+
+    index index.php index.html;
+    error_log  /var/log/nginx/error.log;
+    access_log /var/log/nginx/access.log;
+    root /var/www/html;
+    sendfile off;
+
+    location / {
+        try_files $uri $uri/ /index.php?$args;
+        include /etc/nginx/mime.types;
+    }
+
+    location ~ \.php$ {
+        try_files $uri =404;
+        fastcgi_split_path_info ^(.+\.php)(/.+)$;
+        fastcgi_pass php:9000;
+        fastcgi_index index.php;
+        include fastcgi_params;
+        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+        fastcgi_param PATH_INFO $fastcgi_path_info;
+    }
+
+    # Adding the cache control header for js and css files
+    # Make sure it is BELOW the PHP block
+    location ~* \.(?:css|js)$ {
+        try_files $uri /index.php$uri$is_args$args;
+        add_header Cache-Control "public, max-age=7200";
+        # Add headers to serve security related headers (It is intended to
+        # have those duplicated to the ones above)
+        # Before enabling Strict-Transport-Security headers please read into
+        # this topic first.
+        # add_header Strict-Transport-Security "max-age=15768000;
+        #  includeSubDomains; preload;";
+        #
+        # WARNING: Only add the preload option once you read about
+        # the consequences in https://hstspreload.org/. This option
+        # will add the domain to a hardcoded list that is shipped
+        # in all major browsers and getting removed from this list
+        # could take several months.
+        add_header X-Content-Type-Options nosniff;
+        add_header X-Frame-Options "SAMEORIGIN";
+        add_header X-XSS-Protection "1; mode=block";
+        add_header X-Robots-Tag none;
+        add_header X-Download-Options noopen;
+        add_header X-Permitted-Cross-Domain-Policies none;
+        # Optional: Don't log access to assets
+        access_log off;
+    }
+
+    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
+        try_files $uri /index.php$uri$is_args$args;
+        # Optional: Don't log access to other assets
+        access_log off;
+    }
+}
+
+# server {
+#     server_name localhost;
+
+#     listen 443 ssl;
+#     fastcgi_param HTTPS on;
+
+#     ssl_certificate /etc/ssl/server.pem;
+#     ssl_certificate_key /etc/ssl/server.key;
+#     ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
+
+#     index index.php index.html;
+#     error_log  /var/log/nginx/error.log;
+#     access_log /var/log/nginx/access.log;
+#     root /var/www/html/public;
+
+#     location ~ \.php$ {
+#         try_files $uri =404;
+#         fastcgi_split_path_info ^(.+\.php)(/.+)$;
+#         fastcgi_pass php:9000;
+#         fastcgi_index index.php;
+#         include fastcgi_params;
+#         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+#         fastcgi_param PATH_INFO $fastcgi_path_info;
+#     }
+# }
diff --git a/Tubes1/etc/php/php.ini b/Tubes1/etc/php/php.ini
new file mode 100755
index 0000000000000000000000000000000000000000..1647620ec35b26a249a094d6cd08a967cbafc56a
--- /dev/null
+++ b/Tubes1/etc/php/php.ini
@@ -0,0 +1,15 @@
+;PHPStorm
+[xdebug]
+xdebug.remote_enable=1
+xdebug.idekey=PHPSTORM
+xdebug.profiler_enable=0
+xdebug.max_nesting_level=700
+xdebug.remote_host=192.168.0.1 # your ip
+
+;Netbeans
+;[xdebug]
+;xdebug.remote_enable=1
+;xdebug.remote_handler=dbgp
+;xdebug.remote_mode=req
+;xdebug.remote_host=192.168.0.1 # your ip
+;xdebug.remote_port=9000
\ No newline at end of file
diff --git a/Tubes1/mocks/complete-order.PNG b/Tubes1/mocks/complete-order.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..7f3c47746862149b4ac05621f6ecb786defa672a
Binary files /dev/null and b/Tubes1/mocks/complete-order.PNG differ
diff --git a/Tubes1/mocks/edit-preferred-location.PNG b/Tubes1/mocks/edit-preferred-location.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..3a1245395848b84d28ac9a5ee4eb61e4ae5fd1b3
Binary files /dev/null and b/Tubes1/mocks/edit-preferred-location.PNG differ
diff --git a/Tubes1/mocks/edit-profile.PNG b/Tubes1/mocks/edit-profile.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..6244a5536e70d01c9bf5f11d5a3c5b5869fe6a38
Binary files /dev/null and b/Tubes1/mocks/edit-profile.PNG differ
diff --git a/Tubes1/mocks/history-driver.PNG b/Tubes1/mocks/history-driver.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..a9e6921d1a9b8e522ccb32efa4ef447ce46caf8c
Binary files /dev/null and b/Tubes1/mocks/history-driver.PNG differ
diff --git a/Tubes1/mocks/history-penumpang.PNG b/Tubes1/mocks/history-penumpang.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..2c64011fba6a6279957f04f1c5eb01bd0f4465a0
Binary files /dev/null and b/Tubes1/mocks/history-penumpang.PNG differ
diff --git a/Tubes1/mocks/login.PNG b/Tubes1/mocks/login.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..988463962dd113ae33998f2f8e8b238fc7e5eaf9
Binary files /dev/null and b/Tubes1/mocks/login.PNG differ
diff --git a/Tubes1/mocks/order-ojek.PNG b/Tubes1/mocks/order-ojek.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..6a8d6cc01a948c346df9016068907f4388c9ff3a
Binary files /dev/null and b/Tubes1/mocks/order-ojek.PNG differ
diff --git a/Tubes1/mocks/profile.PNG b/Tubes1/mocks/profile.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..923086d315b8666a87550614af0cd2332c20cfdb
Binary files /dev/null and b/Tubes1/mocks/profile.PNG differ
diff --git a/Tubes1/mocks/register.PNG b/Tubes1/mocks/register.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..67ed0b9deaf392584d5ffd20e7057d07581e1e02
Binary files /dev/null and b/Tubes1/mocks/register.PNG differ
diff --git a/Tubes1/mocks/select-driver.PNG b/Tubes1/mocks/select-driver.PNG
new file mode 100755
index 0000000000000000000000000000000000000000..7e3808ddb97f7fde6db4758861d29d68557ae9f0
Binary files /dev/null and b/Tubes1/mocks/select-driver.PNG differ
diff --git a/Tubes1/motaraido.sql b/Tubes1/motaraido.sql
new file mode 100644
index 0000000000000000000000000000000000000000..0ffd75c1f8e337d1510cde5b9f40a9e0fdfa973a
--- /dev/null
+++ b/Tubes1/motaraido.sql
@@ -0,0 +1,136 @@
+-- phpMyAdmin SQL Dump
+-- version 4.7.4
+-- https://www.phpmyadmin.net/
+--
+-- Host: mysql
+-- Generation Time: Oct 03, 2017 at 02:49 AM
+-- Server version: 5.7.19
+-- PHP Version: 7.0.21
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET AUTOCOMMIT = 0;
+START TRANSACTION;
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Database: `motaraido`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `history`
+--
+
+CREATE TABLE `history` (
+  `usernameUser` varchar(32) NOT NULL,
+  `usernameDriver` varchar(32) NOT NULL,
+  `rating` int(11) NOT NULL,
+  `comment` text,
+  `dateOrder` date NOT NULL,
+  `pickup` text NOT NULL,
+  `destination` text NOT NULL,
+  `ishide` boolean NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `preferredloc`
+--
+
+CREATE TABLE `preferredloc` (
+  `username` varchar(32) NOT NULL,
+  `location` varchar(50) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `rating`
+--
+
+CREATE TABLE `rating` (
+  `username` varchar(32) NOT NULL,
+  `rating` int(11) NOT NULL,
+  `votes` varchar(50) NOT NULL,
+  `numrat` int(11) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `user`
+--
+
+CREATE TABLE `user` (
+  `username` varchar(32) NOT NULL,
+  `password` varchar(32) NOT NULL,
+  `fullname` varchar(50) NOT NULL,
+  `phone` varchar(15) NOT NULL,
+  `isdriver` tinyint(1) NOT NULL,
+  `email` varchar(100) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+--
+-- Indexes for dumped tables
+--
+
+--
+-- Indexes for table `history`
+--
+ALTER TABLE `history`
+  ADD KEY `usernameUser` (`usernameUser`),
+  ADD KEY `usernameDriver` (`usernameDriver`);
+
+--
+-- Indexes for table `preferredloc`
+--
+ALTER TABLE `preferredloc`
+  ADD KEY `username` (`username`);
+
+--
+-- Indexes for table `rating`
+--
+ALTER TABLE `rating`
+  ADD KEY `username` (`username`);
+
+--
+-- Indexes for table `user`
+--
+ALTER TABLE `user`
+  ADD PRIMARY KEY (`username`);
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `history`
+--
+ALTER TABLE `history`
+  ADD CONSTRAINT `history_ibfk_1` FOREIGN KEY (`usernameUser`) REFERENCES `user` (`username`) ON DELETE CASCADE,
+  ADD CONSTRAINT `history_ibfk_2` FOREIGN KEY (`usernameDriver`) REFERENCES `user` (`username`) ON DELETE CASCADE;
+
+--
+-- Constraints for table `preferredloc`
+--
+ALTER TABLE `preferredloc`
+  ADD CONSTRAINT `preferredloc_ibfk_1` FOREIGN KEY (`username`) REFERENCES `user` (`username`) ON DELETE CASCADE;
+
+--
+-- Constraints for table `rating`
+--
+ALTER TABLE `rating`
+  ADD CONSTRAINT `rating_ibfk_1` FOREIGN KEY (`username`) REFERENCES `user` (`username`) ON DELETE CASCADE;
+COMMIT;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/Tubes1/src/app/Core/Config.php b/Tubes1/src/app/Core/Config.php
new file mode 100644
index 0000000000000000000000000000000000000000..dec3ba72c0c5008d03abdb182cc1360272cab82e
--- /dev/null
+++ b/Tubes1/src/app/Core/Config.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace MotaRaido\Core;
+
+if (!defined('MOTAFW')) {
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+$host = 'mysql';
+$db = 'motaraido';
+$un = 'datafreaks';
+$pass = 'datafreaks';
+
+class Config {
+    protected static $data = array(
+        'database' => array (
+            'driver' => 'mysql',
+            'host' => 'mysql',
+            'port' => '8989',
+            'db' => 'motaraido',
+            'username' => 'datafreaks',
+            'password' => 'datafreaks'
+        ),
+        'template' => array (
+            'header' => APPDIR . '/Menu/Header.php',
+            'headerWithMenu' => APPDIR . '/Menu/HeaderWithMenu.php',
+            'footer' => APPDIR . '/Menu/Footer.php'
+        ),
+        'base_url' => '',
+        'secret-key' => '\x8f\xc6\xe8\x5e\xcd\x3f\x0a\x96\xf7\x62\x14\xc2\x74\xfb\x23\x54'
+    );
+
+    public static function get($name)
+    {
+        if (array_key_exists($name, self::$data)) {
+            return self::$data[$name];
+        }
+    }
+}
\ No newline at end of file
diff --git a/Tubes1/src/app/Core/Database/Connector.php b/Tubes1/src/app/Core/Database/Connector.php
new file mode 100644
index 0000000000000000000000000000000000000000..025c26e175034eb743e15db58266ee1aba4e1ccc
--- /dev/null
+++ b/Tubes1/src/app/Core/Database/Connector.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace MotaRaido\Core\Database;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+use \PDO;
+use \Closure;
+
+class Connector extends PDO
+{
+    private $forcedRollBack = false;
+
+    public function __construct($config) {
+        parent::__construct($config['driver'] . ':dbname=' . $config['db'] . ';' . 'host=' . $config['host'], $config['username'], $config['password']);
+    }
+
+    public function createTransaction(Closure $func)
+    {
+        $this->beginTransaction();
+        try
+        {
+            $func($this);
+            if ($this->forcedRollBack)
+            {
+                $this->rollback();
+            }
+            else
+            {
+                $this->commit();
+            }
+        } 
+        catch (Exception $e)
+        {
+            $this->rollback();
+            throw $e;
+        }
+    }
+
+    public function forceRollback()
+    {
+        $this->forcedRollback = true;
+    }
+}
\ No newline at end of file
diff --git a/Tubes1/src/app/Core/Database/Encryption.php b/Tubes1/src/app/Core/Database/Encryption.php
new file mode 100644
index 0000000000000000000000000000000000000000..527dd031fca3cf32773eff7bd27f339a9d2dca0a
--- /dev/null
+++ b/Tubes1/src/app/Core/Database/Encryption.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace MotaRaido\Core\Database;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+use \MotaRaido\Core\Config;
+
+class Encryption
+{
+	public static function encrypt($password)
+	{
+		$hash = password_hash($password . Config::get('secret-key'), PASSWORD_DEFAULT);
+		return base64_encode($hash);
+	}
+
+	public static function verify($password, $text)
+	{
+		return password_verify($password . Config::get('secret-key'), base64_decode($text));
+	}
+}
\ No newline at end of file
diff --git a/Tubes1/src/app/Core/Database/Query.php b/Tubes1/src/app/Core/Database/Query.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e91ccbfc3588862694efad8ffeed0f7da536039
--- /dev/null
+++ b/Tubes1/src/app/Core/Database/Query.php
@@ -0,0 +1,111 @@
+<?php
+
+namespace MotaRaido\Core\Database;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+use \MotaRaido\Core\Database\Connector;
+use \Closure;
+
+class Query
+{
+    private $dbh;
+
+    public function __construct(Connector $dbh)
+    {
+        $this->dbh = $dbh;
+        $this->dbh->setAttribute(Connector::ATTR_ERRMODE, Connector::ERRMODE_EXCEPTION);
+        $this->dbh->forceRollback();
+    }
+
+    public function transaction(Closure $func) {
+        $this->dbh->createTransaction($func);
+    }
+    
+    public function select($tableName, $where)
+    {
+        $sql = $this->createSelectQuery($tableName, $where);
+        $whereParams = $this->getWhereParameters($where);
+        $stmp = $this->dbh->prepare($sql);
+        $stmp->execute($whereParams);
+        return $stmp->fetchAll();
+    }
+ 
+    public function insert($tableName, $values)
+    {
+        $sql = $this->createInsertQuery($tableName, $values);
+        $stmp = $this->dbh->prepare($sql);
+        $out = $stmp->execute($values);
+        return $out;
+    }
+ 
+    public function update($tableName, $values, $where)
+    {
+        $sql = $this->createUpdateQuery($tableName, $values, $where);
+        $whereParams = $this->getWhereParameters($where);
+        $stmp = $this->dbh->prepare($sql);
+        $out = $stmp->execute(array_merge($values, $whereParams));
+        return $out;
+    }
+ 
+    public function delete($tableName, $where)
+    {
+        $sql = $this->createDeleteQuery($tableName, $where);
+        $whereParams = $this->getWhereParameters($where);
+        $stmp = $this->dbh->prepare($sql);
+        $out = $stmp->execute($whereParams);
+        return $out;
+    }
+ 
+    protected function getWhereParameters($where)
+    {
+        $whereParams = array();
+        foreach ($where as $key => $value) {
+            $whereParams[":W_{$key}"] = $value;
+        }
+        return $whereParams;
+    }
+ 
+    protected function createSelectQuery($table, $where)
+    {
+        return "SELECT * FROM " . $table . $this->createSqlWhere($where);
+    }
+ 
+    protected function createUpdateQuery($table, $values, $where)
+    {
+        $sqlValues = array();
+        foreach (array_keys($values) as $key) {
+            $sqlValues[] = "{$key} = :{$key}";
+        }
+        return "UPDATE {$table} SET " . implode(', ', $sqlValues) . $this->createSqlWhere($where);
+    }
+ 
+    protected function createInsertQuery($table, $values)
+    {
+        $sqlValues = array();
+        foreach (array_keys($values) as $key) {
+            $sqlValues[] = ":{$key}";
+        }
+        return "INSERT INTO {$table} (" . implode(', ', array_keys($values)) . ") VALUES (" . implode(', ', $sqlValues) . ")";
+    }
+ 
+    protected function createDeleteQuery($table, $where)
+    {
+        return "DELETE FROM {$table}" . $this->createSqlWhere($where);
+    }
+ 
+    protected function createSqlWhere($where)
+    {
+        if (count((array) $where) == 0) return null;
+ 
+        $whereSql = array();
+        foreach ($where as $key => $value) {
+            $whereSql[] = "{$key} = :W_{$key}";
+        }
+        return ' WHERE ' . implode(' AND ', $whereSql);
+    }
+}
\ No newline at end of file
diff --git a/Tubes1/src/app/Core/ErrorMessage.php b/Tubes1/src/app/Core/ErrorMessage.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a8572813b20d02ee03e078e3652a904f1a30a75
--- /dev/null
+++ b/Tubes1/src/app/Core/ErrorMessage.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace MotaRaido\Core;
+
+if (!defined('MOTAFW')) {
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+class ErrorMessage
+{    
+    public static function get($code = null)
+    {
+        $text = 'OK';
+        if ($code !== null) {
+            switch ($code) {
+                case 100: $text = 'Continue'; break;
+                case 101: $text = 'Switching Protocols'; break;
+                case 200: $text = 'OK'; break;
+                case 201: $text = 'Created'; break;
+                case 202: $text = 'Accepted'; break;
+                case 203: $text = 'Non-Authoritative Information'; break;
+                case 204: $text = 'No Content'; break;
+                case 205: $text = 'Reset Content'; break;
+                case 206: $text = 'Partial Content'; break;
+                case 300: $text = 'Multiple Choices'; break;
+                case 301: $text = 'Moved Permanently'; break;
+                case 302: $text = 'Moved Temporarily'; break;
+                case 303: $text = 'See Other'; break;
+                case 304: $text = 'Not Modified'; break;
+                case 305: $text = 'Use Proxy'; break;
+                case 400: $text = 'Bad Request'; break;
+                case 401: $text = 'Unauthorized'; break;
+                case 402: $text = 'Payment Required'; break;
+                case 403: $text = 'Forbidden'; break;
+                case 404: $text = 'Not Found'; break;
+                case 405: $text = 'Method Not Allowed'; break;
+                case 406: $text = 'Not Acceptable'; break;
+                case 407: $text = 'Proxy Authentication Required'; break;
+                case 408: $text = 'Request Time-out'; break;
+                case 409: $text = 'Conflict'; break;
+                case 410: $text = 'Gone'; break;
+                case 411: $text = 'Length Required'; break;
+                case 412: $text = 'Precondition Failed'; break;
+                case 413: $text = 'Request Entity Too Large'; break;
+                case 414: $text = 'Request-URI Too Large'; break;
+                case 415: $text = 'Unsupported Media Type'; break;
+                case 500: $text = 'Internal Server Error'; break;
+                case 501: $text = 'Not Implemented'; break;
+                case 502: $text = 'Bad Gateway'; break;
+                case 503: $text = 'Service Unavailable'; break;
+                case 504: $text = 'Gateway Time-out'; break;
+                case 505: $text = 'HTTP Version not supported'; break;
+                default:
+                    exit('Unknown http status code "' . htmlentities($code) . '"');
+                break;
+            }
+
+                $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0');
+                // header($protocol . ' ' . $code . ' ' . $text);
+                $GLOBALS['http_response_code'] = $code;
+                $GLOBALS['http_response_code_message'] = $text;
+        } else {
+            $code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200);
+        }
+
+        return [
+            'code' => $code,
+            'message' => $text
+        ];
+    }
+}
diff --git a/Tubes1/src/app/Core/Route.php b/Tubes1/src/app/Core/Route.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ab04f6988dc030e2d3a5a37990bd940b500d1d6
--- /dev/null
+++ b/Tubes1/src/app/Core/Route.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace MotaRaido\Core;
+
+use \MotaRaido\Core\ErrorMessage;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+class Route {
+
+    private static $httpAction;
+
+    public static function setHttpAction($action) {
+        self::$httpAction = $action;
+    }
+
+	public static function get_uri() {
+        if (isset($_SERVER['REQUEST_URI'])) {
+            $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
+        } else {
+            return "";
+        }
+        return '/' . ltrim($uri, '/');
+    }
+    
+	public static function add($pattern_uri, $action = null, $middleware = null) {
+        self::setHttpAction(function($action) {
+            echo $action['code'] . ' - ' . $action['message'];
+        });
+
+        $request_uri = self::get_uri();
+
+        preg_match_all('/#([0-9a-zA-Z_]+)/', $pattern_uri, $names, PREG_PATTERN_ORDER);
+        $names = $names[0];
+
+		$pattern_uri_regex  = preg_replace_callback('/#[[0-9a-zA-Z_]+/', array(__CLASS__, 'uri_regex'), $pattern_uri);
+        $pattern_uri_regex .= '/?';
+
+        $params = array();
+        
+		if (preg_match('@^' . $pattern_uri_regex . '$@', $request_uri, $values)) {
+            array_shift($values);
+
+			foreach($names as $index => $value) {
+				$params[substr($value, 1)] = urldecode($values[$index]);
+            }
+            
+			if (is_callable($action)) {
+                if(is_callable($middleware)) {
+                    if(call_user_func($middleware)) {
+                        call_user_func_array($action, array_values($params));
+                    } else {
+                        call_user_func_array(self::$httpAction, [ErrorMessage::get('401')]);
+                    }
+                } else {
+                    call_user_func_array($action, array_values($params));
+                }
+			}
+		}
+
+		return $params;
+    }
+    
+	public static function uri_regex($matches) {
+		return '([a-zA-Z0-9_\+\-%]+)';
+	}
+}
\ No newline at end of file
diff --git a/Tubes1/src/app/Core/View.php b/Tubes1/src/app/Core/View.php
new file mode 100644
index 0000000000000000000000000000000000000000..4706debcceb6425153067e8775a502ba0bc00402
--- /dev/null
+++ b/Tubes1/src/app/Core/View.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace MotaRaido\Core;
+
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+use \MotaRaido\Core\Config;
+
+class View
+{
+
+    protected $data = array();
+
+    function render($view, $template = true) {
+        ob_start();
+        include_once $template ? Config::get('template')['headerWithMenu'] : Config::get('template')['header'];
+        include_once $view;
+        if($template) include_once Config::get('template')['footer'];
+        $str = ob_get_contents();
+        ob_end_clean();
+        echo $str;
+    }
+
+    public function __get($name)
+    {
+        if (array_key_exists($name, $this->data)) {
+            return $this->data[$name];
+        }
+    }
+
+    function include($key, $val) {
+        ob_start();
+        require_once $val;
+        $str = ob_get_contents();
+        ob_end_clean();
+        $this->data[$key] = $str;
+    }
+
+    function assign($key, $val) {
+        if(!is_array($val)) $val = \htmlspecialchars($val);  
+        $this->data[$key] = $val;
+    }
+}
\ No newline at end of file
diff --git a/Tubes1/src/app/Login/Login.routes.php b/Tubes1/src/app/Login/Login.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..04ba8740bf13e03c723d0b6d449b1da2ce0cad81
--- /dev/null
+++ b/Tubes1/src/app/Login/Login.routes.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace MotaRaido\Login;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) {
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/', function () {
+    $view = new View();
+    $view->assign('style', CSS . "style.css");
+    $view->assign('title', 'Login');
+    $view->assign('script', JS . "app.js");
+    $view->render(__DIR__ . '/Login.view.php', false);
+});
+
+Route::add('/login', function () {
+        $view = new View();
+        $view->assign('style', CSS . "style.css");
+        $view->assign('title', 'Login');
+        $view->assign('script', JS . "app.js");
+        $view->render(__DIR__ . '/Login.view.php', false);
+});
+
+Route::add('/login/validation', function() use ($query) {
+    $query->transaction(function() use ($query) {
+        $username = $_POST['username'];
+        $password = $_POST['password'];
+        $usrData = $query->select('user', []);
+        $pwdData = $query->select('user', []);
+        $found = false;
+
+        foreach($usrData as $record) {
+            if($record[0] == $username && $record[1] == $password){
+                $found = true;
+                break;
+            }
+        }
+
+        if ($found) {
+            header('Location: /profile/' . $username);
+        } else {
+            header('Location: /login');
+        }
+    });
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/Login/Login.view.php b/Tubes1/src/app/Login/Login.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..957d852d758920181016f55cd23f69e38b6a1b87
--- /dev/null
+++ b/Tubes1/src/app/Login/Login.view.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace MotaRaido\Login;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<section class="content-layout">
+  <header class="title">
+    <div>
+      <hr>
+      <h1><?php echo $this->title; ?></h1>
+      <hr>
+    </div>
+  </header>
+  <section class="form-layout">
+    <form action="/login/validation" method="post" name="loginform" onsubmit="return loginValidation();">
+      <div class="form-input">
+        <div>Username</div>
+        <input id="username" type="text" name="username">
+      </div>
+      <div class="form-input">
+        <div>Password</div>
+        <input type="password" name="password">
+      </div>
+      <div id="button-layout">
+        <div>
+          <a href="/signup">Don't have an account?</a>
+        </div>
+        <input id="register-button" type="submit" value="GO!">
+      </div>
+    </form>
+  </section>
+</section>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Footer.php b/Tubes1/src/app/Menu/Footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..34d9b3448c4f5ee601f9bd54f0721b8524a76a27
--- /dev/null
+++ b/Tubes1/src/app/Menu/Footer.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace MotaRaido\Menu;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<div class="footer">
+    <div>Winarto <br /> 13515061</div>
+    <div>Ray Andrew <br /> 13515073</div>
+    <div>Adrian HP <br /> 13515091</div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Header.php b/Tubes1/src/app/Menu/Header.php
new file mode 100644
index 0000000000000000000000000000000000000000..badd527732909e3e2284bc0ac708acfdeb05488c
--- /dev/null
+++ b/Tubes1/src/app/Menu/Header.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace MotaRaido\Menu;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<!DOCTYPE html>
+<head>
+  <title><?php echo $this->title; ?></title>
+  <link rel="stylesheet" type="text/css" href=<?php echo CSS . 'style.css?time=' . date("H:i:s"); ?>></link>
+  <link rel="stylesheet" type="text/css" href=<?php echo CSS . 'profile.css?time=' . date("H:i:s"); ?>></link>
+  <script type='text/javascript' src=<?php echo JS . 'app.js?time=' . date("H:i:s"); ?>></script>
+  <script type='text/javascript' src=<?php echo JS . 'signup.js?time=' . date("H:i:s"); ?>></script>
+</head>
+<body>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/HeaderWithMenu.php b/Tubes1/src/app/Menu/HeaderWithMenu.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d411c55acd8c5a115e79a55865c7babf702265d
--- /dev/null
+++ b/Tubes1/src/app/Menu/HeaderWithMenu.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace MotaRaido\Menu;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<!DOCTYPE html>
+<head>
+  <title><?php echo $this->title; ?></title>
+  <link rel="stylesheet" type="text/css" href=<?php echo CSS . 'style.css?time=' . date("H:i:s"); ?>></link>
+  <link rel="stylesheet" type="text/css" href=<?php echo CSS . 'profile.css?time=' . date("H:i:s"); ?>></link>
+  <script type='text/javascript' src=<?php echo JS . 'app.js'; ?>></script>
+  
+</head>
+<body>
+<div>
+	<header class="header-box">
+		<div class="col-header-left">
+			<div>
+				<span class='logo-title'>MotoRaido</span><br />
+				<span class='tagline'>Anata to issho ni noru mōtā</span>
+			</div>	
+		</div>
+		<div class="col-header-right">
+			<div>
+				Hi, <b><?php echo $this->user; ?></b> !
+			</div>
+			<div>
+				<a href="/login">Logout</a>
+			</div>
+		</div>
+	</header>
+	<div class='menu'>
+		<div class="menu-column"></div>
+		<div class="menu-column"></div>
+		<div class="menu-column"></div>
+		<div id="orderheader" class="menu-cell"><a href="/order/<?php echo $this->user; ?>" class="text-link">ORDER</a></div>
+		<div id="historyheader" class="menu-cell"><a href="/history/<?php echo $this->user; ?>" class="text-link">HISTORY</a></div>
+		<div id="profileheader" class="menu-cell"><a href="/profile/<?php echo $this->user; ?>" class="text-link">MY PROFILE</a></div>
+	</div>
+</div>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/History/History.routes.php b/Tubes1/src/app/Menu/History/History.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..8dacc3dc0c1cff1fb232202140212b2a3b0ba0d8
--- /dev/null
+++ b/Tubes1/src/app/Menu/History/History.routes.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace MotaRaido\Menu\History;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/history/#user', function($user) use ($query) {
+    $view = new View();
+	$userData = $query->select('history', ['usernameUser' => $user, 'ishide' => false]);
+    $driverData = $query->select('history', ['usernameDriver' => $user, 'ishide' => false]);
+    
+    $view->assign('user', $user);
+    $view->assign('title', 'History');
+    $view->assign('image', IMG);
+    $view->assign('historyUser', $userData);
+    $view->assign('historyDriver', $driverData);
+    $view->assign('script', JS . "history.js?time=" . date("H:i:s"));
+
+    $view->render(__DIR__ . '/History.view.php');
+});
+
+Route::add('/history/#user/update/#driver/#date', function($user, $driver, $date) use ($query) {
+    $query->transaction(function() use ($query, $user, $driver, $date) {
+        $query->update('history', ['ishide' => 1], ['usernameUser' => $user, 'usernameDriver' => $driver, 'dateOrder' => $date]);
+    });
+    header('Location: /history/' . $user);
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/History/History.view.php b/Tubes1/src/app/Menu/History/History.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a3b9c43c40dae4c185e963e64a898051f34ce85
--- /dev/null
+++ b/Tubes1/src/app/Menu/History/History.view.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace MotaRaido\Menu\Profile;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<?php echo $this->header; ?>
+<div class="subtitle-cont subtitle-history">
+    TRANSACTION HISTORY
+</div>
+  <div class="body-container">
+    <div class='menu'>
+      <div class="menu-column"></div>
+      <div class="menu-column"></div>
+      <div id="user-his" class="menu-cell" onclick="tabActive('user');">MY PREVIOUS ORDERS</div>
+      <div id="driver-his" class="menu-cell" onclick="tabActive('driver');">DRIVER HISTORY</div>
+    </div>
+  </div>
+
+  <div id="history-container">
+		<ol class="history-list order-list">
+		<?php foreach($this->historyUser as $history): ?>
+			<li class="list-text-his">
+				<div class="history-pic-div">
+					<img class="profile-pic-his" src=<?php echo $this->image . $history[1]; ?> alt="">
+				</div>
+				<span class="hide">
+				<a href=<?php echo "/history/". $history[0] . "/update/" . $history[1] . "/" . rawurlencode($history[4]); ?>>HIDE</a>
+				</span>
+				<div class="his-text">
+					<div class="date-his"><?php echo htmlentities($history[4]); ?></div>
+					<div class="name-his"><b><?php echo $history[1]; ?></b></div>
+					<div><?php echo $history[5]; ?> - <?php echo $history[6]; ?></div>
+					<div>
+						You rated : ★<?php echo $history[2]; ?>
+					<div>
+					<div>
+						You commented:
+						<div class="comment">
+							<?php echo $history[3]; ?>
+						</div>
+					</div>
+				</div>
+			</li>
+		<?php endforeach; ?>
+		</ol>
+
+		<ol class="history-list driver-list">
+		
+		<?php foreach($this->historyDriver as $history): ?>
+			<li class="list-text-his">
+				<div class="history-pic-div">
+					<img class="profile-pic-his" src=<?php echo $this->image . $history[0]; ?> alt="" />
+				</div>
+				<span class="hide">
+				<a href=<?php echo "/history/". $history[0] . "/update/" . $history[1] . "/" . rawurlencode($history[4]); ?>>HIDE</a>
+				</span>
+				<div class="his-text">
+					<div class="date-his"><?php echo $history[4]; ?></div>
+					<div><b><?php echo $history[0]; ?></b></div>
+					<div><?php echo $history[5]; ?> - <?php echo $history[6]; ?></div>
+					<div>
+						gave <span><?php echo $history[2]; ?></span> stars for this order
+					<div>
+					<div>
+						and left comment:
+						<div class="comment">
+							<?php echo $history[3]; ?>
+						</div>
+					</div>
+				</div>
+			</li>
+		<?php endforeach; ?>
+		</ol>
+	</div>
+	<script src=<?php echo $this->script; ?>></script>
+<?php echo $this->footer; ?>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Order/CompleteOrder.routes.jsp b/Tubes1/src/app/Menu/Order/CompleteOrder.routes.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/app/Menu/Order/CompleteOrder.routes.php b/Tubes1/src/app/Menu/Order/CompleteOrder.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..83ca30f5aeb748f0f7db154660fe70b9af09e7bd
--- /dev/null
+++ b/Tubes1/src/app/Menu/Order/CompleteOrder.routes.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace MotaRaido\Menu\Order;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/order/#user/completeorder', function($user) use ($query) {
+    $driver = $_POST['driver-username'];
+    $from = $_POST['pickLoc'];
+    $dest = $_POST['dest'];
+    $driverInfo = $query->select('user',['username' => $driver]);
+    $view = new View();
+    $view->assign('title', 'Complete Order');
+    $view->assign('image', IMG . $driver);
+    $view->assign('from', $from);
+    $view->assign('dest', $dest);
+    $view->assign('user', $user);
+    $view->assign('driver', $driver);
+    $view->assign('drivername', $driverInfo[0][2]);
+
+    $view->render(__DIR__ . '/CompleteOrder.view.php');
+
+});
+
+Route::add('/order/#user/completeorder/finish', function($user) use ($query) {
+    $query->transaction(function() use ($query,$user) {
+        header('Location: /order/' . $user);
+        $name = $_POST['driver'];
+        $rating = $_POST['rating'];
+        $comment = $_POST['comment'];
+        $from = $_POST['from'];
+        $dest = $_POST['dest'];
+        $query->insert('history', ['usernameUser' => $user, 'usernameDriver' => $name, 'rating' => $rating, 'comment' => $comment, 'dateOrder' => date("Y-m-d H:i:s"), 'pickup' => $from, 'destination' => $dest, 'ishide' => 0]);
+
+    });
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Order/CompleteOrder.view.jsp b/Tubes1/src/app/Menu/Order/CompleteOrder.view.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/app/Menu/Order/CompleteOrder.view.php b/Tubes1/src/app/Menu/Order/CompleteOrder.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e68ef08087c512a180fa18247af1e06737c0bcf
--- /dev/null
+++ b/Tubes1/src/app/Menu/Order/CompleteOrder.view.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace MotaRaido\Menu\Order;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<?php echo $this->header; ?>
+<div class="edit-profile-header">
+    Make an order       
+</div>
+<div class="progress-container">
+    <div class="progress">
+        <div class="progress-num">1</div> Select Destination
+    </div>
+    <div class="progress">
+        <div class="progress-num">2</div> Select a driver
+    </div>
+    <div class="progress selected">
+        <div class="progress-num selected">3</div> Complete your order
+    </div>
+</div>
+<div class="edit-profile-header">
+    How was it?
+</div>
+<form action="/order/<?php echo $this->user; ?>/completeorder/finish" method="post" name="completeorder-form">
+    <div class="completeorder-container">
+    <input type='hidden' name='driver' value='<?php echo $this->driver; ?>'>
+    <input type='hidden' name='from' value='<?php echo $this->from; ?>'>
+    <input type='hidden' name='dest' value='<?php echo $this->dest; ?>'>
+    <img class="driver-completeorder-pic" src="<?php echo $this->image; ?>" alt="">
+    <div class="driver-name-disp">@<?php echo $this->driver; ?></div>
+    <div class="driver-fullname-disp"><?php echo $this->drivername; ?></div>
+    <span class="starRating">
+      <input id="rating5" type="radio" name="rating" value="5">
+      <label for="rating5">5</label>
+      <input id="rating4" type="radio" name="rating" value="4">
+      <label for="rating4">4</label>
+      <input id="rating3" type="radio" name="rating" value="3">
+      <label for="rating3">3</label>
+      <input id="rating2" type="radio" name="rating" value="2">
+      <label for="rating2">2</label>
+      <input id="rating1" type="radio" name="rating" value="1">
+      <label for="rating1">1</label>
+    </span>
+    <textarea cols="5" placeholder="Your comment..." name="comment"></textarea>
+    </div>
+    <div class="right-align">
+        <input class="accept-button select-driver-btn completeorder-btn" type="submit" value="Complete&#13;&#10;Order">
+    </div>
+
+</form>
+
diff --git a/Tubes1/src/app/Menu/Order/Order.routes.jsp b/Tubes1/src/app/Menu/Order/Order.routes.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/app/Menu/Order/Order.routes.php b/Tubes1/src/app/Menu/Order/Order.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..91a33e6e0884f4ed6a1007689e93a32066cff690
--- /dev/null
+++ b/Tubes1/src/app/Menu/Order/Order.routes.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace MotaRaido\Menu\Order;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/order/#user', function($user) use ($query) {
+    $query->transaction(function() use ($query, $user) {
+        $view = new View();
+        $view->assign('title', 'Order');
+        $view->assign('user', $user);
+        $view->render(__DIR__ . '/Order.view.php');
+    }); 
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Order/Order.view.jsp b/Tubes1/src/app/Menu/Order/Order.view.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/app/Menu/Order/Order.view.php b/Tubes1/src/app/Menu/Order/Order.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..00acb52f023c3f5c2ef6704d86c544a4111e119c
--- /dev/null
+++ b/Tubes1/src/app/Menu/Order/Order.view.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace MotaRaido\Menu\Order;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+
+<div class="container">
+    <div class="edit-profile-header">
+        Make an order       
+    </div>
+    <div class="progress-container">
+        <div class="progress selected">
+            <div class="progress-num">1</div> Select Destination
+        </div>
+        <div class="progress">
+            <div class="progress-num">2</div> Select a driver
+        </div>
+        <div class="progress">
+            <div class="progress-num">3</div> Complete your order
+        </div>
+    </div>
+    <form action=<?php echo "/order/" . $this->user . "/selectdriver"; ?>  method='post'>
+        <div class="edit-profile-btm">
+            <div class="form-input">
+                <label for="pick-point">Picking point</label>
+                <input class="ep-textarea" type="text" name="pick-point" />
+            </div>
+            <div class="form-input">
+                <label for="destination">Destination</label>
+                <input class="ep-textarea" type="text" name="destination" />
+            </div>
+            <div class="form-input">
+                <label for="pref-driver">Preferred Driver</label>
+                <input class="ep-textarea" type="text" name="pref-driver" placeholder="(Optional)"/>
+            </div>
+            <div class="right-align">
+                <input class="accept-button select-driver-btn" id="save-profile" type="submit" value="Next" />
+            </div>
+        </div>
+    </form>
+</div>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Order/SelectDriver.routes.jsp b/Tubes1/src/app/Menu/Order/SelectDriver.routes.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/app/Menu/Order/SelectDriver.routes.php b/Tubes1/src/app/Menu/Order/SelectDriver.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..cdf52521f4757dd9081d145b1a3b4028d7eb4735
--- /dev/null
+++ b/Tubes1/src/app/Menu/Order/SelectDriver.routes.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace MotaRaido\Menu\Order;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/order/#user/selectdriver', function($user) use ($query) {
+    $view = new View();
+    $view->assign('title', 'Select Driver');
+    $view->assign('script', JS . 'selectdriver.js');
+    $view->assign('user', $user);
+    $view->assign('image', IMG);
+
+    $pickLoc = $_POST['pick-point'];
+    $dest = $_POST['destination'];
+    $prefDriver = $_POST['pref-driver'];
+    $driverList = $query->select('preferredloc',[]);
+    $ratingDat = $query->select('history',[]);
+    $driverName = $query->select('user', []);
+    
+    $driverPrefLoc = array();
+    $preferredDriver = '';
+    $count = 0;
+    foreach($driverList as $driver) {
+        if(!strcasecmp($driver[0],$prefDriver) && $driver[0] !== $user) {
+            $preferredDriver = $driver[0];
+        } else {
+            if (($driver[1] === $pickLoc || $driver[1] === $dest) && !in_array($driver[0],$driverPrefLoc) && $driver[0] !== $user) {
+                    $driverPrefLoc[$count] = $driver[0];
+                    $count++;
+            }
+        }
+    }
+
+    EmbedJS($driverPrefLoc, $ratingDat, $driverName, $user, $preferredDriver, $pickLoc, $dest);
+    print_r($jsDriverArr);
+    $view->render(__DIR__ . '/SelectDriver.view.php');
+});
+
+function EmbedJS($driverArr, $ratingArr, $driverNameArr, $user, $prefDriver, $pickLoc, $dest) {
+    $jsRatingArr = json_encode($ratingArr);
+    $jsDriverArr = json_encode($driverArr);
+    $jsDriverNameArr = json_encode($driverNameArr);
+    $jsUser = json_encode($user);
+    $jsPrefDriver = json_encode($prefDriver);
+    $jsPickLoc = json_encode($pickLoc);
+    $jsDest = json_encode($dest);
+    echo "<script>";
+    echo "var driverArr = $jsDriverArr;";
+    echo "var ratingArr = $jsRatingArr;";
+    echo "var driverNameArr = $jsDriverNameArr;";
+    echo "var user = $jsUser;";
+    echo "var preferredDriver = $jsPrefDriver;";
+    echo "var pickLoc = $jsPickLoc;";
+    echo "var dest = $jsDest;";
+    echo "</script>";
+}
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Order/SelectDriver.view.jsp b/Tubes1/src/app/Menu/Order/SelectDriver.view.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/app/Menu/Order/SelectDriver.view.php b/Tubes1/src/app/Menu/Order/SelectDriver.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..b0420cca0dcb2b575420a8a8599951c4bd066836
--- /dev/null
+++ b/Tubes1/src/app/Menu/Order/SelectDriver.view.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace MotaRaido\Menu\Order;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<?php echo $this->header; ?>
+<div class="edit-profile-header">
+    Make an order       
+</div>
+<div class="progress-container">
+    <div class="progress">
+        <div class="progress-num">1</div> Select Destination
+    </div>
+    <div class="progress selected">
+        <div class="progress-num">2</div> Select a driver
+    </div>
+    <div class="progress">
+        <div class="progress-num">3</div> Complete your order
+    </div>
+</div>
+<div id="pref-driver" class="select-driver">
+    <div class= "selectdriver-header">
+        Preferred Drivers:
+    </div>
+    </div>
+<div id="other-driver" class="select-driver">
+    <div class="selectdriver-header">
+        Other Drivers:
+    </div>
+</div>
+<script src="<?php echo $this->script; ?>"></script>
diff --git a/Tubes1/src/app/Menu/Profile/EditPrefLoc.routes.php b/Tubes1/src/app/Menu/Profile/EditPrefLoc.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..f16bc9489ffb2a26a2671a2f1136c6c0a1ab54e9
--- /dev/null
+++ b/Tubes1/src/app/Menu/Profile/EditPrefLoc.routes.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace MotaRaido\Menu\Profile;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/preferred-loc/#user', function($user) use ($query) {
+    $view = new View();
+    $view->assign('title', 'Edit Preferred Location');
+    $view->assign('user', $user);
+    $prefLoc = $query->select('preferredloc', ['username' => $user]);
+    $view->assign('prefLoc', $prefLoc);
+    $view->render(__DIR__ . '/EditPrefLoc.view.php');
+});
+
+Route::add('/preferred-loc/#user/finish', function($user) use ($query) {
+    $query->transaction(function() use ($query, $user) {
+        $location = $_POST['location'];
+        $query->insert('preferredloc', array('username' => $user, 'location' => $location));
+        header('Location: /preferred-loc/' . $user);
+    });
+});
+
+Route::add('/preferred-loc/#user/edit', function($user) use ($query) {
+    $query->transaction(function() use ($query, $user) {
+        $location_new = $_POST['location_new'];
+        $location_old = $_POST['location_old'];
+        $query->update('preferredloc', array('location' => $location_new), array('username' => $user, 'location' => $location_old));
+        header('Location: /preferred-loc/' . $user);
+    });
+});
+
+
+Route::add('/preferred-loc/#user/delete/#location', function($user, $location) use ($query) {
+    $query->transaction(function() use ($query, $user, $location) {
+        $query->delete('preferredloc', array('username' => $user, 'location' => $location));
+        header('Location: /preferred-loc/' . $user);
+    });
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Profile/EditPrefLoc.view.php b/Tubes1/src/app/Menu/Profile/EditPrefLoc.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..b891a277bb0b8d156beb7746d50444c386e5040f
--- /dev/null
+++ b/Tubes1/src/app/Menu/Profile/EditPrefLoc.view.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace MotaRaido\Menu\Profile;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<div class="container">
+    <h1 class="header"><?php echo $this->title; ?></h1>
+    <form action=<?php echo '/preferred-loc/' . $this->user . '/edit'; ?> method="post">
+        <table style="width:100%">
+        <tr>
+            <th>No</th>
+            <th>Location</th> 
+            <th>Actions</th>
+        </tr>
+        <?php
+            $count = 0;
+            foreach($this->prefLoc as $loc) {
+                $count = $count + 1;
+                echo "<tr class='rows'>";
+                echo "<td id='count'>" . $count . "</td>";
+                echo "<td><div name='location'>" . $loc['location'] . "</div></td>";
+                echo "<td id='action'><img class=\"pref-button\" name=\"edit-button\" src='" .  IMG . "/edit.png' /><a href='/preferred-loc/" . $this->user . "/delete/" . $loc['location'] . "'><img class=\"pref-button\" src='" . IMG . "/delete.png' /></td></a>";
+                echo "</tr>";
+            }
+        ?>
+        </table>
+    </form>
+    <form action=<?php echo '/preferred-loc/' . $this->user . '/finish'; ?> method='post' enctype="multipart/form-data">
+        <div class="edit-profile-btm">
+            <h2 class="header">Add new Location:</h2>
+            <div class="form-input">
+                <input type="text" id="next-button-text" name="location" />
+                <input class="next-button" type="submit" value="Add" />
+            </div>
+        </div>
+    </form>
+</div>
+<script>
+    var edit = Array.prototype.slice.call(document.getElementsByName('edit-button'));
+    var locs = document.getElementsByName('location');
+    var rows = document.getElementsByClassName('rows');
+
+    edit.map(function(x, i) {
+        var loc = locs[i].innerHTML;
+        x.addEventListener('click', function (event) {
+            event.preventDefault();
+            rows[i].cells[1].innerHTML = '<input type="text" name="location_new" value="' + loc + '" /><input type="hidden" name="location_old" value="' + loc +  '"/>';
+            rows[i].cells[2].innerHTML = '<input type="submit" value="Save" />';
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Profile/EditProfile.routes.php b/Tubes1/src/app/Menu/Profile/EditProfile.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..6879e668b63020cc81535a6e844007351552d0e8
--- /dev/null
+++ b/Tubes1/src/app/Menu/Profile/EditProfile.routes.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace MotaRaido\Menu\Profile;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/editprofile/#user', function($user) use ($query) {
+    $view = new View();
+    $view->assign('title', 'Edit Profile');
+    $view->assign('image', IMG . $user);
+    $view->include('header', APPDIR . '/Menu/Header.php');
+    
+    $usrData = $query->select('user', ['username' => $user]);
+    $view->assign('user', $user);
+    $view->assign('name', $usrData[0][2]);
+    $view->assign('phone', $usrData[0][3]);
+    if($usrData[0][4]){
+        $view->assign('isDriver', 'checked');
+    }
+
+    $view->render(__DIR__ . '/EditProfile.view.php');
+});
+
+Route::add('/editprofile/#user/finish', function($user) use ($query) {
+    $query->transaction(function() use ($query,$user) {
+        $name = $_POST['your-name'];
+        $phone = $_POST['phone-number'];
+        $isDriver = $_POST['is-driver'];
+        $image = $_FILES['image'];
+        $driverValue = isset($isDriver) ? 1 : 0;
+        header('Location: /profile/' . $user);
+        $query->update('user', ['fullname' => $name,'phone' => $phone, 'isDriver' => $driverValue], ['username' => $user]);
+        if(!empty($image['name'])){
+            $image['name'] = $user;
+            $target = $_SERVER['DOCUMENT_ROOT'] . IMG . basename($image['name']);
+            if (move_uploaded_file($image['tmp_name'], $target)) {
+                echo "File is valid, and was successfully uploaded.\n";
+            } else {
+                echo 'Failed to upload file\n';
+            }
+        }
+    });
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Profile/EditProfile.view.php b/Tubes1/src/app/Menu/Profile/EditProfile.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b6bbf0dc1fc2be8568b5bc1c4633188671b0325
--- /dev/null
+++ b/Tubes1/src/app/Menu/Profile/EditProfile.view.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace MotaRaido\Menu\Profile;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+
+<?php echo $this->header; ?>
+<div class="edit-profile-container">
+    <form action='/editprofile/<?php echo $this->user; ?>/finish' method='post' onsubmit="return editProfileValidation();" enctype="multipart/form-data" name="editprofile-form">
+        <h1 class="edit-profile-header">Edit Profile Information</h1>
+            <img id="profile-pic" src="<?php echo $this->image; ?>" alt="">
+            <div class="img-chooser">
+            <p>Update profile picture</p>
+            <input type="file" name="image" accept="image/jpeg, image/png">
+        </div>
+        <div class="edit-profile-btm">
+            <div class="form-editprofile">
+                <label for="your-name">Your Name</label>
+                <input class="ep-textarea" type="text" name="your-name" value="<?php echo $this->name; ?>">
+            </div>
+            <div class="form-editprofile">
+                <label for="phone-number">Phone</label>
+                <input class="ep-textarea" type="text" name="phone-number" value="<?php echo $this->phone; ?>">
+            </div>
+            <div class="button-form">
+                <div>
+                    Status driver
+                </div>
+                <label class="switch">
+                    <input type="checkbox" name="is-driver" <?php echo $this->isDriver; ?>>
+                    <span class="slider round"></span>
+                </label>
+            </div>
+            <a href='/profile/<?php echo $this->user; ?>'><input class="cancel-button" value="Back"></a>
+            <input class="accept-button" id="save-profile" type="submit" value="Save">
+        </div>
+    </form>
+</div>
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Profile/Profile.routes.php b/Tubes1/src/app/Menu/Profile/Profile.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..8bd76c414947bdde5e17a463f91a2b321cd38b14
--- /dev/null
+++ b/Tubes1/src/app/Menu/Profile/Profile.routes.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace MotaRaido\Menu\Profile;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/profile/#user', function($user) use ($query) {
+    $view = new View();
+    $view->assign('title', 'Profile');
+    $view->assign('user', $user);
+    $view->assign('image', IMG . $user);
+    $view->assign('edit', IMG . 'pen.png');
+    $view->include('header', APPDIR . '/Menu/HeaderWithMenu.php');
+    
+    $usrData = $query->select('user', ['username' => $user]);
+    $ratingData = $query->select('history', ['usernameDriver' => $user]);
+    $preferredLoc = $query->select('preferredloc', ['username' => $user]);
+
+    $view->assign('username', $usrData[0][0]);
+    $view->assign('name', $usrData[0][2]);
+    $view->assign('phone', $usrData[0][3]);
+    if($usrData[0][4]){
+        $view->assign('isdriver', 'Driver');
+    }
+    $view->assign('email', $usrData[0][5]);
+    if ($ratingData)
+    {
+        $count = 0;
+        $amount = 0;
+        foreach($ratingData as $rating) {
+            $amount += $rating[2];
+            $count++;
+        }
+    
+    	$view->assign('rating', $amount / $count);
+    	$view->assign('votes', $count);
+    }
+    if (count($preferredLoc) != 0)
+    {
+        $view->assign('preferredloc', $preferredLoc);
+    }
+    else
+    {
+        $view->assign('preferredloc', []);
+    }
+    $view->render(__DIR__ . '/Profile.view.php');
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/Menu/Profile/Profile.view.php b/Tubes1/src/app/Menu/Profile/Profile.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..bbfa6fdcc3d0821b71399934a41afa79f670155e
--- /dev/null
+++ b/Tubes1/src/app/Menu/Profile/Profile.view.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace MotaRaido\Menu\Profile;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<?php echo $this->header ?>
+<div id="info-profile">
+	<div class="subtitle-cont">
+	  <div class="subtitle-profile">
+	    MY PROFILE
+	  </div>
+		<a href="/editprofile/<?php echo $this->user; ?>" >
+			<div id="edit-pen-div">
+				<img class="edit-pen" src=<?php echo $this->edit; ?>>
+			</div>
+		</a>
+	</div>
+	<div id="profile-pic-div">
+	  <img class="profile-picture" src=<?php echo $this->image; ?>>
+	</div>
+	<div id="info-text">
+	  <ol id="list-info">
+	    <li><b><?php echo $this->username; ?></b></li>
+	    <li><?php echo $this->name; ?></li>
+			<?php if($this->isdriver == 'Driver'): ?>
+	    	<li><?php echo $this->isdriver; ?> | <?php for($i = 0; $i<floor($this->rating); $i++) { echo "★"; } ?> (<?php echo $this->rating; ?> rating from <?php echo $this->votes; ?> votes)</li>
+			<?php endif; ?>
+	    <li><?php echo $this->email; ?></i></li>
+	    <li><?php echo $this->phone; ?></i></li>
+	  </ol>
+	</div>
+</div>
+<div>
+	<div class="subtitle-cont">
+	<?php if($this->isdriver == 'Driver'): ?>
+	  <div id="prefer-loc-title" class="subtitle-profile">
+	    PREFERRED LOCATIONS:
+	  </div>
+		<a href="/preferred-loc/<?php echo $this->user; ?>">
+			<div id="edit-pen-div">
+				<img class="edit-pen" src=<?php echo $this->edit; ?>>
+			</div>
+		</a>
+	</div>
+		<?php foreach ($this->preferredloc as $loc): ?>
+			<div id="info-pref-text">
+			  <span class="loc-list"><?php echo "  " . $loc[1] ?><span>
+			</div>
+		<?php endforeach; ?>
+	<?php endif; ?>
+</div>
+<?php echo $this->footer; ?>
\ No newline at end of file
diff --git a/Tubes1/src/app/SignUp/Signup.routes.php b/Tubes1/src/app/SignUp/Signup.routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..f77ab5b6a59bdc2aaa5b2e0f52b769940dc0fc60
--- /dev/null
+++ b/Tubes1/src/app/SignUp/Signup.routes.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace MotaRaido\SignUp;
+
+use \MotaRaido\Core\View;
+use \MotaRaido\Core\Route;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+Route::add('/signup', function() {
+    $view = new View();
+    $view->assign('title', 'Sign Up');
+    $view->assign('style', CSS . "style.css");
+    $view->assign('profileStyle', CSS . "profile.css");
+    $view->assign('script', JS . "signup.js?time=" . date("H:i:s"));
+    $view->render(__DIR__ . '/SignUp.view.php', false);
+
+});
+
+Route::add('/signup/validation', function() use ($query) {
+	// header('Location: /signup');
+	$query->transaction(function() use ($query) {
+		$username = $_GET['username'];
+		if ($_GET['password'] === $_GET['confirm-password'])
+			$password = $_GET['password'];
+		else
+			$password = null;
+		$email = $_GET['email'];
+		$fullname = $_GET['your-name'];
+		$phone = $_GET['phone-number'];
+		$isdriver = isset($_GET['driver']) ? 1 : 0;
+	
+		$ratingArray['username'] = $_GET['username'];
+		$ratingArray['rating'] = 0;
+		$ratingArray['votes'] = 0;
+		$ratingArray['numrat'] = 0;
+
+		$datauser = $query->select('user', ['username' => $username]);
+		
+		$preferredlocArray['username'] = $_GET['username'];
+		if ($password != null && count($datauser) == 0)
+		{
+			$query->insert('user', ['username' => $username, 'password'=> $password, 'email' => $email, 'fullname' => $fullname, 'phone' => $phone, 'isdriver' => $isdriver]);
+			$query->insert('rating', $ratingArray);
+			$query->insert('preferredloc', $preferredlocArray);
+			header('Location: /profile/' . $username);
+		}		
+	});
+});
+
+Route::add('/validation', function() use ($query) {	
+	if(isset($_GET['email']))
+	{
+		$email = $_GET['email'];
+		$emailData = $query->select('user', ['email' => $email]);
+		$found = count($emailData) !== 0;
+	}
+	else if(isset($_GET['username']))
+	{
+		$username = $_GET['username'];
+		$usrData = $query->select('user', ['username' => $username]);
+		$found = count($usrData) !== 0;
+	}
+
+	if($found) {
+		print_r('Failed');
+	} else {
+		print_r('OK');
+	}
+	
+});
\ No newline at end of file
diff --git a/Tubes1/src/app/SignUp/Signup.view.php b/Tubes1/src/app/SignUp/Signup.view.php
new file mode 100644
index 0000000000000000000000000000000000000000..39a4ed288c229987aced0a84cd748978d82612eb
--- /dev/null
+++ b/Tubes1/src/app/SignUp/Signup.view.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace MotaRaido\SignUp;
+
+if (!defined('MOTAFW')) 
+{
+    echo 'This file can only be called via the main index.php file, and not directly';
+    exit();
+}
+
+?>
+
+<section class="content-layout">
+  <header class="title">
+    <div>
+      <hr>
+      <h1><?php echo $this->title; ?></h1>
+      <hr>
+    </div>
+  </header>
+  <section class="form-layout">
+    <form action="/signup/validation" method="get" name="signupform" onsubmit="return signupValidation()">
+      <div class="form-input">
+        <div>Your Name</div>
+        <input id="your-name" type="text" name="your-name">
+      </div>
+      <div class="form-input checked-input">
+        <div>Username</div>
+        <input id="username" type="text" name="username" onKeyUp="checkData('username','username-check')">
+        <span id="username-check"></span>
+      </div>
+      <div class="form-input checked-input">
+        <div>Email</div>
+        <input id="email" type="text" name="email" onKeyUp="checkData('email','email-check')">
+        <span id="email-check"></span>
+      </div>
+      <div class="form-input">
+        <div>Password</div>
+        <input id="password" type="password" name="password">
+      </div>
+      <div class="form-input">
+        <div>Confirm Password</div>
+        <input id="confirm-password" type="password" name="confirm-password">
+      </div>
+      <div class="form-input">
+        <div>Phone Number</div>
+        <input id="phone" type="text" name="phone-number">
+      </div>
+      <div class="driver-checkbox">
+        <input id="isdriver" type="checkbox" name="driver">
+        <div>Also sign me up as a driver!</div>
+      </div>
+      <div id="button-layout">
+        <div>
+          <a href="/login">Already have an account</a>
+        </div>
+        <input id="register-button" type="submit" value="Register">
+      </div>
+    </form>
+  </section>
+</section>
\ No newline at end of file
diff --git a/Tubes1/src/index.php b/Tubes1/src/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..a58148aefd8f923b59ebc43d02cae300f41faa9d
--- /dev/null
+++ b/Tubes1/src/index.php
@@ -0,0 +1,27 @@
+<?php
+    session_start();
+    define("MOTAFW", true);
+    define("APPDIR", __DIR__ . '/app/');
+    define("PUBLICDIR", '/public/');
+    define("CSS", PUBLICDIR . 'css/');
+    define("JS", PUBLICDIR . 'js/');
+    define("IMG", PUBLICDIR . 'img/');
+
+    require_once __DIR__ . '/vendor/autoload.php';
+
+    use \MotaRaido\Core\Config;
+    use \MotaRaido\Core\Database\Connector;
+    use \MotaRaido\Core\Database\Query;
+
+    $query = new Query(new Connector(Config::get('database')));
+    
+    // include all routes
+    $dir = new RecursiveDirectoryIterator(APPDIR);
+    $iter = new RecursiveIteratorIterator($dir);
+    $files = new RegexIterator($iter, '/^.+\.routes\.php$/', RecursiveRegexIterator::GET_MATCH); // an Iterator, not an array
+
+    foreach ( $files as $file ) {
+        foreach($file as $route_file) {
+            require_once $route_file;
+        }
+    }
diff --git a/Tubes1/src/public/css/.gitkeep b/Tubes1/src/public/css/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/public/css/fonts/geo.woff2 b/Tubes1/src/public/css/fonts/geo.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4c1d8680a68afc90ed228ae5c313f9002255b7b2
Binary files /dev/null and b/Tubes1/src/public/css/fonts/geo.woff2 differ
diff --git a/Tubes1/src/public/css/fonts/mukta1.woff2 b/Tubes1/src/public/css/fonts/mukta1.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..dfa6d95388c06078e73dc1ccc0df0cdd8c152c4b
Binary files /dev/null and b/Tubes1/src/public/css/fonts/mukta1.woff2 differ
diff --git a/Tubes1/src/public/css/fonts/mukta2.woff2 b/Tubes1/src/public/css/fonts/mukta2.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ed0d8a0451ef90b479b036e337f741573dfa55bb
Binary files /dev/null and b/Tubes1/src/public/css/fonts/mukta2.woff2 differ
diff --git a/Tubes1/src/public/css/fonts/mukta3.woff2 b/Tubes1/src/public/css/fonts/mukta3.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..b6d906226264df96ac57ba02427ae5043bfd031f
Binary files /dev/null and b/Tubes1/src/public/css/fonts/mukta3.woff2 differ
diff --git a/Tubes1/src/public/css/profile.css b/Tubes1/src/public/css/profile.css
new file mode 100644
index 0000000000000000000000000000000000000000..7bf19a4f7d989ea396720a3c92bd8cb9cce368d7
--- /dev/null
+++ b/Tubes1/src/public/css/profile.css
@@ -0,0 +1,154 @@
+.profile-picture {
+  width: 150px;
+  height: 150px;
+  border: 5px solid black;
+  float: left;
+  border-radius: 500px;
+  clear: both;
+}
+
+#info-profile {
+  margin: 20px 0px;
+  height: auto;
+}
+
+.edit-pen {
+  float: right;
+  height: 30px;
+
+}
+
+.subtitle-profile {
+  float: left;
+  width: 200px;
+  font-size: 2em;
+  font-weight: bold;
+  font-family: 'Mutka', sans-serif;
+}
+
+#profile-pic-div {
+  margin: auto;
+  width: 160px;
+  height: 160px;
+}
+
+#edit-pen-div {
+  margin: auto;
+  height: auto;
+}
+
+.subtitle-cont {
+  margin-bottom: 20px;
+  height: 37px;
+}
+
+#info-text {
+  margin: auto;
+  font-size: 1.2em;
+}
+
+#list-info {
+  list-style: none;
+  text-align: center;
+  padding: 0px;
+}
+
+#prefer-loc-title {
+  font-size: 1.5em;
+  width: 400px;
+}
+
+.fa-star-o{
+  color: red;
+}
+
+#info-pref-text {
+  font-size: 1.2em;
+}
+
+.subtitle-history {
+  float: left;
+  font-size: 2em;
+  font-weight: bold;
+  font-family: 'Mutka', sans-serif;
+  margin-top: 20px; 
+}
+
+.history-pic-div {
+  width: 120px;
+  height: 120px;
+  margin: 0px 20px;
+  float: left;
+}
+
+.profile-pic-his {
+  width: 110px;
+  height: 110px;
+  border: 1px solid black;
+  float: left;
+}
+
+.history-list {
+  margin-top: 20px;
+  list-style: none;
+  padding: 0px;
+  height: auto;
+}
+
+.order-list {
+  display: none;
+}
+
+.driver-list {
+  display: none;
+}
+
+.active-list {
+  display:block;
+}
+
+.comment {
+  margin-left: 180px;
+}
+
+.hide{
+  width: auto;
+  padding: 10px 15px;
+  border: 1px solid black;
+  border-radius: 10px;
+  background-color: red;
+  position: absolute;
+  right: 0;
+}
+
+.his-text>span {
+  display: inline-block;
+}
+
+.list-text-his {
+  height: auto;
+  position: relative;
+  clear: both;
+}
+
+.date-his {
+  color: gray;
+}
+
+.name-his {
+  font-size: 1.2em;
+}
+
+.tab-active {
+  display: block;
+}
+
+.active {
+  color: #ffffff;
+  border-color: #000000;
+  background-color: #5A1E83;
+}
+
+.hide-element {
+  display: none;
+}
\ No newline at end of file
diff --git a/Tubes1/src/public/css/style.css b/Tubes1/src/public/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..ae7bb6a41858edde4cdc42187c4481c84a4a3473
--- /dev/null
+++ b/Tubes1/src/public/css/style.css
@@ -0,0 +1,628 @@
+@charset "UTF-8";
+
+body {
+  width: 470px;
+  margin: auto;
+  font-family: 'Mutka', sans-serif;
+}
+
+textarea {
+  resize: none;
+  width: 100%;
+  margin-bottom: 10px;
+}
+
+/* Order Header */
+  .progress-container {
+    width: fit-content;
+    border-collapse:separate;
+    border-spacing: 10px 10px;
+    display: table;
+  }
+
+  .progress {
+    width: 30%;
+    height: 50px;
+    font-size: 105%;
+    border: 1px solid black;
+    text-align: left;
+    vertical-align: middle;
+    display: table-cell;
+  }
+
+  .progress-num {
+    display:inline-block;
+    background-color: #DDD;
+    width: 35px;
+    height: 35px;
+    border-radius: 100%;
+    margin: 0px 5px;
+    line-height: 200%;
+    text-align: center;
+    vertical-align: middle;
+    float: left;
+  }
+
+  .selected {
+    background-color: #FFFF44;
+  }
+
+/* Header style */
+
+.header-box {
+  height: fit-content content-box;
+  width: fit-content content-box;
+  margin-left: auto;
+  margin-right: auto;
+  margin-top: none;
+  margin-bottom: none;
+  font-family: 'Mutka', sans-serif;
+  column-count: 2;
+  -moz-column-count: 2;
+  -webkit-column-count: 2;
+  -webkit-column-span: all; /* Chrome, Safari, Opera */
+  column-span: all;
+  column-gap: 40px;
+}
+
+.col-header-left {
+  width: 50% content-box;
+  float: left;
+  vertical-align: middle;
+}
+
+.logo-title {
+  font-family: 'Geo', sans-serif;
+  font-weight: bold;
+  font-size: 250%;
+  color: #5A1E83;
+}
+
+.tagline {
+  color: #311B92;
+}
+
+.col-header-right {
+  width: 50% content-box;
+  float: right;
+  text-align: right;
+  vertical-align: middle;
+  line-height: 2;
+}
+
+/* Menu style */
+
+.menu {
+  width: 100%;
+  display: table;
+  table-layout: fixed;
+}
+
+.menu > div.menu-column {
+  display: table-column;
+}
+
+.menu > div.menu-cell {
+  display: table-cell;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+  line-height: 50px;
+  text-align: center;
+  font-weight: bold;
+  border-style: solid;
+  border-width: 1px;
+}
+
+.menu > div:hover, .menu > div.selected {
+  color: #ffffff;
+  border-color: #000000;
+  background-color: #5A1E83;
+}
+
+/* Footer style */
+.footer {
+  column-count: 3;
+  -moz-column-count: 3;
+  -webkit-column-count: 3;
+  -webkit-column-span: all;
+  column-span: all;
+  -moz-column-gap: 2em;
+  -webkit-column-gap: 2em;
+  column-gap: 1.5em;
+  column-rule-style: solid;
+  border-style: solid;
+  border-width: 2px;
+}
+
+.footer > div {
+  width: fit-content content-box;
+  text-align: center;
+  font-weight: bold;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+}
+
+.img-chooser {
+  padding-top: 20px;
+}
+
+.text-link {
+  text-decoration: none;
+  font-size: 120%;
+  font-weight: bold;
+  color: black;
+}
+
+
+
+/* Container */
+.container {
+  width: inherit;
+}
+
+.header {
+  line-height: 1.5;
+  text-transform: uppercase;
+}
+
+.selectdriver-header {
+  text-transform: uppercase;
+  font-weight: bold;
+}
+
+.edit-profile-container {
+  font-family: Verdana;
+}
+
+.edit-profile-header {
+  text-transform: uppercase;
+  font-weight: bold;
+  width: 100%;
+  font-size: 170%;
+}
+
+.edit-profile-btm {
+  clear: both;
+}
+
+.form-editprofile{
+  margin: 5px 0;
+}
+
+.ep-textarea{
+  width: 60%;
+  float: right;
+  clear: both;
+}
+
+.content-layout {
+  background-color: rgb(124, 206, 43);
+  padding: 50px;
+  border: 10px solid rgb(10, 127, 10);
+  border-radius: 100px;
+  width: 350px;
+}
+
+.title {
+  height: 27px;
+  padding: 0px 20px;
+}
+
+.title>div>h1 {
+  text-align: center;
+  margin-top: 0px;
+  width: 100px;
+  float: left;
+}
+
+.title>div>hr {
+  float:left;
+  position: relative;
+  width: 100px;
+  top: 5px;
+  background-color: rgb(10, 127, 10);
+  height: 5px;
+  border: none;
+}
+
+.form-layout {
+  clear: left;
+}
+
+.form-input {
+  width: 350px;
+  margin-bottom: 5px;
+}
+
+.form-input>div {
+  float: left;
+  width: 135px;
+}
+
+.form-input>input {
+  width: 198px;
+}
+
+.checked-input>input {
+  width: 170px;
+}
+
+.driver-checkbox {
+  margin: 20px 0px;
+}
+
+.driver-checkbox>input {
+  float: left;
+  margin-left: 0px;
+}
+
+
+.cancel-button {
+  width: 75px;
+  height: 30px;
+  text-align: center;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #D2002E;
+  border-radius: 10px;
+}
+
+.accept-button {
+  width: 75px;
+  height: 30px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+}
+
+.driver-completeorder-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+}
+
+.completeorder-container {
+  text-align: center;
+  clear: both;
+}
+
+.right-align {
+  width: 100%;
+  text-align: right;
+}
+
+.driver-fullname-disp {
+  font-size: 105%;
+  font-weight: bold;
+  margin-top: 5px;
+}
+
+/*Select driver*/
+.select-driver {
+  width: auto;
+  padding: 0 10px;
+  border-radius: 12px;
+  border: 1px solid black;
+  margin: 10px 0;
+}
+
+.driver-content {
+  height: 120px;
+  overflow: hidden;
+}
+
+.driver-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+  float: left;
+}
+
+.driver-name-disp {
+  font-size: 160%;
+  font-weight: bold;
+  margin-top: 10px;
+}
+
+.driver-rating-disp {
+  color: orange;
+  font-size: 110%;
+}
+
+.driver-not-found {
+  color: grey;
+  height: 70px;
+  text-align: center;
+  text-transform: none;
+  line-height: 70px;
+  vertical-align: middle;
+}
+
+.vote-disp {
+  color: black;
+}
+
+.select-driver-btn {
+  width: auto;
+  color: white;
+  background-color: #5A1E83;
+  letter-spacing: 0.5px;
+  float: right;
+}
+
+.order-btn {
+  float: none;
+  clear: both;
+}
+
+#profile-pic {
+  width: 150px;
+  height: 150px;
+  border: 1px solid black;
+  float: left;
+  margin-right: 25px;
+  margin-bottom: 30px;
+}
+
+#save-profile {
+  float: right;
+  margin-right: 120px;
+}
+
+#register-button {
+  background-color: #4CAF50;
+  border: 5px solid rgb(10, 127, 10);
+  border-radius: 20px;
+  color: white;
+  padding: 15px 32px;
+  text-align: center;
+  text-decoration: none;
+  display: inline-block;
+  font-size: 16px;
+  margin: 4px 2px;
+  cursor: pointer;
+}
+
+#button-layout>div {
+  float: left;
+  width: 200px;
+  height: 66px;
+}
+
+#button-layout a {
+  position: relative;
+  top: 20px;
+}
+
+
+.button-form {
+  text-align: right;
+  width: 350px;
+}
+
+.button-form div {
+  float: left;
+}
+
+.completeorder-btn {
+  width: 100px;
+  height: 50px;
+  float: none;
+}
+
+ /* The switch - the box around the slider */
+ .switch {
+  position: relative;
+  display: inline-block;
+
+  width: 50px;
+  height: 25px;
+}
+
+/* Hide default HTML checkbox */
+.switch input {display:none;}
+
+/* The slider */
+.slider {
+  position: absolute;
+  cursor: pointer;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: #ccc;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+.slider:before {
+  position: absolute;
+  content: "";
+  height: 19px;
+  width: 19px;
+  left: 4px;
+  bottom: 3px;
+  background-color: white;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+input:checked + .slider {
+  background-color: #1E7B25;
+}
+
+input:focus + .slider {
+  box-shadow: 0 0 1px #1E7B25;
+}
+
+input:checked + .slider:before {
+  -webkit-transform: translateX(23px);
+  -ms-transform: translateX(23px);
+  transform: translateX(23px);
+}
+
+/* Rounded sliders */
+.slider.round {
+  border-radius: 34px;
+}
+
+.slider.round:before {
+  border-radius: 50%;
+}
+
+/* Menu Order */
+.menu-order {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  font-size: 12px;
+  border-spacing: 20px 12px;
+}
+
+.menu-order-column {
+  height: 100%;
+}
+
+.menu-order-cell {
+  display: table-cell;
+  position: relative;
+  text-align: left;
+  font-weight: bold;
+}
+
+.menu-order-number
+{
+    position: relative;
+    display: block;
+    width: 50px;
+    height: 50px;
+    border-radius: 25px; /* or 50% */
+    text-align: center;
+    margin-left: auto;
+    margin-right: auto;
+    background-color: #311B92;
+    color: #ffffff;
+    line-height: 50px;
+}
+
+.menu-order-title
+{
+    position: relative;
+    display: inline-block;
+}
+
+#next-button-text {
+  line-height: 20px;
+  width: 75%;
+  padding-right: 1px;
+}
+
+input.next-button {
+  width: 20%;
+  height: 30px;
+  line-height: 20px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+  display: inline-block;
+}
+
+table, th, td {
+  table-layout: auto !important;
+  width: 100% auto !important;
+  max-width:100%;
+  white-space:nowrap;
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+
+.pref-button {
+  width: 21px;
+  height: 21px;
+  vertical-align: middle;
+  border: none;
+  display: inline-block;
+}
+
+/** Rating **/
+.starRating:not(old){
+  display        : inline-block;
+  width          : 7.5em;
+  height         : 1.5em;
+  overflow       : hidden;
+  vertical-align : bottom;
+}
+
+.starRating:not(old) > input{
+  margin-right : -100%;
+  opacity      : 0;
+}
+
+.starRating:not(old) > label{
+  display         : block;
+  float           : right;
+  position        : relative;
+  background      : url('../img/star-off.svg');
+  background-size : contain;
+}
+
+.starRating:not(old) > label:before{
+  content         : '';
+  display         : block;
+  width           : 1.5em;
+  height          : 1.5em;
+  background      : url('../img/star-on.svg');
+  background-size : contain;
+  opacity         : 0;
+  transition      : opacity 0.2s linear;
+}
+
+.starRating:not(old) > label:hover:before,
+.starRating:not(old) > label:hover ~ label:before,
+.starRating:not(:hover) > :checked ~ label:before{
+  opacity : 1;
+}
+
+/* Font customization */
+/* latin */
+@font-face {
+  font-family: 'Geo';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Geo'), local('Geo-Regular'), url(./fonts/geo.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
+
+/* devanagari */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
diff --git a/Tubes1/src/public/css/style_old.css b/Tubes1/src/public/css/style_old.css
new file mode 100644
index 0000000000000000000000000000000000000000..7ee8d5f20ad0ad8b49088c590ce18c398f09c1d8
--- /dev/null
+++ b/Tubes1/src/public/css/style_old.css
@@ -0,0 +1,614 @@
+@charset "UTF-8";
+
+/* Font customization */
+/* latin */
+@font-face {
+  font-family: 'Geo';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Geo'), local('Geo-Regular'), url(./fonts/geo.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
+
+/* devanagari */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
+
+/* Body style */
+
+body {
+  width: 470px;
+  margin: auto;
+  font-family: 'Mutka', sans-serif;
+}
+
+textarea {
+  resize: none;
+  width: 100%;
+  margin-bottom: 10px;
+}
+
+/* Order Header */
+  .progress-container {
+    width: fit-content;
+    border-collapse:separate;
+    border-spacing: 10px 10px;
+    display: table;
+  }
+
+  .progress {
+    width: 30%;
+    height: 50px;
+    font-size: 105%;
+    border: 1px solid black;
+    text-align: left;
+    vertical-align: middle;
+    display: table-cell;
+  }
+
+  .progress-num {
+    display:inline-block;
+    background-color: #DDD;
+    width: 35px;
+    height: 35px;
+    border-radius: 100%;
+    margin: 0px 5px;
+    line-height: 200%;
+    text-align: center;
+    vertical-align: middle;
+  }
+
+  .selected {
+    background-color: #FFFF44;
+  }
+
+/* Header style */
+
+.header-box {
+  height: fit-content content-box;
+  width: fit-content content-box;
+  margin-left: auto;
+  margin-right: auto;
+  margin-top: none;
+  margin-bottom: none;
+  column-count: 2;
+  -moz-column-count: 2;
+  -webkit-column-count: 2;
+  -webkit-column-span: all; /* Chrome, Safari, Opera */
+  column-span: all;
+  column-gap: 40px;
+}
+
+.col-header-left {
+  width: 50% content-box;
+  float: left;
+  vertical-align: middle;
+}
+
+.logo-title {
+  font-family: 'Geo', sans-serif;
+  font-weight: bold;
+  font-size: 250%;
+  color: #5A1E83;
+}
+
+.tagline {
+  color: #311B92;
+}
+
+.col-header-right {
+  width: 50% content-box;
+  float: right;
+  text-align: right;
+  vertical-align: middle;
+  line-height: 2;
+}
+
+/* Menu style */
+
+.menu {
+  width: 100%;
+  display: table;
+  table-layout: fixed;
+}
+
+.menu > div.menu-column {
+  display: table-column;
+}
+
+.menu > div.menu-cell {
+  display: table-cell;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+  line-height: 50px;
+  text-align: center;
+  font-weight: bold;
+  border-style: solid;
+  border-width: 1px;
+}
+
+.menu-item:hover, .menu-item#selected {
+  color: #ffffff;
+  border-color: #000000;
+  background-color: #5A1E83;
+}
+
+/* Footer style */
+.footer {
+  width: 100% fit-content;
+  display: inline-block;
+  column-count: 3;
+  column-span: all;
+  column-gap: 1.5em;
+  column-rule-style: solid;
+  border-style: solid;
+  border-width: 2px;
+  margin: auto;
+}
+
+.footer > div {
+  text-align: center;
+  font-weight: bold;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+}
+
+.img-chooser {
+  padding-top: 20px;
+}
+
+/* Container */
+.container {
+  width: inherit;
+}
+
+.header {
+  line-height: 1.5;
+  text-transform: uppercase;
+}
+
+.selectdriver-header {
+  text-transform: uppercase;
+  font-weight: bold;
+}
+
+.edit-profile-container {
+  font-family: Verdana;
+}
+
+.edit-profile-header {
+  text-transform: uppercase;
+  font-weight: bold;
+  width: 100%;
+  font-size: 170%;
+}
+
+.edit-profile-btm {
+  clear: both;
+}
+
+.form-editprofile{
+  margin: 5px 0;
+}
+
+
+
+.ep-textarea{
+  width: 60%;
+  float: right;
+  clear: both;
+}
+
+.content-layout {
+  background-color: rgb(124, 206, 43);
+  padding: 50px;
+  border: 10px solid rgb(10, 127, 10);
+  border-radius: 100px;
+  width: 350px;
+}
+
+.title {
+  height: 27px;
+  padding: 0px 20px;
+}
+
+.title>div>h1 {
+  text-align: center;
+  margin-top: 0px;
+  width: 100px;
+  float: left;
+}
+
+.title>div>hr {
+  float:left;
+  position: relative;
+  width: 100px;
+  top: 5px;
+  background-color: rgb(10, 127, 10);
+  height: 5px;
+  border: none;
+}
+
+.form-layout {
+  clear: left;
+}
+
+.form-input {
+  width: 350px;
+  margin-bottom: 5px;
+}
+
+.form-input>div {
+  float: left;
+  width: 130px;
+}
+
+.form-input>input {
+  width: 198px;
+}
+
+.driver-checkbox {
+  margin: 20px 0px;
+}
+
+.driver-checkbox>input {
+  float: left;
+  margin-left: 0px;
+}
+
+
+.cancel-button {
+  width: 75px;
+  height: 30px;
+  text-align: center;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #D2002E;
+  border-radius: 10px;
+}
+
+.accept-button {
+  width: 75px;
+  height: 30px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+}
+
+
+.driver-completeorder-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+}
+
+.completeorder-container {
+  text-align: center;
+  clear: both;
+}
+
+.right-align {
+  width: 100%;
+  text-align: right;
+}
+
+.driver-fullname-disp {
+  font-size: 105%;
+  font-weight: bold;
+  margin-top: 5px;
+}
+
+/*Select driver*/
+.select-driver {
+  width: fit-content;
+  padding: 0 10px;
+  border-radius: 12px;
+  border: 1px solid black;
+  margin: 10px 0;
+}
+
+.driver-content {
+  height: 120px;
+  overflow: hidden;
+}
+
+.driver-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+  float: left;
+}
+
+.driver-name-disp {
+  font-size: 160%;
+  font-weight: bold;
+  margin-top: 10px;
+}
+
+.driver-rating-disp {
+  color: orange;
+  font-size: 110%;
+}
+
+.driver-not-found {
+  color: grey;
+  height: 70px;
+  text-align: center;
+  text-transform: none;
+  line-height: 70px;
+  vertical-align: middle;
+}
+
+.vote-disp {
+  color: black;
+}
+
+.select-driver-btn {
+  width: auto;
+  color: white;
+  background-color: #5A1E83;
+  letter-spacing: 0.5px;
+  float: right;
+}
+
+.order-btn {
+  float: none;
+  clear: both;
+}
+
+#profile-pic {
+  width: 150px;
+  height: 150px;
+  border: 1px solid black;
+  float: left;
+  margin-right: 25px;
+  margin-bottom: 30px;
+}
+
+#save-profile {
+  float: right;
+}
+
+#register-button {
+  background-color: #4CAF50;
+  border: 5px solid rgb(10, 127, 10);
+  border-radius: 20px;
+  color: white;
+  padding: 15px 32px;
+  text-align: center;
+  text-decoration: none;
+  display: inline-block;
+  font-size: 16px;
+  margin: 4px 2px;
+  cursor: pointer;
+}
+
+#button-layout>div {
+  float: left;
+  width: 200px;
+  height: 66px;
+}
+
+#button-layout a {
+  position: relative;
+  top: 20px;
+}
+
+
+.button-form {
+  text-align: right;
+  width: 100%;
+}
+
+.button-form div {
+  float: left;
+}
+
+.completeorder-btn {
+  width: 100px;
+  height: 50px;
+  float: none;
+}
+
+ /* The switch - the box around the slider */
+ .switch {
+  position: relative;
+  display: inline-block;
+
+  width: 50px;
+  height: 25px;
+}
+
+/* Hide default HTML checkbox */
+.switch input {display:none;}
+
+/* The slider */
+.slider {
+  position: absolute;
+  cursor: pointer;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: #ccc;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+.slider:before {
+  position: absolute;
+  content: "";
+  height: 19px;
+  width: 19px;
+  left: 4px;
+  bottom: 3px;
+  background-color: white;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+input:checked + .slider {
+  background-color: #1E7B25;
+}
+
+input:focus + .slider {
+  box-shadow: 0 0 1px #1E7B25;
+}
+
+input:checked + .slider:before {
+  -webkit-transform: translateX(23px);
+  -ms-transform: translateX(23px);
+  transform: translateX(23px);
+}
+
+/* Rounded sliders */
+.slider.round {
+  border-radius: 34px;
+}
+
+.slider.round:before {
+  border-radius: 50%;
+}
+
+/* Menu Order */
+.menu-order {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  font-size: 12px;
+  border-spacing: 20px 12px;
+}
+
+.menu-order-column {
+  height: 100%;
+}
+
+.menu-order-cell {
+  display: table-cell;
+  position: relative;
+  text-align: left;
+  font-weight: bold;
+}
+
+.menu-order-number
+{
+    position: relative;
+    display: block;
+    width: 50px;
+    height: 50px;
+    border-radius: 25px; /* or 50% */
+    text-align: center;
+    margin-left: auto;
+    margin-right: auto;
+    background-color: #311B92;
+    color: #ffffff;
+    line-height: 50px;
+}
+
+.menu-order-title
+{
+    position: relative;
+    display: inline-block;
+}
+
+#next-button-text {
+  line-height: 20px;
+  width: 75%;
+  padding-right: 1px;
+}
+
+input.next-button {
+  width: 20%;
+  height: 30px;
+  line-height: 20px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+  display: inline-block;
+}
+
+table, th, td {
+  table-layout: auto !important;
+  width: 100% auto !important;
+  max-width:100%;
+  white-space:nowrap;
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+
+.pref-button {
+  width: 21px;
+  height: 21px;
+  vertical-align: middle;
+  border: none;
+  display: inline-block;
+}
+
+/** Rating **/
+.starRating:not(old){
+  display        : inline-block;
+  width          : 7.5em;
+  height         : 1.5em;
+  overflow       : hidden;
+  vertical-align : bottom;
+}
+
+.starRating:not(old) > input{
+  margin-right : -100%;
+  opacity      : 0;
+}
+
+.starRating:not(old) > label{
+  display         : block;
+  float           : right;
+  position        : relative;
+  background      : url('../img/star-off.svg');
+  background-size : contain;
+}
+
+.starRating:not(old) > label:before{
+  content         : '';
+  display         : block;
+  width           : 1.5em;
+  height          : 1.5em;
+  background      : url('../img/star-on.svg');
+  background-size : contain;
+  opacity         : 0;
+  transition      : opacity 0.2s linear;
+}
+
+.starRating:not(old) > label:hover:before,
+.starRating:not(old) > label:hover ~ label:before,
+.starRating:not(:hover) > :checked ~ label:before{
+  opacity : 1;
+}
diff --git a/Tubes1/src/public/img/.gitkeep b/Tubes1/src/public/img/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/public/img/a b/Tubes1/src/public/img/a
new file mode 100644
index 0000000000000000000000000000000000000000..33aea4c0776f5cb48d23fab288743ca549d3092e
Binary files /dev/null and b/Tubes1/src/public/img/a differ
diff --git a/Tubes1/src/public/img/admin b/Tubes1/src/public/img/admin
new file mode 100644
index 0000000000000000000000000000000000000000..dd3fea2721dfc529ad21300b36bada01e362032d
Binary files /dev/null and b/Tubes1/src/public/img/admin differ
diff --git a/Tubes1/src/public/img/delete.png b/Tubes1/src/public/img/delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8998a18f10f6e0e754cdf3f06794b299e90a1b9
Binary files /dev/null and b/Tubes1/src/public/img/delete.png differ
diff --git a/Tubes1/src/public/img/driver1 b/Tubes1/src/public/img/driver1
new file mode 100644
index 0000000000000000000000000000000000000000..8de4beb39862ac7125f2339dcb1c9b32ab7f90f8
Binary files /dev/null and b/Tubes1/src/public/img/driver1 differ
diff --git a/Tubes1/src/public/img/edit.png b/Tubes1/src/public/img/edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..919913bc0052626f61433d69128dc17ac739450b
Binary files /dev/null and b/Tubes1/src/public/img/edit.png differ
diff --git a/Tubes1/src/public/img/images.jpg b/Tubes1/src/public/img/images.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..30b7ce2cd13386017b2fa5d56503d42e4c25ea1d
Binary files /dev/null and b/Tubes1/src/public/img/images.jpg differ
diff --git a/Tubes1/src/public/img/motaraido.png b/Tubes1/src/public/img/motaraido.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b72f7e2abdd5f8ea4d11911d7c6ad9260be5262
Binary files /dev/null and b/Tubes1/src/public/img/motaraido.png differ
diff --git a/Tubes1/src/public/img/pen.png b/Tubes1/src/public/img/pen.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2bcdf9ca880be6a8d6d687245ec080d4d711240
Binary files /dev/null and b/Tubes1/src/public/img/pen.png differ
diff --git a/Tubes1/src/public/img/profilepic.png b/Tubes1/src/public/img/profilepic.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b72f7e2abdd5f8ea4d11911d7c6ad9260be5262
Binary files /dev/null and b/Tubes1/src/public/img/profilepic.png differ
diff --git a/Tubes1/src/public/img/star-off.svg b/Tubes1/src/public/img/star-off.svg
new file mode 100755
index 0000000000000000000000000000000000000000..9a393aa40d139025bf2324aec47830757facb84a
--- /dev/null
+++ b/Tubes1/src/public/img/star-off.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">
+  <path fill="#fff" stroke="#ccc" d="M 12,2.5 14.4,9.5 21.5,9.5 15.8,13.75 18.5,21.5 12,16.625 5.5,21.5 8.2,13.75 2.5,9.5 9.6,9.5 z"/>
+</svg>
diff --git a/Tubes1/src/public/img/star-on.svg b/Tubes1/src/public/img/star-on.svg
new file mode 100755
index 0000000000000000000000000000000000000000..fac31ff43ec2ba8dff2f36a3b0ae43d92b312533
--- /dev/null
+++ b/Tubes1/src/public/img/star-on.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">
+  <path fill="#311B92" stroke="#000" d="M 12,2.5 14.4,9.5 21.5,9.5 15.8,13.75 18.5,21.5 12,16.625 5.5,21.5 8.2,13.75 2.5,9.5 9.6,9.5 z"/>
+</svg>
diff --git a/Tubes1/src/public/img/tes1 b/Tubes1/src/public/img/tes1
new file mode 100644
index 0000000000000000000000000000000000000000..7352b27d5a4202c3849d34614463b6e94eee7285
Binary files /dev/null and b/Tubes1/src/public/img/tes1 differ
diff --git a/Tubes1/src/public/img/winarto b/Tubes1/src/public/img/winarto
new file mode 100644
index 0000000000000000000000000000000000000000..33aea4c0776f5cb48d23fab288743ca549d3092e
Binary files /dev/null and b/Tubes1/src/public/img/winarto differ
diff --git a/Tubes1/src/public/img/yowinarto b/Tubes1/src/public/img/yowinarto
new file mode 100644
index 0000000000000000000000000000000000000000..8de4beb39862ac7125f2339dcb1c9b32ab7f90f8
Binary files /dev/null and b/Tubes1/src/public/img/yowinarto differ
diff --git a/Tubes1/src/public/js/.gitkeep b/Tubes1/src/public/js/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes1/src/public/js/app.js b/Tubes1/src/public/js/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..dbea0f5c367dec9b0cb20f3b11c4ce40644838a3
--- /dev/null
+++ b/Tubes1/src/public/js/app.js
@@ -0,0 +1,102 @@
+function loginValidation() {
+    var username = document.forms["loginform"]["username"];
+    var pwd = document.forms["loginform"]["password"];
+    var usrVerify = Validate(username, "empty");
+    var pwdVerify = Validate(pwd, "empty");
+    return (usrVerify && pwdVerify);
+}
+
+function editProfileValidation() {
+    var name = document.forms["editprofile-form"]["your-name"];
+    var phone = document.forms["editprofile-form"]["phone-number"];
+    var nameVerify = Validate(name, "empty", 0, 20, "length");
+    var phoneVerify = Validate(phone, "empty", 9, 12, "length");
+    return (nameVerify && phoneVerify);
+}
+
+function Validate(inputArea, type1, min = 0, max = 0, type2 = null, type3 = null) {
+    var error = GetErrorMessage(inputArea.value, type1, min, max);
+    if(error === "") {
+        if (type2 != null) {
+            error = GetErrorMessage(inputArea.value, type2, min, max);
+            console.log(type2 + "length");
+        }
+        if (error === "") {
+            if (type3 != null) {
+                error = GetErrorMessage(inputArea.value, type3, min, max);
+            }
+        }
+    }
+    if(error !== "" && inputArea.nextElementSibling === null) {
+        var errorEl = document.createElement("p");
+        errorEl.innerHTML = error;
+        errorEl.className = "error";
+        insertAfterElement(errorEl, inputArea);
+
+        inputArea.addEventListener("blur", function() {
+            var error = GetErrorMessage(inputArea.value, type1, min, max);
+            if(error === "") {
+                if (type2 != null) {
+                    error = GetErrorMessage(inputArea.value, type2, min, max);
+                }
+                if (error === "") {
+                    if (type3 != null) {
+                        error = GetErrorMessage(inputArea.value, type3, min, max);
+                    }
+                }
+            }
+            if (error === ""){
+                this.nextSibling.remove();
+            }
+        },true);
+    }
+    return (error === "");
+}
+
+function insertAfterElement(el, src) {
+    src.parentNode.insertBefore(el, src.nextSibling);
+}
+
+
+function GetErrorMessage(textArea, type, min = 0, max = 0) {
+    var validateText = "";
+    switch(type) {
+        case "empty" :
+            if(isEmpty(textArea)) {
+                validateText = "Fill in the field";
+            }
+            break;
+        case "email" :
+            if(!isEmail(textArea)) {
+                validatedText = "Invalid Email Address";
+            }
+            break;
+        case "number" :
+            if(isNumber(textArea)){
+                validateText = "Fill in with only number";
+            }
+            break;
+        case "length" :
+            if (!isLengthEqual(textArea,min,max)){
+                validateText = "Character must be between " + min.toString() + " and " + max.toString() + " long";
+            }
+            break;
+    }
+    return validateText;
+}
+
+function isEmpty(textArea) {
+    return (textArea.match(/^s+$/) || textArea == "");
+}
+
+function isNumber(textArea) {
+    return (!isNaN(textArea));
+}
+
+function isLengthEqual(textArea, min, max){
+    return (textArea.length >= min && textArea.length <= max);
+}
+
+function isEmail(textArea) {
+    return (textArea.match(/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/));
+}
\ No newline at end of file
diff --git a/Tubes1/src/public/js/history.js b/Tubes1/src/public/js/history.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e4b3f528dfb96a699cdbb10ad6ba0b731005f5a
--- /dev/null
+++ b/Tubes1/src/public/js/history.js
@@ -0,0 +1,41 @@
+
+function tabActive(tag) {
+	var tabUser = document.getElementById('user-his');
+	var tabDriver = document.getElementById('driver-his');
+	var order = document.getElementsByClassName('order-list');
+	var driver = document.getElementsByClassName('driver-list');
+
+	if (tag == 'user') {
+		order[0].classList.add("active-list");
+		driver[0].classList.remove("active-list");
+		tabUser.classList.add('active');
+		tabDriver.classList.remove('active');
+	}
+	else {
+		driver[0].classList.add("active-list");
+		order[0].classList.remove("active-list");
+		tabDriver.classList.add('active');
+		tabUser.classList.remove('active');
+	}
+}
+
+tabActive('user');
+
+function hideThis(user) {
+	updateHide(user);
+	console.log(user[0]);
+}
+
+function updateHide(history)
+{
+	var data = "user=" + history[0] + "&driver=" + history[1] + "&date=" + history[4];
+    var xhr;
+    if (window.XMLHttpRequest) {
+        xhr = new XMLHttpRequest();
+    } else if (window.ActiveXObject) {
+        xhr = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    xhr.open("GET", "/history/update", true);
+    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                  
+    xhr.send(data);
+}
\ No newline at end of file
diff --git a/Tubes1/src/public/js/selectdriver.js b/Tubes1/src/public/js/selectdriver.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d7b38f4833461051ad76f37a3eac112a88b0156
--- /dev/null
+++ b/Tubes1/src/public/js/selectdriver.js
@@ -0,0 +1,97 @@
+var prefDriver = document.getElementById("pref-driver");
+var otherDriver = document.getElementById("other-driver");
+var driverSumRating = [];
+var driverCountRating = [];
+var driverNameList = [];
+
+for (var i = 0; i < driverArr.length; i++) {
+    for(var j = 0; j < ratingArr.length; j++) {
+        if(driverArr[i] === ratingArr[j]["usernameDriver"]){
+            driverSumRating[driverArr[i]] = (driverSumRating[driverArr[i]] === undefined) ? parseFloat(ratingArr[j]["rating"]) : driverSumRating[driverArr[i]] + parseFloat(ratingArr[j]["rating"]);
+            driverCountRating[driverArr[i]] = (driverCountRating[driverArr[i]] === undefined) ? 1 : driverCountRating[driverArr[i]]+1;
+        }
+    }
+    for(var k = 0; k < driverNameArr.length; k++) {
+        if(driverArr[i] === driverNameArr[k]["username"]){
+            driverNameList[driverArr[i]] = driverNameArr[k]["fullname"];
+            break;
+        }
+    }
+}
+
+for(var j = 0; j < ratingArr.length; j++) {
+    if(preferredDriver === ratingArr[j]["usernameDriver"]){
+        driverSumRating[preferredDriver] = (driverSumRating[preferredDriver] === undefined) ? parseFloat(ratingArr[j]["rating"]) : driverSumRating[preferredDriver] + parseFloat(ratingArr[j]["rating"]);
+        driverCountRating[preferredDriver] = (driverCountRating[preferredDriver] === undefined) ? 1 : driverCountRating[preferredDriver]+1;
+    }
+}
+for(var k = 0; k < driverNameArr.length; k++) {
+    if(preferredDriver === driverNameArr[k]["username"]){
+        driverNameList[preferredDriver] = driverNameArr[k]["fullname"];
+        break;
+    }
+}
+
+if(preferredDriver !== "") {
+    CreateDriverDisplay(prefDriver, preferredDriver);
+} else {
+    CreateNotFoundDisplay(prefDriver);
+}
+
+if(driverArr.length > 0) {
+    for (var i = 0; i < driverArr.length; i++) {
+        CreateDriverDisplay(otherDriver, driverArr[i]);
+    }
+} else {
+    CreateNotFoundDisplay(otherDriver);
+}
+
+function CreateDriverDisplay(driverType, driverUsrName) {
+    var newForm = driverType.appendChild(document.createElement("form"));
+    var newContainer = newForm.appendChild(document.createElement("div"));
+    var newImg = newContainer.appendChild(document.createElement("img"));
+    var newName = newContainer.appendChild(document.createElement("div"));
+    var newRating = newContainer.appendChild(document.createElement("div"));
+    var postUsrName = newContainer.appendChild(document.createElement("input"));
+    var newPickLoc = newContainer.appendChild(document.createElement("input"));
+    var newDest = newContainer.appendChild(document.createElement("input"));
+    var newBtn = newContainer.appendChild(document.createElement("input"));
+
+
+    var avgRating = (driverSumRating[driverUsrName]/driverCountRating[driverUsrName]).toFixed(1).toString();
+
+    newForm.setAttribute('method', 'post');
+    newForm.setAttribute('action', '/order/' + user + '/completeorder');
+    newContainer.classList.add("driver-content");
+
+    newImg.classList.add("driver-pic");
+    newImg.setAttribute('src', '/public/img/' + driverUsrName);
+
+    newName.classList.add("driver-name-disp");
+    newName.innerHTML = driverNameList[driverUsrName];
+
+    newRating.classList.add("driver-rating-disp");
+    newRating.innerHTML = "★" + avgRating + " <span class='vote-disp'>(" + driverCountRating[driverUsrName] + " votes)</span>";
+
+    postUsrName.setAttribute('type', 'hidden');
+    postUsrName.setAttribute('name', 'driver-username');
+    postUsrName.setAttribute('value', driverUsrName);
+
+    newPickLoc.setAttribute('type','hidden');
+    newPickLoc.setAttribute('name','pickLoc');
+    newPickLoc.setAttribute('value', pickLoc);
+    newDest.setAttribute('type','hidden');
+    newDest.setAttribute('name','dest');
+    newDest.setAttribute('value', dest);
+
+    newBtn.classList.add("accept-button");
+    newBtn.classList.add("select-driver-btn");
+    newBtn.setAttribute('type','submit');
+    newBtn.setAttribute('value','Select Driver');
+}
+
+function CreateNotFoundDisplay(driverType) {
+    var newContainer = driverType.appendChild(document.createElement("div"));
+    newContainer.classList.add("driver-not-found");
+    newContainer.innerHTML = "Nothing to display.";
+}
\ No newline at end of file
diff --git a/Tubes1/src/public/js/signup.js b/Tubes1/src/public/js/signup.js
new file mode 100644
index 0000000000000000000000000000000000000000..43a9342a95538b30e1b8bf663cf3fc0a0b62718f
--- /dev/null
+++ b/Tubes1/src/public/js/signup.js
@@ -0,0 +1,44 @@
+function checkData(name, element)
+{
+    var data = "?" + name + "=" + document.forms["signupform"][name].value;
+    var xhr;
+    if (window.XMLHttpRequest) {
+        xhr = new XMLHttpRequest();
+    } else if (window.ActiveXObject) {
+        xhr = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    
+    xhr.open("GET", "/validation" + data, true); 
+    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                  
+    xhr.send(null);
+    xhr.onload = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                if (xhr.responseText === 'OK') { 
+                    document.getElementById(element).innerHTML = "√";
+                } else {
+                    document.getElementById(element).innerHTML = "X";
+                }
+            } 
+            else {
+                alert('There was a problem with the request.');
+            }
+        }
+    }
+}
+
+function signupValidation() {
+    var username = document.forms["signupform"]["username"];
+    var password = document.forms["signupform"]["password"];
+    var cpassword = document.forms["signupform"]["confirm-password"];
+    var email = document.forms["signupform"]["email"];
+    var fullname = document.forms["signupform"]["your-name"];
+    var phone = document.forms["signupform"]["phone"];
+    var usrVerify = Validate(username, "empty");
+    var pwdVerify = Validate(password, "empty");
+    var cpwdVerify = Validate(cpassword, "empty");
+    var emailVerify = Validate(email, "empty", 0, 0, "email");
+    var fullnameVerify = Validate(fullname, "empty", 0, 20, "length");
+    var phoneVerify = Validate(phone, "empty", 9, 12, "length");
+    return (usrVerify && pwdVerify && cpwdVerify && emailVerify && fullnameVerify && phoneVerify);
+}
\ No newline at end of file
diff --git a/Tubes1/src/vendor/autoload.php b/Tubes1/src/vendor/autoload.php
new file mode 100644
index 0000000000000000000000000000000000000000..530b760cf2fed5f40f9d6e1458980c1715bcfc96
--- /dev/null
+++ b/Tubes1/src/vendor/autoload.php
@@ -0,0 +1,21 @@
+<?php
+spl_autoload_register(function ($class) {
+
+    $prefix = 'MotaRaido\\';
+
+    $base_dir = APPDIR;
+
+    $len = strlen($prefix);
+    if (strncmp($prefix, $class, $len) !== 0) {
+        return;
+    }
+
+    $relative_class = substr($class, $len);
+
+    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
+    
+    if (file_exists($file)) {
+        require_once $file;
+    }
+});
+
diff --git a/Tubes2/build.xml b/Tubes2/build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..82b0c2e07ac2435f0650066826ded52123296967
--- /dev/null
+++ b/Tubes2/build.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="Tubes2" default="default" basedir=".">
+    <description>Builds, tests, and runs the project Tubes2.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. They are: 
+
+      -pre-init:                 called before initialization of project properties 
+      -post-init:                called after initialization of project properties 
+      -pre-compile:              called before javac compilation 
+      -post-compile:             called after javac compilation 
+      -pre-compile-single:       called before javac compilation of single file
+      -post-compile-single:      called after javac compilation of single file
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-compile-test-single:  called before javac compilation of single JUnit test
+      -post-compile-test-single: called after javac compilation of single JUunit test
+      -pre-dist:                 called before archive building 
+      -post-dist:                called after archive building 
+      -post-clean:               called after cleaning build products 
+      -pre-run-deploy:           called before deploying
+      -post-run-deploy:          called after deploying
+
+    Example of pluging an obfuscator after the compilation could look like 
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported 
+    nbproject/build-impl.xml file. 
+
+
+    Other way how to customize the build is by overriding existing main targets.
+    The target of interest are: 
+
+      init-macrodef-javac:    defines macro for javac compilation
+      init-macrodef-junit:   defines macro for junit execution
+      init-macrodef-debug:    defines macro for class debugging
+      do-dist:                archive building
+      run:                    execution of project 
+      javadoc-build:          javadoc generation 
+
+    Example of overriding the target for project execution could look like 
+
+        <target name="run" depends="<PROJNAME>-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that overridden target depends on jar target and not only on 
+    compile target as regular run target does. Again, for list of available 
+    properties which you can use check the target you are overriding in 
+    nbproject/build-impl.xml file. 
+
+    -->
+</project>
diff --git a/Tubes2/nbproject/ant-deploy.xml b/Tubes2/nbproject/ant-deploy.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5d33e0d6e743ce97b9b63e4c37346ab71071ce70
--- /dev/null
+++ b/Tubes2/nbproject/ant-deploy.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+Copyright (c) 2008, 2016 Oracle and/or its affiliates. All rights reserved.
+
+Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+Other names may be trademarks of their respective owners.
+
+The contents of this file are subject to the terms of either the GNU
+General Public License Version 2 only ("GPL") or the Common
+Development and Distribution License("CDDL") (collectively, the
+"License"). You may not use this file except in compliance with the
+License. You can obtain a copy of the License at
+http://www.netbeans.org/cddl-gplv2.html
+or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+specific language governing permissions and limitations under the
+License.  When distributing the software, include this License Header
+Notice in each file and include the License file at
+nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
+particular file as subject to the "Classpath" exception as provided
+by Oracle in the GPL Version 2 section of the License file that
+accompanied this code. If applicable, add the following below the
+License Header, with the fields enclosed by brackets [] replaced by
+your own identifying information:
+"Portions Copyrighted [year] [name of copyright owner]"
+
+If you wish your version of this file to be governed by only the CDDL
+or only the GPL Version 2, indicate your decision by adding
+"[Contributor] elects to include this software in this distribution
+under the [CDDL or GPL Version 2] license." If you do not indicate a
+single choice of license, a recipient has the option to distribute
+your version of this file under either the CDDL, the GPL Version 2 or
+to extend the choice of license to its licensees as provided above.
+However, if you add GPL Version 2 code and therefore, elected the GPL
+Version 2 license, then the option applies only if the new code is
+made subject to such option by the copyright holder.
+
+Contributor(s):
+-->
+<project default="-deploy-ant" basedir=".">
+    <target name="-init-cl-deployment-env" if="deploy.ant.enabled">
+        <property file="${deploy.ant.properties.file}" />
+        <available file="${deploy.ant.docbase.dir}/WEB-INF/sun-web.xml" property="sun.web.present"/>
+        <available file="${deploy.ant.docbase.dir}/WEB-INF/glassfish-web.xml" property="glassfish.web.present"/>
+        <available file="${deploy.ant.resource.dir}" property="has.setup"/>
+        <tempfile prefix="gfv3" property="gfv3.password.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <echo message="AS_ADMIN_PASSWORD=${gfv3.password}" file="${gfv3.password.file}"/>
+    </target>
+
+    <target name="-parse-sun-web" depends="-init-cl-deployment-env" if="sun.web.present">
+        <tempfile prefix="gfv3" property="temp.sun.web" destdir="${java.io.tmpdir}"/>
+        <copy file="${deploy.ant.docbase.dir}/WEB-INF/sun-web.xml" tofile="${temp.sun.web}"/>
+        <!-- The doctype triggers resolution which can fail -->
+        <replace file="${temp.sun.web}">
+            <replacetoken><![CDATA[<!DOCTYPE]]></replacetoken>
+            <replacevalue><![CDATA[<!-- <!DOCTYPE]]></replacevalue>
+        </replace>
+        <replace file="${temp.sun.web}">
+            <replacetoken><![CDATA[<sun-web-app]]></replacetoken>
+            <replacevalue><![CDATA[--> <sun-web-app]]></replacevalue>
+        </replace>
+        <xmlproperty file="${temp.sun.web}" validate="false">
+        </xmlproperty>    
+        <delete file="${temp.sun.web}"/>
+        <condition property="deploy.ant.client.url" value="${gfv3.url}${sun-web-app.context-root}" else="${gfv3.url}/${ant.project.name}">
+            <isset property="sun-web-app.context-root"/>
+        </condition>
+        <condition property="deploy.context.root.argument" value="&amp;contextroot=${sun-web-app.context-root}" else="/${ant.project.name}">
+            <isset property="sun-web-app.context-root"/>
+        </condition>
+    </target>
+    <target name="-parse-glassfish-web" depends="-init-cl-deployment-env" if="glassfish.web.present">
+        <tempfile prefix="gfv3" property="temp.gf.web" destdir="${java.io.tmpdir}"/>
+        <copy file="${deploy.ant.docbase.dir}/WEB-INF/glassfish-web.xml" tofile="${temp.gf.web}"/>
+        <!-- The doctype triggers resolution which can fail -->
+        <replace file="${temp.gf.web}">
+            <replacetoken><![CDATA[<!DOCTYPE]]></replacetoken>
+            <replacevalue><![CDATA[<!-- <!DOCTYPE]]></replacevalue>
+        </replace>
+        <replace file="${temp.gf.web}">
+            <replacetoken><![CDATA[<glassfish-web-app]]></replacetoken>
+            <replacevalue><![CDATA[--> <glassfish-web-app]]></replacevalue>
+        </replace>
+        <xmlproperty file="${temp.gf.web}" validate="false">
+        </xmlproperty>
+        <delete file="${temp.gf.web}"/>
+        <condition property="deploy.ant.client.url" value="${gfv3.url}${glassfish-web-app.context-root}" else="${gfv3.url}/${ant.project.name}">
+            <isset property="glassfish-web-app.context-root"/>
+        </condition>
+        <condition property="deploy.context.root.argument" value="&amp;contextroot=${glassfish-web-app.context-root}" else="/${ant.project.name}">
+            <isset property="glassfish-web-app.context-root"/>
+        </condition>
+    </target>
+    <target name="-no-parse-sun-web" depends="-init-cl-deployment-env" unless="sun.web.present">
+        <property name="deploy.context.root.argument" value=""/>
+    </target>
+    <target name="-add-resources" depends="-init-cl-deployment-env" if="has.setup">
+        <tempfile prefix="gfv3" property="gfv3.resources.dir" destdir="${java.io.tmpdir}"/>
+        <mkdir dir="${gfv3.resources.dir}"/>
+        <mkdir dir="${gfv3.resources.dir}/META-INF"/>
+        <copy todir="${gfv3.resources.dir}/META-INF">
+            <fileset dir="${deploy.ant.resource.dir}"/>
+        </copy>
+        <jar destfile="${deploy.ant.archive}" update="true">
+            <fileset dir="${gfv3.resources.dir}"/>
+        </jar>
+        <delete dir="${gfv3.resources.dir}"/>
+    </target>
+    <target name="-deploy-ant" depends="-parse-glassfish-web, -parse-sun-web, -no-parse-sun-web,-add-resources" if="deploy.ant.enabled">
+        <antcall target="-deploy-without-pw"/>
+        <antcall target="-deploy-with-pw"/>
+    </target>
+
+    <target name="-deploy-without-pw" unless="gfv3.password">
+        <echo message="Deploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <property name="full.deploy.ant.archive" location="${deploy.ant.archive}"/>
+        <get src="${gfv3.admin.url}/__asadmin/deploy?path=${full.deploy.ant.archive}${deploy.context.root.argument}&amp;force=true&amp;name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>    
+    </target>
+    <target name="-deploy-with-pw" if="gfv3.password">
+        <echo message="Deploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <property name="full.deploy.ant.archive" location="${deploy.ant.archive}"/>
+        <get username="${gfv3.username}" password="${gfv3.password}" src="${gfv3.admin.url}/__asadmin/deploy?path=${full.deploy.ant.archive}${deploy.context.root.argument}&amp;force=true&amp;name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>
+    </target>
+    <target name="-undeploy-ant" depends="-init-cl-deployment-env" if="deploy.ant.enabled">
+        <antcall target="-undeploy-without-pw"/>
+        <antcall target="-undeploy-with-pw"/>
+    </target>
+
+    <target name="-undeploy-without-pw" unless="gfv3.password">
+        <echo message="Undeploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <get src="${gfv3.admin.url}/__asadmin/undeploy?name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>    
+    </target>
+    <target name="-undeploy-with-pw" if="gfv3.password">
+        <echo message="Undeploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <get username="${gfv3.username}" password="${gfv3.password}" src="${gfv3.admin.url}/__asadmin/undeploy?name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>
+    </target>
+</project>
diff --git a/Tubes2/nbproject/build-impl.xml b/Tubes2/nbproject/build-impl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bf7f8d7eaec27a07f52ac3a36c2cfbdbc4ad5a04
--- /dev/null
+++ b/Tubes2/nbproject/build-impl.xml
@@ -0,0 +1,1441 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+        *** GENERATED FROM project.xml - DO NOT EDIT  ***
+        ***         EDIT ../build.xml INSTEAD         ***
+
+        For the purpose of easier reading the script
+        is divided into following sections:
+        - initialization
+        - compilation
+        - dist
+        - execution
+        - debugging
+        - javadoc
+        - test compilation
+        - test execution
+        - test debugging
+        - cleanup
+
+        -->
+<project xmlns:webproject1="http://www.netbeans.org/ns/web-project/1" xmlns:webproject2="http://www.netbeans.org/ns/web-project/2" xmlns:webproject3="http://www.netbeans.org/ns/web-project/3" basedir=".." default="default" name="Tubes2-impl">
+    <import file="ant-deploy.xml"/>
+    <fail message="Please build using Ant 1.7.1 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.7.1"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="dist,javadoc" description="Build whole project." name="default"/>
+    <!--
+                INITIALIZATION SECTION
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.4"/>
+        <property name="default.javac.target" value="1.4"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" if="dist.ear.dir" name="-do-ear-init"/>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <isfalse value="${javadoc.preview}"/>
+        </condition>
+        <property name="javac.compilerargs" value=""/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <condition property="no.dist.ear.dir">
+            <not>
+                <isset property="dist.ear.dir"/>
+            </not>
+        </condition>
+        <property name="build.web.excludes" value="${build.classes.excludes}"/>
+        <condition property="do.compile.jsps">
+            <istrue value="${compile.jsps}"/>
+        </condition>
+        <condition property="do.debug.server">
+            <or>
+                <not>
+                    <isset property="debug.server"/>
+                </not>
+                <istrue value="${debug.server}"/>
+                <and>
+                    <not>
+                        <istrue value="${debug.server}"/>
+                    </not>
+                    <not>
+                        <istrue value="${debug.client}"/>
+                    </not>
+                </and>
+            </or>
+        </condition>
+        <condition property="do.debug.client">
+            <istrue value="${debug.client}"/>
+        </condition>
+        <condition property="do.display.browser">
+            <istrue value="${display.browser}"/>
+        </condition>
+        <condition property="do.display.browser.debug.old">
+            <and>
+                <isset property="do.display.browser"/>
+                <not>
+                    <isset property="do.debug.client"/>
+                </not>
+                <not>
+                    <isset property="browser.context"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="do.display.browser.debug">
+            <and>
+                <isset property="do.display.browser"/>
+                <not>
+                    <isset property="do.debug.client"/>
+                </not>
+                <isset property="browser.context"/>
+            </and>
+        </condition>
+        <available file="${conf.dir}/MANIFEST.MF" property="has.custom.manifest"/>
+        <available file="${persistence.xml.dir}/persistence.xml" property="has.persistence.xml"/>
+        <condition property="do.war.package.with.custom.manifest">
+            <isset property="has.custom.manifest"/>
+        </condition>
+        <condition property="do.war.package.without.custom.manifest">
+            <not>
+                <isset property="has.custom.manifest"/>
+            </not>
+        </condition>
+        <condition property="do.tmp.war.package.with.custom.manifest">
+            <and>
+                <isset property="has.custom.manifest"/>
+                <or>
+                    <isfalse value="${directory.deployment.supported}"/>
+                    <isset property="dist.ear.dir"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="do.tmp.war.package.without.custom.manifest">
+            <and>
+                <not>
+                    <isset property="has.custom.manifest"/>
+                </not>
+                <or>
+                    <isfalse value="${directory.deployment.supported}"/>
+                    <isset property="dist.ear.dir"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="do.tmp.war.package">
+            <or>
+                <isfalse value="${directory.deployment.supported}"/>
+                <isset property="dist.ear.dir"/>
+            </or>
+        </condition>
+        <property name="build.meta.inf.dir" value="${build.web.dir}/META-INF"/>
+        <condition else="" property="application.args.param" value="${application.args}">
+            <and>
+                <isset property="application.args"/>
+                <not>
+                    <equals arg1="${application.args}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="runmain.jvmargs" value=""/>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <and>
+                <isset property="endorsed.classpath"/>
+                <length length="0" string="${endorsed.classpath}" when="greater"/>
+            </and>
+        </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
+        <condition property="junit.available">
+            <or>
+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
+            </or>
+        </condition>
+        <condition property="testng.available">
+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
+        </condition>
+        <condition property="junit+testng.available">
+            <and>
+                <istrue value="${junit.available}"/>
+                <istrue value="${testng.available}"/>
+            </and>
+        </condition>
+        <condition else="testng" property="testng.mode" value="mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+        <condition else="" property="testng.debug.mode" value="-mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+    </target>
+    <target depends="init" name="-init-cos" unless="deploy.on.save">
+        <condition property="deploy.on.save" value="true">
+            <or>
+                <istrue value="${j2ee.deploy.on.save}"/>
+                <istrue value="${j2ee.compile.on.save}"/>
+            </or>
+        </condition>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="build.web.dir">Must set build.web.dir</fail>
+        <fail unless="build.generated.dir">Must set build.generated.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.war">Must set dist.war</fail>
+        <condition property="missing.j2ee.server.home">
+            <and>
+                <matches pattern="j2ee.server.home" string="${j2ee.platform.classpath}"/>
+                <not>
+                    <isset property="j2ee.server.home"/>
+                </not>
+            </and>
+        </condition>
+        <fail if="missing.j2ee.server.home">
+The Java EE server classpath is not correctly set up - server home directory is missing.
+Either open the project in the IDE and assign the server or setup the server classpath manually.
+For example like this:
+   ant -Dj2ee.server.home=&lt;app_server_installation_directory&gt;
+                </fail>
+        <fail unless="j2ee.platform.classpath">
+The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}.
+Either open the project in the IDE and assign the server or setup the server classpath manually.
+For example like this:
+   ant -Duser.properties.file=&lt;path_to_property_file&gt; (where you put the property "j2ee.platform.classpath" in a .properties file)
+or ant -Dj2ee.platform.classpath=&lt;server_classpath&gt; (where no properties file is used)
+                </fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                <delete>
+                    <files includesfile="${javac.includesfile.binary}"/>
+                </delete>
+                <delete file="${javac.includesfile.binary}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-init">
+        <condition else="false" property="nb.junit.batch" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <not>
+                    <isset property="test.method"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="nb.junit.single" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <isset property="test.method"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${java.io.tmpdir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="run.jvmargs.ide" value=""/>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+    <target if="${testng.available}" name="-init-macrodef-testng">
+        <macrodef name="testng" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                    <isset property="test.method"/>
+                </condition>
+                <union id="test.set">
+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
+                </union>
+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
+                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="Tubes2" testname="TestNG tests" workingDir="${basedir}">
+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
+                    <propertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </propertyset>
+                    <customize/>
+                </testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-test-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <echo>No tests executed.</echo>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <webproject2:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </webproject2:junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <webproject2:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </webproject2:testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
+        <macrodef name="test" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <sequential>
+                <webproject2:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${runmain.jvmargs}"/>
+                    </customize>
+                </webproject2:test-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${java.io.tmpdir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="run.jvmargs.ide" value=""/>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <webproject2:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </webproject2:junit-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${testng.available}" name="-init-macrodef-testng-debug">
+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element name="customize2" optional="true"/>
+            <sequential>
+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
+                    <isset property="test.method"/>
+                </condition>
+                <condition else="-suitename Tubes2 -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                    <matches pattern=".*\.xml" string="@{testClass}"/>
+                </condition>
+                <delete dir="${build.test.results.dir}" quiet="true"/>
+                <mkdir dir="${build.test.results.dir}"/>
+                <webproject1:debug args="${testng.cmd.args}" classname="org.testng.TestNG" classpath="${debug.test.classpath}:${j2ee.platform.embeddableejb.classpath}">
+                    <customize>
+                        <customize2/>
+                        <jvmarg value="-ea"/>
+                        <arg line="${testng.debug.mode}"/>
+                        <arg line="-d ${build.test.results.dir}"/>
+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>
+                    </customize>
+                </webproject1:debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element implicit="true" name="customize2" optional="true"/>
+            <sequential>
+                <webproject2:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2/>
+                </webproject2:testng-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <webproject2:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${runmain.jvmargs}"/>
+                    </customize>
+                </webproject2:test-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <webproject2:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2>
+                        <syspropertyset>
+                            <propertyref prefix="test-sys-prop."/>
+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                        </syspropertyset>
+                    </customize2>
+                </webproject2:testng-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${runmain.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}:${j2ee.platform.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-nbjsdebug">
+        <macrodef name="nbjsdebugstart" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${client.url}" name="webUrl"/>
+            <sequential>
+                <nbjsdebugstart urlPart="${client.urlPart}" webUrl="@{webUrl}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdaappreloaded" uri="http://www.netbeans.org/ns/web-project/1">
+            <sequential>
+                <nbjpdaappreloaded/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${application.args.param}" name="args"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg line="${runmain.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <arg line="@{args}"/>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-taskdefs">
+        <fail unless="libs.CopyLibs.classpath">
+The libs.CopyLibs.classpath property is not set up.
+This property must point to 
+org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part
+of NetBeans IDE installation and is usually located at 
+&lt;netbeans_installation&gt;/java&lt;version&gt;/ant/extra folder.
+Either open the project in the IDE and make sure CopyLibs library
+exists or setup the property manually. For example like this:
+ ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar
+                </fail>
+        <taskdef classpath="${libs.CopyLibs.classpath}" resource="org/netbeans/modules/java/j2seproject/copylibstask/antlib.xml"/>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init" if="profiler.info.jvmargs.agent" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
+    <!--
+                end of pre NB7.2 profiling section
+            -->
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-java,-init-macrodef-nbjpda,-init-macrodef-nbjsdebug,-init-macrodef-debug,-init-taskdefs,-init-ap-cmdline" name="init"/>
+    <!--
+                COMPILATION SECTION
+            -->
+    <target depends="init" if="no.dist.ear.dir" name="deps-module-jar" unless="no.deps"/>
+    <target depends="init" if="dist.ear.dir" name="deps-ear-jar" unless="no.deps"/>
+    <target depends="init, deps-module-jar, deps-ear-jar" name="deps-jar" unless="no.deps"/>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-copy-webdir">
+        <copy todir="${build.web.dir}">
+            <fileset dir="${web.docbase.dir}" excludes="${build.web.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+        <copy todir="${build.web.dir}/WEB-INF">
+            <fileset dir="${webinf.dir}" excludes="${build.web.excludes}"/>
+        </copy>
+    </target>
+    <target depends="init, deps-jar, -pre-pre-compile, -pre-compile, -copy-manifest, -copy-persistence-xml, -copy-webdir, library-inclusion-in-archive,library-inclusion-in-manifest" if="have.sources" name="-do-compile">
+        <webproject2:javac destdir="${build.classes.dir}" gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target if="has.custom.manifest" name="-copy-manifest">
+        <mkdir dir="${build.meta.inf.dir}"/>
+        <copy todir="${build.meta.inf.dir}">
+            <fileset dir="${conf.dir}" includes="MANIFEST.MF"/>
+        </copy>
+    </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.web.dir}/WEB-INF/classes/META-INF"/>
+        <copy todir="${build.web.dir}/WEB-INF/classes/META-INF">
+            <fileset dir="${persistence.xml.dir}" includes="persistence.xml orm.xml"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <webproject2:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+    <property name="jspc.schemas" value="/resources/schemas/"/>
+    <property name="jspc.dtds" value="/resources/dtds/"/>
+    <target depends="compile" description="Test compile JSP pages to expose compilation errors." if="do.compile.jsps" name="compile-jsps">
+        <mkdir dir="${build.generated.dir}/src"/>
+        <java classname="org.netbeans.modules.web.project.ant.JspC" failonerror="true" fork="true">
+            <arg value="-uriroot"/>
+            <arg file="${basedir}/${build.web.dir}"/>
+            <arg value="-d"/>
+            <arg file="${basedir}/${build.generated.dir}/src"/>
+            <arg value="-die1"/>
+            <arg value="-schemas ${jspc.schemas}"/>
+            <arg value="-dtds ${jspc.dtds}"/>
+            <arg value="-compilerSourceVM ${javac.source}"/>
+            <arg value="-compilerTargetVM ${javac.target}"/>
+            <arg value="-javaEncoding ${source.encoding}"/>
+            <arg value="-sysClasspath ${libs.jsp-compilation-syscp.classpath}"/>
+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>
+        </java>
+        <mkdir dir="${build.generated.dir}/classes"/>
+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src"/>
+    </target>
+    <target depends="compile" if="jsp.includes" name="-do-compile-single-jsp">
+        <fail unless="javac.jsp.includes">Must select some files in the IDE or set javac.jsp.includes</fail>
+        <mkdir dir="${build.generated.dir}/src"/>
+        <java classname="org.netbeans.modules.web.project.ant.JspCSingle" failonerror="true" fork="true">
+            <arg value="-uriroot"/>
+            <arg file="${basedir}/${build.web.dir}"/>
+            <arg value="-d"/>
+            <arg file="${basedir}/${build.generated.dir}/src"/>
+            <arg value="-die1"/>
+            <arg value="-schemas ${jspc.schemas}"/>
+            <arg value="-dtds ${jspc.dtds}"/>
+            <arg value="-sysClasspath ${libs.jsp-compilation-syscp.classpath}"/>
+            <arg value="-jspc.files"/>
+            <arg path="${jsp.includes}"/>
+            <arg value="-compilerSourceVM ${javac.source}"/>
+            <arg value="-compilerTargetVM ${javac.target}"/>
+            <arg value="-javaEncoding ${source.encoding}"/>
+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>
+        </java>
+        <mkdir dir="${build.generated.dir}/classes"/>
+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src">
+            <customize>
+                <patternset includes="${javac.jsp.includes}"/>
+            </customize>
+        </webproject2:javac>
+    </target>
+    <target name="compile-single-jsp">
+        <fail unless="jsp.includes">Must select a file in the IDE or set jsp.includes</fail>
+        <antcall target="-do-compile-single-jsp"/>
+    </target>
+    <!--
+                DIST BUILDING SECTION
+            -->
+    <target name="-pre-dist">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.without.custom.manifest" name="-do-dist-without-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.with.custom.manifest" name="-do-dist-with-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.without.custom.manifest" name="-do-tmp-dist-without-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.with.custom.manifest" name="-do-tmp-dist-with-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist,-do-dist-with-manifest,-do-dist-without-manifest" name="do-dist"/>
+    <target depends="init" if="dist.ear.dir" name="library-inclusion-in-manifest">
+        <mkdir dir="${build.web.dir}/META-INF"/>
+        <manifest file="${build.web.dir}/META-INF/MANIFEST.MF" mode="update"/>
+    </target>
+    <target depends="init" name="library-inclusion-in-archive" unless="dist.ear.dir"/>
+    <target depends="init" if="dist.ear.dir" name="-clean-webinf-lib">
+        <delete dir="${build.web.dir}/WEB-INF/lib"/>
+    </target>
+    <target depends="init,-clean-webinf-lib,compile,compile-jsps,-pre-dist,library-inclusion-in-manifest" if="do.tmp.war.package" name="do-ear-dist">
+        <dirname file="${dist.ear.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.ear.war}" manifest="${build.web.dir}/META-INF/MANIFEST.MF">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target name="-post-dist">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-dist,do-dist,-post-dist" description="Build distribution (WAR)." name="dist"/>
+    <target depends="init,-clean-webinf-lib,-init-cos,compile,-pre-dist,do-ear-dist,-post-dist" description="Build distribution (WAR) to be packaged into an EAR." name="dist-ear"/>
+    <!--
+                EXECUTION SECTION
+            -->
+    <target depends="run-deploy,run-display-browser" description="Deploy to server and show in browser." name="run"/>
+    <target name="-pre-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-post-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-pre-nbmodule-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -pre-run-deploy task instead. -->
+    </target>
+    <target name="-post-nbmodule-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -post-run-deploy task instead. -->
+    </target>
+    <target name="-run-deploy-am">
+        <!-- Task to deploy to the Access Manager runtime. -->
+    </target>
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest,-pre-run-deploy,-pre-nbmodule-run-deploy,-run-deploy-nb,-init-deploy-ant,-deploy-ant,-run-deploy-am,-post-nbmodule-run-deploy,-post-run-deploy,-do-update-breakpoints" name="run-deploy"/>
+    <target if="netbeans.home" name="-run-deploy-nb">
+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="false" forceRedeploy="${forceRedeploy}"/>
+    </target>
+    <target name="-init-deploy-ant" unless="netbeans.home">
+        <property name="deploy.ant.archive" value="${dist.war}"/>
+        <property name="deploy.ant.docbase.dir" value="${web.docbase.dir}"/>
+        <property name="deploy.ant.resource.dir" value="${resource.dir}"/>
+        <property name="deploy.ant.enabled" value="true"/>
+    </target>
+    <target depends="dist,-run-undeploy-nb,-init-deploy-ant,-undeploy-ant" name="run-undeploy"/>
+    <target if="netbeans.home" name="-run-undeploy-nb">
+        <fail message="Undeploy is not supported from within the IDE"/>
+    </target>
+    <target depends="init,-pre-dist,dist,-post-dist" name="verify">
+        <nbverify file="${dist.war}"/>
+    </target>
+    <target depends="run-deploy,-init-display-browser,-display-browser-nb-old,-display-browser-nb,-display-browser-cl" name="run-display-browser"/>
+    <target if="do.display.browser" name="-init-display-browser">
+        <condition property="do.display.browser.nb.old">
+            <and>
+                <isset property="netbeans.home"/>
+                <not>
+                    <isset property="browser.context"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="do.display.browser.nb">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="browser.context"/>
+            </and>
+        </condition>
+        <condition property="do.display.browser.cl">
+            <isset property="deploy.ant.enabled"/>
+        </condition>
+    </target>
+    <target if="do.display.browser.nb.old" name="-display-browser-nb-old">
+        <nbbrowse url="${client.url}"/>
+    </target>
+    <target if="do.display.browser.nb" name="-display-browser-nb">
+        <nbbrowse context="${browser.context}" url="${client.url}" urlPath="${client.urlPart}"/>
+    </target>
+    <target if="do.display.browser.cl" name="-get-browser" unless="browser">
+        <condition property="browser" value="rundll32">
+            <os family="windows"/>
+        </condition>
+        <condition else="" property="browser.args" value="url.dll,FileProtocolHandler">
+            <os family="windows"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/open">
+            <os family="mac"/>
+        </condition>
+        <property environment="env"/>
+        <condition property="browser" value="${env.BROWSER}">
+            <isset property="env.BROWSER"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/firefox">
+            <available file="/usr/bin/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/local/firefox/firefox">
+            <available file="/usr/local/firefox/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/mozilla">
+            <available file="/usr/bin/mozilla"/>
+        </condition>
+        <condition property="browser" value="/usr/local/mozilla/mozilla">
+            <available file="/usr/local/mozilla/mozilla"/>
+        </condition>
+        <condition property="browser" value="/usr/sfw/lib/firefox/firefox">
+            <available file="/usr/sfw/lib/firefox/firefox"/>
+        </condition>
+        <condition property="browser" value="/opt/csw/bin/firefox">
+            <available file="/opt/csw/bin/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/sfw/lib/mozilla/mozilla">
+            <available file="/usr/sfw/lib/mozilla/mozilla"/>
+        </condition>
+        <condition property="browser" value="/opt/csw/bin/mozilla">
+            <available file="/opt/csw/bin/mozilla"/>
+        </condition>
+    </target>
+    <target depends="-get-browser" if="do.display.browser.cl" name="-display-browser-cl">
+        <fail unless="browser">
+                    Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable.
+                </fail>
+        <property name="browse.url" value="${deploy.ant.client.url}${client.urlPart}"/>
+        <echo>Launching ${browse.url}</echo>
+        <exec executable="${browser}" spawn="true">
+            <arg line="${browser.args} ${browse.url}"/>
+        </exec>
+    </target>
+    <target depends="init,-init-cos,compile-single" name="run-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <webproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <webproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-do-update-breakpoints">
+        <webproject1:nbjpdaappreloaded/>
+    </target>
+    <!--
+                DEBUGGING SECTION
+            -->
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest" description="Debug project in IDE." if="netbeans.home" name="debug">
+        <nbstartserver debugmode="true"/>
+        <antcall target="connect-debugger"/>
+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="true" forceRedeploy="true"/>
+        <antcall target="debug-display-browser-old"/>
+        <antcall target="debug-display-browser"/>
+        <antcall target="connect-client-debugger"/>
+    </target>
+    <target if="do.debug.server" name="connect-debugger" unless="is.debugged">
+        <condition property="listeningcp" value="sourcepath">
+            <istrue value="${j2ee.compile.on.save}"/>
+        </condition>
+        <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" listeningcp="${listeningcp}" name="${name}" transport="${jpda.transport}">
+            <classpath>
+                <path path="${debug.classpath}:${j2ee.platform.classpath}"/>
+            </classpath>
+            <sourcepath>
+                <path path="${web.docbase.dir}"/>
+            </sourcepath>
+        </nbjpdaconnect>
+    </target>
+    <target if="do.display.browser.debug.old" name="debug-display-browser-old">
+        <nbbrowse url="${client.url}"/>
+    </target>
+    <target if="do.display.browser.debug" name="debug-display-browser">
+        <nbbrowse context="${browser.context}" url="${client.url}" urlPath="${client.urlPart}"/>
+    </target>
+    <target if="do.debug.client" name="connect-client-debugger">
+        <webproject1:nbjsdebugstart webUrl="${client.url}"/>
+    </target>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <webproject1:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init,compile,compile-jsps,-do-compile-single-jsp,debug" if="netbeans.home" name="debug-single"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <webproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <webproject1:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <webproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+            =================
+            PROFILING SECTION
+            =================
+            -->
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target description="Profile a J2EE project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+        <condition else="start-profiled-server" property="profiler.startserver.target" value="start-profiled-server-extraargs">
+            <isset property="profiler.info.jvmargs.extra"/>
+        </condition>
+        <antcall target="${profiler.startserver.target}"/>
+        <antcall target="run"/>
+        <antcall target="-profile-start-loadgen"/>
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="start-profiled-server">
+        <nbstartprofiledserver forceRestart="${profiler.j2ee.serverForceRestart}" javaPlatform="${profiler.info.javaPlatform}" startupTimeout="${profiler.j2ee.serverStartupTimeout}">
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg value="${profiler.j2ee.agentID}"/>
+        </nbstartprofiledserver>
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="start-profiled-server-extraargs">
+        <nbstartprofiledserver forceRestart="${profiler.j2ee.serverForceRestart}" javaPlatform="${profiler.info.javaPlatform}" startupTimeout="${profiler.j2ee.serverStartupTimeout}">
+            <jvmarg value="${profiler.info.jvmargs.extra}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg value="${profiler.j2ee.agentID}"/>
+        </nbstartprofiledserver>
+    </target>
+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+                <path path="${j2ee.platform.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+                <path path="${j2ee.platform.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <target if="netbeans.home" name="-profile-check">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest" name="-do-profile">
+        <startprofiler/>
+        <nbstartserver profilemode="true"/>
+        <nbdeploy clientUrlPart="${client.urlPart}" forceRedeploy="true" profilemode="true"/>
+        <antcall target="debug-display-browser-old"/>
+        <antcall target="debug-display-browser"/>
+        <antcall target="-profile-start-loadgen"/>
+    </target>
+    <target depends="-profile-check,-profile-pre72" description="Profile a J2EE project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+        <antcall target="-do-profile"/>
+    </target>
+    <target depends="-profile-test-single-pre72" name="profile-test-single"/>
+    <target depends="-profile-check" if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="test-single"/>
+    </target>
+    <target if="profiler.loadgen.path" name="-profile-start-loadgen">
+        <loadgenstart path="${profiler.loadgen.path}"/>
+    </target>
+    <!--
+                JAVADOC SECTION
+            -->
+    <target depends="init" if="have.sources" name="javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}:${j2ee.platform.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+            </fileset>
+        </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
+    </target>
+    <target depends="init,javadoc-build" if="netbeans.home" name="javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,javadoc-build,javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                
+                TEST COMPILATION SECTION
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+        <property name="j2ee.platform.embeddableejb.classpath" value=""/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test" if="have.tests" name="-do-compile-test">
+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                
+                TEST EXECUTION SECTION
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <webproject2:test includes="${includes}" testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <webproject2:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <webproject2:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+    <!--
+                
+                TEST DEBUGGING SECTION
+            -->
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <webproject2:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <webproject2:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <webproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                
+                CLEANUP SECTION
+            -->
+    <target depends="init" name="deps-clean" unless="no.deps"/>
+    <target depends="init" name="do-clean">
+        <condition property="build.dir.to.clean" value="${build.web.dir}">
+            <isset property="dist.ear.dir"/>
+        </condition>
+        <property name="build.dir.to.clean" value="${build.web.dir}"/>
+        <delete includeEmptyDirs="true" quiet="true">
+            <fileset dir="${build.dir.to.clean}/WEB-INF/lib"/>
+        </delete>
+        <delete dir="${build.dir}"/>
+        <available file="${build.dir.to.clean}/WEB-INF/lib" property="status.clean-failed" type="dir"/>
+        <delete dir="${dist.dir}"/>
+    </target>
+    <target depends="do-clean" if="status.clean-failed" name="check-clean">
+        <echo message="Warning: unable to delete some files in ${build.web.dir}/WEB-INF/lib - they are probably locked by the J2EE server. "/>
+        <echo level="info" message="To delete all files undeploy the module from Server Registry in Runtime tab and then use Clean again."/>
+    </target>
+    <target depends="init" if="netbeans.home" name="undeploy-clean">
+        <nbundeploy failOnError="false" startServer="false"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,undeploy-clean,deps-clean,do-clean,check-clean,-post-clean" description="Clean build products." name="clean"/>
+    <target depends="clean" description="Clean build products." name="clean-ear"/>
+</project>
diff --git a/Tubes2/nbproject/genfiles.properties b/Tubes2/nbproject/genfiles.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e9f9633c47b91d8098fe84ce66062f55c8f7e7c0
--- /dev/null
+++ b/Tubes2/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=613f9ad5
+build.xml.script.CRC32=b0885ed0
+build.xml.stylesheet.CRC32=651128d4@1.77.1.1
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=613f9ad5
+nbproject/build-impl.xml.script.CRC32=79f4aa2e
+nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.77.1.1
diff --git a/Tubes2/nbproject/private/private.properties b/Tubes2/nbproject/private/private.properties
new file mode 100644
index 0000000000000000000000000000000000000000..ebea3a47e2ed5dc3c14b57d398cccb03058110ec
--- /dev/null
+++ b/Tubes2/nbproject/private/private.properties
@@ -0,0 +1,7 @@
+deploy.ant.properties.file=/home/nim_13515091/.netbeans/8.2/config/GlassFishEE6/Properties/gfv3-611079199.properties
+j2ee.platform.is.jsr109=true
+j2ee.server.domain=/home/nim_13515091/glassfish-4.1.1/glassfish/domains/domain1
+j2ee.server.home=/home/nim_13515091/glassfish-4.1.1/glassfish
+j2ee.server.instance=[/home/nim_13515091/glassfish-4.1.1/glassfish:/home/nim_13515091/glassfish-4.1.1/glassfish/domains/domain1]deployer:gfv3ee6wc:localhost:4848
+j2ee.server.middleware=/home/nim_13515091/glassfish-4.1.1
+user.properties.file=/home/nim_13515091/.netbeans/8.2/build.properties
diff --git a/Tubes2/nbproject/project.properties b/Tubes2/nbproject/project.properties
new file mode 100644
index 0000000000000000000000000000000000000000..d0f1eaa14f65df0bbc3ace180a4f6ef044983e33
--- /dev/null
+++ b/Tubes2/nbproject/project.properties
@@ -0,0 +1,89 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=true
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+build.classes.dir=${build.web.dir}/WEB-INF/classes
+build.classes.excludes=**/*.java,**/*.form
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+build.web.dir=${build.dir}/web
+build.web.excludes=${build.classes.excludes}
+client.urlPart=
+compile.jsps=false
+conf.dir=${source.root}/conf
+debug.classpath=${build.classes.dir}:${javac.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+display.browser=true
+# Files to be excluded from distribution war
+dist.archive.excludes=
+dist.dir=dist
+dist.ear.war=${dist.dir}/${war.ear.name}
+dist.javadoc.dir=${dist.dir}/javadoc
+dist.war=${dist.dir}/${war.name}
+endorsed.classpath=\
+    ${libs.javaee-endorsed-api-7.0.classpath}
+excludes=
+includes=**
+j2ee.compile.on.save=true
+j2ee.copy.static.files.on.save=true
+j2ee.deploy.on.save=true
+j2ee.platform=1.7-web
+j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
+j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar
+j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar
+j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar
+j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar
+j2ee.platform.wsit.classpath=
+j2ee.server.type=gfv3ee6
+jar.compress=false
+javac.classpath=
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.debug=true
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.8
+javac.target=1.8
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.preview=true
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+lib.dir=${web.docbase.dir}/WEB-INF/lib
+no.dependencies=false
+persistence.xml.dir=${conf.dir}
+platform.active=default_platform
+resource.dir=setup
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+# Space-separated list of JVM arguments used when running a class with a main method or a unit test
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value):
+runmain.jvmargs=
+source.encoding=UTF-8
+source.root=src
+src.dir=${source.root}/java
+test.src.dir=test
+war.content.additional=
+war.ear.name=${war.name}
+war.name=Tubes2.war
+web.docbase.dir=web
+webinf.dir=web/WEB-INF
diff --git a/Tubes2/nbproject/project.xml b/Tubes2/nbproject/project.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1dbed815b440485277d6bae6c0c12fd91f4b7b95
--- /dev/null
+++ b/Tubes2/nbproject/project.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.web.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/web-project/3">
+            <name>Tubes2</name>
+            <minimum-ant-version>1.6.5</minimum-ant-version>
+            <web-module-libraries/>
+            <web-module-additional-libraries/>
+            <source-roots>
+                <root id="src.dir" name="Source Packages"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir" name="Test Packages"/>
+            </test-roots>
+        </data>
+    </configuration>
+</project>
diff --git a/Tubes2/src/conf/MANIFEST.MF b/Tubes2/src/conf/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..59499bce4a2bd51cba227b7c00fcf745b19c95a4
--- /dev/null
+++ b/Tubes2/src/conf/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/Tubes2/src/java/controller/ControllerServlet.java b/Tubes2/src/java/controller/ControllerServlet.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b7311724a1e5a460381733379dd34dc34f99b40
--- /dev/null
+++ b/Tubes2/src/java/controller/ControllerServlet.java
@@ -0,0 +1,84 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package controller;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ *
+ * @author nim_13515091
+ */
+@WebServlet(name = "ControllerServlet", urlPatterns = {"/Order", "/CompleteOrder", "/SelectDriver"})
+public class ControllerServlet extends HttpServlet {
+
+    /**
+     * Handles the HTTP <code>GET</code> method.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+    throws ServletException, IOException {
+
+        String userPath = request.getServletPath();
+
+        // use RequestDispatcher to forward request internally
+        String url = "/WEB-INF/view" + userPath + ".jsp";
+
+        try {
+            request.getRequestDispatcher(url).forward(request, response);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * Handles the HTTP <code>POST</code> method.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse response)
+    throws ServletException, IOException {
+
+        String userPath = request.getServletPath();
+
+        // if addToCart action is called
+        if (userPath.equals("/Order")) {
+            // TODO: Implement add product to cart action
+
+        // if updateCart action is called
+        } else if (userPath.equals("/SelectDriver")) {
+            // TODO: Implement update cart action
+
+        // if purchase action is called
+        } else if (userPath.equals("/CompleteOrder")) {
+            // TODO: Implement purchase action
+
+            userPath = "/confirmation";
+        }
+
+        // use RequestDispatcher to forward request internally
+        String url = "/WEB-INF/view" + userPath + ".jsp";
+
+        try {
+            request.getRequestDispatcher(url).forward(request, response);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/Tubes2/web/WEB-INF/glassfish-web.xml b/Tubes2/web/WEB-INF/glassfish-web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3a6f1e55d76d7682aa7d4e166245866991b7cd2
--- /dev/null
+++ b/Tubes2/web/WEB-INF/glassfish-web.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
+<glassfish-web-app error-url="">
+  <context-root>/</context-root>
+  <class-loader delegate="true"/>
+  <jsp-config>
+    <property name="keepgenerated" value="true">
+      <description>Keep a copy of the generated servlet class' java code.</description>
+    </property>
+  </jsp-config>
+</glassfish-web-app>
diff --git a/Tubes2/web/WEB-INF/jspf/Footer.jspf b/Tubes2/web/WEB-INF/jspf/Footer.jspf
new file mode 100644
index 0000000000000000000000000000000000000000..36ed5dbf6284e479dd45458c0d432e3f70ab3b6b
--- /dev/null
+++ b/Tubes2/web/WEB-INF/jspf/Footer.jspf
@@ -0,0 +1,7 @@
+        <div class="footer">
+            <div>Dayu <br /> 13500000</div>
+            <div>Marvin <br /> 1350000</div>
+            <div>Adrian HP <br /> 13515091</div>
+        </div>
+    </body>
+</html>
diff --git a/Tubes2/web/WEB-INF/jspf/Header.jspf b/Tubes2/web/WEB-INF/jspf/Header.jspf
new file mode 100644
index 0000000000000000000000000000000000000000..08500a2b6d688079f46e1977239da737a060a4f9
--- /dev/null
+++ b/Tubes2/web/WEB-INF/jspf/Header.jspf
@@ -0,0 +1,41 @@
+<%-- 
+    Document   : HeaderWithMenu
+    Created on : Nov 4, 2017, 11:23:12 AM
+    Author     : nim_13515091
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <link rel="stylesheet" href="css/profile.css"/>
+        <link rel="stylesheet" href="css/style.css"/>
+    </head>
+    <body>
+        <div>
+            <header class="header-box">
+                <div class="col-header-left">
+                    <div>
+                        <span class='logo-title'>MotoRaido</span><br />
+                        <span class='tagline'>Anata to issho ni noru mōtā</span>
+                    </div>	
+                </div>
+                <div class="col-header-right">
+                    <div>
+                        Hi, <b><?php echo $this->user; ?></b> !
+                    </div>
+                    <div>
+                        <a href="/login">Logout</a>
+                    </div>
+                </div>
+            </header>
+            <div class='menu'>
+                <div class="menu-column"></div>
+                <div class="menu-column"></div>
+                <div class="menu-column"></div>
+                <div id="orderheader" class="menu-cell"><a href="/order/<?php echo $this->user; ?>" class="text-link">ORDER</a></div>
+                <div id="historyheader" class="menu-cell"><a href="/history/<?php echo $this->user; ?>" class="text-link">HISTORY</a></div>
+                <div id="profileheader" class="menu-cell"><a href="/profile/<?php echo $this->user; ?>" class="text-link">MY PROFILE</a></div>
+            </div>
+        </div>
\ No newline at end of file
diff --git a/Tubes2/web/WEB-INF/view/CompleteOrder.jsp b/Tubes2/web/WEB-INF/view/CompleteOrder.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..9ac61413d2afd552640f07890dae353e0569ab09
--- /dev/null
+++ b/Tubes2/web/WEB-INF/view/CompleteOrder.jsp
@@ -0,0 +1,43 @@
+<div class="edit-profile-header">
+    Make an order       
+</div>
+<div class="progress-container">
+    <div class="progress">
+        <div class="progress-num">1</div> Select Destination
+    </div>
+    <div class="progress">
+        <div class="progress-num">2</div> Select a driver
+    </div>
+    <div class="progress selected">
+        <div class="progress-num selected">3</div> Complete your order
+    </div>
+</div>
+<div class="edit-profile-header">
+    How was it?
+</div>
+<form action="/order/<?php echo $this->user; ?>/completeorder/finish" method="post" name="completeorder-form">
+    <div class="completeorder-container">
+    <input type='hidden' name='driver' value='<?php echo $this->driver; ?>'>
+    <input type='hidden' name='from' value='<?php echo $this->from; ?>'>
+    <input type='hidden' name='dest' value='<?php echo $this->dest; ?>'>
+    <img class="driver-completeorder-pic" src="<?php echo $this->image; ?>" alt="">
+    <div class="driver-name-disp">@<?php echo $this->driver; ?></div>
+    <div class="driver-fullname-disp"><?php echo $this->drivername; ?></div>
+    <span class="starRating">
+      <input id="rating5" type="radio" name="rating" value="5">
+      <label for="rating5">5</label>
+      <input id="rating4" type="radio" name="rating" value="4">
+      <label for="rating4">4</label>
+      <input id="rating3" type="radio" name="rating" value="3">
+      <label for="rating3">3</label>
+      <input id="rating2" type="radio" name="rating" value="2">
+      <label for="rating2">2</label>
+      <input id="rating1" type="radio" name="rating" value="1">
+      <label for="rating1">1</label>
+    </span>
+    <textarea cols="5" placeholder="Your comment..." name="comment"></textarea>
+    </div>
+    <div class="right-align">
+        <input class="accept-button select-driver-btn completeorder-btn" type="submit" value="Complete&#13;&#10;Order">
+    </div>
+</form>
\ No newline at end of file
diff --git a/Tubes2/web/WEB-INF/view/Order.jsp b/Tubes2/web/WEB-INF/view/Order.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..90e429e371cc87c4bc15e6e5ae64f728cf05a730
--- /dev/null
+++ b/Tubes2/web/WEB-INF/view/Order.jsp
@@ -0,0 +1,35 @@
+<div class="container">
+    <div class="edit-profile-header">
+        Make an order       
+    </div>
+    <div class="progress-container">
+        <div class="progress selected">
+            <div class="progress-num">1</div> Select Destination
+        </div>
+        <div class="progress">
+            <div class="progress-num">2</div> Select a driver
+        </div>
+        <div class="progress">
+            <div class="progress-num">3</div> Complete your order
+        </div>
+    </div>
+    <form action="SelectDriver.jsp"  method='post'>
+        <div class="edit-profile-btm">
+            <div class="form-input">
+                <label for="pick-point">Picking point</label>
+                <input class="ep-textarea" type="text" name="pick-point" />
+            </div>
+            <div class="form-input">
+                <label for="destination">Destination</label>
+                <input class="ep-textarea" type="text" name="destination" />
+            </div>
+            <div class="form-input">
+                <label for="pref-driver">Preferred Driver</label>
+                <input class="ep-textarea" type="text" name="pref-driver" placeholder="(Optional)"/>
+            </div>
+            <div class="right-align">
+                <input class="accept-button select-driver-btn" id="save-profile" type="submit" value="Next" />
+            </div>
+        </div>
+    </form>
+</div>
\ No newline at end of file
diff --git a/Tubes2/web/WEB-INF/view/SelectDriver.jsp b/Tubes2/web/WEB-INF/view/SelectDriver.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..d8106748f411b9c73c53488a6929904b0faa165b
--- /dev/null
+++ b/Tubes2/web/WEB-INF/view/SelectDriver.jsp
@@ -0,0 +1,25 @@
+<div class="edit-profile-header">
+    Make an order       
+</div>
+<div class="progress-container">
+    <div class="progress">
+        <div class="progress-num">1</div> Select Destination
+    </div>
+    <div class="progress selected">
+        <div class="progress-num">2</div> Select a driver
+    </div>
+    <div class="progress">
+        <div class="progress-num">3</div> Complete your order
+    </div>
+</div>
+<div id="pref-driver" class="select-driver">
+    <div class= "selectdriver-header">
+        Preferred Drivers:
+    </div>
+    </div>
+<div id="other-driver" class="select-driver">
+    <div class="selectdriver-header">
+        Other Drivers:
+    </div>
+</div>
+<script src="js/selectdriver.js"></script>
\ No newline at end of file
diff --git a/Tubes2/web/WEB-INF/web.xml b/Tubes2/web/WEB-INF/web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..049039080d0056c6d56999a779d0866d8f8d98e9
--- /dev/null
+++ b/Tubes2/web/WEB-INF/web.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
+    <session-config>
+        <session-timeout>
+            30
+        </session-timeout>
+    </session-config>
+    <jsp-config>
+        <jsp-property-group>
+            <description>header and footer setting</description>
+            <url-pattern>/index.jsp</url-pattern>
+            <url-pattern>/WEB-INF/view/*</url-pattern>
+            <include-prelude>/WEB-INF/jspf/Header.jspf</include-prelude>
+            <include-coda>/WEB-INF/jspf/Footer.jspf</include-coda>
+        </jsp-property-group>
+    </jsp-config>
+</web-app>
diff --git a/Tubes2/web/css/.gitkeep b/Tubes2/web/css/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes2/web/css/fonts/geo.woff2 b/Tubes2/web/css/fonts/geo.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4c1d8680a68afc90ed228ae5c313f9002255b7b2
Binary files /dev/null and b/Tubes2/web/css/fonts/geo.woff2 differ
diff --git a/Tubes2/web/css/fonts/mukta1.woff2 b/Tubes2/web/css/fonts/mukta1.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..dfa6d95388c06078e73dc1ccc0df0cdd8c152c4b
Binary files /dev/null and b/Tubes2/web/css/fonts/mukta1.woff2 differ
diff --git a/Tubes2/web/css/fonts/mukta2.woff2 b/Tubes2/web/css/fonts/mukta2.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ed0d8a0451ef90b479b036e337f741573dfa55bb
Binary files /dev/null and b/Tubes2/web/css/fonts/mukta2.woff2 differ
diff --git a/Tubes2/web/css/fonts/mukta3.woff2 b/Tubes2/web/css/fonts/mukta3.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..b6d906226264df96ac57ba02427ae5043bfd031f
Binary files /dev/null and b/Tubes2/web/css/fonts/mukta3.woff2 differ
diff --git a/Tubes2/web/css/profile.css b/Tubes2/web/css/profile.css
new file mode 100644
index 0000000000000000000000000000000000000000..7bf19a4f7d989ea396720a3c92bd8cb9cce368d7
--- /dev/null
+++ b/Tubes2/web/css/profile.css
@@ -0,0 +1,154 @@
+.profile-picture {
+  width: 150px;
+  height: 150px;
+  border: 5px solid black;
+  float: left;
+  border-radius: 500px;
+  clear: both;
+}
+
+#info-profile {
+  margin: 20px 0px;
+  height: auto;
+}
+
+.edit-pen {
+  float: right;
+  height: 30px;
+
+}
+
+.subtitle-profile {
+  float: left;
+  width: 200px;
+  font-size: 2em;
+  font-weight: bold;
+  font-family: 'Mutka', sans-serif;
+}
+
+#profile-pic-div {
+  margin: auto;
+  width: 160px;
+  height: 160px;
+}
+
+#edit-pen-div {
+  margin: auto;
+  height: auto;
+}
+
+.subtitle-cont {
+  margin-bottom: 20px;
+  height: 37px;
+}
+
+#info-text {
+  margin: auto;
+  font-size: 1.2em;
+}
+
+#list-info {
+  list-style: none;
+  text-align: center;
+  padding: 0px;
+}
+
+#prefer-loc-title {
+  font-size: 1.5em;
+  width: 400px;
+}
+
+.fa-star-o{
+  color: red;
+}
+
+#info-pref-text {
+  font-size: 1.2em;
+}
+
+.subtitle-history {
+  float: left;
+  font-size: 2em;
+  font-weight: bold;
+  font-family: 'Mutka', sans-serif;
+  margin-top: 20px; 
+}
+
+.history-pic-div {
+  width: 120px;
+  height: 120px;
+  margin: 0px 20px;
+  float: left;
+}
+
+.profile-pic-his {
+  width: 110px;
+  height: 110px;
+  border: 1px solid black;
+  float: left;
+}
+
+.history-list {
+  margin-top: 20px;
+  list-style: none;
+  padding: 0px;
+  height: auto;
+}
+
+.order-list {
+  display: none;
+}
+
+.driver-list {
+  display: none;
+}
+
+.active-list {
+  display:block;
+}
+
+.comment {
+  margin-left: 180px;
+}
+
+.hide{
+  width: auto;
+  padding: 10px 15px;
+  border: 1px solid black;
+  border-radius: 10px;
+  background-color: red;
+  position: absolute;
+  right: 0;
+}
+
+.his-text>span {
+  display: inline-block;
+}
+
+.list-text-his {
+  height: auto;
+  position: relative;
+  clear: both;
+}
+
+.date-his {
+  color: gray;
+}
+
+.name-his {
+  font-size: 1.2em;
+}
+
+.tab-active {
+  display: block;
+}
+
+.active {
+  color: #ffffff;
+  border-color: #000000;
+  background-color: #5A1E83;
+}
+
+.hide-element {
+  display: none;
+}
\ No newline at end of file
diff --git a/Tubes2/web/css/style.css b/Tubes2/web/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..ae7bb6a41858edde4cdc42187c4481c84a4a3473
--- /dev/null
+++ b/Tubes2/web/css/style.css
@@ -0,0 +1,628 @@
+@charset "UTF-8";
+
+body {
+  width: 470px;
+  margin: auto;
+  font-family: 'Mutka', sans-serif;
+}
+
+textarea {
+  resize: none;
+  width: 100%;
+  margin-bottom: 10px;
+}
+
+/* Order Header */
+  .progress-container {
+    width: fit-content;
+    border-collapse:separate;
+    border-spacing: 10px 10px;
+    display: table;
+  }
+
+  .progress {
+    width: 30%;
+    height: 50px;
+    font-size: 105%;
+    border: 1px solid black;
+    text-align: left;
+    vertical-align: middle;
+    display: table-cell;
+  }
+
+  .progress-num {
+    display:inline-block;
+    background-color: #DDD;
+    width: 35px;
+    height: 35px;
+    border-radius: 100%;
+    margin: 0px 5px;
+    line-height: 200%;
+    text-align: center;
+    vertical-align: middle;
+    float: left;
+  }
+
+  .selected {
+    background-color: #FFFF44;
+  }
+
+/* Header style */
+
+.header-box {
+  height: fit-content content-box;
+  width: fit-content content-box;
+  margin-left: auto;
+  margin-right: auto;
+  margin-top: none;
+  margin-bottom: none;
+  font-family: 'Mutka', sans-serif;
+  column-count: 2;
+  -moz-column-count: 2;
+  -webkit-column-count: 2;
+  -webkit-column-span: all; /* Chrome, Safari, Opera */
+  column-span: all;
+  column-gap: 40px;
+}
+
+.col-header-left {
+  width: 50% content-box;
+  float: left;
+  vertical-align: middle;
+}
+
+.logo-title {
+  font-family: 'Geo', sans-serif;
+  font-weight: bold;
+  font-size: 250%;
+  color: #5A1E83;
+}
+
+.tagline {
+  color: #311B92;
+}
+
+.col-header-right {
+  width: 50% content-box;
+  float: right;
+  text-align: right;
+  vertical-align: middle;
+  line-height: 2;
+}
+
+/* Menu style */
+
+.menu {
+  width: 100%;
+  display: table;
+  table-layout: fixed;
+}
+
+.menu > div.menu-column {
+  display: table-column;
+}
+
+.menu > div.menu-cell {
+  display: table-cell;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+  line-height: 50px;
+  text-align: center;
+  font-weight: bold;
+  border-style: solid;
+  border-width: 1px;
+}
+
+.menu > div:hover, .menu > div.selected {
+  color: #ffffff;
+  border-color: #000000;
+  background-color: #5A1E83;
+}
+
+/* Footer style */
+.footer {
+  column-count: 3;
+  -moz-column-count: 3;
+  -webkit-column-count: 3;
+  -webkit-column-span: all;
+  column-span: all;
+  -moz-column-gap: 2em;
+  -webkit-column-gap: 2em;
+  column-gap: 1.5em;
+  column-rule-style: solid;
+  border-style: solid;
+  border-width: 2px;
+}
+
+.footer > div {
+  width: fit-content content-box;
+  text-align: center;
+  font-weight: bold;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+}
+
+.img-chooser {
+  padding-top: 20px;
+}
+
+.text-link {
+  text-decoration: none;
+  font-size: 120%;
+  font-weight: bold;
+  color: black;
+}
+
+
+
+/* Container */
+.container {
+  width: inherit;
+}
+
+.header {
+  line-height: 1.5;
+  text-transform: uppercase;
+}
+
+.selectdriver-header {
+  text-transform: uppercase;
+  font-weight: bold;
+}
+
+.edit-profile-container {
+  font-family: Verdana;
+}
+
+.edit-profile-header {
+  text-transform: uppercase;
+  font-weight: bold;
+  width: 100%;
+  font-size: 170%;
+}
+
+.edit-profile-btm {
+  clear: both;
+}
+
+.form-editprofile{
+  margin: 5px 0;
+}
+
+.ep-textarea{
+  width: 60%;
+  float: right;
+  clear: both;
+}
+
+.content-layout {
+  background-color: rgb(124, 206, 43);
+  padding: 50px;
+  border: 10px solid rgb(10, 127, 10);
+  border-radius: 100px;
+  width: 350px;
+}
+
+.title {
+  height: 27px;
+  padding: 0px 20px;
+}
+
+.title>div>h1 {
+  text-align: center;
+  margin-top: 0px;
+  width: 100px;
+  float: left;
+}
+
+.title>div>hr {
+  float:left;
+  position: relative;
+  width: 100px;
+  top: 5px;
+  background-color: rgb(10, 127, 10);
+  height: 5px;
+  border: none;
+}
+
+.form-layout {
+  clear: left;
+}
+
+.form-input {
+  width: 350px;
+  margin-bottom: 5px;
+}
+
+.form-input>div {
+  float: left;
+  width: 135px;
+}
+
+.form-input>input {
+  width: 198px;
+}
+
+.checked-input>input {
+  width: 170px;
+}
+
+.driver-checkbox {
+  margin: 20px 0px;
+}
+
+.driver-checkbox>input {
+  float: left;
+  margin-left: 0px;
+}
+
+
+.cancel-button {
+  width: 75px;
+  height: 30px;
+  text-align: center;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #D2002E;
+  border-radius: 10px;
+}
+
+.accept-button {
+  width: 75px;
+  height: 30px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+}
+
+.driver-completeorder-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+}
+
+.completeorder-container {
+  text-align: center;
+  clear: both;
+}
+
+.right-align {
+  width: 100%;
+  text-align: right;
+}
+
+.driver-fullname-disp {
+  font-size: 105%;
+  font-weight: bold;
+  margin-top: 5px;
+}
+
+/*Select driver*/
+.select-driver {
+  width: auto;
+  padding: 0 10px;
+  border-radius: 12px;
+  border: 1px solid black;
+  margin: 10px 0;
+}
+
+.driver-content {
+  height: 120px;
+  overflow: hidden;
+}
+
+.driver-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+  float: left;
+}
+
+.driver-name-disp {
+  font-size: 160%;
+  font-weight: bold;
+  margin-top: 10px;
+}
+
+.driver-rating-disp {
+  color: orange;
+  font-size: 110%;
+}
+
+.driver-not-found {
+  color: grey;
+  height: 70px;
+  text-align: center;
+  text-transform: none;
+  line-height: 70px;
+  vertical-align: middle;
+}
+
+.vote-disp {
+  color: black;
+}
+
+.select-driver-btn {
+  width: auto;
+  color: white;
+  background-color: #5A1E83;
+  letter-spacing: 0.5px;
+  float: right;
+}
+
+.order-btn {
+  float: none;
+  clear: both;
+}
+
+#profile-pic {
+  width: 150px;
+  height: 150px;
+  border: 1px solid black;
+  float: left;
+  margin-right: 25px;
+  margin-bottom: 30px;
+}
+
+#save-profile {
+  float: right;
+  margin-right: 120px;
+}
+
+#register-button {
+  background-color: #4CAF50;
+  border: 5px solid rgb(10, 127, 10);
+  border-radius: 20px;
+  color: white;
+  padding: 15px 32px;
+  text-align: center;
+  text-decoration: none;
+  display: inline-block;
+  font-size: 16px;
+  margin: 4px 2px;
+  cursor: pointer;
+}
+
+#button-layout>div {
+  float: left;
+  width: 200px;
+  height: 66px;
+}
+
+#button-layout a {
+  position: relative;
+  top: 20px;
+}
+
+
+.button-form {
+  text-align: right;
+  width: 350px;
+}
+
+.button-form div {
+  float: left;
+}
+
+.completeorder-btn {
+  width: 100px;
+  height: 50px;
+  float: none;
+}
+
+ /* The switch - the box around the slider */
+ .switch {
+  position: relative;
+  display: inline-block;
+
+  width: 50px;
+  height: 25px;
+}
+
+/* Hide default HTML checkbox */
+.switch input {display:none;}
+
+/* The slider */
+.slider {
+  position: absolute;
+  cursor: pointer;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: #ccc;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+.slider:before {
+  position: absolute;
+  content: "";
+  height: 19px;
+  width: 19px;
+  left: 4px;
+  bottom: 3px;
+  background-color: white;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+input:checked + .slider {
+  background-color: #1E7B25;
+}
+
+input:focus + .slider {
+  box-shadow: 0 0 1px #1E7B25;
+}
+
+input:checked + .slider:before {
+  -webkit-transform: translateX(23px);
+  -ms-transform: translateX(23px);
+  transform: translateX(23px);
+}
+
+/* Rounded sliders */
+.slider.round {
+  border-radius: 34px;
+}
+
+.slider.round:before {
+  border-radius: 50%;
+}
+
+/* Menu Order */
+.menu-order {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  font-size: 12px;
+  border-spacing: 20px 12px;
+}
+
+.menu-order-column {
+  height: 100%;
+}
+
+.menu-order-cell {
+  display: table-cell;
+  position: relative;
+  text-align: left;
+  font-weight: bold;
+}
+
+.menu-order-number
+{
+    position: relative;
+    display: block;
+    width: 50px;
+    height: 50px;
+    border-radius: 25px; /* or 50% */
+    text-align: center;
+    margin-left: auto;
+    margin-right: auto;
+    background-color: #311B92;
+    color: #ffffff;
+    line-height: 50px;
+}
+
+.menu-order-title
+{
+    position: relative;
+    display: inline-block;
+}
+
+#next-button-text {
+  line-height: 20px;
+  width: 75%;
+  padding-right: 1px;
+}
+
+input.next-button {
+  width: 20%;
+  height: 30px;
+  line-height: 20px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+  display: inline-block;
+}
+
+table, th, td {
+  table-layout: auto !important;
+  width: 100% auto !important;
+  max-width:100%;
+  white-space:nowrap;
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+
+.pref-button {
+  width: 21px;
+  height: 21px;
+  vertical-align: middle;
+  border: none;
+  display: inline-block;
+}
+
+/** Rating **/
+.starRating:not(old){
+  display        : inline-block;
+  width          : 7.5em;
+  height         : 1.5em;
+  overflow       : hidden;
+  vertical-align : bottom;
+}
+
+.starRating:not(old) > input{
+  margin-right : -100%;
+  opacity      : 0;
+}
+
+.starRating:not(old) > label{
+  display         : block;
+  float           : right;
+  position        : relative;
+  background      : url('../img/star-off.svg');
+  background-size : contain;
+}
+
+.starRating:not(old) > label:before{
+  content         : '';
+  display         : block;
+  width           : 1.5em;
+  height          : 1.5em;
+  background      : url('../img/star-on.svg');
+  background-size : contain;
+  opacity         : 0;
+  transition      : opacity 0.2s linear;
+}
+
+.starRating:not(old) > label:hover:before,
+.starRating:not(old) > label:hover ~ label:before,
+.starRating:not(:hover) > :checked ~ label:before{
+  opacity : 1;
+}
+
+/* Font customization */
+/* latin */
+@font-face {
+  font-family: 'Geo';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Geo'), local('Geo-Regular'), url(./fonts/geo.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
+
+/* devanagari */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
diff --git a/Tubes2/web/css/style_old.css b/Tubes2/web/css/style_old.css
new file mode 100644
index 0000000000000000000000000000000000000000..7ee8d5f20ad0ad8b49088c590ce18c398f09c1d8
--- /dev/null
+++ b/Tubes2/web/css/style_old.css
@@ -0,0 +1,614 @@
+@charset "UTF-8";
+
+/* Font customization */
+/* latin */
+@font-face {
+  font-family: 'Geo';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Geo'), local('Geo-Regular'), url(./fonts/geo.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
+
+/* devanagari */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Mukta';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Mukta Regular'), local('Mukta-Regular'), url(./fonts/mukta1.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
+}
+
+/* Body style */
+
+body {
+  width: 470px;
+  margin: auto;
+  font-family: 'Mutka', sans-serif;
+}
+
+textarea {
+  resize: none;
+  width: 100%;
+  margin-bottom: 10px;
+}
+
+/* Order Header */
+  .progress-container {
+    width: fit-content;
+    border-collapse:separate;
+    border-spacing: 10px 10px;
+    display: table;
+  }
+
+  .progress {
+    width: 30%;
+    height: 50px;
+    font-size: 105%;
+    border: 1px solid black;
+    text-align: left;
+    vertical-align: middle;
+    display: table-cell;
+  }
+
+  .progress-num {
+    display:inline-block;
+    background-color: #DDD;
+    width: 35px;
+    height: 35px;
+    border-radius: 100%;
+    margin: 0px 5px;
+    line-height: 200%;
+    text-align: center;
+    vertical-align: middle;
+  }
+
+  .selected {
+    background-color: #FFFF44;
+  }
+
+/* Header style */
+
+.header-box {
+  height: fit-content content-box;
+  width: fit-content content-box;
+  margin-left: auto;
+  margin-right: auto;
+  margin-top: none;
+  margin-bottom: none;
+  column-count: 2;
+  -moz-column-count: 2;
+  -webkit-column-count: 2;
+  -webkit-column-span: all; /* Chrome, Safari, Opera */
+  column-span: all;
+  column-gap: 40px;
+}
+
+.col-header-left {
+  width: 50% content-box;
+  float: left;
+  vertical-align: middle;
+}
+
+.logo-title {
+  font-family: 'Geo', sans-serif;
+  font-weight: bold;
+  font-size: 250%;
+  color: #5A1E83;
+}
+
+.tagline {
+  color: #311B92;
+}
+
+.col-header-right {
+  width: 50% content-box;
+  float: right;
+  text-align: right;
+  vertical-align: middle;
+  line-height: 2;
+}
+
+/* Menu style */
+
+.menu {
+  width: 100%;
+  display: table;
+  table-layout: fixed;
+}
+
+.menu > div.menu-column {
+  display: table-column;
+}
+
+.menu > div.menu-cell {
+  display: table-cell;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+  line-height: 50px;
+  text-align: center;
+  font-weight: bold;
+  border-style: solid;
+  border-width: 1px;
+}
+
+.menu-item:hover, .menu-item#selected {
+  color: #ffffff;
+  border-color: #000000;
+  background-color: #5A1E83;
+}
+
+/* Footer style */
+.footer {
+  width: 100% fit-content;
+  display: inline-block;
+  column-count: 3;
+  column-span: all;
+  column-gap: 1.5em;
+  column-rule-style: solid;
+  border-style: solid;
+  border-width: 2px;
+  margin: auto;
+}
+
+.footer > div {
+  text-align: center;
+  font-weight: bold;
+  font-family: 'Mukta', sans-serif;
+  vertical-align: middle;
+}
+
+.img-chooser {
+  padding-top: 20px;
+}
+
+/* Container */
+.container {
+  width: inherit;
+}
+
+.header {
+  line-height: 1.5;
+  text-transform: uppercase;
+}
+
+.selectdriver-header {
+  text-transform: uppercase;
+  font-weight: bold;
+}
+
+.edit-profile-container {
+  font-family: Verdana;
+}
+
+.edit-profile-header {
+  text-transform: uppercase;
+  font-weight: bold;
+  width: 100%;
+  font-size: 170%;
+}
+
+.edit-profile-btm {
+  clear: both;
+}
+
+.form-editprofile{
+  margin: 5px 0;
+}
+
+
+
+.ep-textarea{
+  width: 60%;
+  float: right;
+  clear: both;
+}
+
+.content-layout {
+  background-color: rgb(124, 206, 43);
+  padding: 50px;
+  border: 10px solid rgb(10, 127, 10);
+  border-radius: 100px;
+  width: 350px;
+}
+
+.title {
+  height: 27px;
+  padding: 0px 20px;
+}
+
+.title>div>h1 {
+  text-align: center;
+  margin-top: 0px;
+  width: 100px;
+  float: left;
+}
+
+.title>div>hr {
+  float:left;
+  position: relative;
+  width: 100px;
+  top: 5px;
+  background-color: rgb(10, 127, 10);
+  height: 5px;
+  border: none;
+}
+
+.form-layout {
+  clear: left;
+}
+
+.form-input {
+  width: 350px;
+  margin-bottom: 5px;
+}
+
+.form-input>div {
+  float: left;
+  width: 130px;
+}
+
+.form-input>input {
+  width: 198px;
+}
+
+.driver-checkbox {
+  margin: 20px 0px;
+}
+
+.driver-checkbox>input {
+  float: left;
+  margin-left: 0px;
+}
+
+
+.cancel-button {
+  width: 75px;
+  height: 30px;
+  text-align: center;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #D2002E;
+  border-radius: 10px;
+}
+
+.accept-button {
+  width: 75px;
+  height: 30px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+}
+
+
+.driver-completeorder-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+}
+
+.completeorder-container {
+  text-align: center;
+  clear: both;
+}
+
+.right-align {
+  width: 100%;
+  text-align: right;
+}
+
+.driver-fullname-disp {
+  font-size: 105%;
+  font-weight: bold;
+  margin-top: 5px;
+}
+
+/*Select driver*/
+.select-driver {
+  width: fit-content;
+  padding: 0 10px;
+  border-radius: 12px;
+  border: 1px solid black;
+  margin: 10px 0;
+}
+
+.driver-content {
+  height: 120px;
+  overflow: hidden;
+}
+
+.driver-pic {
+  height: 100px;
+  width: 100px;
+  margin: 10px;
+  border-radius: 100%;
+  border: 3px solid #5A1E83;
+  float: left;
+}
+
+.driver-name-disp {
+  font-size: 160%;
+  font-weight: bold;
+  margin-top: 10px;
+}
+
+.driver-rating-disp {
+  color: orange;
+  font-size: 110%;
+}
+
+.driver-not-found {
+  color: grey;
+  height: 70px;
+  text-align: center;
+  text-transform: none;
+  line-height: 70px;
+  vertical-align: middle;
+}
+
+.vote-disp {
+  color: black;
+}
+
+.select-driver-btn {
+  width: auto;
+  color: white;
+  background-color: #5A1E83;
+  letter-spacing: 0.5px;
+  float: right;
+}
+
+.order-btn {
+  float: none;
+  clear: both;
+}
+
+#profile-pic {
+  width: 150px;
+  height: 150px;
+  border: 1px solid black;
+  float: left;
+  margin-right: 25px;
+  margin-bottom: 30px;
+}
+
+#save-profile {
+  float: right;
+}
+
+#register-button {
+  background-color: #4CAF50;
+  border: 5px solid rgb(10, 127, 10);
+  border-radius: 20px;
+  color: white;
+  padding: 15px 32px;
+  text-align: center;
+  text-decoration: none;
+  display: inline-block;
+  font-size: 16px;
+  margin: 4px 2px;
+  cursor: pointer;
+}
+
+#button-layout>div {
+  float: left;
+  width: 200px;
+  height: 66px;
+}
+
+#button-layout a {
+  position: relative;
+  top: 20px;
+}
+
+
+.button-form {
+  text-align: right;
+  width: 100%;
+}
+
+.button-form div {
+  float: left;
+}
+
+.completeorder-btn {
+  width: 100px;
+  height: 50px;
+  float: none;
+}
+
+ /* The switch - the box around the slider */
+ .switch {
+  position: relative;
+  display: inline-block;
+
+  width: 50px;
+  height: 25px;
+}
+
+/* Hide default HTML checkbox */
+.switch input {display:none;}
+
+/* The slider */
+.slider {
+  position: absolute;
+  cursor: pointer;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: #ccc;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+.slider:before {
+  position: absolute;
+  content: "";
+  height: 19px;
+  width: 19px;
+  left: 4px;
+  bottom: 3px;
+  background-color: white;
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+
+input:checked + .slider {
+  background-color: #1E7B25;
+}
+
+input:focus + .slider {
+  box-shadow: 0 0 1px #1E7B25;
+}
+
+input:checked + .slider:before {
+  -webkit-transform: translateX(23px);
+  -ms-transform: translateX(23px);
+  transform: translateX(23px);
+}
+
+/* Rounded sliders */
+.slider.round {
+  border-radius: 34px;
+}
+
+.slider.round:before {
+  border-radius: 50%;
+}
+
+/* Menu Order */
+.menu-order {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  font-size: 12px;
+  border-spacing: 20px 12px;
+}
+
+.menu-order-column {
+  height: 100%;
+}
+
+.menu-order-cell {
+  display: table-cell;
+  position: relative;
+  text-align: left;
+  font-weight: bold;
+}
+
+.menu-order-number
+{
+    position: relative;
+    display: block;
+    width: 50px;
+    height: 50px;
+    border-radius: 25px; /* or 50% */
+    text-align: center;
+    margin-left: auto;
+    margin-right: auto;
+    background-color: #311B92;
+    color: #ffffff;
+    line-height: 50px;
+}
+
+.menu-order-title
+{
+    position: relative;
+    display: inline-block;
+}
+
+#next-button-text {
+  line-height: 20px;
+  width: 75%;
+  padding-right: 1px;
+}
+
+input.next-button {
+  width: 20%;
+  height: 30px;
+  line-height: 20px;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  border: 1px solid black;
+  background-color: #83D535;
+  border-radius: 10px;
+  display: inline-block;
+}
+
+table, th, td {
+  table-layout: auto !important;
+  width: 100% auto !important;
+  max-width:100%;
+  white-space:nowrap;
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+
+.pref-button {
+  width: 21px;
+  height: 21px;
+  vertical-align: middle;
+  border: none;
+  display: inline-block;
+}
+
+/** Rating **/
+.starRating:not(old){
+  display        : inline-block;
+  width          : 7.5em;
+  height         : 1.5em;
+  overflow       : hidden;
+  vertical-align : bottom;
+}
+
+.starRating:not(old) > input{
+  margin-right : -100%;
+  opacity      : 0;
+}
+
+.starRating:not(old) > label{
+  display         : block;
+  float           : right;
+  position        : relative;
+  background      : url('../img/star-off.svg');
+  background-size : contain;
+}
+
+.starRating:not(old) > label:before{
+  content         : '';
+  display         : block;
+  width           : 1.5em;
+  height          : 1.5em;
+  background      : url('../img/star-on.svg');
+  background-size : contain;
+  opacity         : 0;
+  transition      : opacity 0.2s linear;
+}
+
+.starRating:not(old) > label:hover:before,
+.starRating:not(old) > label:hover ~ label:before,
+.starRating:not(:hover) > :checked ~ label:before{
+  opacity : 1;
+}
diff --git a/Tubes2/web/img/.gitkeep b/Tubes2/web/img/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes2/web/img/a b/Tubes2/web/img/a
new file mode 100644
index 0000000000000000000000000000000000000000..33aea4c0776f5cb48d23fab288743ca549d3092e
Binary files /dev/null and b/Tubes2/web/img/a differ
diff --git a/Tubes2/web/img/admin b/Tubes2/web/img/admin
new file mode 100644
index 0000000000000000000000000000000000000000..dd3fea2721dfc529ad21300b36bada01e362032d
Binary files /dev/null and b/Tubes2/web/img/admin differ
diff --git a/Tubes2/web/img/delete.png b/Tubes2/web/img/delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8998a18f10f6e0e754cdf3f06794b299e90a1b9
Binary files /dev/null and b/Tubes2/web/img/delete.png differ
diff --git a/Tubes2/web/img/driver1 b/Tubes2/web/img/driver1
new file mode 100644
index 0000000000000000000000000000000000000000..8de4beb39862ac7125f2339dcb1c9b32ab7f90f8
Binary files /dev/null and b/Tubes2/web/img/driver1 differ
diff --git a/Tubes2/web/img/edit.png b/Tubes2/web/img/edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..919913bc0052626f61433d69128dc17ac739450b
Binary files /dev/null and b/Tubes2/web/img/edit.png differ
diff --git a/Tubes2/web/img/images.jpg b/Tubes2/web/img/images.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..30b7ce2cd13386017b2fa5d56503d42e4c25ea1d
Binary files /dev/null and b/Tubes2/web/img/images.jpg differ
diff --git a/Tubes2/web/img/motaraido.png b/Tubes2/web/img/motaraido.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b72f7e2abdd5f8ea4d11911d7c6ad9260be5262
Binary files /dev/null and b/Tubes2/web/img/motaraido.png differ
diff --git a/Tubes2/web/img/pen.png b/Tubes2/web/img/pen.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2bcdf9ca880be6a8d6d687245ec080d4d711240
Binary files /dev/null and b/Tubes2/web/img/pen.png differ
diff --git a/Tubes2/web/img/profilepic.png b/Tubes2/web/img/profilepic.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b72f7e2abdd5f8ea4d11911d7c6ad9260be5262
Binary files /dev/null and b/Tubes2/web/img/profilepic.png differ
diff --git a/Tubes2/web/img/star-off.svg b/Tubes2/web/img/star-off.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9a393aa40d139025bf2324aec47830757facb84a
--- /dev/null
+++ b/Tubes2/web/img/star-off.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">
+  <path fill="#fff" stroke="#ccc" d="M 12,2.5 14.4,9.5 21.5,9.5 15.8,13.75 18.5,21.5 12,16.625 5.5,21.5 8.2,13.75 2.5,9.5 9.6,9.5 z"/>
+</svg>
diff --git a/Tubes2/web/img/star-on.svg b/Tubes2/web/img/star-on.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fac31ff43ec2ba8dff2f36a3b0ae43d92b312533
--- /dev/null
+++ b/Tubes2/web/img/star-on.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">
+  <path fill="#311B92" stroke="#000" d="M 12,2.5 14.4,9.5 21.5,9.5 15.8,13.75 18.5,21.5 12,16.625 5.5,21.5 8.2,13.75 2.5,9.5 9.6,9.5 z"/>
+</svg>
diff --git a/Tubes2/web/img/tes1 b/Tubes2/web/img/tes1
new file mode 100644
index 0000000000000000000000000000000000000000..7352b27d5a4202c3849d34614463b6e94eee7285
Binary files /dev/null and b/Tubes2/web/img/tes1 differ
diff --git a/Tubes2/web/img/winarto b/Tubes2/web/img/winarto
new file mode 100644
index 0000000000000000000000000000000000000000..33aea4c0776f5cb48d23fab288743ca549d3092e
Binary files /dev/null and b/Tubes2/web/img/winarto differ
diff --git a/Tubes2/web/img/yowinarto b/Tubes2/web/img/yowinarto
new file mode 100644
index 0000000000000000000000000000000000000000..8de4beb39862ac7125f2339dcb1c9b32ab7f90f8
Binary files /dev/null and b/Tubes2/web/img/yowinarto differ
diff --git a/Tubes2/web/index.jsp b/Tubes2/web/index.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..f0d6d8208f99c203f66a3cbe780e3e3f3343b6ad
--- /dev/null
+++ b/Tubes2/web/index.jsp
@@ -0,0 +1,23 @@
+<%-- 
+    Document   : index
+    Created on : Nov 4, 2017, 9:23:05 AM
+    Author     : nim_13515091
+--%>
+
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <title>JSP Page</title>
+    </head>
+    <body>
+        <h1>Hello World!</h1>
+        
+        <form name="Name Input Form" action="/Order" method='post'>
+            Enter Your Name:
+            <input type="text" name="name" value="" />
+            <input type="submit" value="OK" />
+        </form>
+    </body>
+</html>
diff --git a/Tubes2/web/js/.gitkeep b/Tubes2/web/js/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tubes2/web/js/app.js b/Tubes2/web/js/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..dbea0f5c367dec9b0cb20f3b11c4ce40644838a3
--- /dev/null
+++ b/Tubes2/web/js/app.js
@@ -0,0 +1,102 @@
+function loginValidation() {
+    var username = document.forms["loginform"]["username"];
+    var pwd = document.forms["loginform"]["password"];
+    var usrVerify = Validate(username, "empty");
+    var pwdVerify = Validate(pwd, "empty");
+    return (usrVerify && pwdVerify);
+}
+
+function editProfileValidation() {
+    var name = document.forms["editprofile-form"]["your-name"];
+    var phone = document.forms["editprofile-form"]["phone-number"];
+    var nameVerify = Validate(name, "empty", 0, 20, "length");
+    var phoneVerify = Validate(phone, "empty", 9, 12, "length");
+    return (nameVerify && phoneVerify);
+}
+
+function Validate(inputArea, type1, min = 0, max = 0, type2 = null, type3 = null) {
+    var error = GetErrorMessage(inputArea.value, type1, min, max);
+    if(error === "") {
+        if (type2 != null) {
+            error = GetErrorMessage(inputArea.value, type2, min, max);
+            console.log(type2 + "length");
+        }
+        if (error === "") {
+            if (type3 != null) {
+                error = GetErrorMessage(inputArea.value, type3, min, max);
+            }
+        }
+    }
+    if(error !== "" && inputArea.nextElementSibling === null) {
+        var errorEl = document.createElement("p");
+        errorEl.innerHTML = error;
+        errorEl.className = "error";
+        insertAfterElement(errorEl, inputArea);
+
+        inputArea.addEventListener("blur", function() {
+            var error = GetErrorMessage(inputArea.value, type1, min, max);
+            if(error === "") {
+                if (type2 != null) {
+                    error = GetErrorMessage(inputArea.value, type2, min, max);
+                }
+                if (error === "") {
+                    if (type3 != null) {
+                        error = GetErrorMessage(inputArea.value, type3, min, max);
+                    }
+                }
+            }
+            if (error === ""){
+                this.nextSibling.remove();
+            }
+        },true);
+    }
+    return (error === "");
+}
+
+function insertAfterElement(el, src) {
+    src.parentNode.insertBefore(el, src.nextSibling);
+}
+
+
+function GetErrorMessage(textArea, type, min = 0, max = 0) {
+    var validateText = "";
+    switch(type) {
+        case "empty" :
+            if(isEmpty(textArea)) {
+                validateText = "Fill in the field";
+            }
+            break;
+        case "email" :
+            if(!isEmail(textArea)) {
+                validatedText = "Invalid Email Address";
+            }
+            break;
+        case "number" :
+            if(isNumber(textArea)){
+                validateText = "Fill in with only number";
+            }
+            break;
+        case "length" :
+            if (!isLengthEqual(textArea,min,max)){
+                validateText = "Character must be between " + min.toString() + " and " + max.toString() + " long";
+            }
+            break;
+    }
+    return validateText;
+}
+
+function isEmpty(textArea) {
+    return (textArea.match(/^s+$/) || textArea == "");
+}
+
+function isNumber(textArea) {
+    return (!isNaN(textArea));
+}
+
+function isLengthEqual(textArea, min, max){
+    return (textArea.length >= min && textArea.length <= max);
+}
+
+function isEmail(textArea) {
+    return (textArea.match(/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/));
+}
\ No newline at end of file
diff --git a/Tubes2/web/js/history.js b/Tubes2/web/js/history.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e4b3f528dfb96a699cdbb10ad6ba0b731005f5a
--- /dev/null
+++ b/Tubes2/web/js/history.js
@@ -0,0 +1,41 @@
+
+function tabActive(tag) {
+	var tabUser = document.getElementById('user-his');
+	var tabDriver = document.getElementById('driver-his');
+	var order = document.getElementsByClassName('order-list');
+	var driver = document.getElementsByClassName('driver-list');
+
+	if (tag == 'user') {
+		order[0].classList.add("active-list");
+		driver[0].classList.remove("active-list");
+		tabUser.classList.add('active');
+		tabDriver.classList.remove('active');
+	}
+	else {
+		driver[0].classList.add("active-list");
+		order[0].classList.remove("active-list");
+		tabDriver.classList.add('active');
+		tabUser.classList.remove('active');
+	}
+}
+
+tabActive('user');
+
+function hideThis(user) {
+	updateHide(user);
+	console.log(user[0]);
+}
+
+function updateHide(history)
+{
+	var data = "user=" + history[0] + "&driver=" + history[1] + "&date=" + history[4];
+    var xhr;
+    if (window.XMLHttpRequest) {
+        xhr = new XMLHttpRequest();
+    } else if (window.ActiveXObject) {
+        xhr = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    xhr.open("GET", "/history/update", true);
+    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                  
+    xhr.send(data);
+}
\ No newline at end of file
diff --git a/Tubes2/web/js/selectdriver.js b/Tubes2/web/js/selectdriver.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d7b38f4833461051ad76f37a3eac112a88b0156
--- /dev/null
+++ b/Tubes2/web/js/selectdriver.js
@@ -0,0 +1,97 @@
+var prefDriver = document.getElementById("pref-driver");
+var otherDriver = document.getElementById("other-driver");
+var driverSumRating = [];
+var driverCountRating = [];
+var driverNameList = [];
+
+for (var i = 0; i < driverArr.length; i++) {
+    for(var j = 0; j < ratingArr.length; j++) {
+        if(driverArr[i] === ratingArr[j]["usernameDriver"]){
+            driverSumRating[driverArr[i]] = (driverSumRating[driverArr[i]] === undefined) ? parseFloat(ratingArr[j]["rating"]) : driverSumRating[driverArr[i]] + parseFloat(ratingArr[j]["rating"]);
+            driverCountRating[driverArr[i]] = (driverCountRating[driverArr[i]] === undefined) ? 1 : driverCountRating[driverArr[i]]+1;
+        }
+    }
+    for(var k = 0; k < driverNameArr.length; k++) {
+        if(driverArr[i] === driverNameArr[k]["username"]){
+            driverNameList[driverArr[i]] = driverNameArr[k]["fullname"];
+            break;
+        }
+    }
+}
+
+for(var j = 0; j < ratingArr.length; j++) {
+    if(preferredDriver === ratingArr[j]["usernameDriver"]){
+        driverSumRating[preferredDriver] = (driverSumRating[preferredDriver] === undefined) ? parseFloat(ratingArr[j]["rating"]) : driverSumRating[preferredDriver] + parseFloat(ratingArr[j]["rating"]);
+        driverCountRating[preferredDriver] = (driverCountRating[preferredDriver] === undefined) ? 1 : driverCountRating[preferredDriver]+1;
+    }
+}
+for(var k = 0; k < driverNameArr.length; k++) {
+    if(preferredDriver === driverNameArr[k]["username"]){
+        driverNameList[preferredDriver] = driverNameArr[k]["fullname"];
+        break;
+    }
+}
+
+if(preferredDriver !== "") {
+    CreateDriverDisplay(prefDriver, preferredDriver);
+} else {
+    CreateNotFoundDisplay(prefDriver);
+}
+
+if(driverArr.length > 0) {
+    for (var i = 0; i < driverArr.length; i++) {
+        CreateDriverDisplay(otherDriver, driverArr[i]);
+    }
+} else {
+    CreateNotFoundDisplay(otherDriver);
+}
+
+function CreateDriverDisplay(driverType, driverUsrName) {
+    var newForm = driverType.appendChild(document.createElement("form"));
+    var newContainer = newForm.appendChild(document.createElement("div"));
+    var newImg = newContainer.appendChild(document.createElement("img"));
+    var newName = newContainer.appendChild(document.createElement("div"));
+    var newRating = newContainer.appendChild(document.createElement("div"));
+    var postUsrName = newContainer.appendChild(document.createElement("input"));
+    var newPickLoc = newContainer.appendChild(document.createElement("input"));
+    var newDest = newContainer.appendChild(document.createElement("input"));
+    var newBtn = newContainer.appendChild(document.createElement("input"));
+
+
+    var avgRating = (driverSumRating[driverUsrName]/driverCountRating[driverUsrName]).toFixed(1).toString();
+
+    newForm.setAttribute('method', 'post');
+    newForm.setAttribute('action', '/order/' + user + '/completeorder');
+    newContainer.classList.add("driver-content");
+
+    newImg.classList.add("driver-pic");
+    newImg.setAttribute('src', '/public/img/' + driverUsrName);
+
+    newName.classList.add("driver-name-disp");
+    newName.innerHTML = driverNameList[driverUsrName];
+
+    newRating.classList.add("driver-rating-disp");
+    newRating.innerHTML = "★" + avgRating + " <span class='vote-disp'>(" + driverCountRating[driverUsrName] + " votes)</span>";
+
+    postUsrName.setAttribute('type', 'hidden');
+    postUsrName.setAttribute('name', 'driver-username');
+    postUsrName.setAttribute('value', driverUsrName);
+
+    newPickLoc.setAttribute('type','hidden');
+    newPickLoc.setAttribute('name','pickLoc');
+    newPickLoc.setAttribute('value', pickLoc);
+    newDest.setAttribute('type','hidden');
+    newDest.setAttribute('name','dest');
+    newDest.setAttribute('value', dest);
+
+    newBtn.classList.add("accept-button");
+    newBtn.classList.add("select-driver-btn");
+    newBtn.setAttribute('type','submit');
+    newBtn.setAttribute('value','Select Driver');
+}
+
+function CreateNotFoundDisplay(driverType) {
+    var newContainer = driverType.appendChild(document.createElement("div"));
+    newContainer.classList.add("driver-not-found");
+    newContainer.innerHTML = "Nothing to display.";
+}
\ No newline at end of file
diff --git a/Tubes2/web/js/signup.js b/Tubes2/web/js/signup.js
new file mode 100644
index 0000000000000000000000000000000000000000..43a9342a95538b30e1b8bf663cf3fc0a0b62718f
--- /dev/null
+++ b/Tubes2/web/js/signup.js
@@ -0,0 +1,44 @@
+function checkData(name, element)
+{
+    var data = "?" + name + "=" + document.forms["signupform"][name].value;
+    var xhr;
+    if (window.XMLHttpRequest) {
+        xhr = new XMLHttpRequest();
+    } else if (window.ActiveXObject) {
+        xhr = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    
+    xhr.open("GET", "/validation" + data, true); 
+    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                  
+    xhr.send(null);
+    xhr.onload = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                if (xhr.responseText === 'OK') { 
+                    document.getElementById(element).innerHTML = "√";
+                } else {
+                    document.getElementById(element).innerHTML = "X";
+                }
+            } 
+            else {
+                alert('There was a problem with the request.');
+            }
+        }
+    }
+}
+
+function signupValidation() {
+    var username = document.forms["signupform"]["username"];
+    var password = document.forms["signupform"]["password"];
+    var cpassword = document.forms["signupform"]["confirm-password"];
+    var email = document.forms["signupform"]["email"];
+    var fullname = document.forms["signupform"]["your-name"];
+    var phone = document.forms["signupform"]["phone"];
+    var usrVerify = Validate(username, "empty");
+    var pwdVerify = Validate(password, "empty");
+    var cpwdVerify = Validate(cpassword, "empty");
+    var emailVerify = Validate(email, "empty", 0, 0, "email");
+    var fullnameVerify = Validate(fullname, "empty", 0, 20, "length");
+    var phoneVerify = Validate(phone, "empty", 9, 12, "length");
+    return (usrVerify && pwdVerify && cpwdVerify && emailVerify && fullnameVerify && phoneVerify);
+}
\ No newline at end of file