diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php
index 1ab00ca5f1..6891ce730e 100644
--- a/src/__celerity_resource_map__.php
+++ b/src/__celerity_resource_map__.php
@@ -1,4376 +1,4378 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'celerity_mapper.php' to rebuild
  * it.
  * @generated
  */
 
 celerity_register_resource_map(array(
   '/rsrc/image/actions/edit.png' =>
   array(
     'hash' => 'ae90914d120ac3838ddc633b480343f3',
     'uri' => '/res/ae90914d/rsrc/image/actions/edit.png',
     'disk' => '/rsrc/image/actions/edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/apple-touch-icon.png' =>
   array(
     'hash' => '3380adf2dd4a5efa0885618bc5943640',
     'uri' => '/res/3380adf2/rsrc/image/apple-touch-icon.png',
     'disk' => '/rsrc/image/apple-touch-icon.png',
     'type' => 'png',
   ),
   '/rsrc/image/avatar.png' =>
   array(
     'hash' => '1c5f255071537f05406adee86717ff27',
     'uri' => '/res/1c5f2550/rsrc/image/avatar.png',
     'disk' => '/rsrc/image/avatar.png',
     'type' => 'png',
   ),
   '/rsrc/image/checker_dark.png' =>
   array(
     'hash' => '640f795343df76ebe5409aae6187e57f',
     'uri' => '/res/640f7953/rsrc/image/checker_dark.png',
     'disk' => '/rsrc/image/checker_dark.png',
     'type' => 'png',
   ),
   '/rsrc/image/checker_light.png' =>
   array(
     'hash' => '7f8f3ef8beb0f2cc4cc69efb9e1c3308',
     'uri' => '/res/7f8f3ef8/rsrc/image/checker_light.png',
     'disk' => '/rsrc/image/checker_light.png',
     'type' => 'png',
   ),
   '/rsrc/image/credit_cards.png' =>
   array(
     'hash' => '681448de424ea159b6ea68af04c046ae',
     'uri' => '/res/681448de/rsrc/image/credit_cards.png',
     'disk' => '/rsrc/image/credit_cards.png',
     'type' => 'png',
   ),
   '/rsrc/image/darkload.gif' =>
   array(
     'hash' => '3a52cb7145d6e70f461fed21273117f2',
     'uri' => '/res/3a52cb71/rsrc/image/darkload.gif',
     'disk' => '/rsrc/image/darkload.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/divot.png' =>
   array(
     'hash' => '3be267bd11ea375bf68e808893718e0e',
     'uri' => '/res/3be267bd/rsrc/image/divot.png',
     'disk' => '/rsrc/image/divot.png',
     'type' => 'png',
   ),
   '/rsrc/image/grippy_texture.png' =>
   array(
     'hash' => 'a8945e12ceeaddd5b491a8d81cfa19c1',
     'uri' => '/res/a8945e12/rsrc/image/grippy_texture.png',
     'disk' => '/rsrc/image/grippy_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/arrow_branch.png' =>
   array(
     'hash' => 'f27b67520766e3d971722bcff703f3a8',
     'uri' => '/res/f27b6752/rsrc/image/icon/fatcow/arrow_branch.png',
     'disk' => '/rsrc/image/icon/fatcow/arrow_branch.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/arrow_merge.png' =>
   array(
     'hash' => 'c4bd97f3b1257439e2123ef69d2194d0',
     'uri' => '/res/c4bd97f3/rsrc/image/icon/fatcow/arrow_merge.png',
     'disk' => '/rsrc/image/icon/fatcow/arrow_merge.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_black.png' =>
   array(
     'hash' => '718f9c560a13766796f1be7dfaadeeab',
     'uri' => '/res/718f9c56/rsrc/image/icon/fatcow/bullet_black.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_black.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_orange.png' =>
   array(
     'hash' => 'c3bf91b65baacb27f2af143ab9180119',
     'uri' => '/res/c3bf91b6/rsrc/image/icon/fatcow/bullet_orange.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_orange.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_red.png' =>
   array(
     'hash' => '00273e4aa6ea3de630295610d6c9560c',
     'uri' => '/res/00273e4a/rsrc/image/icon/fatcow/bullet_red.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_red.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/calendar_edit.png' =>
   array(
     'hash' => 'de249c0f4f37bf5b2c69ff39ec5573fb',
     'uri' => '/res/de249c0f/rsrc/image/icon/fatcow/calendar_edit.png',
     'disk' => '/rsrc/image/icon/fatcow/calendar_edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/document_black.png' =>
   array(
     'hash' => '44d65a7f05a9c921719deedc160d68f7',
     'uri' => '/res/44d65a7f/rsrc/image/icon/fatcow/document_black.png',
     'disk' => '/rsrc/image/icon/fatcow/document_black.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_blue.png' =>
   array(
     'hash' => '75a080492f900fbe489e4b27e403962b',
     'uri' => '/res/75a08049/rsrc/image/icon/fatcow/flag_blue.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_blue.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_finish.png' =>
   array(
     'hash' => '4af11fc7fab8e4610cbc3c88a02d4f78',
     'uri' => '/res/4af11fc7/rsrc/image/icon/fatcow/flag_finish.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_finish.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_ghost.png' =>
   array(
     'hash' => '14c9f30a37b43f276f27a27a924bf02d',
     'uri' => '/res/14c9f30a/rsrc/image/icon/fatcow/flag_ghost.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_ghost.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_green.png' =>
   array(
     'hash' => 'fed01374cd396cb774872762dcc447e1',
     'uri' => '/res/fed01374/rsrc/image/icon/fatcow/flag_green.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_green.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_orange.png' =>
   array(
     'hash' => '88008cb8bb99761a37e5a743e2455aeb',
     'uri' => '/res/88008cb8/rsrc/image/icon/fatcow/flag_orange.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_orange.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_pink.png' =>
   array(
     'hash' => '2f199f06ffc3dfc81b7561a057e0bc33',
     'uri' => '/res/2f199f06/rsrc/image/icon/fatcow/flag_pink.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_pink.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_purple.png' =>
   array(
     'hash' => '16358629dc86c39550b575586eb5df80',
     'uri' => '/res/16358629/rsrc/image/icon/fatcow/flag_purple.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_purple.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_red.png' =>
   array(
     'hash' => '210c28b4d93c439a499f5814f5e05772',
     'uri' => '/res/210c28b4/rsrc/image/icon/fatcow/flag_red.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_red.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_yellow.png' =>
   array(
     'hash' => 'bdfd73744a80bb80329ae50bc8a5f962',
     'uri' => '/res/bdfd7374/rsrc/image/icon/fatcow/flag_yellow.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_yellow.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/folder.png' =>
   array(
     'hash' => '25e46cf9d210dde2242332296f79938c',
     'uri' => '/res/25e46cf9/rsrc/image/icon/fatcow/folder.png',
     'disk' => '/rsrc/image/icon/fatcow/folder.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/folder_go.png' =>
   array(
     'hash' => 'ba922ff7959309f51a14cb7ed5124d8b',
     'uri' => '/res/ba922ff7/rsrc/image/icon/fatcow/folder_go.png',
     'disk' => '/rsrc/image/icon/fatcow/folder_go.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/key_question.png' =>
   array(
     'hash' => '530a6448a4b91edec091a9292ccfd3d9',
     'uri' => '/res/530a6448/rsrc/image/icon/fatcow/key_question.png',
     'disk' => '/rsrc/image/icon/fatcow/key_question.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/link.png' =>
   array(
     'hash' => 'be1bea49b216548433014f3324902928',
     'uri' => '/res/be1bea49/rsrc/image/icon/fatcow/link.png',
     'disk' => '/rsrc/image/icon/fatcow/link.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_edit.png' =>
   array(
     'hash' => 'e7b7e7f2d9730bc80bc5c9eac1f3e36d',
     'uri' => '/res/e7b7e7f2/rsrc/image/icon/fatcow/page_white_edit.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_link.png' =>
   array(
     'hash' => '1cfbad14412bda6c6f132dcc7c8725fd',
     'uri' => '/res/1cfbad14/rsrc/image/icon/fatcow/page_white_link.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_link.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_put.png' =>
   array(
     'hash' => 'bb7308aa5ac40137a8262da395a267fd',
     'uri' => '/res/bb7308aa/rsrc/image/icon/fatcow/page_white_put.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_put.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_text.png' =>
   array(
     'hash' => 'e47d590b626f617fb7d1d44e96e8fd11',
     'uri' => '/res/e47d590b/rsrc/image/icon/fatcow/page_white_text.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_text.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/conduit.png' =>
   array(
     'hash' => '1cae0656580aa3cd0b54b9d98306b1b9',
     'uri' => '/res/1cae0656/rsrc/image/icon/fatcow/source/conduit.png',
     'disk' => '/rsrc/image/icon/fatcow/source/conduit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/email.png' =>
   array(
     'hash' => '93bdb3e168da1ed68f50c42125729d4e',
     'uri' => '/res/93bdb3e1/rsrc/image/icon/fatcow/source/email.png',
     'disk' => '/rsrc/image/icon/fatcow/source/email.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/fax.png' =>
   array(
     'hash' => 'd7dedf229841f2d041b347afd881596f',
     'uri' => '/res/d7dedf22/rsrc/image/icon/fatcow/source/fax.png',
     'disk' => '/rsrc/image/icon/fatcow/source/fax.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/mobile.png' =>
   array(
     'hash' => '786e7146d1e7d7318baf76c9d2baad97',
     'uri' => '/res/786e7146/rsrc/image/icon/fatcow/source/mobile.png',
     'disk' => '/rsrc/image/icon/fatcow/source/mobile.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/tablet.png' =>
   array(
     'hash' => '374cd40e4965be6b2fbdef4059d0ca05',
     'uri' => '/res/374cd40e/rsrc/image/icon/fatcow/source/tablet.png',
     'disk' => '/rsrc/image/icon/fatcow/source/tablet.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/web.png' =>
   array(
     'hash' => 'f4882a8f5619ba505ca033f72a340635',
     'uri' => '/res/f4882a8f/rsrc/image/icon/fatcow/source/web.png',
     'disk' => '/rsrc/image/icon/fatcow/source/web.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/default160x120.png' =>
   array(
     'hash' => '1b52ebd1fe0eee3ed0abfc382991b265',
     'uri' => '/res/1b52ebd1/rsrc/image/icon/fatcow/thumbnails/default160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/default160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/default60x45.png' =>
   array(
     'hash' => '048d851d8d1daad4754e891e734c1899',
     'uri' => '/res/048d851d/rsrc/image/icon/fatcow/thumbnails/default60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/default60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/image160x120.png' =>
   array(
     'hash' => '434acbd8dbbc2da9f09f6205a396eba1',
     'uri' => '/res/434acbd8/rsrc/image/icon/fatcow/thumbnails/image160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/image160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/image60x45.png' =>
   array(
     'hash' => '29f7872dc53588fe0b8f0b330c7ee23a',
     'uri' => '/res/29f7872d/rsrc/image/icon/fatcow/thumbnails/image60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/image60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png' =>
   array(
     'hash' => '39d2e22541658a3472ba41ae2fa548e5',
     'uri' => '/res/39d2e225/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png' =>
   array(
     'hash' => 'b3572e9317cbed5184d12bdfabed2727',
     'uri' => '/res/b3572e93/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png' =>
   array(
     'hash' => 'e505108688a903b5cfb674707a289bcc',
     'uri' => '/res/e5051086/rsrc/image/icon/fatcow/thumbnails/zip160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png' =>
   array(
     'hash' => 'f00716f4e8f7a95e70d43504f06be0a6',
     'uri' => '/res/f00716f4/rsrc/image/icon/fatcow/thumbnails/zip60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/close-2.png' =>
   array(
     'hash' => '72ff3ddcc1ed5d19a715ed6242114b53',
     'uri' => '/res/72ff3ddc/rsrc/image/icon/lightbox/close-2.png',
     'disk' => '/rsrc/image/icon/lightbox/close-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/close-hover-2.png' =>
   array(
     'hash' => '6ad4bd4a7820547a1d9041752546ba16',
     'uri' => '/res/6ad4bd4a/rsrc/image/icon/lightbox/close-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/close-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/left-arrow-2.png' =>
   array(
     'hash' => 'd84cbb0d42739f87b8f25b2f1d2f1153',
     'uri' => '/res/d84cbb0d/rsrc/image/icon/lightbox/left-arrow-2.png',
     'disk' => '/rsrc/image/icon/lightbox/left-arrow-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/left-arrow-hover-2.png' =>
   array(
     'hash' => 'cdf05f98fff3f390cd8df0c89894a3e1',
     'uri' => '/res/cdf05f98/rsrc/image/icon/lightbox/left-arrow-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/left-arrow-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/right-arrow-2.png' =>
   array(
     'hash' => '52021038cb6995c71f62a804bc2d420d',
     'uri' => '/res/52021038/rsrc/image/icon/lightbox/right-arrow-2.png',
     'disk' => '/rsrc/image/icon/lightbox/right-arrow-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/right-arrow-hover-2.png' =>
   array(
     'hash' => '65d5756b7b9cfcdeb2eb197a9aa6bbd2',
     'uri' => '/res/65d5756b/rsrc/image/icon/lightbox/right-arrow-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/right-arrow-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/subscribe.png' =>
   array(
     'hash' => '5f47a4b17de245af39a4e7a097e40623',
     'uri' => '/res/5f47a4b1/rsrc/image/icon/subscribe.png',
     'disk' => '/rsrc/image/icon/subscribe.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/attachment.png' =>
   array(
     'hash' => '776fed2de89803fd8a0ba4b9deede230',
     'uri' => '/res/776fed2d/rsrc/image/icon/tango/attachment.png',
     'disk' => '/rsrc/image/icon/tango/attachment.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/edit.png' =>
   array(
     'hash' => 'c0028d99dcf4e9559bbf3c88ce2d8a8d',
     'uri' => '/res/c0028d99/rsrc/image/icon/tango/edit.png',
     'disk' => '/rsrc/image/icon/tango/edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/go-down.png' =>
   array(
     'hash' => '96862812cbb0445573c264dc057b8300',
     'uri' => '/res/96862812/rsrc/image/icon/tango/go-down.png',
     'disk' => '/rsrc/image/icon/tango/go-down.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/log.png' =>
   array(
     'hash' => 'a6f72499bef279ff6807a7dbc5148f1e',
     'uri' => '/res/a6f72499/rsrc/image/icon/tango/log.png',
     'disk' => '/rsrc/image/icon/tango/log.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/upload.png' =>
   array(
     'hash' => '8c11b63d6d99db3d7159c5d9a94e3062',
     'uri' => '/res/8c11b63d/rsrc/image/icon/tango/upload.png',
     'disk' => '/rsrc/image/icon/tango/upload.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/unsubscribe.png' =>
   array(
     'hash' => '29429ad65aa3af50b072b32087057361',
     'uri' => '/res/29429ad6/rsrc/image/icon/unsubscribe.png',
     'disk' => '/rsrc/image/icon/unsubscribe.png',
     'type' => 'png',
   ),
   '/rsrc/image/loading.gif' =>
   array(
     'hash' => '664297671941142f37d8c89e717ff2ce',
     'uri' => '/res/66429767/rsrc/image/loading.gif',
     'disk' => '/rsrc/image/loading.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/loading_24.gif' =>
   array(
     'hash' => 'd6dcc5e6111a44fb9a160fc27b19d85c',
     'uri' => '/res/d6dcc5e6/rsrc/image/loading/loading_24.gif',
     'disk' => '/rsrc/image/loading/loading_24.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/loading/loading_48.gif' =>
   array(
     'hash' => 'cb6fc6eb9c0a0efaf589978029080c58',
     'uri' => '/res/cb6fc6eb/rsrc/image/loading/loading_48.gif',
     'disk' => '/rsrc/image/loading/loading_48.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/main_texture.png' =>
   array(
     'hash' => 'e34d8143384721be73ec9b7532a977ab',
     'uri' => '/res/e34d8143/rsrc/image/main_texture.png',
     'disk' => '/rsrc/image/main_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/menu_texture.png' =>
   array(
     'hash' => 'ad020b1529b3a3b3480ca9de1d5f1e40',
     'uri' => '/res/ad020b15/rsrc/image/menu_texture.png',
     'disk' => '/rsrc/image/menu_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/harding.png' =>
   array(
     'hash' => '818b035ace2c480aa8df7b7f11cef58b',
     'uri' => '/res/818b035a/rsrc/image/people/harding.png',
     'disk' => '/rsrc/image/people/harding.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/jefferson.png' =>
   array(
     'hash' => '55fe807ff02f9320e595fb59442e2038',
     'uri' => '/res/55fe807f/rsrc/image/people/jefferson.png',
     'disk' => '/rsrc/image/people/jefferson.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/lincoln.png' =>
   array(
     'hash' => '2363337947ab52fd5fda79e4a004e930',
     'uri' => '/res/23633379/rsrc/image/people/lincoln.png',
     'disk' => '/rsrc/image/people/lincoln.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/mckinley.png' =>
   array(
     'hash' => '0b7b05dd47c49a0874670e5e8200bba8',
     'uri' => '/res/0b7b05dd/rsrc/image/people/mckinley.png',
     'disk' => '/rsrc/image/people/mckinley.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/taft.png' =>
   array(
     'hash' => 'f3e47d45b59b0b009fd536dabae9a151',
     'uri' => '/res/f3e47d45/rsrc/image/people/taft.png',
     'disk' => '/rsrc/image/people/taft.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/washington.png' =>
   array(
     'hash' => '01412761cab769f7993d69eba986d949',
     'uri' => '/res/01412761/rsrc/image/people/washington.png',
     'disk' => '/rsrc/image/people/washington.png',
     'type' => 'png',
   ),
   '/rsrc/image/phrequent_active.png' =>
   array(
     'hash' => '716cddc08630eaa33934b2008723cac0',
     'uri' => '/res/716cddc0/rsrc/image/phrequent_active.png',
     'disk' => '/rsrc/image/phrequent_active.png',
     'type' => 'png',
   ),
   '/rsrc/image/phrequent_inactive.png' =>
   array(
     'hash' => 'f9099683873c01c5de1dc6650bd668fe',
     'uri' => '/res/f9099683/rsrc/image/phrequent_inactive.png',
     'disk' => '/rsrc/image/phrequent_inactive.png',
     'type' => 'png',
   ),
   '/rsrc/image/search.png' =>
   array(
     'hash' => 'ff7da044e6f923b8f569dec11f97e5e5',
     'uri' => '/res/ff7da044/rsrc/image/search.png',
     'disk' => '/rsrc/image/search.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-actions-X2.png' =>
   array(
     'hash' => '06962a5e8bea98ba7418d1d6cabcd7dc',
     'uri' => '/res/06962a5e/rsrc/image/sprite-actions-X2.png',
     'disk' => '/rsrc/image/sprite-actions-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-actions.png' =>
   array(
     'hash' => 'd5dda5fab1e61b00538c9a4fa1ee94c8',
     'uri' => '/res/d5dda5fa/rsrc/image/sprite-actions.png',
     'disk' => '/rsrc/image/sprite-actions.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-X2.png' =>
   array(
     'hash' => '35a4b5c92f0b05a6a06c8a8e2f409d9e',
     'uri' => '/res/35a4b5c9/rsrc/image/sprite-apps-X2.png',
     'disk' => '/rsrc/image/sprite-apps-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-large-X2.png' =>
   array(
     'hash' => '6295f60df446103f0de702f25bc502e1',
     'uri' => '/res/6295f60d/rsrc/image/sprite-apps-large-X2.png',
     'disk' => '/rsrc/image/sprite-apps-large-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-large.png' =>
   array(
     'hash' => '734d9268dd3a69102b194a7461c68631',
     'uri' => '/res/734d9268/rsrc/image/sprite-apps-large.png',
     'disk' => '/rsrc/image/sprite-apps-large.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-xlarge.png' =>
   array(
     'hash' => '992d2c278b6a22c0fa874d457a252fbd',
     'uri' => '/res/992d2c27/rsrc/image/sprite-apps-xlarge.png',
     'disk' => '/rsrc/image/sprite-apps-xlarge.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps.png' =>
   array(
     'hash' => 'eed2e0e322821e1c0836fc62639c1af1',
     'uri' => '/res/eed2e0e3/rsrc/image/sprite-apps.png',
     'disk' => '/rsrc/image/sprite-apps.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-conpherence-X2.png' =>
   array(
     'hash' => '5e47868b00933a9afb6c844e464e6b23',
     'uri' => '/res/5e47868b/rsrc/image/sprite-conpherence-X2.png',
     'disk' => '/rsrc/image/sprite-conpherence-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-conpherence.png' =>
   array(
     'hash' => 'ca51f1be25213262d68e626e4cab7f0f',
     'uri' => '/res/ca51f1be/rsrc/image/sprite-conpherence.png',
     'disk' => '/rsrc/image/sprite-conpherence.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-docs-X2.png' =>
   array(
     'hash' => '57d3286ce88133f3ec9240e35f6bb897',
     'uri' => '/res/57d3286c/rsrc/image/sprite-docs-X2.png',
     'disk' => '/rsrc/image/sprite-docs-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-docs.png' =>
   array(
     'hash' => 'b2b089072d6eddd831402a77c02b5736',
     'uri' => '/res/b2b08907/rsrc/image/sprite-docs.png',
     'disk' => '/rsrc/image/sprite-docs.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-gradient.png' =>
   array(
     'hash' => 'a49d2e493dba4bea85bb202af528106a',
     'uri' => '/res/a49d2e49/rsrc/image/sprite-gradient.png',
     'disk' => '/rsrc/image/sprite-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-icons-X2.png' =>
   array(
     'hash' => '74551ad4423b882608a7325febe96a87',
     'uri' => '/res/74551ad4/rsrc/image/sprite-icons-X2.png',
     'disk' => '/rsrc/image/sprite-icons-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-icons.png' =>
   array(
     'hash' => '04e38e15232e1e0dee5acb9ae9b5ac72',
     'uri' => '/res/04e38e15/rsrc/image/sprite-icons.png',
     'disk' => '/rsrc/image/sprite-icons.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-menu-X2.png' =>
   array(
     'hash' => '867092041ce0a62b7e50136213ca7be1',
     'uri' => '/res/86709204/rsrc/image/sprite-menu-X2.png',
     'disk' => '/rsrc/image/sprite-menu-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-menu.png' =>
   array(
     'hash' => '21508eebdf582d7251d62bb2cd09f66d',
     'uri' => '/res/21508eeb/rsrc/image/sprite-menu.png',
     'disk' => '/rsrc/image/sprite-menu.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-minicons-X2.png' =>
   array(
     'hash' => 'c420c6462f7e50ca9941ccc5dd9e3dec',
     'uri' => '/res/c420c646/rsrc/image/sprite-minicons-X2.png',
     'disk' => '/rsrc/image/sprite-minicons-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-minicons.png' =>
   array(
     'hash' => '168bb875933624b3080a1cc134e5b4ed',
     'uri' => '/res/168bb875/rsrc/image/sprite-minicons.png',
     'disk' => '/rsrc/image/sprite-minicons.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-payments.png' =>
   array(
     'hash' => '5ce73fb580609e7cda16832e3577b147',
     'uri' => '/res/5ce73fb5/rsrc/image/sprite-payments.png',
     'disk' => '/rsrc/image/sprite-payments.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-tokens.png' =>
   array(
     'hash' => '67c46fd75c885b76ecbfe46e71a476cc',
     'uri' => '/res/67c46fd7/rsrc/image/sprite-tokens.png',
     'disk' => '/rsrc/image/sprite-tokens.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/card-gradient.png' =>
   array(
     'hash' => '268b7fdd758d4bf99db8de6770aae8af',
     'uri' => '/res/268b7fdd/rsrc/image/texture/card-gradient.png',
     'disk' => '/rsrc/image/texture/card-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/dark-menu-hover.png' =>
   array(
     'hash' => 'a214a732644be34872e895b338b5d639',
     'uri' => '/res/a214a732/rsrc/image/texture/dark-menu-hover.png',
     'disk' => '/rsrc/image/texture/dark-menu-hover.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/dark-menu.png' =>
   array(
     'hash' => '41ee673a762cec48a154b456ad5ac204',
     'uri' => '/res/41ee673a/rsrc/image/texture/dark-menu.png',
     'disk' => '/rsrc/image/texture/dark-menu.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/grip.png' =>
   array(
     'hash' => 'f11bc231d241f1335cfca2933ad234e0',
     'uri' => '/res/f11bc231/rsrc/image/texture/grip.png',
     'disk' => '/rsrc/image/texture/grip.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/panel-header-gradient.png' =>
   array(
     'hash' => 'ad9204dd3ef5b12b645d80677d8ccead',
     'uri' => '/res/ad9204dd/rsrc/image/texture/panel-header-gradient.png',
     'disk' => '/rsrc/image/texture/panel-header-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/pholio-background.gif' =>
   array(
     'hash' => 'cf4561af116edf393dc583e5119fb412',
     'uri' => '/res/cf4561af/rsrc/image/texture/pholio-background.gif',
     'disk' => '/rsrc/image/texture/pholio-background.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/texture/table_header.png' =>
   array(
     'hash' => '4ed3f56a30d3749e8f62052b9735a316',
     'uri' => '/res/4ed3f56a/rsrc/image/texture/table_header.png',
     'disk' => '/rsrc/image/texture/table_header.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/table_header_hover.png' =>
   array(
     'hash' => 'ea1f71a604e9b4859de1e25751540437',
     'uri' => '/res/ea1f71a6/rsrc/image/texture/table_header_hover.png',
     'disk' => '/rsrc/image/texture/table_header_hover.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/table_header_tall.png' =>
   array(
     'hash' => 'b05525601f78d759f1c5e47fd9c1a8aa',
     'uri' => '/res/b0552560/rsrc/image/texture/table_header_tall.png',
     'disk' => '/rsrc/image/texture/table_header_tall.png',
     'type' => 'png',
   ),
   '/rsrc/swf/aphlict.swf' =>
   array(
     'hash' => '4b9a9d83bebaf254f3790e87b45c1f92',
     'uri' => '/res/4b9a9d83/rsrc/swf/aphlict.swf',
     'disk' => '/rsrc/swf/aphlict.swf',
     'type' => 'swf',
   ),
   'aphront-attached-file-view-css' =>
   array(
     'uri' => '/res/a6ca5487/rsrc/css/aphront/attached-file-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/attached-file-view.css',
   ),
   'aphront-bars' =>
   array(
     'uri' => '/res/95a907d6/rsrc/css/aphront/aphront-bars.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/aphront-bars.css',
   ),
   'aphront-calendar-view-css' =>
   array(
     'uri' => '/res/ae6f5b54/rsrc/css/aphront/calendar-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/calendar-view.css',
   ),
   'aphront-contextbar-view-css' =>
   array(
     'uri' => '/res/ecfd5ba9/rsrc/css/aphront/context-bar.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/context-bar.css',
   ),
   'aphront-dark-console-css' =>
   array(
     'uri' => '/res/0d316573/rsrc/css/aphront/dark-console.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/dark-console.css',
   ),
   'aphront-dialog-view-css' =>
   array(
     'uri' => '/res/7060a2fe/rsrc/css/aphront/dialog-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/dialog-view.css',
   ),
   'aphront-error-view-css' =>
   array(
     'uri' => '/res/5f43a7c5/rsrc/css/aphront/error-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/error-view.css',
   ),
   'aphront-form-view-css' =>
   array(
     'uri' => '/res/901cc9be/rsrc/css/aphront/form-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/form-view.css',
   ),
   'aphront-list-filter-view-css' =>
   array(
     'uri' => '/res/639ea9e9/rsrc/css/aphront/list-filter-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/list-filter-view.css',
   ),
   'aphront-multi-column-view-css' =>
   array(
     'uri' => '/res/e01f5f0e/rsrc/css/aphront/multi-column.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/multi-column.css',
   ),
   'aphront-notes' =>
   array(
     'uri' => '/res/5b8ebfa0/rsrc/css/aphront/aphront-notes.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/aphront-notes.css',
   ),
   'aphront-pager-view-css' =>
   array(
     'uri' => '/res/43fb79f0/rsrc/css/aphront/pager-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/pager-view.css',
   ),
   'aphront-panel-view-css' =>
   array(
     'uri' => '/res/4031ea99/rsrc/css/aphront/panel-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/panel-view.css',
   ),
   'aphront-request-failure-view-css' =>
   array(
     'uri' => '/res/c9a43002/rsrc/css/aphront/request-failure-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/request-failure-view.css',
   ),
   'aphront-table-view-css' =>
   array(
     'uri' => '/res/d3c44c69/rsrc/css/aphront/table-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/table-view.css',
   ),
   'aphront-tokenizer-control-css' =>
   array(
     'uri' => '/res/793c5f36/rsrc/css/aphront/tokenizer.css',
     'type' => 'css',
     'requires' =>
     array(
       0 => 'aphront-typeahead-control-css',
     ),
     'disk' => '/rsrc/css/aphront/tokenizer.css',
   ),
   'aphront-tooltip-css' =>
   array(
     'uri' => '/res/3a7d8e07/rsrc/css/aphront/tooltip.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/tooltip.css',
   ),
   'aphront-two-column-view-css' =>
   array(
     'uri' => '/res/4263aa98/rsrc/css/aphront/two-column.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/two-column.css',
   ),
   'aphront-typeahead-control-css' =>
   array(
     'uri' => '/res/e4a4cd4b/rsrc/css/aphront/typeahead.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/typeahead.css',
   ),
   'config-options-css' =>
   array(
     'uri' => '/res/be77d5a6/rsrc/css/application/config/config-options.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/config-options.css',
   ),
   'conpherence-header-pane-css' =>
   array(
-    'uri' => '/res/762c199d/rsrc/css/application/conpherence/header-pane.css',
+    'uri' => '/res/6d7bfc7e/rsrc/css/application/conpherence/header-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/header-pane.css',
   ),
   'conpherence-menu-css' =>
   array(
-    'uri' => '/res/9991071e/rsrc/css/application/conpherence/menu.css',
+    'uri' => '/res/c955650e/rsrc/css/application/conpherence/menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/menu.css',
   ),
   'conpherence-message-pane-css' =>
   array(
-    'uri' => '/res/9b319b64/rsrc/css/application/conpherence/message-pane.css',
+    'uri' => '/res/383af93e/rsrc/css/application/conpherence/message-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/message-pane.css',
   ),
   'conpherence-update-css' =>
   array(
     'uri' => '/res/92094ed7/rsrc/css/application/conpherence/update.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/update.css',
   ),
   'conpherence-widget-pane-css' =>
   array(
-    'uri' => '/res/c0131a8b/rsrc/css/application/conpherence/widget-pane.css',
+    'uri' => '/res/7aaa78c5/rsrc/css/application/conpherence/widget-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/widget-pane.css',
   ),
   'differential-changeset-view-css' =>
   array(
     'uri' => '/res/8ee213f4/rsrc/css/application/differential/changeset-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/changeset-view.css',
   ),
   'differential-core-view-css' =>
   array(
     'uri' => '/res/85fe5117/rsrc/css/application/differential/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/core.css',
   ),
   'differential-inline-comment-editor' =>
   array(
     'uri' => '/res/37e0564f/rsrc/js/application/differential/DifferentialInlineCommentEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
       4 => 'javelin-request',
       5 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/differential/DifferentialInlineCommentEditor.js',
   ),
   'differential-local-commits-view-css' =>
   array(
     'uri' => '/res/224f3703/rsrc/css/application/differential/local-commits-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/local-commits-view.css',
   ),
   'differential-results-table-css' =>
   array(
     'uri' => '/res/aab3123c/rsrc/css/application/differential/results-table.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/results-table.css',
   ),
   'differential-revision-add-comment-css' =>
   array(
     'uri' => '/res/849748d3/rsrc/css/application/differential/add-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/add-comment.css',
   ),
   'differential-revision-comment-css' =>
   array(
     'uri' => '/res/42c222f4/rsrc/css/application/differential/revision-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-comment.css',
   ),
   'differential-revision-comment-list-css' =>
   array(
     'uri' => '/res/3b31faa3/rsrc/css/application/differential/revision-comment-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-comment-list.css',
   ),
   'differential-revision-history-css' =>
   array(
     'uri' => '/res/d41bc64c/rsrc/css/application/differential/revision-history.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-history.css',
   ),
   'differential-revision-list-css' =>
   array(
     'uri' => '/res/fe6c4721/rsrc/css/application/differential/revision-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-list.css',
   ),
   'differential-table-of-contents-css' =>
   array(
     'uri' => '/res/4fde8bfc/rsrc/css/application/differential/table-of-contents.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/table-of-contents.css',
   ),
   'diffusion-commit-view-css' =>
   array(
     'uri' => '/res/b445944e/rsrc/css/application/diffusion/commit-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/commit-view.css',
   ),
   'diffusion-icons-css' =>
   array(
     'uri' => '/res/b93e32c9/rsrc/css/application/diffusion/diffusion-icons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/diffusion-icons.css',
   ),
   'diffusion-source-css' =>
   array(
     'uri' => '/res/e76bcd50/rsrc/css/application/diffusion/diffusion-source.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/diffusion-source.css',
   ),
   'global-drag-and-drop-css' =>
   array(
     'uri' => '/res/4e24cb65/rsrc/css/application/files/global-drag-and-drop.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/files/global-drag-and-drop.css',
   ),
   'herald-css' =>
   array(
     'uri' => '/res/2150a55d/rsrc/css/application/herald/herald.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/herald/herald.css',
   ),
   'herald-rule-editor' =>
   array(
     'uri' => '/res/f8ee0e9c/rsrc/js/application/herald/HeraldRuleEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'multirow-row-manager',
       1 => 'javelin-install',
       2 => 'javelin-typeahead',
       3 => 'javelin-util',
       4 => 'javelin-dom',
       5 => 'javelin-tokenizer',
       6 => 'javelin-typeahead-preloaded-source',
       7 => 'javelin-stratcom',
       8 => 'javelin-json',
       9 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js',
   ),
   'herald-test-css' =>
   array(
     'uri' => '/res/c0cd6bdb/rsrc/css/application/herald/herald-test.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/herald/herald-test.css',
   ),
   'inline-comment-summary-css' =>
   array(
     'uri' => '/res/338704f7/rsrc/css/application/diff/inline-comment-summary.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diff/inline-comment-summary.css',
   ),
   'javelin-aphlict' =>
   array(
     'uri' => '/res/c0b9e53f/rsrc/js/application/aphlict/Aphlict.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/aphlict/Aphlict.js',
   ),
   'javelin-behavior' =>
   array(
     'uri' => '/res/15482715/rsrc/externals/javelin/lib/behavior.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/behavior.js',
   ),
   'javelin-behavior-aphlict-dropdown' =>
   array(
     'uri' => '/res/b3be58e8/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-request',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js',
   ),
   'javelin-behavior-aphlict-listen' =>
   array(
     'uri' => '/res/7487f207/rsrc/js/application/aphlict/behavior-aphlict-listen.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-aphlict',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'javelin-uri',
       5 => 'javelin-dom',
       6 => 'javelin-json',
       7 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-listen.js',
   ),
   'javelin-behavior-aphront-basic-tokenizer' =>
   array(
     'uri' => '/res/c7fd9a7b/rsrc/js/core/behavior-tokenizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/core/behavior-tokenizer.js',
   ),
   'javelin-behavior-aphront-crop' =>
   array(
     'uri' => '/res/8c800f36/rsrc/js/core/behavior-crop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/core/behavior-crop.js',
   ),
   'javelin-behavior-aphront-drag-and-drop' =>
   array(
     'uri' => '/res/36335362/rsrc/js/core/behavior-drag-and-drop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-file-upload',
       3 => 'phabricator-drag-and-drop-file-upload',
     ),
     'disk' => '/rsrc/js/core/behavior-drag-and-drop.js',
   ),
   'javelin-behavior-aphront-drag-and-drop-textarea' =>
   array(
     'uri' => '/res/a261f6e6/rsrc/js/core/behavior-drag-and-drop-textarea.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-drag-and-drop-file-upload',
       3 => 'phabricator-textareautils',
     ),
     'disk' => '/rsrc/js/core/behavior-drag-and-drop-textarea.js',
   ),
   'javelin-behavior-aphront-form-disable-on-submit' =>
   array(
     'uri' => '/res/a4a4ff07/rsrc/js/core/behavior-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-form.js',
   ),
   'javelin-behavior-aphront-more' =>
   array(
     'uri' => '/res/fae13324/rsrc/js/core/behavior-more.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-more.js',
   ),
   'javelin-behavior-audit-preview' =>
   array(
     'uri' => '/res/d8f31e46/rsrc/js/application/diffusion/behavior-audit-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-audit-preview.js',
   ),
   'javelin-behavior-balanced-payment-form' =>
   array(
     'uri' => '/res/6876492d/rsrc/js/application/phortune/behavior-balanced-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-balanced-payment-form.js',
   ),
   'javelin-behavior-conpherence-menu' =>
   array(
-    'uri' => '/res/2bffa665/rsrc/js/application/conpherence/behavior-menu.js',
+    'uri' => '/res/a7f3be10/rsrc/js/application/conpherence/behavior-menu.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
       4 => 'javelin-stratcom',
       5 => 'javelin-workflow',
       6 => 'javelin-behavior-device',
       7 => 'javelin-history',
       8 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-menu.js',
   ),
   'javelin-behavior-conpherence-pontificate' =>
   array(
     'uri' => '/res/88ac3361/rsrc/js/application/conpherence/behavior-pontificate.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-workflow',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-pontificate.js',
   ),
   'javelin-behavior-conpherence-widget-pane' =>
   array(
-    'uri' => '/res/d2063fd4/rsrc/js/application/conpherence/behavior-widget-pane.js',
+    'uri' => '/res/bc139f8e/rsrc/js/application/conpherence/behavior-widget-pane.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
       5 => 'phabricator-notification',
       6 => 'javelin-behavior-device',
+      7 => 'phabricator-dropdown-menu',
+      8 => 'phabricator-menu-item',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-widget-pane.js',
   ),
   'javelin-behavior-countdown-timer' =>
   array(
     'uri' => '/res/3c52aac2/rsrc/js/application/countdown/timer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/countdown/timer.js',
   ),
   'javelin-behavior-dark-console' =>
   array(
     'uri' => '/res/1e2c7a5e/rsrc/js/core/behavior-dark-console.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-request',
       5 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-dark-console.js',
   ),
   'javelin-behavior-device' =>
   array(
     'uri' => '/res/12e43f5a/rsrc/js/core/behavior-device.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-install',
     ),
     'disk' => '/rsrc/js/core/behavior-device.js',
   ),
   'javelin-behavior-differential-accept-with-errors' =>
   array(
     'uri' => '/res/8fea67b3/rsrc/js/application/differential/behavior-accept-with-errors.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-accept-with-errors.js',
   ),
   'javelin-behavior-differential-add-reviewers-and-ccs' =>
   array(
     'uri' => '/res/27be3f81/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js',
   ),
   'javelin-behavior-differential-comment-jump' =>
   array(
     'uri' => '/res/8ffb4222/rsrc/js/application/differential/behavior-comment-jump.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-comment-jump.js',
   ),
   'javelin-behavior-differential-diff-radios' =>
   array(
     'uri' => '/res/004cb66f/rsrc/js/application/differential/behavior-diff-radios.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js',
   ),
   'javelin-behavior-differential-dropdown-menus' =>
   array(
     'uri' => '/res/f04cf682/rsrc/js/application/differential/behavior-dropdown-menus.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'phabricator-dropdown-menu',
       5 => 'phabricator-menu-item',
       6 => 'phabricator-phtize',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-dropdown-menus.js',
   ),
   'javelin-behavior-differential-edit-inline-comments' =>
   array(
     'uri' => '/res/86f459a4/rsrc/js/application/differential/behavior-edit-inline-comments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
       4 => 'javelin-vector',
       5 => 'differential-inline-comment-editor',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js',
   ),
   'javelin-behavior-differential-feedback-preview' =>
   array(
     'uri' => '/res/4421fac6/rsrc/js/application/differential/behavior-comment-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-util',
       5 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js',
   ),
   'javelin-behavior-differential-keyboard-navigation' =>
   array(
     'uri' => '/res/22ed93ba/rsrc/js/application/differential/behavior-keyboard-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-keyboard-nav.js',
   ),
   'javelin-behavior-differential-populate' =>
   array(
     'uri' => '/res/bb9a29f4/rsrc/js/application/differential/behavior-populate.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-workflow',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-stratcom',
       5 => 'javelin-behavior-device',
       6 => 'javelin-vector',
       7 => 'phabricator-tooltip',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-populate.js',
   ),
   'javelin-behavior-differential-show-all-comments' =>
   array(
     'uri' => '/res/8801848d/rsrc/js/application/differential/behavior-show-all-comments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js',
   ),
   'javelin-behavior-differential-show-field-details' =>
   array(
     'uri' => '/res/8d57f459/rsrc/js/application/differential/behavior-show-field-details.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-field-details.js',
   ),
   'javelin-behavior-differential-show-more' =>
   array(
     'uri' => '/res/b9f93090/rsrc/js/application/differential/behavior-show-more.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-util',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-more.js',
   ),
   'javelin-behavior-differential-toggle-files' =>
   array(
     'uri' => '/res/ae937207/rsrc/js/application/differential/behavior-toggle-files.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-toggle-files.js',
   ),
   'javelin-behavior-differential-user-select' =>
   array(
     'uri' => '/res/23c51a5d/rsrc/js/application/differential/behavior-user-select.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-user-select.js',
   ),
   'javelin-behavior-diffusion-commit-branches' =>
   array(
     'uri' => '/res/1ede335a/rsrc/js/application/diffusion/behavior-commit-branches.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-commit-branches.js',
   ),
   'javelin-behavior-diffusion-commit-graph' =>
   array(
     'uri' => '/res/536b8483/rsrc/js/application/diffusion/behavior-commit-graph.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-commit-graph.js',
   ),
   'javelin-behavior-diffusion-jump-to' =>
   array(
     'uri' => '/res/bade44bd/rsrc/js/application/diffusion/behavior-jump-to.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-vector',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-jump-to.js',
   ),
   'javelin-behavior-diffusion-line-linker' =>
   array(
     'uri' => '/res/12866f13/rsrc/js/application/diffusion/behavior-line-linker.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-history',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-line-linker.js',
   ),
   'javelin-behavior-diffusion-pull-lastmodified' =>
   array(
     'uri' => '/res/29fe2790/rsrc/js/application/diffusion/behavior-pull-lastmodified.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-pull-lastmodified.js',
   ),
   'javelin-behavior-error-log' =>
   array(
     'uri' => '/res/acefdea7/rsrc/js/core/behavior-error-log.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-error-log.js',
   ),
   'javelin-behavior-fancy-datepicker' =>
   array(
     'uri' => '/res/f5c13e07/rsrc/js/core/behavior-fancy-datepicker.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-stratcom',
       4 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-fancy-datepicker.js',
   ),
   'javelin-behavior-global-drag-and-drop' =>
   array(
     'uri' => '/res/ee8e9c39/rsrc/js/core/behavior-global-drag-and-drop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-uri',
       3 => 'javelin-mask',
       4 => 'phabricator-drag-and-drop-file-upload',
     ),
     'disk' => '/rsrc/js/core/behavior-global-drag-and-drop.js',
   ),
   'javelin-behavior-herald-rule-editor' =>
   array(
     'uri' => '/res/77a0c945/rsrc/js/application/herald/herald-rule-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'herald-rule-editor',
       1 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/herald/herald-rule-editor.js',
   ),
   'javelin-behavior-history-install' =>
   array(
     'uri' => '/res/9099a161/rsrc/js/core/behavior-history-install.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-history',
     ),
     'disk' => '/rsrc/js/core/behavior-history-install.js',
   ),
   'javelin-behavior-konami' =>
   array(
     'uri' => '/res/b7bb7c24/rsrc/js/core/behavior-konami.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-konami.js',
   ),
   'javelin-behavior-lightbox-attachments' =>
   array(
     'uri' => '/res/72b4d3a8/rsrc/js/core/behavior-lightbox-attachments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-mask',
       4 => 'javelin-util',
       5 => 'phabricator-busy',
     ),
     'disk' => '/rsrc/js/core/behavior-lightbox-attachments.js',
   ),
   'javelin-behavior-line-chart' =>
   array(
     'uri' => '/res/1aa5ac88/rsrc/js/application/maniphest/behavior-line-chart.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-line-chart.js',
   ),
   'javelin-behavior-load-blame' =>
   array(
     'uri' => '/res/138e2961/rsrc/js/application/diffusion/behavior-load-blame.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-load-blame.js',
   ),
   'javelin-behavior-maniphest-batch-editor' =>
   array(
     'uri' => '/res/81b2b86f/rsrc/js/application/maniphest/behavior-batch-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-prefab',
       4 => 'multirow-row-manager',
       5 => 'javelin-json',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-batch-editor.js',
   ),
   'javelin-behavior-maniphest-batch-selector' =>
   array(
     'uri' => '/res/c33cb5e3/rsrc/js/application/maniphest/behavior-batch-selector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-batch-selector.js',
   ),
   'javelin-behavior-maniphest-description-preview' =>
   array(
     'uri' => '/res/58ba0ec2/rsrc/js/application/maniphest/behavior-task-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-task-preview.js',
   ),
   'javelin-behavior-maniphest-subpriority-editor' =>
   array(
     'uri' => '/res/21b73c2a/rsrc/js/application/maniphest/behavior-subpriorityeditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-magical-init',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
       5 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-subpriorityeditor.js',
   ),
   'javelin-behavior-maniphest-transaction-controls' =>
   array(
     'uri' => '/res/e8498688/rsrc/js/application/maniphest/behavior-transaction-controls.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js',
   ),
   'javelin-behavior-maniphest-transaction-expand' =>
   array(
     'uri' => '/res/966410de/rsrc/js/application/maniphest/behavior-transaction-expand.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-expand.js',
   ),
   'javelin-behavior-maniphest-transaction-preview' =>
   array(
     'uri' => '/res/9447a3f9/rsrc/js/application/maniphest/behavior-transaction-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-json',
       4 => 'javelin-stratcom',
       5 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-preview.js',
   ),
   'javelin-behavior-owners-path-editor' =>
   array(
     'uri' => '/res/9cf78ffc/rsrc/js/application/owners/owners-path-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'owners-path-editor',
       1 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/owners/owners-path-editor.js',
   ),
   'javelin-behavior-phabricator-active-nav' =>
   array(
     'uri' => '/res/9c8d3df8/rsrc/js/core/behavior-active-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/core/behavior-active-nav.js',
   ),
   'javelin-behavior-phabricator-autofocus' =>
   array(
     'uri' => '/res/bf92b8d6/rsrc/js/core/behavior-autofocus.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-autofocus.js',
   ),
   'javelin-behavior-phabricator-file-tree' =>
   array(
     'uri' => '/res/e5bf93df/rsrc/js/core/behavior-file-tree.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-keyboard-shortcut',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-file-tree.js',
   ),
   'javelin-behavior-phabricator-gesture' =>
   array(
     'uri' => '/res/16e1e77c/rsrc/js/core/behavior-gesture.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/core/behavior-gesture.js',
   ),
   'javelin-behavior-phabricator-gesture-example' =>
   array(
     'uri' => '/res/91d1e7f2/rsrc/js/application/uiexample/gesture-example.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-behavior',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/gesture-example.js',
   ),
   'javelin-behavior-phabricator-hovercards' =>
   array(
     'uri' => '/res/4fe6b436/rsrc/js/core/behavior-hovercard.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'phabricator-hovercard',
     ),
     'disk' => '/rsrc/js/core/behavior-hovercard.js',
   ),
   'javelin-behavior-phabricator-keyboard-pager' =>
   array(
     'uri' => '/res/6a5445b8/rsrc/js/core/behavior-keyboard-pager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-uri',
       2 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-keyboard-pager.js',
   ),
   'javelin-behavior-phabricator-keyboard-shortcuts' =>
   array(
     'uri' => '/res/b971e713/rsrc/js/core/behavior-keyboard-shortcuts.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-workflow',
       2 => 'javelin-json',
       3 => 'javelin-dom',
       4 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-keyboard-shortcuts.js',
   ),
   'javelin-behavior-phabricator-nav' =>
   array(
     'uri' => '/res/afabcf16/rsrc/js/core/behavior-phabricator-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-magical-init',
       5 => 'javelin-vector',
       6 => 'javelin-request',
       7 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/behavior-phabricator-nav.js',
   ),
   'javelin-behavior-phabricator-notification-example' =>
   array(
     'uri' => '/res/7c50cefd/rsrc/js/application/uiexample/notification-example.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'phabricator-notification',
       1 => 'javelin-stratcom',
       2 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/uiexample/notification-example.js',
   ),
   'javelin-behavior-phabricator-object-selector' =>
   array(
     'uri' => '/res/461f95f7/rsrc/js/core/behavior-object-selector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/behavior-object-selector.js',
   ),
   'javelin-behavior-phabricator-oncopy' =>
   array(
     'uri' => '/res/cd3a9345/rsrc/js/core/behavior-oncopy.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-oncopy.js',
   ),
   'javelin-behavior-phabricator-remarkup-assist' =>
   array(
     'uri' => '/res/6d9c05d9/rsrc/js/core/behavior-phabricator-remarkup-assist.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'phabricator-textareautils',
       4 => 'javelin-workflow',
       5 => 'phabricator-notification',
       6 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-phabricator-remarkup-assist.js',
   ),
   'javelin-behavior-phabricator-reveal-content' =>
   array(
     'uri' => '/res/fef525ef/rsrc/js/core/behavior-reveal-content.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-reveal-content.js',
   ),
   'javelin-behavior-phabricator-search-typeahead' =>
   array(
     'uri' => '/res/b39896d5/rsrc/js/core/behavior-search-typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-typeahead-ondemand-source',
       2 => 'javelin-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'javelin-util',
       6 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-search-typeahead.js',
   ),
   'javelin-behavior-phabricator-tooltips' =>
   array(
     'uri' => '/res/a0ac5320/rsrc/js/core/behavior-tooltip.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'phabricator-tooltip',
     ),
     'disk' => '/rsrc/js/core/behavior-tooltip.js',
   ),
   'javelin-behavior-phabricator-transaction-comment-form' =>
   array(
     'uri' => '/res/7591a57f/rsrc/js/application/transactions/behavior-transaction-comment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/transactions/behavior-transaction-comment-form.js',
   ),
   'javelin-behavior-phabricator-transaction-list' =>
   array(
     'uri' => '/res/f1fbb474/rsrc/js/application/transactions/behavior-transaction-list.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
       4 => 'javelin-fx',
     ),
     'disk' => '/rsrc/js/application/transactions/behavior-transaction-list.js',
   ),
   'javelin-behavior-phabricator-watch-anchor' =>
   array(
     'uri' => '/res/69a90817/rsrc/js/core/behavior-watch-anchor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-watch-anchor.js',
   ),
   'javelin-behavior-phame-post-preview' =>
   array(
     'uri' => '/res/181d1cbe/rsrc/js/application/phame/phame-post-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/phame/phame-post-preview.js',
   ),
   'javelin-behavior-pholio-mock-view' =>
   array(
     'uri' => '/res/0632e7d9/rsrc/js/application/pholio/behavior-pholio-mock-view.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-vector',
       5 => 'javelin-magical-init',
       6 => 'javelin-request',
       7 => 'javelin-history',
       8 => 'javelin-workflow',
       9 => 'javelin-mask',
       10 => 'javelin-behavior-device',
       11 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/application/pholio/behavior-pholio-mock-view.js',
   ),
   'javelin-behavior-phriction-document-preview' =>
   array(
     'uri' => '/res/e2fe02de/rsrc/js/application/phriction/phriction-document-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/phriction/phriction-document-preview.js',
   ),
   'javelin-behavior-ponder-feedback-preview' =>
   array(
     'uri' => '/res/2e802dd9/rsrc/js/application/ponder/behavior-comment-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/ponder/behavior-comment-preview.js',
   ),
   'javelin-behavior-ponder-votebox' =>
   array(
     'uri' => '/res/d8c973a2/rsrc/js/application/ponder/behavior-votebox.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/ponder/behavior-votebox.js',
   ),
   'javelin-behavior-project-create' =>
   array(
     'uri' => '/res/e91f3f8f/rsrc/js/application/projects/behavior-project-create.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/projects/behavior-project-create.js',
   ),
   'javelin-behavior-refresh-csrf' =>
   array(
     'uri' => '/res/6c54100f/rsrc/js/core/behavior-refresh-csrf.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-request',
       1 => 'javelin-behavior',
       2 => 'javelin-dom',
       3 => 'phabricator-busy',
     ),
     'disk' => '/rsrc/js/core/behavior-refresh-csrf.js',
   ),
   'javelin-behavior-releeph-preview-branch' =>
   array(
     'uri' => '/res/f694854d/rsrc/js/application/releeph/releeph-preview-branch.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-uri',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-preview-branch.js',
   ),
   'javelin-behavior-releeph-request-state-change' =>
   array(
     'uri' => '/res/07ecde0c/rsrc/js/application/releeph/releeph-request-state-change.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'phabricator-keyboard-shortcut',
       5 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-request-state-change.js',
   ),
   'javelin-behavior-releeph-request-typeahead' =>
   array(
     'uri' => '/res/2c2350a0/rsrc/js/application/releeph/releeph-request-typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-typeahead',
       3 => 'javelin-typeahead-ondemand-source',
       4 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-request-typeahead.js',
   ),
   'javelin-behavior-repository-crossreference' =>
   array(
     'uri' => '/res/d3f9d50b/rsrc/js/application/repository/repository-crossreference.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/application/repository/repository-crossreference.js',
   ),
   'javelin-behavior-slowvote-embed' =>
   array(
     'uri' => '/res/8e85e20d/rsrc/js/application/slowvote/behavior-slowvote-embed.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-request',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/slowvote/behavior-slowvote-embed.js',
   ),
   'javelin-behavior-stripe-payment-form' =>
   array(
     'uri' => '/res/c1a12d77/rsrc/js/application/phortune/behavior-stripe-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-stripe-payment-form.js',
   ),
   'javelin-behavior-test-payment-form' =>
   array(
     'uri' => '/res/a8fe8616/rsrc/js/application/phortune/behavior-test-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-test-payment-form.js',
   ),
   'javelin-behavior-toggle-class' =>
   array(
     'uri' => '/res/79921b7f/rsrc/js/core/behavior-toggle-class.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-toggle-class.js',
   ),
   'javelin-behavior-view-placeholder' =>
   array(
     'uri' => '/res/6abdb85b/rsrc/externals/javelin/ext/view/ViewPlaceholder.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-view-renderer',
       3 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewPlaceholder.js',
   ),
   'javelin-behavior-workflow' =>
   array(
     'uri' => '/res/425777cc/rsrc/js/core/behavior-workflow.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-workflow.js',
   ),
   'javelin-color' =>
   array(
     'uri' => '/res/f17034de/rsrc/externals/javelin/ext/fx/Color.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/ext/fx/Color.js',
   ),
   'javelin-cookie' =>
   array(
     'uri' => '/res/ee0d399f/rsrc/externals/javelin/lib/Cookie.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Cookie.js',
   ),
   'javelin-dom' =>
   array(
     'uri' => '/res/175211d6/rsrc/externals/javelin/lib/DOM.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-install',
       2 => 'javelin-util',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/DOM.js',
   ),
   'javelin-dynval' =>
   array(
     'uri' => '/res/ea6f2a9d/rsrc/externals/javelin/ext/reactor/core/DynVal.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactornode',
       2 => 'javelin-util',
       3 => 'javelin-reactor',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/DynVal.js',
   ),
   'javelin-event' =>
   array(
     'uri' => '/res/5f70f4d0/rsrc/externals/javelin/core/Event.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/core/Event.js',
   ),
   'javelin-fx' =>
   array(
     'uri' => '/res/c7cefec3/rsrc/externals/javelin/ext/fx/FX.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-color',
       1 => 'javelin-install',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/fx/FX.js',
   ),
   'javelin-history' =>
   array(
     'uri' => '/res/6c084b09/rsrc/externals/javelin/lib/History.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-install',
       2 => 'javelin-uri',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/History.js',
   ),
   'javelin-install' =>
   array(
     'uri' => '/res/904356c0/rsrc/externals/javelin/core/install.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/externals/javelin/core/install.js',
   ),
   'javelin-json' =>
   array(
     'uri' => '/res/cf83e72c/rsrc/externals/javelin/lib/JSON.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/JSON.js',
   ),
   'javelin-magical-init' =>
   array(
     'uri' => '/res/7c6c8d5a/rsrc/externals/javelin/core/init.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/javelin/core/init.js',
   ),
   'javelin-mask' =>
   array(
     'uri' => '/res/465cf513/rsrc/externals/javelin/lib/Mask.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Mask.js',
   ),
   'javelin-reactor' =>
   array(
     'uri' => '/res/c05f2658/rsrc/externals/javelin/ext/reactor/core/Reactor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/Reactor.js',
   ),
   'javelin-reactor-dom' =>
   array(
     'uri' => '/res/5e03117e/rsrc/externals/javelin/ext/reactor/dom/RDOM.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-dynval',
       2 => 'javelin-reactor',
       3 => 'javelin-reactornode',
       4 => 'javelin-install',
       5 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/dom/RDOM.js',
   ),
   'javelin-reactor-node-calmer' =>
   array(
     'uri' => '/res/a93dd6b6/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js',
   ),
   'javelin-reactornode' =>
   array(
     'uri' => '/res/4eac475b/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
       3 => 'javelin-reactor-node-calmer',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js',
   ),
   'javelin-request' =>
   array(
     'uri' => '/res/687bdcfc/rsrc/externals/javelin/lib/Request.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-behavior',
       4 => 'javelin-json',
       5 => 'javelin-dom',
       6 => 'javelin-resource',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Request.js',
   ),
   'javelin-resource' =>
   array(
     'uri' => '/res/33a3bb57/rsrc/externals/javelin/lib/Resource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-uri',
       2 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Resource.js',
   ),
   'javelin-stratcom' =>
   array(
     'uri' => '/res/714946e7/rsrc/externals/javelin/core/Stratcom.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
       2 => 'javelin-util',
       3 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/externals/javelin/core/Stratcom.js',
   ),
   'javelin-tokenizer' =>
   array(
     'uri' => '/res/7c117141/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js',
   ),
   'javelin-typeahead' =>
   array(
     'uri' => '/res/fd79f758/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js',
   ),
   'javelin-typeahead-composite-source' =>
   array(
     'uri' => '/res/487b3da2/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js',
   ),
   'javelin-typeahead-normalizer' =>
   array(
     'uri' => '/res/5a4bd979/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js',
   ),
   'javelin-typeahead-ondemand-source' =>
   array(
     'uri' => '/res/4e5add88/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js',
   ),
   'javelin-typeahead-preloaded-source' =>
   array(
     'uri' => '/res/147900c7/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js',
   ),
   'javelin-typeahead-source' =>
   array(
     'uri' => '/res/13289259/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead-normalizer',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js',
   ),
   'javelin-typeahead-static-source' =>
   array(
     'uri' => '/res/bb0a5173/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js',
   ),
   'javelin-uri' =>
   array(
     'uri' => '/res/75aa4597/rsrc/externals/javelin/lib/URI.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/URI.js',
   ),
   'javelin-util' =>
   array(
     'uri' => '/res/90222113/rsrc/externals/javelin/core/util.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/javelin/core/util.js',
   ),
   'javelin-vector' =>
   array(
     'uri' => '/res/58ea3dd7/rsrc/externals/javelin/lib/Vector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Vector.js',
   ),
   'javelin-view' =>
   array(
     'uri' => '/res/38daaec0/rsrc/externals/javelin/ext/view/View.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/View.js',
   ),
   'javelin-view-html' =>
   array(
     'uri' => '/res/0d225e8c/rsrc/externals/javelin/ext/view/HTMLView.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-view-visitor',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/HTMLView.js',
   ),
   'javelin-view-interpreter' =>
   array(
     'uri' => '/res/b0c07f96/rsrc/externals/javelin/ext/view/ViewInterpreter.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-view',
       1 => 'javelin-install',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewInterpreter.js',
   ),
   'javelin-view-renderer' =>
   array(
     'uri' => '/res/fe0d2f60/rsrc/externals/javelin/ext/view/ViewRenderer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewRenderer.js',
   ),
   'javelin-view-visitor' =>
   array(
     'uri' => '/res/b1606cec/rsrc/externals/javelin/ext/view/ViewVisitor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewVisitor.js',
   ),
   'javelin-workflow' =>
   array(
     'uri' => '/res/8274d65f/rsrc/externals/javelin/lib/Workflow.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-request',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-install',
       5 => 'javelin-util',
       6 => 'javelin-mask',
       7 => 'javelin-uri',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Workflow.js',
   ),
   'lightbox-attachment-css' =>
   array(
     'uri' => '/res/4657e15d/rsrc/css/aphront/lightbox-attachment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/lightbox-attachment.css',
   ),
   'maniphest-batch-editor' =>
   array(
     'uri' => '/res/fb15d744/rsrc/css/application/maniphest/batch-editor.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/batch-editor.css',
   ),
   'maniphest-report-css' =>
   array(
     'uri' => '/res/2e633fcf/rsrc/css/application/maniphest/report.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/report.css',
   ),
   'maniphest-task-edit-css' =>
   array(
     'uri' => '/res/0760f768/rsrc/css/application/maniphest/task-edit.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/task-edit.css',
   ),
   'maniphest-task-summary-css' =>
   array(
     'uri' => '/res/7aa9e2eb/rsrc/css/application/maniphest/task-summary.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/task-summary.css',
   ),
   'maniphest-transaction-detail-css' =>
   array(
     'uri' => '/res/fb430d3e/rsrc/css/application/maniphest/transaction-detail.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/transaction-detail.css',
   ),
   'multirow-row-manager' =>
   array(
     'uri' => '/res/408fae4f/rsrc/js/core/MultirowRowManager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/MultirowRowManager.js',
   ),
   'owners-path-editor' =>
   array(
     'uri' => '/res/29b68354/rsrc/js/application/owners/OwnersPathEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'multirow-row-manager',
       1 => 'javelin-install',
       2 => 'path-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-util',
       5 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/owners/OwnersPathEditor.js',
   ),
   'owners-path-editor-css' =>
   array(
     'uri' => '/res/1b9b5456/rsrc/css/application/owners/owners-path-editor.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/owners/owners-path-editor.css',
   ),
   'paste-css' =>
   array(
     'uri' => '/res/216fbfe9/rsrc/css/application/paste/paste.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/paste/paste.css',
   ),
   'path-typeahead' =>
   array(
     'uri' => '/res/50246fb6/rsrc/js/application/herald/PathTypeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-typeahead-ondemand-source',
       5 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/herald/PathTypeahead.js',
   ),
   'phabricator-action-header-view-css' =>
   array(
     'uri' => '/res/3b701648/rsrc/css/layout/phabricator-action-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-action-header-view.css',
   ),
   'phabricator-action-list-view-css' =>
   array(
     'uri' => '/res/f63afae7/rsrc/css/layout/phabricator-action-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-action-list-view.css',
   ),
   'phabricator-application-launch-view-css' =>
   array(
     'uri' => '/res/dffb18f3/rsrc/css/application/base/phabricator-application-launch-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/phabricator-application-launch-view.css',
   ),
   'phabricator-busy' =>
   array(
     'uri' => '/res/8e3f036d/rsrc/js/core/Busy.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/Busy.js',
   ),
   'phabricator-chatlog-css' =>
   array(
     'uri' => '/res/5542e247/rsrc/css/application/chatlog/chatlog.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/chatlog/chatlog.css',
   ),
   'phabricator-content-source-view-css' =>
   array(
     'uri' => '/res/8c738a93/rsrc/css/application/contentsource/content-source-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/contentsource/content-source-view.css',
   ),
   'phabricator-core-buttons-css' =>
   array(
     'uri' => '/res/8853cc81/rsrc/css/core/buttons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/buttons.css',
   ),
   'phabricator-core-css' =>
   array(
     'uri' => '/res/dc204369/rsrc/css/core/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/core.css',
   ),
   'phabricator-countdown-css' =>
   array(
     'uri' => '/res/0f646281/rsrc/css/application/countdown/timer.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/countdown/timer.css',
   ),
   'phabricator-crumbs-view-css' =>
   array(
     'uri' => '/res/feeb02f0/rsrc/css/layout/phabricator-crumbs-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-crumbs-view.css',
   ),
   'phabricator-directory-css' =>
   array(
     'uri' => '/res/61afca2b/rsrc/css/application/directory/phabricator-directory.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/directory/phabricator-directory.css',
   ),
   'phabricator-drag-and-drop-file-upload' =>
   array(
     'uri' => '/res/396d3b3b/rsrc/js/core/DragAndDropFileUpload.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'phabricator-file-upload',
     ),
     'disk' => '/rsrc/js/core/DragAndDropFileUpload.js',
   ),
   'phabricator-dropdown-menu' =>
   array(
     'uri' => '/res/a248b7f4/rsrc/js/core/DropdownMenu.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
       5 => 'phabricator-menu-item',
     ),
     'disk' => '/rsrc/js/core/DropdownMenu.js',
   ),
   'phabricator-fatal-config-template-css' =>
   array(
     'uri' => '/res/6e1a8d22/rsrc/css/application/config/config-template.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/config-template.css',
   ),
   'phabricator-feed-css' =>
   array(
     'uri' => '/res/e19633ed/rsrc/css/application/feed/feed.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/feed/feed.css',
   ),
   'phabricator-file-upload' =>
   array(
     'uri' => '/res/c9605008/rsrc/js/core/FileUpload.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/core/FileUpload.js',
   ),
   'phabricator-filetree-view-css' =>
   array(
     'uri' => '/res/c912ed91/rsrc/css/layout/phabricator-filetree-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-filetree-view.css',
   ),
   'phabricator-flag-css' =>
   array(
     'uri' => '/res/237234d7/rsrc/css/application/flag/flag.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/flag/flag.css',
   ),
   'phabricator-form-view-css' =>
   array(
     'uri' => '/res/ba05f8ba/rsrc/css/layout/phabricator-form-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-form-view.css',
   ),
   'phabricator-header-view-css' =>
   array(
     'uri' => '/res/585b771c/rsrc/css/layout/phabricator-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-header-view.css',
   ),
   'phabricator-hovercard' =>
   array(
     'uri' => '/res/7fb94260/rsrc/js/core/Hovercard.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-request',
       4 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/core/Hovercard.js',
   ),
   'phabricator-hovercard-view-css' =>
   array(
     'uri' => '/res/80683f88/rsrc/css/layout/phabricator-hovercard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-hovercard-view.css',
   ),
   'phabricator-jump-nav' =>
   array(
     'uri' => '/res/37ab43b8/rsrc/css/application/directory/phabricator-jump-nav.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/directory/phabricator-jump-nav.css',
   ),
   'phabricator-keyboard-shortcut' =>
   array(
     'uri' => '/res/44747afd/rsrc/js/core/KeyboardShortcut.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'phabricator-keyboard-shortcut-manager',
     ),
     'disk' => '/rsrc/js/core/KeyboardShortcut.js',
   ),
   'phabricator-keyboard-shortcut-manager' =>
   array(
     'uri' => '/res/bf9bc02a/rsrc/js/core/KeyboardShortcutManager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/KeyboardShortcutManager.js',
   ),
   'phabricator-main-menu-view' =>
   array(
     'uri' => '/res/50479234/rsrc/css/application/base/main-menu-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/main-menu-view.css',
   ),
   'phabricator-menu-item' =>
   array(
     'uri' => '/res/2add4594/rsrc/js/core/DropdownMenuItem.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/DropdownMenuItem.js',
   ),
   'phabricator-nav-view-css' =>
   array(
     'uri' => '/res/37955b6a/rsrc/css/aphront/phabricator-nav-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/phabricator-nav-view.css',
   ),
   'phabricator-notification' =>
   array(
     'uri' => '/res/0764da14/rsrc/js/core/Notification.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
       4 => 'phabricator-notification-css',
     ),
     'disk' => '/rsrc/js/core/Notification.js',
   ),
   'phabricator-notification-css' =>
   array(
     'uri' => '/res/664b9bec/rsrc/css/aphront/notification.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/notification.css',
   ),
   'phabricator-notification-menu-css' =>
   array(
     'uri' => '/res/bc245b67/rsrc/css/application/base/notification-menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/notification-menu.css',
   ),
   'phabricator-object-item-list-view-css' =>
   array(
     'uri' => '/res/96dce9f3/rsrc/css/layout/phabricator-object-item-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-object-item-list-view.css',
   ),
   'phabricator-object-list-view-css' =>
   array(
     'uri' => '/res/4f183668/rsrc/css/application/projects/phabricator-object-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/projects/phabricator-object-list-view.css',
   ),
   'phabricator-object-selector-css' =>
   array(
     'uri' => '/res/502f1bb9/rsrc/css/application/objectselector/object-selector.css',
     'type' => 'css',
     'requires' =>
     array(
       0 => 'aphront-dialog-view-css',
     ),
     'disk' => '/rsrc/css/application/objectselector/object-selector.css',
   ),
   'phabricator-phtize' =>
   array(
     'uri' => '/res/dc655a81/rsrc/js/core/phtize.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/phtize.js',
   ),
   'phabricator-pinboard-view-css' =>
   array(
     'uri' => '/res/61ecd7cf/rsrc/css/layout/phabricator-pinboard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-pinboard-view.css',
   ),
   'phabricator-prefab' =>
   array(
     'uri' => '/res/511859ca/rsrc/js/core/Prefab.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead',
       4 => 'javelin-tokenizer',
       5 => 'javelin-typeahead-preloaded-source',
       6 => 'javelin-typeahead-ondemand-source',
       7 => 'javelin-dom',
       8 => 'javelin-stratcom',
       9 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/Prefab.js',
   ),
   'phabricator-profile-css' =>
   array(
     'uri' => '/res/87229261/rsrc/css/application/profile/profile-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/profile/profile-view.css',
   ),
   'phabricator-profile-header-css' =>
   array(
     'uri' => '/res/a03c1e20/rsrc/css/application/profile/profile-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/profile/profile-header-view.css',
   ),
   'phabricator-project-tag-css' =>
   array(
     'uri' => '/res/1b5efcb2/rsrc/css/application/projects/project-tag.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/projects/project-tag.css',
   ),
   'phabricator-property-list-view-css' =>
   array(
     'uri' => '/res/a04cc81d/rsrc/css/layout/phabricator-property-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-property-list-view.css',
   ),
   'phabricator-remarkup-css' =>
   array(
     'uri' => '/res/07cab525/rsrc/css/core/remarkup.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/remarkup.css',
   ),
   'phabricator-search-results-css' =>
   array(
     'uri' => '/res/9b749d7d/rsrc/css/application/search/search-results.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/search/search-results.css',
   ),
   'phabricator-settings-css' =>
   array(
     'uri' => '/res/fb9d017f/rsrc/css/application/settings/settings.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/settings/settings.css',
   ),
   'phabricator-shaped-request' =>
   array(
     'uri' => '/res/d173af85/rsrc/js/core/ShapedRequest.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/core/ShapedRequest.js',
   ),
   'phabricator-side-menu-view-css' =>
   array(
     'uri' => '/res/2a1ac469/rsrc/css/layout/phabricator-side-menu-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-side-menu-view.css',
   ),
   'phabricator-slowvote-css' =>
   array(
     'uri' => '/res/d1c2e05a/rsrc/css/application/slowvote/slowvote.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/slowvote/slowvote.css',
   ),
   'phabricator-source-code-view-css' =>
   array(
     'uri' => '/res/979d5280/rsrc/css/layout/phabricator-source-code-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-source-code-view.css',
   ),
   'phabricator-standard-page-view' =>
   array(
     'uri' => '/res/70fa2da4/rsrc/css/application/base/standard-page-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/standard-page-view.css',
   ),
   'phabricator-tag-view-css' =>
   array(
     'uri' => '/res/e10bf844/rsrc/css/layout/phabricator-tag-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-tag-view.css',
   ),
   'phabricator-textareautils' =>
   array(
     'uri' => '/res/03c03e8b/rsrc/js/core/TextAreaUtils.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/js/core/TextAreaUtils.js',
   ),
   'phabricator-timeline-view-css' =>
   array(
     'uri' => '/res/5517bf1a/rsrc/css/layout/phabricator-timeline-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-timeline-view.css',
   ),
   'phabricator-tooltip' =>
   array(
     'uri' => '/res/a23bc887/rsrc/js/core/ToolTip.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/ToolTip.js',
   ),
   'phabricator-transaction-view-css' =>
   array(
     'uri' => '/res/00be4b1a/rsrc/css/aphront/transaction.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/transaction.css',
   ),
   'phabricator-ui-example-css' =>
   array(
     'uri' => '/res/376ab671/rsrc/css/application/uiexample/example.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/uiexample/example.css',
   ),
   'phabricator-uiexample-javelin-view' =>
   array(
     'uri' => '/res/2da87384/rsrc/js/application/uiexample/JavelinViewExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/JavelinViewExample.js',
   ),
   'phabricator-uiexample-reactor-button' =>
   array(
     'uri' => '/res/6bfe4f05/rsrc/js/application/uiexample/ReactorButtonExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-dynval',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorButtonExample.js',
   ),
   'phabricator-uiexample-reactor-checkbox' =>
   array(
     'uri' => '/res/3e8b30ac/rsrc/js/application/uiexample/ReactorCheckboxExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorCheckboxExample.js',
   ),
   'phabricator-uiexample-reactor-focus' =>
   array(
     'uri' => '/res/d8f3b56e/rsrc/js/application/uiexample/ReactorFocusExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorFocusExample.js',
   ),
   'phabricator-uiexample-reactor-input' =>
   array(
     'uri' => '/res/936352d9/rsrc/js/application/uiexample/ReactorInputExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor-dom',
       2 => 'javelin-view-html',
       3 => 'javelin-view-interpreter',
       4 => 'javelin-view-renderer',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorInputExample.js',
   ),
   'phabricator-uiexample-reactor-mouseover' =>
   array(
     'uri' => '/res/031a9f4f/rsrc/js/application/uiexample/ReactorMouseoverExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorMouseoverExample.js',
   ),
   'phabricator-uiexample-reactor-radio' =>
   array(
     'uri' => '/res/208c58e3/rsrc/js/application/uiexample/ReactorRadioExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorRadioExample.js',
   ),
   'phabricator-uiexample-reactor-select' =>
   array(
     'uri' => '/res/1b68a6db/rsrc/js/application/uiexample/ReactorSelectExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSelectExample.js',
   ),
   'phabricator-uiexample-reactor-sendclass' =>
   array(
     'uri' => '/res/00cb3131/rsrc/js/application/uiexample/ReactorSendClassExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSendClassExample.js',
   ),
   'phabricator-uiexample-reactor-sendproperties' =>
   array(
     'uri' => '/res/392f1e02/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js',
   ),
   'phabricator-workboard-view-css' =>
   array(
     'uri' => '/res/f598d215/rsrc/css/layout/phabricator-workboard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-workboard-view.css',
   ),
   'phabricator-workpanel-view-css' =>
   array(
     'uri' => '/res/ff5d5b26/rsrc/css/layout/phabricator-workpanel-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-workpanel-view.css',
   ),
   'phabricator-zindex-css' =>
   array(
     'uri' => '/res/d4048e34/rsrc/css/core/z-index.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/z-index.css',
   ),
   'phame-css' =>
   array(
     'uri' => '/res/ba5a8cd8/rsrc/css/application/phame/phame.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phame/phame.css',
   ),
   'pholio-css' =>
   array(
     'uri' => '/res/73796b1e/rsrc/css/application/pholio/pholio.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/pholio/pholio.css',
   ),
   'pholio-inline-comments-css' =>
   array(
     'uri' => '/res/006fc575/rsrc/css/application/pholio/pholio-inline-comments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/pholio/pholio-inline-comments.css',
   ),
   'phortune-credit-card-form' =>
   array(
     'uri' => '/res/bc948778/rsrc/js/application/phortune/phortune-credit-card-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-json',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/phortune/phortune-credit-card-form.js',
   ),
   'phortune-credit-card-form-css' =>
   array(
     'uri' => '/res/563c8c6d/rsrc/css/application/phortune/phortune-credit-card-form.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phortune/phortune-credit-card-form.css',
   ),
   'phrequent-css' =>
   array(
     'uri' => '/res/9d6f3eb7/rsrc/css/application/phrequent/phrequent.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phrequent/phrequent.css',
   ),
   'phriction-document-css' =>
   array(
     'uri' => '/res/14e08350/rsrc/css/application/phriction/phriction-document-css.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phriction/phriction-document-css.css',
   ),
   'phui-box-css' =>
   array(
     'uri' => '/res/1b741073/rsrc/css/phui/phui-box.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-box.css',
   ),
   'phui-feed-story-css' =>
   array(
     'uri' => '/res/253ac568/rsrc/css/phui/phui-feed-story.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-feed-story.css',
   ),
   'phui-form-css' =>
   array(
     'uri' => '/res/ba4d7995/rsrc/css/phui/phui-form.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-form.css',
   ),
   'phui-icon-view-css' =>
   array(
     'uri' => '/res/1b1a37b5/rsrc/css/phui/phui-icon.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-icon.css',
   ),
   'phui-text-css' =>
   array(
     'uri' => '/res/ca884ca6/rsrc/css/phui/phui-text.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-text.css',
   ),
   'ponder-comment-table-css' =>
   array(
     'uri' => '/res/15cb54fb/rsrc/css/application/ponder/comments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/comments.css',
   ),
   'ponder-feed-view-css' =>
   array(
     'uri' => '/res/cab09075/rsrc/css/application/ponder/feed.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/feed.css',
   ),
   'ponder-post-css' =>
   array(
     'uri' => '/res/013b9e2c/rsrc/css/application/ponder/post.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/post.css',
   ),
   'ponder-vote-css' =>
   array(
     'uri' => '/res/26945177/rsrc/css/application/ponder/vote.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/vote.css',
   ),
   'raphael-core' =>
   array(
     'uri' => '/res/5dc5e17c/rsrc/externals/raphael/raphael.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/raphael.js',
   ),
   'raphael-g' =>
   array(
     'uri' => '/res/229b89a1/rsrc/externals/raphael/g.raphael.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/g.raphael.js',
   ),
   'raphael-g-line' =>
   array(
     'uri' => '/res/96da30f7/rsrc/externals/raphael/g.raphael.line.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/g.raphael.line.js',
   ),
   'releeph-branch' =>
   array(
     'uri' => '/res/6ad6420d/rsrc/css/application/releeph/releeph-branch.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-branch.css',
   ),
   'releeph-colors' =>
   array(
     'uri' => '/res/dff4b26a/rsrc/css/application/releeph/releeph-colors.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-colors.css',
   ),
   'releeph-core' =>
   array(
     'uri' => '/res/853f4a73/rsrc/css/application/releeph/releeph-core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-core.css',
   ),
   'releeph-intents' =>
   array(
     'uri' => '/res/4e73e9dd/rsrc/css/application/releeph/releeph-intents.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-intents.css',
   ),
   'releeph-preview-branch' =>
   array(
     'uri' => '/res/65e5dece/rsrc/css/application/releeph/releeph-preview-branch.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-preview-branch.css',
   ),
   'releeph-project' =>
   array(
     'uri' => '/res/b9376e59/rsrc/css/application/releeph/releeph-project.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-project.css',
   ),
   'releeph-request-differential-create-dialog' =>
   array(
     'uri' => '/res/4df30ce1/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css',
   ),
   'releeph-request-typeahead-css' =>
   array(
     'uri' => '/res/9c9a1acf/rsrc/css/application/releeph/releeph-request-typeahead.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-request-typeahead.css',
   ),
   'releeph-status' =>
   array(
     'uri' => '/res/588529df/rsrc/css/application/releeph/releeph-status.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-status.css',
   ),
   'setup-issue-css' =>
   array(
     'uri' => '/res/efbb3673/rsrc/css/application/config/setup-issue.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/setup-issue.css',
   ),
   'spacing-css' =>
   array(
     'uri' => '/res/59e4c9b1/rsrc/css/core/spacing.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/spacing.css',
   ),
   'sprite-actions-css' =>
   array(
     'uri' => '/res/bd43efa8/rsrc/css/sprite-actions.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-actions.css',
   ),
   'sprite-apps-css' =>
   array(
     'uri' => '/res/edc99ce1/rsrc/css/sprite-apps.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps.css',
   ),
   'sprite-apps-large-css' =>
   array(
     'uri' => '/res/40397d93/rsrc/css/sprite-apps-large.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps-large.css',
   ),
   'sprite-apps-xlarge-css' =>
   array(
     'uri' => '/res/33a8e644/rsrc/css/sprite-apps-xlarge.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps-xlarge.css',
   ),
   'sprite-conpherence-css' =>
   array(
     'uri' => '/res/f6793453/rsrc/css/sprite-conpherence.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-conpherence.css',
   ),
   'sprite-docs-css' =>
   array(
     'uri' => '/res/b32f93bc/rsrc/css/sprite-docs.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-docs.css',
   ),
   'sprite-gradient-css' =>
   array(
     'uri' => '/res/ca88b981/rsrc/css/sprite-gradient.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-gradient.css',
   ),
   'sprite-icons-css' =>
   array(
     'uri' => '/res/cc45e87c/rsrc/css/sprite-icons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-icons.css',
   ),
   'sprite-menu-css' =>
   array(
     'uri' => '/res/e4e428f9/rsrc/css/sprite-menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-menu.css',
   ),
   'sprite-minicons-css' =>
   array(
     'uri' => '/res/2dba70cd/rsrc/css/sprite-minicons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-minicons.css',
   ),
   'sprite-payments-css' =>
   array(
     'uri' => '/res/876697b6/rsrc/css/sprite-payments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-payments.css',
   ),
   'sprite-tokens-css' =>
   array(
     'uri' => '/res/edb4e341/rsrc/css/sprite-tokens.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-tokens.css',
   ),
   'syntax-highlighting-css' =>
   array(
     'uri' => '/res/cb3b9dc0/rsrc/css/core/syntax.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/syntax.css',
   ),
   'tokens-css' =>
   array(
     'uri' => '/res/dae13a94/rsrc/css/application/tokens/tokens.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/tokens/tokens.css',
   ),
 ), array(
   'packages' =>
   array(
     '6cb89b00' =>
     array(
       'name' => 'core.pkg.css',
       'symbols' =>
       array(
         0 => 'phabricator-core-css',
         1 => 'phabricator-zindex-css',
         2 => 'phabricator-core-buttons-css',
         3 => 'phabricator-standard-page-view',
         4 => 'aphront-dialog-view-css',
         5 => 'aphront-form-view-css',
         6 => 'aphront-panel-view-css',
         7 => 'aphront-table-view-css',
         8 => 'aphront-tokenizer-control-css',
         9 => 'aphront-typeahead-control-css',
         10 => 'aphront-list-filter-view-css',
         11 => 'phabricator-directory-css',
         12 => 'phabricator-jump-nav',
         13 => 'phabricator-remarkup-css',
         14 => 'syntax-highlighting-css',
         15 => 'aphront-pager-view-css',
         16 => 'phabricator-transaction-view-css',
         17 => 'aphront-tooltip-css',
         18 => 'phabricator-flag-css',
         19 => 'aphront-error-view-css',
         20 => 'sprite-icons-css',
         21 => 'sprite-gradient-css',
         22 => 'sprite-menu-css',
         23 => 'sprite-apps-large-css',
         24 => 'phabricator-main-menu-view',
         25 => 'phabricator-notification-css',
         26 => 'phabricator-notification-menu-css',
         27 => 'lightbox-attachment-css',
         28 => 'phabricator-header-view-css',
         29 => 'phabricator-form-view-css',
         30 => 'phabricator-filetree-view-css',
         31 => 'phabricator-nav-view-css',
         32 => 'phabricator-side-menu-view-css',
         33 => 'phabricator-crumbs-view-css',
         34 => 'phabricator-object-item-list-view-css',
         35 => 'global-drag-and-drop-css',
         36 => 'spacing-css',
         37 => 'phui-form-css',
         38 => 'phui-icon-view-css',
         39 => 'phabricator-application-launch-view-css',
         40 => 'phabricator-action-list-view-css',
         41 => 'phabricator-property-list-view-css',
         42 => 'phabricator-tag-view-css',
       ),
       'uri' => '/res/pkg/6cb89b00/core.pkg.css',
       'type' => 'css',
     ),
     '77faef00' =>
     array(
       'name' => 'core.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-aphront-basic-tokenizer',
         1 => 'javelin-behavior-workflow',
         2 => 'javelin-behavior-aphront-form-disable-on-submit',
         3 => 'phabricator-keyboard-shortcut-manager',
         4 => 'phabricator-keyboard-shortcut',
         5 => 'javelin-behavior-phabricator-keyboard-shortcuts',
         6 => 'javelin-behavior-refresh-csrf',
         7 => 'javelin-behavior-phabricator-watch-anchor',
         8 => 'javelin-behavior-phabricator-autofocus',
         9 => 'phabricator-menu-item',
         10 => 'phabricator-dropdown-menu',
         11 => 'phabricator-phtize',
         12 => 'javelin-behavior-phabricator-oncopy',
         13 => 'phabricator-tooltip',
         14 => 'javelin-behavior-phabricator-tooltips',
         15 => 'phabricator-prefab',
         16 => 'javelin-behavior-device',
         17 => 'javelin-behavior-toggle-class',
         18 => 'javelin-behavior-lightbox-attachments',
         19 => 'phabricator-busy',
         20 => 'javelin-aphlict',
         21 => 'phabricator-notification',
         22 => 'javelin-behavior-aphlict-listen',
         23 => 'javelin-behavior-phabricator-search-typeahead',
         24 => 'javelin-behavior-konami',
         25 => 'javelin-behavior-aphlict-dropdown',
         26 => 'javelin-behavior-history-install',
         27 => 'javelin-behavior-phabricator-gesture',
         28 => 'javelin-behavior-phabricator-active-nav',
         29 => 'javelin-behavior-phabricator-nav',
         30 => 'javelin-behavior-phabricator-remarkup-assist',
         31 => 'phabricator-textareautils',
         32 => 'phabricator-file-upload',
         33 => 'javelin-behavior-global-drag-and-drop',
         34 => 'javelin-behavior-phabricator-reveal-content',
         35 => 'phabricator-hovercard',
         36 => 'javelin-behavior-phabricator-hovercards',
       ),
       'uri' => '/res/pkg/77faef00/core.pkg.js',
       'type' => 'js',
     ),
     '4ccfeb47' =>
     array(
       'name' => 'darkconsole.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-dark-console',
         1 => 'javelin-behavior-error-log',
       ),
       'uri' => '/res/pkg/4ccfeb47/darkconsole.pkg.js',
       'type' => 'js',
     ),
     'dd27a69b' =>
     array(
       'name' => 'differential.pkg.css',
       'symbols' =>
       array(
         0 => 'differential-core-view-css',
         1 => 'differential-changeset-view-css',
         2 => 'differential-results-table-css',
         3 => 'differential-revision-history-css',
         4 => 'differential-revision-list-css',
         5 => 'differential-table-of-contents-css',
         6 => 'differential-revision-comment-css',
         7 => 'differential-revision-add-comment-css',
         8 => 'differential-revision-comment-list-css',
         9 => 'phabricator-object-selector-css',
         10 => 'phabricator-content-source-view-css',
         11 => 'differential-local-commits-view-css',
         12 => 'inline-comment-summary-css',
       ),
       'uri' => '/res/pkg/dd27a69b/differential.pkg.css',
       'type' => 'css',
     ),
     '9488bb69' =>
     array(
       'name' => 'differential.pkg.js',
       'symbols' =>
       array(
         0 => 'phabricator-drag-and-drop-file-upload',
         1 => 'phabricator-shaped-request',
         2 => 'javelin-behavior-differential-feedback-preview',
         3 => 'javelin-behavior-differential-edit-inline-comments',
         4 => 'javelin-behavior-differential-populate',
         5 => 'javelin-behavior-differential-show-more',
         6 => 'javelin-behavior-differential-diff-radios',
         7 => 'javelin-behavior-differential-accept-with-errors',
         8 => 'javelin-behavior-differential-comment-jump',
         9 => 'javelin-behavior-differential-add-reviewers-and-ccs',
         10 => 'javelin-behavior-differential-keyboard-navigation',
         11 => 'javelin-behavior-aphront-drag-and-drop',
         12 => 'javelin-behavior-aphront-drag-and-drop-textarea',
         13 => 'javelin-behavior-phabricator-object-selector',
         14 => 'javelin-behavior-repository-crossreference',
         15 => 'javelin-behavior-load-blame',
         16 => 'differential-inline-comment-editor',
         17 => 'javelin-behavior-differential-dropdown-menus',
         18 => 'javelin-behavior-differential-toggle-files',
         19 => 'javelin-behavior-differential-user-select',
       ),
       'uri' => '/res/pkg/9488bb69/differential.pkg.js',
       'type' => 'js',
     ),
     'c8ce2d88' =>
     array(
       'name' => 'diffusion.pkg.css',
       'symbols' =>
       array(
         0 => 'diffusion-commit-view-css',
         1 => 'diffusion-icons-css',
       ),
       'uri' => '/res/pkg/c8ce2d88/diffusion.pkg.css',
       'type' => 'css',
     ),
     96909266 =>
     array(
       'name' => 'diffusion.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-diffusion-pull-lastmodified',
         1 => 'javelin-behavior-diffusion-commit-graph',
         2 => 'javelin-behavior-audit-preview',
       ),
       'uri' => '/res/pkg/96909266/diffusion.pkg.js',
       'type' => 'js',
     ),
     'c1359b5d' =>
     array(
       'name' => 'javelin.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-util',
         1 => 'javelin-install',
         2 => 'javelin-event',
         3 => 'javelin-stratcom',
         4 => 'javelin-behavior',
         5 => 'javelin-resource',
         6 => 'javelin-request',
         7 => 'javelin-vector',
         8 => 'javelin-dom',
         9 => 'javelin-json',
         10 => 'javelin-uri',
         11 => 'javelin-workflow',
         12 => 'javelin-mask',
         13 => 'javelin-typeahead',
         14 => 'javelin-typeahead-normalizer',
         15 => 'javelin-typeahead-source',
         16 => 'javelin-typeahead-preloaded-source',
         17 => 'javelin-typeahead-ondemand-source',
         18 => 'javelin-tokenizer',
         19 => 'javelin-history',
       ),
       'uri' => '/res/pkg/c1359b5d/javelin.pkg.js',
       'type' => 'js',
     ),
     '6b1fccc6' =>
     array(
       'name' => 'maniphest.pkg.css',
       'symbols' =>
       array(
         0 => 'maniphest-task-summary-css',
         1 => 'maniphest-transaction-detail-css',
         2 => 'aphront-attached-file-view-css',
         3 => 'phabricator-project-tag-css',
       ),
       'uri' => '/res/pkg/6b1fccc6/maniphest.pkg.css',
       'type' => 'css',
     ),
     '1621e522' =>
     array(
       'name' => 'maniphest.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-maniphest-batch-selector',
         1 => 'javelin-behavior-maniphest-transaction-controls',
         2 => 'javelin-behavior-maniphest-transaction-preview',
         3 => 'javelin-behavior-maniphest-transaction-expand',
         4 => 'javelin-behavior-maniphest-subpriority-editor',
       ),
       'uri' => '/res/pkg/1621e522/maniphest.pkg.js',
       'type' => 'js',
     ),
   ),
   'reverse' =>
   array(
     'aphront-attached-file-view-css' => '6b1fccc6',
     'aphront-dialog-view-css' => '6cb89b00',
     'aphront-error-view-css' => '6cb89b00',
     'aphront-form-view-css' => '6cb89b00',
     'aphront-list-filter-view-css' => '6cb89b00',
     'aphront-pager-view-css' => '6cb89b00',
     'aphront-panel-view-css' => '6cb89b00',
     'aphront-table-view-css' => '6cb89b00',
     'aphront-tokenizer-control-css' => '6cb89b00',
     'aphront-tooltip-css' => '6cb89b00',
     'aphront-typeahead-control-css' => '6cb89b00',
     'differential-changeset-view-css' => 'dd27a69b',
     'differential-core-view-css' => 'dd27a69b',
     'differential-inline-comment-editor' => '9488bb69',
     'differential-local-commits-view-css' => 'dd27a69b',
     'differential-results-table-css' => 'dd27a69b',
     'differential-revision-add-comment-css' => 'dd27a69b',
     'differential-revision-comment-css' => 'dd27a69b',
     'differential-revision-comment-list-css' => 'dd27a69b',
     'differential-revision-history-css' => 'dd27a69b',
     'differential-revision-list-css' => 'dd27a69b',
     'differential-table-of-contents-css' => 'dd27a69b',
     'diffusion-commit-view-css' => 'c8ce2d88',
     'diffusion-icons-css' => 'c8ce2d88',
     'global-drag-and-drop-css' => '6cb89b00',
     'inline-comment-summary-css' => 'dd27a69b',
     'javelin-aphlict' => '77faef00',
     'javelin-behavior' => 'c1359b5d',
     'javelin-behavior-aphlict-dropdown' => '77faef00',
     'javelin-behavior-aphlict-listen' => '77faef00',
     'javelin-behavior-aphront-basic-tokenizer' => '77faef00',
     'javelin-behavior-aphront-drag-and-drop' => '9488bb69',
     'javelin-behavior-aphront-drag-and-drop-textarea' => '9488bb69',
     'javelin-behavior-aphront-form-disable-on-submit' => '77faef00',
     'javelin-behavior-audit-preview' => '96909266',
     'javelin-behavior-dark-console' => '4ccfeb47',
     'javelin-behavior-device' => '77faef00',
     'javelin-behavior-differential-accept-with-errors' => '9488bb69',
     'javelin-behavior-differential-add-reviewers-and-ccs' => '9488bb69',
     'javelin-behavior-differential-comment-jump' => '9488bb69',
     'javelin-behavior-differential-diff-radios' => '9488bb69',
     'javelin-behavior-differential-dropdown-menus' => '9488bb69',
     'javelin-behavior-differential-edit-inline-comments' => '9488bb69',
     'javelin-behavior-differential-feedback-preview' => '9488bb69',
     'javelin-behavior-differential-keyboard-navigation' => '9488bb69',
     'javelin-behavior-differential-populate' => '9488bb69',
     'javelin-behavior-differential-show-more' => '9488bb69',
     'javelin-behavior-differential-toggle-files' => '9488bb69',
     'javelin-behavior-differential-user-select' => '9488bb69',
     'javelin-behavior-diffusion-commit-graph' => '96909266',
     'javelin-behavior-diffusion-pull-lastmodified' => '96909266',
     'javelin-behavior-error-log' => '4ccfeb47',
     'javelin-behavior-global-drag-and-drop' => '77faef00',
     'javelin-behavior-history-install' => '77faef00',
     'javelin-behavior-konami' => '77faef00',
     'javelin-behavior-lightbox-attachments' => '77faef00',
     'javelin-behavior-load-blame' => '9488bb69',
     'javelin-behavior-maniphest-batch-selector' => '1621e522',
     'javelin-behavior-maniphest-subpriority-editor' => '1621e522',
     'javelin-behavior-maniphest-transaction-controls' => '1621e522',
     'javelin-behavior-maniphest-transaction-expand' => '1621e522',
     'javelin-behavior-maniphest-transaction-preview' => '1621e522',
     'javelin-behavior-phabricator-active-nav' => '77faef00',
     'javelin-behavior-phabricator-autofocus' => '77faef00',
     'javelin-behavior-phabricator-gesture' => '77faef00',
     'javelin-behavior-phabricator-hovercards' => '77faef00',
     'javelin-behavior-phabricator-keyboard-shortcuts' => '77faef00',
     'javelin-behavior-phabricator-nav' => '77faef00',
     'javelin-behavior-phabricator-object-selector' => '9488bb69',
     'javelin-behavior-phabricator-oncopy' => '77faef00',
     'javelin-behavior-phabricator-remarkup-assist' => '77faef00',
     'javelin-behavior-phabricator-reveal-content' => '77faef00',
     'javelin-behavior-phabricator-search-typeahead' => '77faef00',
     'javelin-behavior-phabricator-tooltips' => '77faef00',
     'javelin-behavior-phabricator-watch-anchor' => '77faef00',
     'javelin-behavior-refresh-csrf' => '77faef00',
     'javelin-behavior-repository-crossreference' => '9488bb69',
     'javelin-behavior-toggle-class' => '77faef00',
     'javelin-behavior-workflow' => '77faef00',
     'javelin-dom' => 'c1359b5d',
     'javelin-event' => 'c1359b5d',
     'javelin-history' => 'c1359b5d',
     'javelin-install' => 'c1359b5d',
     'javelin-json' => 'c1359b5d',
     'javelin-mask' => 'c1359b5d',
     'javelin-request' => 'c1359b5d',
     'javelin-resource' => 'c1359b5d',
     'javelin-stratcom' => 'c1359b5d',
     'javelin-tokenizer' => 'c1359b5d',
     'javelin-typeahead' => 'c1359b5d',
     'javelin-typeahead-normalizer' => 'c1359b5d',
     'javelin-typeahead-ondemand-source' => 'c1359b5d',
     'javelin-typeahead-preloaded-source' => 'c1359b5d',
     'javelin-typeahead-source' => 'c1359b5d',
     'javelin-uri' => 'c1359b5d',
     'javelin-util' => 'c1359b5d',
     'javelin-vector' => 'c1359b5d',
     'javelin-workflow' => 'c1359b5d',
     'lightbox-attachment-css' => '6cb89b00',
     'maniphest-task-summary-css' => '6b1fccc6',
     'maniphest-transaction-detail-css' => '6b1fccc6',
     'phabricator-action-list-view-css' => '6cb89b00',
     'phabricator-application-launch-view-css' => '6cb89b00',
     'phabricator-busy' => '77faef00',
     'phabricator-content-source-view-css' => 'dd27a69b',
     'phabricator-core-buttons-css' => '6cb89b00',
     'phabricator-core-css' => '6cb89b00',
     'phabricator-crumbs-view-css' => '6cb89b00',
     'phabricator-directory-css' => '6cb89b00',
     'phabricator-drag-and-drop-file-upload' => '9488bb69',
     'phabricator-dropdown-menu' => '77faef00',
     'phabricator-file-upload' => '77faef00',
     'phabricator-filetree-view-css' => '6cb89b00',
     'phabricator-flag-css' => '6cb89b00',
     'phabricator-form-view-css' => '6cb89b00',
     'phabricator-header-view-css' => '6cb89b00',
     'phabricator-hovercard' => '77faef00',
     'phabricator-jump-nav' => '6cb89b00',
     'phabricator-keyboard-shortcut' => '77faef00',
     'phabricator-keyboard-shortcut-manager' => '77faef00',
     'phabricator-main-menu-view' => '6cb89b00',
     'phabricator-menu-item' => '77faef00',
     'phabricator-nav-view-css' => '6cb89b00',
     'phabricator-notification' => '77faef00',
     'phabricator-notification-css' => '6cb89b00',
     'phabricator-notification-menu-css' => '6cb89b00',
     'phabricator-object-item-list-view-css' => '6cb89b00',
     'phabricator-object-selector-css' => 'dd27a69b',
     'phabricator-phtize' => '77faef00',
     'phabricator-prefab' => '77faef00',
     'phabricator-project-tag-css' => '6b1fccc6',
     'phabricator-property-list-view-css' => '6cb89b00',
     'phabricator-remarkup-css' => '6cb89b00',
     'phabricator-shaped-request' => '9488bb69',
     'phabricator-side-menu-view-css' => '6cb89b00',
     'phabricator-standard-page-view' => '6cb89b00',
     'phabricator-tag-view-css' => '6cb89b00',
     'phabricator-textareautils' => '77faef00',
     'phabricator-tooltip' => '77faef00',
     'phabricator-transaction-view-css' => '6cb89b00',
     'phabricator-zindex-css' => '6cb89b00',
     'phui-form-css' => '6cb89b00',
     'phui-icon-view-css' => '6cb89b00',
     'spacing-css' => '6cb89b00',
     'sprite-apps-large-css' => '6cb89b00',
     'sprite-gradient-css' => '6cb89b00',
     'sprite-icons-css' => '6cb89b00',
     'sprite-menu-css' => '6cb89b00',
     'syntax-highlighting-css' => '6cb89b00',
   ),
 ));
diff --git a/src/applications/conpherence/controller/ConpherenceController.php b/src/applications/conpherence/controller/ConpherenceController.php
index 4870b0c36e..95bf05f613 100644
--- a/src/applications/conpherence/controller/ConpherenceController.php
+++ b/src/applications/conpherence/controller/ConpherenceController.php
@@ -1,93 +1,103 @@
 <?php
 
 /**
  * @group conpherence
  */
 abstract class ConpherenceController extends PhabricatorController {
   private $conpherences;
 
   public function buildApplicationMenu() {
     $nav = new PhabricatorMenuView();
 
     $nav->newLink(
       pht('New Message'),
       $this->getApplicationURI('new/'));
 
     return $nav;
   }
 
   public function buildApplicationCrumbs() {
     $crumbs = parent::buildApplicationCrumbs();
 
     $crumbs
       ->addAction(
         id(new PhabricatorMenuItemView())
         ->setName(pht('New Message'))
         ->setHref($this->getApplicationURI('new/'))
         ->setIcon('create')
-        ->setWorkflow(true));
+        ->setWorkflow(true))
+      ->addAction(
+        id(new PhabricatorMenuItemView())
+        ->setName(pht('Thread'))
+        ->setHref('#')
+        ->setIcon('action-menu')
+        ->setStyle('display: none;')
+        ->addClass('device-widgets-selector')
+        ->addSigil('device-widgets-selector'));
     return $crumbs;
   }
 
   protected function buildHeaderPaneContent(ConpherenceThread $conpherence) {
     $crumbs = $this->buildApplicationCrumbs();
     if ($conpherence->getTitle()) {
       $title = $conpherence->getTitle();
     } else {
       $title = pht('Conpherence');
     }
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
-      ->setName($title));
+      ->setName($title)
+      ->setHref($this->getApplicationURI('update/'.$conpherence->getID().'/'))
+      ->setWorkflow(true));
 
     return $crumbs;
   }
 
   protected function renderConpherenceTransactions(
     ConpherenceThread $conpherence) {
 
     $user = $this->getRequest()->getUser();
     $transactions = $conpherence->getTransactions();
     $oldest_transaction_id = 0;
     $too_many = ConpherenceThreadQuery::TRANSACTION_LIMIT + 1;
     if (count($transactions) == $too_many) {
       $last_transaction = end($transactions);
       unset($transactions[$last_transaction->getID()]);
       $oldest_transaction = end($transactions);
       $oldest_transaction_id = $oldest_transaction->getID();
     }
     $transactions = array_reverse($transactions);
     $handles = $conpherence->getHandles();
     $rendered_transactions = array();
     $engine = id(new PhabricatorMarkupEngine())
       ->setViewer($user);
     foreach ($transactions as $key => $transaction) {
       if ($transaction->shouldHide()) {
         unset($transactions[$key]);
         continue;
       }
       if ($transaction->getComment()) {
         $engine->addObject(
           $transaction->getComment(),
           PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT);
       }
     }
     $engine->process();
     foreach ($transactions as $transaction) {
       $rendered_transactions[] = id(new ConpherenceTransactionView())
         ->setUser($user)
         ->setConpherenceTransaction($transaction)
         ->setHandles($handles)
         ->setMarkupEngine($engine)
         ->render();
     }
     $latest_transaction_id = $transaction->getID();
 
     return array(
       'transactions' => $rendered_transactions,
       'latest_transaction_id' => $latest_transaction_id,
       'oldest_transaction_id' => $oldest_transaction_id
     );
 
   }
 }
diff --git a/src/applications/conpherence/controller/ConpherenceUpdateController.php b/src/applications/conpherence/controller/ConpherenceUpdateController.php
index 06116f2527..a5adad8bc3 100644
--- a/src/applications/conpherence/controller/ConpherenceUpdateController.php
+++ b/src/applications/conpherence/controller/ConpherenceUpdateController.php
@@ -1,308 +1,309 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceUpdateController
   extends ConpherenceController {
 
   private $conpherenceID;
 
   public function setConpherenceID($conpherence_id) {
     $this->conpherenceID = $conpherence_id;
     return $this;
   }
   public function getConpherenceID() {
     return $this->conpherenceID;
   }
   public function willProcessRequest(array $data) {
     $this->setConpherenceID(idx($data, 'id'));
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $conpherence_id = $this->getConpherenceID();
     if (!$conpherence_id) {
       return new Aphront404Response();
     }
 
     $conpherence = id(new ConpherenceThreadQuery())
       ->setViewer($user)
       ->withIDs(array($conpherence_id))
       ->needFilePHIDs(true)
       ->executeOne();
 
     $action = $request->getStr('action', ConpherenceUpdateActions::METADATA);
     $latest_transaction_id = null;
     $response_mode = 'ajax';
     $error_view = null;
     $e_file = array();
     $errors = array();
     if ($request->isFormPost()) {
       $editor = id(new ConpherenceEditor())
         ->setContinueOnNoEffect($request->isContinueRequest())
         ->setContentSourceFromRequest($request)
         ->setActor($user);
 
       switch ($action) {
         case ConpherenceUpdateActions::MESSAGE:
           $message = $request->getStr('text');
           $xactions = $editor->generateTransactionsFromText(
             $conpherence,
             $message);
           break;
         case ConpherenceUpdateActions::ADD_PERSON:
           $xactions = array();
           $person_tokenizer = $request->getArr('add_person');
           $person_phid = reset($person_tokenizer);
           if ($person_phid) {
             $xactions[] = id(new ConpherenceTransaction())
               ->setTransactionType(
                 ConpherenceTransactionType::TYPE_PARTICIPANTS)
               ->setNewValue(array('+' => array($person_phid)));
           }
           break;
         case ConpherenceUpdateActions::REMOVE_PERSON:
           $xactions = array();
           if (!$request->isContinueRequest()) {
             // do nothing; we'll display a confirmation dialogue instead
             break;
           }
           $person_phid = $request->getStr('remove_person');
           if ($person_phid && $person_phid == $user->getPHID()) {
             $xactions[] = id(new ConpherenceTransaction())
               ->setTransactionType(
                 ConpherenceTransactionType::TYPE_PARTICIPANTS)
               ->setNewValue(array('-' => array($person_phid)));
             $response_mode = 'go-home';
           }
           break;
         case ConpherenceUpdateActions::NOTIFICATIONS:
           $notifications = $request->getStr('notifications');
           $participant = $conpherence->getParticipant($user->getPHID());
           $participant->setSettings(array('notifications' => $notifications));
           $participant->save();
           $result = pht(
             'Updated notification settings to "%s".',
             ConpherenceSettings::getHumanString($notifications));
           return id(new AphrontAjaxResponse())
             ->setContent($result);
           break;
         case ConpherenceUpdateActions::METADATA:
           $xactions = array();
           $updated = false;
-          // all other metadata updates are continue requests
+          // all metadata updates are continue requests
           if (!$request->isContinueRequest()) {
             break;
           }
 
           $title = $request->getStr('title');
           if ($title != $conpherence->getTitle()) {
             $xactions[] = id(new ConpherenceTransaction())
               ->setTransactionType(ConpherenceTransactionType::TYPE_TITLE)
               ->setNewValue($title);
             $updated = true;
+            $response_mode = 'redirect';
           }
           if (!$updated) {
             $errors[] = pht(
               'That was a non-update. Try cancel.');
           }
           break;
         default:
           throw new Exception('Unknown action: '.$action);
           break;
       }
       if ($xactions) {
         try {
           $xactions = $editor->applyTransactions($conpherence, $xactions);
         } catch (PhabricatorApplicationTransactionNoEffectException $ex) {
           return id(new PhabricatorApplicationTransactionNoEffectResponse())
             ->setCancelURI($this->getApplicationURI($conpherence_id.'/'))
             ->setException($ex);
         }
         switch ($response_mode) {
           case 'ajax':
             $latest_transaction_id = $request->getInt('latest_transaction_id');
             $content = $this->loadAndRenderUpdates(
               $action,
               $conpherence_id,
               $latest_transaction_id);
             return id(new AphrontAjaxResponse())
               ->setContent($content);
             break;
           case 'go-home':
             return id(new AphrontRedirectResponse())
               ->setURI($this->getApplicationURI());
             break;
           case 'redirect':
           default:
             return id(new AphrontRedirectResponse())
               ->setURI($this->getApplicationURI($conpherence->getID().'/'));
             break;
         }
       }
     }
 
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Errors editing conpherence.'))
         ->setInsideDialogue(true)
         ->setErrors($errors);
     }
 
     switch ($action) {
       case ConpherenceUpdateActions::REMOVE_PERSON:
         $dialogue = $this->renderRemovePersonDialogue($conpherence);
         break;
       case ConpherenceUpdateActions::METADATA:
       default:
         $dialogue = $this->renderMetadataDialogue($conpherence, $error_view);
         break;
     }
 
     return id(new AphrontDialogResponse())
       ->setDialog($dialogue
         ->setUser($user)
         ->setWidth(AphrontDialogView::WIDTH_FORM)
         ->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/'))
         ->addSubmitButton()
         ->addCancelButton($this->getApplicationURI($conpherence->getID().'/')));
 
   }
 
   private function renderRemovePersonDialogue(
     ConpherenceThread $conpherence) {
 
     $request = $this->getRequest();
     $user = $request->getUser();
     $remove_person = $request->getStr('remove_person');
     $participants = $conpherence->getParticipants();
     $message = pht(
       'Are you sure you want to remove yourself from this conpherence? ');
     if (count($participants) == 1) {
       $message .= pht(
         'The conpherence will be inaccessible forever and ever.');
     } else {
       $message .= pht(
         'Someone else in the conpherence can add you back later.');
     }
     $body = phutil_tag(
       'p',
       array(
       ),
       $message);
 
     require_celerity_resource('conpherence-update-css');
     return id(new AphrontDialogView())
       ->setTitle(pht('Update Conpherence Participants'))
       ->addHiddenInput('action', 'remove_person')
       ->addHiddenInput('__continue__', true)
       ->addHiddenInput('remove_person', $remove_person)
       ->appendChild($body);
   }
 
   private function renderMetadataDialogue(
     ConpherenceThread $conpherence,
     $error_view) {
 
     $form = id(new AphrontFormLayoutView())
       ->appendChild($error_view)
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Title'))
         ->setName('title')
         ->setValue($conpherence->getTitle()));
 
     require_celerity_resource('conpherence-update-css');
     return id(new AphrontDialogView())
       ->setTitle(pht('Update Conpherence'))
       ->addHiddenInput('action', 'metadata')
       ->addHiddenInput('__continue__', true)
       ->appendChild($form);
   }
 
   private function loadAndRenderUpdates(
     $action,
     $conpherence_id,
     $latest_transaction_id) {
 
     $need_widget_data = false;
     $need_transactions = false;
     switch ($action) {
       case ConpherenceUpdateActions::METADATA:
         $need_transactions = true;
         break;
       case ConpherenceUpdateActions::MESSAGE:
       case ConpherenceUpdateActions::ADD_PERSON:
         $need_transactions = true;
         $need_widget_data = true;
         break;
       case ConpherenceUpdateActions::REMOVE_PERSON:
       case ConpherenceUpdateActions::NOTIFICATIONS:
       default:
         break;
 
     }
     $user = $this->getRequest()->getUser();
     $conpherence = id(new ConpherenceThreadQuery())
       ->setViewer($user)
       ->setAfterTransactionID($latest_transaction_id)
       ->needWidgetData($need_widget_data)
       ->needTransactions($need_transactions)
       ->withIDs(array($conpherence_id))
       ->executeOne();
 
     if ($need_transactions) {
       $data = $this->renderConpherenceTransactions($conpherence);
     } else {
       $data = array();
     }
     $rendered_transactions = idx($data, 'transactions');
     $new_latest_transaction_id = idx($data, 'latest_transaction_id');
 
     $widget_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
     $nav_item = null;
     $header = null;
     $people_widget = null;
     $file_widget = null;
     switch ($action) {
       case ConpherenceUpdateActions::METADATA:
         $header = $this->buildHeaderPaneContent($conpherence);
         $nav_item = id(new ConpherenceThreadListView())
           ->setUser($user)
           ->setBaseURI($this->getApplicationURI())
           ->renderSingleThread($conpherence);
         break;
       case ConpherenceUpdateActions::MESSAGE:
         $file_widget = id(new ConpherenceFileWidgetView())
           ->setUser($this->getRequest()->getUser())
           ->setConpherence($conpherence)
           ->setUpdateURI($widget_uri);
         break;
       case ConpherenceUpdateActions::ADD_PERSON:
         $people_widget = id(new ConpherencePeopleWidgetView())
           ->setUser($user)
           ->setConpherence($conpherence)
           ->setUpdateURI($widget_uri);
         break;
       case ConpherenceUpdateActions::REMOVE_PERSON:
       case ConpherenceUpdateActions::NOTIFICATIONS:
       default:
         break;
     }
 
     $content = array(
       'transactions' => $rendered_transactions,
       'latest_transaction_id' => $new_latest_transaction_id,
       'nav_item' => hsprintf('%s', $nav_item),
       'conpherence_phid' => $conpherence->getPHID(),
       'header' => hsprintf('%s', $header),
       'file_widget' => $file_widget ? $file_widget->render() : null,
       'people_widget' => $people_widget ? $people_widget->render() : null,
     );
 
     return $content;
   }
 
 }
diff --git a/src/applications/conpherence/controller/ConpherenceViewController.php b/src/applications/conpherence/controller/ConpherenceViewController.php
index 26651f261a..665228565c 100644
--- a/src/applications/conpherence/controller/ConpherenceViewController.php
+++ b/src/applications/conpherence/controller/ConpherenceViewController.php
@@ -1,176 +1,180 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceViewController extends
   ConpherenceController {
 
   private $conpherenceID;
   private $conpherence;
 
   public function setConpherence(ConpherenceThread $conpherence) {
     $this->conpherence = $conpherence;
     return $this;
   }
   public function getConpherence() {
     return $this->conpherence;
   }
 
   public function setConpherenceID($conpherence_id) {
     $this->conpherenceID = $conpherence_id;
     return $this;
   }
   public function getConpherenceID() {
     return $this->conpherenceID;
   }
 
   public function willProcessRequest(array $data) {
     $this->setConpherenceID(idx($data, 'id'));
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $conpherence_id = $this->getConpherenceID();
     if (!$conpherence_id) {
       return new Aphront404Response();
     }
     $query = id(new ConpherenceThreadQuery())
       ->setViewer($user)
       ->withIDs(array($conpherence_id))
       ->needParticipantCache(true)
       ->needTransactions(true)
       ->setTransactionLimit(ConpherenceThreadQuery::TRANSACTION_LIMIT);
     $before_transaction_id = $request->getInt('oldest_transaction_id');
     if ($before_transaction_id) {
       $query
         ->setBeforeTransactionID($before_transaction_id);
     }
     $conpherence = $query->executeOne();
     if (!$conpherence) {
       return new Aphront404Response();
     }
     $this->setConpherence($conpherence);
 
     $participant = $conpherence->getParticipant($user->getPHID());
     $transactions = $conpherence->getTransactions();
     $latest_transaction = end($transactions);
     $write_guard = AphrontWriteGuard::beginScopedUnguardedWrites();
     $participant->markUpToDate($conpherence, $latest_transaction);
     unset($write_guard);
 
     $data = $this->renderConpherenceTransactions($conpherence);
     $messages = $this->renderMessagePaneContent(
       $data['transactions'],
       $data['oldest_transaction_id']);
     if ($before_transaction_id) {
       $header = null;
       $form = null;
       $content = array('messages' => $messages);
     } else {
       $header = $this->renderHeaderPaneContent();
       $form = $this->renderFormContent($data['latest_transaction_id']);
       $content = array(
         'header' => $header,
         'messages' => $messages,
         'form' => $form
       );
     }
 
     if ($request->isAjax()) {
       return id(new AphrontAjaxResponse())->setContent($content);
     }
 
     $layout = id(new ConpherenceLayoutView())
       ->setBaseURI($this->getApplicationURI())
       ->setThread($conpherence)
       ->setHeader($header)
       ->setMessages($messages)
       ->setReplyForm($form)
       ->setRole('thread');
 
+    $title = $conpherence->getTitle();
+    if (!$title) {
+      $title = pht('Conpherence');
+    }
     return $this->buildApplicationPage(
       $layout,
       array(
-        'title' => $conpherence->getTitle(),
+        'title' => $title,
         'device' => true,
       ));
   }
 
   private function renderHeaderPaneContent() {
     require_celerity_resource('conpherence-header-pane-css');
     $conpherence = $this->getConpherence();
     $header = $this->buildHeaderPaneContent($conpherence);
     return hsprintf('%s', $header);
   }
 
 
   private function renderMessagePaneContent(
     array $transactions,
     $oldest_transaction_id) {
 
     require_celerity_resource('conpherence-message-pane-css');
 
     $scrollbutton = '';
     if ($oldest_transaction_id) {
       $scrollbutton = javelin_tag(
         'a',
         array(
           'href' => '#',
           'mustcapture' => true,
           'sigil' => 'show-older-messages',
           'class' => 'conpherence-show-older-messages',
           'meta' => array(
             'oldest_transaction_id' => $oldest_transaction_id
           )
         ),
         pht('Show Older Messages'));
     }
 
     return hsprintf('%s%s', $scrollbutton, $transactions);
   }
 
   private function renderFormContent($latest_transaction_id) {
 
     $conpherence = $this->getConpherence();
     $user = $this->getRequest()->getUser();
     $update_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
 
     Javelin::initBehavior('conpherence-pontificate');
 
     $form =
       id(new AphrontFormView())
       ->setAction($update_uri)
       ->setFlexible(true)
       ->addSigil('conpherence-pontificate')
       ->setWorkflow(true)
       ->setUser($user)
       ->addHiddenInput('action', 'message')
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setUser($user)
         ->setName('text'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Pontificate')))
       ->appendChild(
         javelin_tag(
           'input',
           array(
             'type' => 'hidden',
             'name' => 'latest_transaction_id',
             'value' => $latest_transaction_id,
             'sigil' => 'latest-transaction-id',
             'meta' => array(
               'id' => $latest_transaction_id
             )
           ),
         ''))
       ->render();
 
     return $form;
   }
 
 }
diff --git a/src/applications/conpherence/controller/ConpherenceWidgetController.php b/src/applications/conpherence/controller/ConpherenceWidgetController.php
index 91f89fd8ef..76a735b63e 100644
--- a/src/applications/conpherence/controller/ConpherenceWidgetController.php
+++ b/src/applications/conpherence/controller/ConpherenceWidgetController.php
@@ -1,460 +1,391 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceWidgetController extends
   ConpherenceController {
 
   private $conpherenceID;
   private $conpherence;
   private $userPreferences;
 
   public function setUserPreferences(PhabricatorUserPreferences $pref) {
     $this->userPreferences = $pref;
     return $this;
   }
   public function getUserPreferences() {
     return $this->userPreferences;
   }
 
   public function setConpherence(ConpherenceThread $conpherence) {
     $this->conpherence = $conpherence;
     return $this;
   }
   public function getConpherence() {
     return $this->conpherence;
   }
 
   public function setConpherenceID($conpherence_id) {
     $this->conpherenceID = $conpherence_id;
     return $this;
   }
   public function getConpherenceID() {
     return $this->conpherenceID;
   }
 
   public function willProcessRequest(array $data) {
     $this->setConpherenceID(idx($data, 'id'));
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $conpherence_id = $this->getConpherenceID();
     if (!$conpherence_id) {
       return new Aphront404Response();
     }
     $conpherence = id(new ConpherenceThreadQuery())
       ->setViewer($user)
       ->withIDs(array($conpherence_id))
       ->needWidgetData(true)
       ->executeOne();
     $this->setConpherence($conpherence);
 
     $this->setUserPreferences($user->loadPreferences());
 
     $widgets = $this->renderWidgetPaneContent();
     $content = $widgets;
     return id(new AphrontAjaxResponse())->setContent($content);
   }
 
   private function renderWidgetPaneContent() {
     require_celerity_resource('conpherence-widget-pane-css');
     require_celerity_resource('sprite-conpherence-css');
     $conpherence = $this->getConpherence();
 
     $widgets = array();
     $widgets[] = phutil_tag(
       'div',
       array(
-        'class' => 'widgets-header'
+        'class' => 'widgets-header',
       ),
-      phutil_tag(
-        'div',
-        array(
-          'class' => 'widgets-header-icon-holder'
-        ),
-        array(
-          javelin_tag(
-            'a',
-            array(
-              'sigil' => 'conpherence-change-widget',
-              'meta'  => array(
-                'widget' => 'conpherence-menu-pane',
-              ),
-              'id' => 'conpherence-menu-pane-toggle',
-              'class' => 'sprite-conpherence conpherence_list_off',
-            ),
-            ''),
-          javelin_tag(
-            'a',
-            array(
-              'sigil' => 'conpherence-change-widget',
-              'meta'  => array(
-                'widget' => 'conpherence-message-pane',
-              ),
-              'id' => 'conpherence-message-pane-toggle',
-              'class' => 'sprite-conpherence conpherence_conversation_off',
-            ),
-            ''),
-          javelin_tag(
-            'a',
-            array(
-              'sigil' => 'conpherence-change-widget',
-              'meta'  => array(
-                'widget' => 'widgets-people',
-              ),
-              'id' => 'widgets-people-toggle',
-              'class' =>
-              'sprite-conpherence conpherence_people_on conpherence_people_off'
-            ),
-            ''),
-          javelin_tag(
-            'a',
-            array(
-              'sigil' => 'conpherence-change-widget',
-              'meta'  => array(
-                'widget' => 'widgets-files',
-              ),
-              'id' => 'widgets-files-toggle',
-              'class' =>
-              'sprite-conpherence conpherence_files_off'
-            ),
-            ''),
-          javelin_tag(
-            'a',
-            array(
-              'sigil' => 'conpherence-change-widget',
-              'meta'  => array(
-                'widget' => 'widgets-calendar',
-              ),
-              'id' => 'widgets-calendar-toggle',
-              'class' => 'sprite-conpherence conpherence_calendar_off',
-            ),
-            ''),
-          javelin_tag(
-            'a',
-            array(
-              'sigil' => 'conpherence-change-widget',
-              'meta'  => array(
-                'widget' => 'widgets-settings',
-              ),
-              'id' => 'widgets-settings-toggle',
-              'class' => 'sprite-conpherence conpherence_settings_off',
-            ),
-            '')
-          )));
+      id(new PhabricatorActionHeaderView())
+      ->setHeaderColor(PhabricatorActionHeaderView::HEADER_GREY)
+      ->setHeaderTitle('')
+      ->setHeaderHref('#')
+      ->setDropdown(true)
+      ->addHeaderSigil('widgets-selector'));
     $user = $this->getRequest()->getUser();
     // now the widget bodies
     $widgets[] = javelin_tag(
       'div',
       array(
         'class' => 'widgets-body',
         'id' => 'widgets-people',
         'sigil' => 'widgets-people',
       ),
       id(new ConpherencePeopleWidgetView())
       ->setUser($user)
       ->setConpherence($conpherence)
       ->setUpdateURI($this->getWidgetURI()));
     $widgets[] = javelin_tag(
       'div',
       array(
         'class' => 'widgets-body',
         'id' => 'widgets-files',
         'sigil' => 'widgets-files',
         'style' => 'display: none;'
       ),
       id(new ConpherenceFileWidgetView())
       ->setUser($user)
       ->setConpherence($conpherence)
       ->setUpdateURI($this->getWidgetURI()));
     $widgets[] = phutil_tag(
       'div',
       array(
         'class' => 'widgets-body',
         'id' => 'widgets-calendar',
         'style' => 'display: none;'
       ),
       $this->renderCalendarWidgetPaneContent());
     $widgets[] = phutil_tag(
       'div',
       array(
         'class' => 'widgets-body',
         'id' => 'widgets-settings',
         'style' => 'display: none'
       ),
       $this->renderSettingsWidgetPaneContent());
 
     // without this implosion we get "," between each element in our widgets
     // array
     return array('widgets' => phutil_implode_html('', $widgets));
   }
 
   private function renderSettingsWidgetPaneContent() {
     $user = $this->getRequest()->getUser();
     $conpherence = $this->getConpherence();
     $participants = $conpherence->getParticipants();
     $participant = $participants[$user->getPHID()];
     $default = ConpherenceSettings::EMAIL_ALWAYS;
     $preference = $this->getUserPreferences();
     if ($preference) {
       $default = $preference->getPreference(
         PhabricatorUserPreferences::PREFERENCE_CONPH_NOTIFICATIONS,
         ConpherenceSettings::EMAIL_ALWAYS);
     }
     $settings = $participant->getSettings();
     $notifications = idx(
       $settings,
       'notifications',
       $default);
     $options = id(new AphrontFormRadioButtonControl())
       ->addButton(
         ConpherenceSettings::EMAIL_ALWAYS,
         ConpherenceSettings::getHumanString(
           ConpherenceSettings::EMAIL_ALWAYS),
         '')
       ->addButton(
         ConpherenceSettings::NOTIFICATIONS_ONLY,
         ConpherenceSettings::getHumanString(
           ConpherenceSettings::NOTIFICATIONS_ONLY),
         '')
       ->setName('notifications')
       ->setValue($notifications);
 
     $layout = array(
       $options,
       phutil_tag(
         'input',
         array(
           'type' => 'hidden',
           'name' => 'action',
           'value' => 'notifications'
         )),
       phutil_tag(
         'button',
         array(
           'type' => 'submit',
           'class' => 'notifications-update grey',
         ),
         pht('Update Notifications'))
     );
 
     return phabricator_form(
       $user,
       array(
         'method' => 'POST',
         'action' => $this->getWidgetURI(),
         'sigil' => 'notifications-update',
       ),
       $layout);
   }
 
   private function renderCalendarWidgetPaneContent() {
     $user = $this->getRequest()->getUser();
 
     $conpherence = $this->getConpherence();
     $participants = $conpherence->getParticipants();
     $widget_data = $conpherence->getWidgetData();
     $statuses = $widget_data['statuses'];
     $handles = $conpherence->getHandles();
     $content = array();
     $layout = id(new AphrontMultiColumnView())
       ->setFluidLayout(true);
     $timestamps = $this->getCalendarWidgetWeekTimestamps();
     $today = $timestamps['today'];
     $weekstamps = $timestamps['weekstamps'];
     $one_day = 24 * 60 * 60;
     foreach ($weekstamps as $time => $day) {
       // build a header for the new day
       $content[] = phutil_tag(
         'div',
         array(
           'class' => 'day-header'
         ),
         array(
           phutil_tag(
             'div',
             array(
               'class' => 'day-name'
             ),
             $day->format('l')),
           phutil_tag(
             'div',
             array(
               'class' => 'day-date'
             ),
             $day->format('m/d/y'))
           ));
 
       $week_day_number = $day->format('w');
 
 
       $day->setTime(0, 0, 0);
       $epoch_start = $day->format('U');
       $next_day = clone $day;
       $next_day->modify('+1 day');
       $epoch_end = $next_day->format('U');
 
       $first_status_of_the_day = true;
       $statuses_of_the_day = array();
       // keep looking through statuses where we last left off
       foreach ($statuses as $status) {
         if ($status->getDateFrom() >= $epoch_end) {
           // This list is sorted, so we can stop looking.
           break;
         }
 
         if ($status->getDateFrom() < $epoch_end &&
             $status->getDateTo() > $epoch_start) {
           if (!$first_status_of_the_day) {
             $content[] = phutil_tag(
               'div',
               array(
                 'class' => 'divider'
               ),
               '');
           }
           $statuses_of_the_day[$status->getUserPHID()] = $status;
           $timespan = $status->getDateTo() - $status->getDateFrom();
           if ($timespan > $one_day) {
             $time_str = 'm/d';
           } else {
             $time_str = 'h:i A';
           }
           $epoch_range = phabricator_format_local_time(
             $status->getDateFrom(),
             $user,
             $time_str) . ' - ' . phabricator_format_local_time(
               $status->getDateTo(),
               $user,
               $time_str);
 
           $content[] = phutil_tag(
             'div',
             array(
               'class' => 'user-status '.$status->getTextStatus(),
             ),
             array(
               phutil_tag(
                 'div',
                 array(
                   'class' => 'epoch-range'
                 ),
                 $epoch_range),
               phutil_tag(
                 'div',
                 array(
                   'class' => 'icon',
                 ),
                 ''),
               phutil_tag(
                 'div',
                 array(
                   'class' => 'description'
                 ),
                 $status->getTerseSummary($user)),
               phutil_tag(
                 'div',
                 array(
                   'class' => 'participant'
                 ),
                 $handles[$status->getUserPHID()]->getName())
               ));
           $first_status_of_the_day = false;
         }
       }
       // we didn't get a status on this day so add a spacer
       if ($first_status_of_the_day) {
         $content[] = phutil_tag(
           'div',
           array(
             'class' => 'spacer'
           ),
           '');
       }
       if ($week_day_number > 0 && $week_day_number < 6) {
         if ($week_day_number == $today->format('w')) {
           $active_class = '-active';
         } else {
           $active_class = '';
         }
         $inner_layout = array();
         foreach ($participants as $phid => $participant) {
           $status = idx($statuses_of_the_day, $phid, false);
           if ($status) {
             $inner_layout[] = phutil_tag(
               'div',
               array(
                 'class' => $status->getTextStatus()
               ),
               '');
           } else {
             $inner_layout[] = phutil_tag(
               'div',
               array(
                 'class' => 'present'
               ),
               '');
           }
         }
         $layout->addColumn(
           phutil_tag(
             'div',
             array(
               'class' => 'day-column'.$active_class
             ),
             array(
               phutil_tag(
                 'div',
                 array(
                   'class' => 'day-name'
                 ),
                 $day->format('D')),
               phutil_tag(
                 'div',
                 array(
                   'class' => 'day-number',
                 ),
                 $day->format('j')),
               $inner_layout
               )));
       }
     }
 
     return
       array(
         $layout,
         $content
       );
   }
 
   private function getCalendarWidgetWeekTimestamps() {
     $user = $this->getRequest()->getUser();
     $timezone = new DateTimeZone($user->getTimezoneIdentifier());
 
     $today = id(new DateTime('now', $timezone));
     $monday = clone $today;
     $monday
       ->modify('+1 day')
       ->modify('last monday');
     $timestamps = array();
     for ($day = 0; $day < 7; $day++) {
       $timestamp = clone $monday;
       $timestamps[] = $timestamp->modify(sprintf('+%d days', $day));
     }
 
     return array(
       'today' => $today,
       'weekstamps' => $timestamps
     );
   }
 
   private function getWidgetURI() {
     $conpherence = $this->getConpherence();
     return $this->getApplicationURI('update/'.$conpherence->getID().'/');
   }
 
 }
diff --git a/src/applications/conpherence/storage/ConpherenceThread.php b/src/applications/conpherence/storage/ConpherenceThread.php
index ee166d3ceb..acae732b71 100644
--- a/src/applications/conpherence/storage/ConpherenceThread.php
+++ b/src/applications/conpherence/storage/ConpherenceThread.php
@@ -1,218 +1,220 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceThread extends ConpherenceDAO
   implements PhabricatorPolicyInterface {
 
   protected $id;
   protected $phid;
   protected $title;
   protected $messageCount;
   protected $recentParticipantPHIDs = array();
   protected $mailKey;
 
   private $participants;
   private $transactions;
   private $handles;
   private $filePHIDs;
   private $widgetData;
   private $images = array();
 
   public function getConfiguration() {
     return array(
       self::CONFIG_AUX_PHID => true,
       self::CONFIG_SERIALIZATION => array(
         'recentParticipantPHIDs' => self::SERIALIZATION_JSON,
       ),
     ) + parent::getConfiguration();
   }
 
   public function generatePHID() {
     return PhabricatorPHID::generateNewPHID(
       PhabricatorPHIDConstants::PHID_TYPE_CONP);
   }
 
   public function save() {
     if (!$this->getMailKey()) {
       $this->setMailKey(Filesystem::readRandomCharacters(20));
     }
     return parent::save();
   }
 
   public function attachParticipants(array $participants) {
     assert_instances_of($participants, 'ConpherenceParticipant');
     $this->participants = $participants;
     return $this;
   }
   public function getParticipants() {
     if ($this->participants === null) {
       throw new Exception(
         'You must attachParticipants first!'
       );
     }
     return $this->participants;
   }
   public function getParticipant($phid) {
     $participants = $this->getParticipants();
     return $participants[$phid];
   }
   public function getParticipantPHIDs() {
     $participants = $this->getParticipants();
     return array_keys($participants);
   }
 
   public function attachHandles(array $handles) {
     assert_instances_of($handles, 'PhabricatorObjectHandle');
     $this->handles = $handles;
     return $this;
   }
   public function getHandles() {
     if ($this->handles === null) {
       throw new Exception(
         'You must attachHandles first!'
       );
     }
     return $this->handles;
   }
 
   public function attachTransactions(array $transactions) {
     assert_instances_of($transactions, 'ConpherenceTransaction');
     $this->transactions = $transactions;
     return $this;
   }
   public function getTransactions() {
     if ($this->transactions === null) {
       throw new Exception(
         'You must attachTransactions first!'
       );
     }
     return $this->transactions;
   }
 
   public function getTransactionsFrom($begin = 0, $amount = null) {
     $length = count($this->transactions);
     if ($amount === null) {
       $amount === $length;
     }
     if ($this->transactions === null) {
       throw new Exception(
         'You must attachTransactions first!'
       );
     }
     return array_slice(
       $this->transactions,
       $length - $begin - $amount,
       $amount);
   }
 
   public function attachFilePHIDs(array $file_phids) {
     $this->filePHIDs = $file_phids;
     return $this;
   }
   public function getFilePHIDs() {
     if ($this->filePHIDs === null) {
       throw new Exception(
         'You must attachFilePHIDs first!'
       );
     }
     return $this->filePHIDs;
   }
 
   public function attachWidgetData(array $widget_data) {
     $this->widgetData = $widget_data;
     return $this;
   }
   public function getWidgetData() {
     if ($this->widgetData === null) {
       throw new Exception(
         'You must attachWidgetData first!'
       );
     }
     return $this->widgetData;
   }
 
   public function getDisplayData(PhabricatorUser $user, $size) {
     $recent_phids = $this->getRecentParticipantPHIDs();
     $handles = $this->getHandles();
 
     // luck has little to do with it really; most recent participant who isn't
     // the user....
     $lucky_phid = null;
     $lucky_index = null;
     foreach ($recent_phids as $index => $phid) {
       if ($phid == $user->getPHID()) {
         continue;
       }
       $lucky_phid = $phid;
       break;
     }
     reset($recent_phids);
 
     if ($lucky_phid) {
       $lucky_handle = $handles[$lucky_phid];
     // this will be just the user talking to themselves. weirdos.
     } else {
       $lucky_handle = reset($handles);
     }
 
-    $title = $this->getTitle();
+    $title = $js_title = $this->getTitle();
     if (!$title) {
       $title = $lucky_handle->getName();
+      $js_title = pht('Conpherence');
     }
     $img_src = $lucky_handle->getImageURI();
 
     $count = 0;
     $final = false;
     $subtitle = null;
     foreach ($recent_phids as $phid) {
       if ($phid == $user->getPHID()) {
         continue;
       }
       $handle = $handles[$phid];
       if ($subtitle) {
         if ($final) {
           $subtitle .= '...';
           break;
         } else {
           $subtitle .= ', ';
         }
       }
       $subtitle .= $handle->getName();
       $count++;
       $final = $count == 3;
     }
 
     $participants = $this->getParticipants();
     $user_participation = $participants[$user->getPHID()];
     $unread_count = $this->getMessageCount() -
       $user_participation->getSeenMessageCount();
 
     return array(
       'title' => $title,
+      'js_title' => $js_title,
       'subtitle' => $subtitle,
       'unread_count' => $unread_count,
       'epoch' => $this->getDateModified(),
       'image' => $img_src,
     );
   }
 
 /* -(  PhabricatorPolicyInterface Implementation  )-------------------------- */
   public function getCapabilities() {
     return array(
       PhabricatorPolicyCapability::CAN_VIEW,
       PhabricatorPolicyCapability::CAN_EDIT,
     );
   }
 
   public function getPolicy($capability) {
     return PhabricatorPolicies::POLICY_NOONE;
   }
 
   public function hasAutomaticCapability($capability, PhabricatorUser $user) {
     $participants = $this->getParticipants();
     return isset($participants[$user->getPHID()]);
   }
 
 }
diff --git a/src/applications/conpherence/view/ConpherenceFileWidgetView.php b/src/applications/conpherence/view/ConpherenceFileWidgetView.php
index f7d53509e6..1ee6cbeca2 100644
--- a/src/applications/conpherence/view/ConpherenceFileWidgetView.php
+++ b/src/applications/conpherence/view/ConpherenceFileWidgetView.php
@@ -1,95 +1,104 @@
 <?php
 
 /**
  * @group conpherence
  */
 final class ConpherenceFileWidgetView extends ConpherenceWidgetView {
 
   public function render() {
     require_celerity_resource('sprite-docs-css');
     $conpherence = $this->getConpherence();
     $widget_data = $conpherence->getWidgetData();
     $files = $widget_data['files'];
     $files_authors = $widget_data['files_authors'];
     $files_html = array();
 
     foreach ($files as $file) {
       $icon_class = $file->getDisplayIconForMimeType();
       $icon_view = phutil_tag(
         'div',
         array(
           'class' => 'file-icon sprite-docs '.$icon_class
         ),
         '');
       $file_view = id(new PhabricatorFileLinkView())
         ->setFilePHID($file->getPHID())
         ->setFileName(phutil_utf8_shorten($file->getName(), 28))
         ->setFileViewable($file->isViewableImage())
         ->setFileViewURI($file->getBestURI())
         ->setCustomClass('file-title');
 
       $who_done_it_text = '';
       // system generated files don't have authors
       if ($file->getAuthorPHID()) {
         $who_done_it_text = pht(
           'by %s ',
           $files_authors[$file->getPHID()]->renderLink());
       }
       $date_text = phabricator_relative_date(
         $file->getDateCreated(),
         $this->getUser());
 
       $who_done_it = phutil_tag(
         'div',
         array(
           'class' => 'file-uploaded-by'
         ),
         pht('Uploaded %s%s.', $who_done_it_text, $date_text));
 
       $extra = '';
       if ($file->isViewableImage()) {
         $meta = $file_view->getMetadata();
         $extra = javelin_tag(
           'a',
           array(
             'sigil' => 'lightboxable',
             'meta' => $meta,
             'class' => 'file-extra',
           ),
           phutil_tag(
             'img',
             array(
               'src' => $file->getThumb160x120URI()
             ),
             ''));
       }
 
       $divider = phutil_tag(
         'div',
         array(
           'class' => 'divider'
         ),
         '');
 
       $files_html[] = phutil_tag(
         'div',
         array(
           'class' => 'file-entry'
         ),
         array(
           $icon_view,
           $file_view,
           $who_done_it,
           $extra,
           $divider
         ));
     }
 
+    if (empty($files)) {
+      $files_html[] = javelin_tag(
+        'div',
+        array(
+          'class' => 'no-files',
+          'sigil' => 'no-files'),
+        pht('No files.'));
+    }
+
     return phutil_tag(
       'div',
       array('class' => 'file-list'),
       $files_html);
 
   }
 
 }
diff --git a/src/applications/conpherence/view/ConpherenceLayoutView.php b/src/applications/conpherence/view/ConpherenceLayoutView.php
index 7b0ad68dcc..d6d31bf820 100644
--- a/src/applications/conpherence/view/ConpherenceLayoutView.php
+++ b/src/applications/conpherence/view/ConpherenceLayoutView.php
@@ -1,198 +1,190 @@
 <?php
 
 final class ConpherenceLayoutView extends AphrontView {
 
   private $thread;
   private $baseURI;
   private $threadView;
   private $role;
   private $header;
   private $messages;
   private $replyForm;
 
   public function setMessages($messages) {
     $this->messages = $messages;
     return $this;
   }
 
   public function setReplyForm($reply_form) {
     $this->replyForm = $reply_form;
     return $this;
   }
 
   public function setHeader($header) {
     $this->header = $header;
     return $this;
   }
 
   public function setRole($role) {
     $this->role = $role;
     return $this;
   }
 
   public function getThreadView() {
     return $this->threadView;
   }
 
   public function setBaseURI($base_uri) {
     $this->baseURI = $base_uri;
     return $this;
   }
 
   public function setThread(ConpherenceThread $thread) {
     $this->thread = $thread;
     return $this;
   }
 
   public function setThreadView(ConpherenceThreadListView $thead_view) {
     $this->threadView = $thead_view;
     return $this;
   }
 
   public function render() {
     require_celerity_resource('conpherence-menu-css');
 
     $layout_id = celerity_generate_unique_node_id();
 
     Javelin::initBehavior('conpherence-menu',
       array(
         'base_uri' => $this->baseURI,
         'layoutID' => $layout_id,
         'selectedID' => ($this->thread ? $this->thread->getID() : null),
         'role' => $this->role,
         'hasThreadList' => (bool)$this->threadView,
         'hasThread' => (bool)$this->messages,
         'hasWidgets' => false,
       ));
 
-    $all_views = 1;
-    $devices_only = 0;
     Javelin::initBehavior(
       'conpherence-widget-pane',
       array(
-        'allViews' => $all_views,
-        'devicesOnly' => $devices_only,
-        'widgetRegistery' => array(
-          'conpherence-menu-pane' => $devices_only,
-          'conpherence-message-pane' => $devices_only,
-          'widgets-people' => $all_views,
-          'widgets-files' => $all_views,
-          'widgets-calendar' => $all_views,
-          'widgets-settings' => $all_views,
-        ),
-        'widgetExtraNodes' => array(
-          'conpherence-menu-pane' => array(
-            array(
-              'tagname' => 'div',
-              'sigil' => 'phabricator-nav-column-background',
-              'showstyle' => 'block',
-              'hidestyle' => 'none',
-              'desktopstyle' => 'block'),
-          )
-        ),
-        'widgetToggleMap' => array(
-          'conpherence-menu-pane' => 'conpherence_list_on',
-          'conpherence-message-pane' => 'conpherence_conversation_on',
-          'widgets-people' => 'conpherence_people_on',
-          'widgets-files' => 'conpherence_files_on',
-          'widgets-calendar' => 'conpherence_calendar_on',
-          'widgets-settings' => 'conpherence_settings_on',
-        )
-      ));
+        'selectChar' => "\xE2\x96\xBC",
+        'widgetRegistry' => array(
+          'conpherence-message-pane' => array(
+            'name' => pht('Thread'),
+            'deviceOnly' => true,
+          ),
+          'widgets-people' => array(
+            'name' => pht('Participants'),
+            'deviceOnly' => false,
+          ),
+          'widgets-files' => array(
+            'name' => pht('Files'),
+            'deviceOnly' => false,
+          ),
+          'widgets-calendar' => array(
+            'name' => pht('Calendar'),
+            'deviceOnly' => false,
+          ),
+          'widgets-settings' => array(
+            'name' => pht('Settings'),
+            'deviceOnly' => false,
+          ),
+        )));
 
     return javelin_tag(
       'div',
       array(
         'id'    => $layout_id,
         'sigil' => 'conpherence-layout',
         'class' => 'conpherence-layout conpherence-role-'.$this->role,
       ),
       array(
         javelin_tag(
           'div',
           array(
             'class' => 'phabricator-nav-column-background',
             'sigil' => 'phabricator-nav-column-background',
           ),
           ''),
         javelin_tag(
           'div',
           array(
             'id' => 'conpherence-menu-pane',
             'class' => 'conpherence-menu-pane phabricator-side-menu',
             'sigil' => 'conpherence-menu-pane',
           ),
           nonempty($this->threadView, '')),
         javelin_tag(
           'div',
           array(
             'class' => 'conpherence-content-pane',
           ),
           array(
             javelin_tag(
               'div',
               array(
                 'class' => 'conpherence-no-threads',
                 'sigil' => 'conpherence-no-threads',
                 'style' => 'display: none;',
               ),
               array(
                 phutil_tag(
                   'div',
                   array(
                     'class' => 'text'
                   ),
                   pht('You do not have any messages yet.')),
                 javelin_tag(
                   'a',
                   array(
                     'href' => '/conpherence/new/',
                     'class' => 'button',
                     'sigil' => 'workflow',
                   ),
                   pht('Send a Message'))
             )),
             javelin_tag(
               'div',
               array(
                 'class' => 'conpherence-header-pane',
                 'id' => 'conpherence-header-pane',
                 'sigil' => 'conpherence-header-pane',
               ),
               nonempty($this->header, '')),
             javelin_tag(
               'div',
               array(
                 'class' => 'conpherence-widget-pane',
                 'id' => 'conpherence-widget-pane',
                 'sigil' => 'conpherence-widget-pane',
               ),
               ''),
             javelin_tag(
               'div',
               array(
                 'class' => 'conpherence-message-pane',
                 'id' => 'conpherence-message-pane'
               ),
               array(
                 javelin_tag(
                   'div',
                   array(
                     'class' => 'conpherence-messages',
                     'id' => 'conpherence-messages',
                     'sigil' => 'conpherence-messages',
                   ),
                   nonempty($this->messages, '')),
                 javelin_tag(
                   'div',
                   array(
                     'id' => 'conpherence-form',
                     'sigil' => 'conpherence-form'
                   ),
                   nonempty($this->replyForm, ''))
               )),
           )),
       ));
   }
 
 }
diff --git a/src/applications/conpherence/view/ConpherenceThreadListView.php b/src/applications/conpherence/view/ConpherenceThreadListView.php
index 7a24fbea1d..abe66876d4 100644
--- a/src/applications/conpherence/view/ConpherenceThreadListView.php
+++ b/src/applications/conpherence/view/ConpherenceThreadListView.php
@@ -1,166 +1,166 @@
 <?php
 
 final class ConpherenceThreadListView extends AphrontView {
 
   private $baseURI;
   private $threads;
   private $scrollUpParticipant;
   private $scrollDownParticipant;
 
   public function setThreads(array $threads) {
     assert_instances_of($threads, 'ConpherenceThread');
     $this->threads = $threads;
     return $this;
   }
 
   public function setScrollUpParticipant(
     ConpherenceParticipant $participant) {
     $this->scrollUpParticipant = $participant;
     return $this;
   }
 
   public function setScrollDownParticipant(
     ConpherenceParticipant $participant) {
     $this->scrollDownParticipant = $participant;
     return $this;
   }
 
   public function setBaseURI($base_uri) {
     $this->baseURI = $base_uri;
     return $this;
   }
 
   public function render() {
     require_celerity_resource('conpherence-menu-css');
 
     $menu = id(new PhabricatorMenuView())
       ->addClass('conpherence-menu')
       ->setID('conpherence-menu');
 
     $this->addThreadsToMenu($menu, $this->threads);
 
     return $menu;
   }
 
   public function renderSingleThread(ConpherenceThread $thread) {
     return $this->renderThread($thread);
   }
 
   public function renderThreadsHTML() {
     $thread_html = array();
 
     if ($this->scrollUpParticipant->getID()) {
       $thread_html[] = $this->getScrollMenuItem(
         $this->scrollUpParticipant,
         'up');
     }
 
     foreach ($this->threads as $thread) {
       $thread_html[] = $this->renderSingleThread($thread);
     }
 
     if ($this->scrollDownParticipant->getID()) {
       $thread_html[] = $this->getScrollMenuItem(
         $this->scrollDownParticipant,
         'down');
     }
 
     return phutil_implode_html('', $thread_html);
   }
 
   private function renderThreadItem(ConpherenceThread $thread) {
     return id(new PhabricatorMenuItemView())
       ->setType(PhabricatorMenuItemView::TYPE_CUSTOM)
       ->setName($this->renderThread($thread));
   }
 
   private function renderThread(ConpherenceThread $thread) {
     $user = $this->getUser();
 
     $uri = $this->baseURI.$thread->getID().'/';
     $data = $thread->getDisplayData($user, null);
     $title = $data['title'];
     $subtitle = $data['subtitle'];
     $unread_count = $data['unread_count'];
     $epoch = $data['epoch'];
     $image = $data['image'];
 
     return id(new ConpherenceMenuItemView())
       ->setUser($user)
       ->setTitle($title)
       ->setSubtitle($subtitle)
       ->setHref($uri)
       ->setEpoch($epoch)
       ->setImageURI($image)
       ->setUnreadCount($unread_count)
       ->setID($thread->getPHID().'-nav-item')
       ->addSigil('conpherence-menu-click')
       ->setMetadata(
         array(
-          'title' => $title,
+          'title' => $data['js_title'],
           'id' => $thread->getID(),
           ));
   }
 
   private function addThreadsToMenu(
     PhabricatorMenuView $menu,
     array $conpherences) {
 
     if ($this->scrollUpParticipant->getID()) {
       $item = $this->getScrollMenuItem($this->scrollUpParticipant, 'up');
       $menu->addMenuItem($item);
     }
 
     foreach ($conpherences as $conpherence) {
       $item = $this->renderThreadItem($conpherence);
       $menu->addMenuItem($item);
     }
 
     if (empty($conpherences)) {
       $menu->addMenuItem($this->getNoConpherencesMenuItem());
     }
 
     if ($this->scrollDownParticipant->getID()) {
       $item = $this->getScrollMenuItem($this->scrollDownParticipant, 'down');
       $menu->addMenuItem($item);
     }
 
     return $menu;
   }
 
   public function getScrollMenuItem(
     ConpherenceParticipant $participant,
     $direction) {
 
     if ($direction == 'up') {
       $name = pht('Load Newer Threads');
     } else {
       $name = pht('Load Older Threads');
     }
     $item = id(new PhabricatorMenuItemView())
       ->addSigil('conpherence-menu-scroller')
       ->setName($name)
       ->setHref($this->baseURI)
       ->setType(PhabricatorMenuItemView::TYPE_BUTTON)
       ->setMetadata(array(
         'participant_id' => $participant->getID(),
         'conpherence_phid' => $participant->getConpherencePHID(),
         'date_touched' => $participant->getDateTouched(),
         'direction' => $direction));
     return $item;
   }
 
   private function getNoConpherencesMenuItem() {
     $message = phutil_tag(
       'div',
       array(
         'class' => 'no-conpherences-menu-item'
       ),
       pht('No conpherences.'));
 
     return id(new PhabricatorMenuItemView())
       ->setType(PhabricatorMenuItemView::TYPE_CUSTOM)
       ->setName($message);
   }
 
 }
diff --git a/src/view/AphrontTagView.php b/src/view/AphrontTagView.php
index 4db894f471..1afcd3ff91 100644
--- a/src/view/AphrontTagView.php
+++ b/src/view/AphrontTagView.php
@@ -1,159 +1,159 @@
 <?php
 
 /**
  * View which renders down to a single tag, and provides common access for tag
  * attributes (setting classes, sigils, IDs, etc).
  */
 abstract class AphrontTagView extends AphrontView {
 
   private $id;
   private $classes = array();
   private $sigils = array();
   private $style;
   private $metadata;
   private $mustCapture;
   private $workflow;
 
 
   public function setWorkflow($workflow) {
     $this->workflow = $workflow;
     return $this;
   }
 
   public function getWorkflow() {
     return $this->workflow;
   }
 
   public function setMustCapture($must_capture) {
     $this->mustCapture = $must_capture;
     return $this;
   }
 
   public function getMustCapture() {
     return $this->mustCapture;
   }
 
   final public function setMetadata(array $metadata) {
     $this->metadata = $metadata;
     return $this;
   }
 
   final public function getMetadata() {
     return $this->metadata;
   }
 
   final public function setStyle($style) {
     $this->style = $style;
     return $this;
   }
 
   final public function getStyle() {
     return $this->style;
   }
 
   final public function addSigil($sigil) {
     $this->sigils[] = $sigil;
     return $this;
   }
 
   final public function getSigils() {
     return $this->sigils;
   }
 
   public function addClass($class) {
     $this->classes[] = $class;
     return $this;
   }
 
-  public function getClass() {
-    return $this->class;
+  public function getClasses() {
+    return $this->classes;
   }
 
   public function setID($id) {
     $this->id = $id;
     return $this;
   }
 
   public function getID() {
     return $this->id;
   }
 
   protected function getTagName() {
     return 'div';
   }
 
   protected function getTagAttributes() {
     return array();
   }
 
   protected function getTagContent() {
     return $this->renderChildren();
   }
 
   protected function willRender() {
     return;
   }
 
   final public function render() {
     $this->willRender();
 
     $attributes = $this->getTagAttributes();
 
     $implode = array('class', 'sigil');
     foreach ($implode as $attr) {
       if (isset($attributes[$attr])) {
         if (is_array($attributes[$attr])) {
           $attributes[$attr] = implode(' ', $attributes[$attr]);
         }
       }
     }
 
     if (!is_array($attributes)) {
       $class = get_class($this);
       throw new Exception(
         pht("View '%s' did not return an array from getTagAttributes()!",
           $class));
     }
 
     $sigils = $this->sigils;
     if ($this->workflow) {
       $sigils[] = 'workflow';
     }
 
     $tag_view_attributes = array(
       'id' => $this->id,
 
       'class' => $this->classes ? implode(' ', $this->classes) : null,
       'style' => $this->style,
 
       'meta' => $this->metadata,
       'sigil' => $sigils ? implode(' ', $sigils) : null,
       'mustcapture' => $this->mustCapture,
     );
 
     foreach ($tag_view_attributes as $key => $value) {
       if ($value === null) {
         continue;
       }
       if (!isset($attributes[$key])) {
         $attributes[$key] = $value;
         continue;
       }
       switch ($key) {
         case 'class':
         case 'sigil':
           $attributes[$key] = $attributes[$key].' '.$value;
           break;
         default:
           // Use the explicitly set value rather than the tag default value.
           $attributes[$key] = $value;
           break;
       }
     }
 
     return javelin_tag(
       $this->getTagName(),
       $attributes,
       $this->getTagContent());
   }
 }
diff --git a/src/view/layout/PhabricatorActionHeaderView.php b/src/view/layout/PhabricatorActionHeaderView.php
index 1b1bbba53f..84db5b1c7d 100644
--- a/src/view/layout/PhabricatorActionHeaderView.php
+++ b/src/view/layout/PhabricatorActionHeaderView.php
@@ -1,131 +1,148 @@
 <?php
 
 final class PhabricatorActionHeaderView extends AphrontView {
 
   const ICON_GREY = 'grey';
   const ICON_WHITE = 'white';
 
   const HEADER_GREY = 'grey';
   const HEADER_DARK_GREY = 'dark-grey';
   const HEADER_BLUE = 'blue';
   const HEADER_GREEN = 'green';
   const HEADER_RED = 'red';
   const HEADER_YELLOW = 'yellow';
 
   private $headerTitle;
   private $headerHref;
   private $headerIcon;
+  private $headerSigils = array();
   private $actions = array();
   private $iconColor = PhabricatorActionHeaderView::ICON_GREY;
   private $headerColor;
+  private $dropdown;
+
+  public function setDropdown($dropdown) {
+    $this->dropdown = $dropdown;
+    return $this;
+  }
 
   public function addAction(PHUIIconView $action) {
     $this->actions[] = $action;
     return $this;
   }
 
   public function setTag(PhabricatorTagView $tag) {
     $this->actions[] = $tag;
     return $this;
   }
 
   public function setHeaderTitle($header) {
     $this->headerTitle = $header;
     return $this;
   }
 
   public function setHeaderHref($href) {
     $this->headerHref = $href;
     return $this;
   }
 
+  public function addHeaderSigil($sigil) {
+    $this->headerSigils[] = $sigil;
+    return $this;
+  }
+
   public function setHeaderIcon($minicon) {
     $this->headerIcon = $minicon;
     return $this;
   }
 
   public function setIconColor($color) {
     $this->iconColor = $color;
     return $this;
   }
 
   public function setHeaderColor($color) {
     $this->headerColor = $color;
     return $this;
   }
 
   public function render() {
 
     require_celerity_resource('phabricator-action-header-view-css');
 
     $classes = array();
     $classes[] = 'phabricator-action-header';
 
     if ($this->headerColor) {
       $classes[] = 'sprite-gradient';
       $classes[] = 'gradient-'.$this->headerColor.'-header';
     }
 
+    if ($this->dropdown) {
+      $classes[] = 'dropdown';
+    }
+
     $action_list = array();
     foreach ($this->actions as $action) {
       $action_list[] = phutil_tag(
         'li',
           array(
           'class' => 'phabricator-action-header-icon-item'
         ),
         $action);
     }
 
     $header_icon = '';
     if ($this->headerIcon) {
       require_celerity_resource('sprite-minicons-css');
       $header_icon = phutil_tag(
         'span',
           array(
             'class' => 'sprite-minicons minicons-'.$this->headerIcon
           ),
           '');
     }
 
     $header_title = $this->headerTitle;
     if ($this->headerHref) {
-      $header_title = phutil_tag(
+      $header_title = javelin_tag(
         'a',
           array(
             'class' => 'phabricator-action-header-link',
-            'href' => $this->headerHref
+            'href' => $this->headerHref,
+            'sigil' => implode(' ', $this->headerSigils)
           ),
           $this->headerTitle);
     }
 
     $header = phutil_tag(
       'h3',
         array(
           'class' => 'phabricator-action-header-title'
         ),
       array(
         $header_icon,
         $header_title));
 
     $icons = '';
     if (!empty($action_list)) {
       $classes[] = 'phabricator-action-header-icon-'.$this->iconColor;
       $icons = phutil_tag(
         'ul',
           array(
             'class' => 'phabricator-action-header-icon-list'
           ),
           $action_list);
     }
 
     return phutil_tag(
       'div',
         array(
           'class' => implode(' ', $classes)
         ),
         array(
           $header,
           $icons
         ));
   }
 }
diff --git a/src/view/layout/PhabricatorCrumbView.php b/src/view/layout/PhabricatorCrumbView.php
index fe2e422833..9caa3a5ea0 100644
--- a/src/view/layout/PhabricatorCrumbView.php
+++ b/src/view/layout/PhabricatorCrumbView.php
@@ -1,84 +1,89 @@
 <?php
 
 final class PhabricatorCrumbView extends AphrontView {
 
   private $name;
   private $href;
   private $icon;
   private $isLastCrumb;
+  private $workflow;
+
+  public function setWorkflow($workflow) {
+    $this->workflow = $workflow;
+    return $this;
+  }
 
   public function setName($name) {
     $this->name = $name;
     return $this;
   }
 
   public function getName() {
     return $this->name;
   }
 
   public function setHref($href) {
     $this->href = $href;
     return $this;
   }
 
   public function setIcon($icon) {
     $this->icon = $icon;
     return $this;
   }
 
   protected function canAppendChild() {
     return false;
   }
 
   public function setIsLastCrumb($is_last_crumb) {
     $this->isLastCrumb = $is_last_crumb;
     return $this;
   }
 
   public function render() {
     $classes = array(
       'phabricator-crumb-view',
     );
 
     $icon = null;
     if ($this->icon) {
       $classes[] = 'phabricator-crumb-has-icon';
       $icon = phutil_tag(
         'span',
         array(
           'class' => 'phabricator-crumb-icon '.
                      'sprite-apps-large apps-'.$this->icon.'-dark-large',
         ),
         '');
     }
 
     $name = phutil_tag(
       'span',
       array(
         'class' => 'phabricator-crumb-name',
       ),
       $this->name);
 
     $divider = null;
     if (!$this->isLastCrumb) {
       $divider = phutil_tag(
         'span',
         array(
           'class' => 'sprite-menu phabricator-crumb-divider',
         ),
         '');
     } else {
       $classes[] = 'phabricator-last-crumb';
     }
 
-    return phutil_tag(
+    return javelin_tag(
       $this->href ? 'a' : 'span',
-      array(
-        'href'  => $this->href,
-        'class' => implode(' ', $classes),
-      ),
-      array($icon, $name, $divider));
+        array(
+          'sigil' => $this->workflow ? 'workflow' : null,
+          'href'  => $this->href,
+          'class' => implode(' ', $classes),
+        ),
+        array($icon, $name, $divider));
   }
-
-
 }
diff --git a/src/view/layout/PhabricatorCrumbsView.php b/src/view/layout/PhabricatorCrumbsView.php
index 4584e775f0..9fc18f98c9 100644
--- a/src/view/layout/PhabricatorCrumbsView.php
+++ b/src/view/layout/PhabricatorCrumbsView.php
@@ -1,126 +1,133 @@
 <?php
 
 final class PhabricatorCrumbsView extends AphrontView {
 
   private $crumbs = array();
   private $actions = array();
   private $actionListID = null;
 
   protected function canAppendChild() {
     return false;
   }
 
   public function addCrumb(PhabricatorCrumbView $crumb) {
     $this->crumbs[] = $crumb;
     return $this;
   }
 
   public function addAction(PhabricatorMenuItemView $action) {
     $this->actions[] = $action;
     return $this;
   }
 
   public function setActionList(PhabricatorActionListView $list) {
     $this->actionListID = celerity_generate_unique_node_id();
     $list->setId($this->actionListID);
     return $this;
   }
 
   public function render() {
     require_celerity_resource('phabricator-crumbs-view-css');
 
     $action_view = null;
     if (($this->actions) || ($this->actionListID)) {
       $actions = array();
       foreach ($this->actions as $action) {
         $icon = null;
         if ($action->getIcon()) {
           $icon = phutil_tag(
             'span',
             array(
               'class' => 'sprite-icons icons-'.$action->getIcon(),
             ),
             '');
         }
         $name = phutil_tag(
           'span',
             array(
               'class' => 'phabricator-crumbs-action-name'
             ),
           $action->getName()
         );
 
+        $action_sigils = $action->getSigils();
+        if ($action->getWorkflow()) {
+          $action_sigils[] = 'workflow';
+        }
+        $action_classes = $action->getClasses();
+        $action_classes[] = 'phabricator-crumbs-action';
         $actions[] = javelin_tag(
           'a',
           array(
             'href' => $action->getHref(),
-            'class' => 'phabricator-crumbs-action',
-            'sigil' => $action->getWorkflow() ? 'workflow' : null,
+            'class' => implode(' ', $action_classes),
+            'sigil' => implode(' ', $action_sigils),
+            'style' => $action->getStyle()
           ),
           array(
             $icon,
             $name,
           ));
       }
 
       if ($this->actionListID) {
         $icon_id = celerity_generate_unique_node_id();
         $icon = phutil_tag(
           'span',
             array(
               'class' => 'sprite-icons action-action-menu'
             ),
             '');
         $name = phutil_tag(
           'span',
             array(
               'class' => 'phabricator-crumbs-action-name'
             ),
           pht('Actions'));
 
         $actions[] = javelin_tag(
           'a',
             array(
               'href'  => '#',
               'class' =>
                 'phabricator-crumbs-action phabricator-crumbs-action-menu',
               'sigil' => 'jx-toggle-class',
               'id'    => $icon_id,
               'meta'  => array(
                 'map' => array(
                   $this->actionListID => 'phabricator-action-list-toggle',
                   $icon_id => 'phabricator-crumbs-action-menu-open'
                 ),
               ),
             ),
             array(
               $icon,
               $name,
             ));
       }
 
       $action_view = phutil_tag(
         'div',
         array(
           'class' => 'phabricator-crumbs-actions',
         ),
         $actions);
     }
 
     if ($this->crumbs) {
       last($this->crumbs)->setIsLastCrumb(true);
     }
 
     return phutil_tag(
       'div',
       array(
         'class' => 'phabricator-crumbs-view '.
                    'sprite-gradient gradient-breadcrumbs',
       ),
       array(
         $action_view,
         $this->crumbs,
       ));
   }
 
 }
diff --git a/webroot/rsrc/css/application/conpherence/header-pane.cs b/webroot/rsrc/css/application/conpherence/header-pane.cs
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/webroot/rsrc/css/application/conpherence/header-pane.css b/webroot/rsrc/css/application/conpherence/header-pane.css
index 110621e101..57886ca26f 100644
--- a/webroot/rsrc/css/application/conpherence/header-pane.css
+++ b/webroot/rsrc/css/application/conpherence/header-pane.css
@@ -1,7 +1,6 @@
 /**
  * @provides conpherence-header-pane-css
  */
 
 .device .conpherence-header-pane {
-  display: none;
 }
diff --git a/webroot/rsrc/css/application/conpherence/menu.css b/webroot/rsrc/css/application/conpherence/menu.css
index 9273fed3a9..4501e56727 100644
--- a/webroot/rsrc/css/application/conpherence/menu.css
+++ b/webroot/rsrc/css/application/conpherence/menu.css
@@ -1,156 +1,161 @@
 /**
  * @provides conpherence-menu-css
  */
 
 .conpherence-layout {
   position: fixed;
   bottom: 0;
   left: 0;
   right: 0;
   top: 44px;
 }
 
 .conpherence-layout .conpherence-no-threads {
   height 80%;
   width: 80%;
   padding: 10%;
   text-align: center;
 }
 
 .conpherence-layout .conpherence-no-threads .text {
   margin: 0px 0px 16px 0px;
 }
 
 .conpherence-menu-pane {
-  width: 300px;
+  width: 100%;
   position: absolute;
   overflow-x: hidden;
   overflow-y: auto;
   top: 0;
   bottom: 0;
 }
+.device-desktop .conpherence-layout .conpherence-menu-pane,
+.device-desktop .conpherence-layout .phabricator-nav-column-background {
+  width: 280px;
+}
+.device .conpherence-menu-pane {
+  top: 41px;
+}
+.device .conpherence-role-list .conpherence-menu-pane {
+  top: 0px;
+}
 
 .device-phone .conpherence-menu-pane {
   -webkit-overflow-scrolling: touch;
 }
 
-.conpherence-content-pane {
-  margin-left: 300px;
-  position: relative;
-}
-
 .conpherence-layout .phabricator-nav-column-background {
   display: block;
-  width: 300px;
-}
-
-.device .conpherence-menu-pane {
-  top: 41px;
+  width: 100%;
 }
 
 .device .phabricator-nav-column-background {
-  top: 86px;
+  top: 44px;
 }
 
-.device .conpherence-menu-pane,
-.device .phabricator-nav-column-background {
+.device .conpherence-role-thread .conpherence-menu-pane,
+.device .conpherence-role-thread .phabricator-nav-column-background {
   display: none;
-  width: 100%;
 }
 
-.device .conpherence-content-pane {
-  margin-left: 0;
+.device-desktop .conpherence-content-pane {
+  margin-left: 280px;
+}
+
+.conpherence-content-pane {
+  margin-left: 0px;
+  position: relative;
 }
 
 .conpherence-menu .conpherence-menu-item-view {
   display: block;
   height: 55px;
   width: 100%;
   overflow: hidden;
   position: relative;
   text-decoration: none;
   border-top: solid 1px #3B3D3E;
   border-bottom: solid 1px #1C1F21;
   border-right: 0;
   border-left: 2px solid transparent;
 }
 
 .conpherence-menu .conpherence-selected {
   background: rgba(0, 0, 0, .6);
   border-left: 2px solid #66CCFF;
 }
 
 .device-desktop .conpherence-menu .conpherence-menu-item-view:hover {
   background-image: url('/rsrc/image/texture/dark-menu-hover.png');
 }
 
 .conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-image {
   top: 6px;
   left: 6px;
   display: block;
   position: absolute;
   width: 35px;
   height: 35px;
   background-size: 35px;
   border: 4px solid rgb(29, 32, 34);
   border-radius: 3px;
 }
 
 .conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-title {
   display: block;
   margin-top: 12px;
   margin-left: 58px;
   text-align: left;
   font-weight: bold;
   font-size: 13px;
   color: #ffffff;
   text-shadow: 0px 1px 1px #000000;
   overflow: hidden;
-  width: 160px;
+  width: 140px;
   text-overflow: ellipsis;
 }
 
 .conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-subtitle {
   display: block;
   color: #a1a5a9;
   font-size: 11px;
   margin-top: 2px;
   margin-left: 58px;
   font-style: italic;
 }
 
 .conpherence-menu .conpherence-menu-item-view
 .conpherence-menu-item-unread-count {
   position: absolute;
   left: 35px;
   top: 3px;
   background: #f00;
   border-radius: 10px;
   color: white;
   font-weight: bold;
   padding: 1px 6px 2px;
   border: 1px solid #a00;
   font-size: 12px;
 }
 
 .conpherence-menu .hide-unread-count .conpherence-menu-item-unread-count,
 .conpherence-menu .conpherence-selected .conpherence-menu-item-unread-count {
   display: none;
 }
 
 .conpherence-menu .conpherence-menu-item-view .conpherence-menu-item-date {
   position: absolute;
   top: 15px;
   right: 16px;
   color: #a1a5a9;
   font-size: 11px;
 }
 
 .no-conpherences-menu-item {
   color: #a1a5a9;
   border-top: solid 1px #3B3D3E;
   padding: 20px 0;
   margin: 0px auto;
-  width: 300px;
+  width: 280px;
   text-align: center;
 }
diff --git a/webroot/rsrc/css/application/conpherence/message-pane.css b/webroot/rsrc/css/application/conpherence/message-pane.css
index 95e66d8364..821151c51e 100644
--- a/webroot/rsrc/css/application/conpherence/message-pane.css
+++ b/webroot/rsrc/css/application/conpherence/message-pane.css
@@ -1,185 +1,183 @@
 /**
  * @provides conpherence-message-pane-css
  */
 
 .conpherence-message-pane {
   position: fixed;
-  left: 300px;
-  right: 281px;
+  left: 280px;
+  right: 241px;
   top: 76px;
   min-width: 300px;
   width: auto;
   height: 100%;
 }
 
 .device .conpherence-message-pane {
   left: 0;
   right: 0;
-  top: 85px;
   width: 100%;
 }
 
 
 .conpherence-show-older-messages {
   display: block;
   background: #e0e3ec;
   margin: 10px;
   text-align: center;
   padding: 10px;
   color: #18559D;
 }
 
 .conpherence-message-pane .conpherence-messages {
   position: fixed;
-  left: 300px;
-  right: 281px;
+  left: 280px;
+  right: 241px;
   top: 76px;
   bottom: 190px;
   overflow-y: auto;
   box-shadow: inset 1px 4px 5px rgba(0,0,0,0.1);
   -webkit-overflow-scrolling: touch;
 }
 
 .device .conpherence-message-pane .conpherence-messages {
   left: 0;
   right: 0;
-  top: 85px;
   bottom: 3em;
   width: 100%;
   box-shadow: none;
 }
 
 .conpherence-message-pane .phabricator-form-view {
   border-width: 0;
   background: none;
   height: 190px;
   padding: 0;
   position: fixed;
   bottom: 0;
-  left: 300px;
-  right: 281px;
+  left: 280px;
+  right: 241px;
 }
 
 .device .conpherence-message-pane .remarkup-assist-bar {
   height: 0px;
 }
 
 .device .conpherence-message-pane .phabricator-form-view {
   left: 0;
   right: 0;
   background-color: #d8dce2;
   height: 3em;
   width: 100%;
 }
 
 .conpherence-layout .conpherence-message-pane .phabricator-form-view
   div.aphront-form-input {
   margin: 0;
   width: 100%;
 }
 
 .conpherence-message-pane .phabricator-transaction-view {
   margin: 5px 15px;
   background-size: 35px;
   min-height: auto;
 }
 
 .device-phone .conpherence-message-pane .phabricator-transaction-view {
   margin: 0 10px 0 0;
 }
 
 .conpherence-message-pane .phabricator-transaction-detail {
   border-width: 0;
   margin-left: 45px;
 }
 
 .device-phone .conpherence-message-pane .phabricator-transaction-detail {
   min-height: auto;
 }
 
 .conpherence-message-pane .conpherence-edited {
   color: #888;
   margin: 0;
 }
 
 .device-phone .conpherence-message-pane .conpherence-edited {
   color: #888;
   margin: 0 10px;
 }
 
 .conpherence-message-pane .conpherence-edited .phabricator-transaction-content {
  padding: 0 0 5px 45px;
  font-style: italic;
 }
 
 .device-phone .conpherence-message-pane .conpherence-edited .phabricator-transaction-content {
  padding: 0 0 5px 35px;
 }
 
 .conpherence-message-pane .phabricator-transaction-info,
 .conpherence-message-pane .phabricator-content-source-view {
   color: #b7b7b7;
   line-height: 16px;
 }
 
 .conpherence-message-pane .phabricator-transaction-header,
 .conpherence-message-pane .phabricator-transaction-info,
 .conpherence-message-pane .phabricator-transaction-content {
   background: none;
   padding: 0;
 }
 
 .conpherence-message-pane .phabricator-transaction-content {
   padding: 2px 0 8px 0;
 }
 
 .conpherence-message-pane .aphront-form-control {
   padding: 0;
 }
 
 .conpherence-message-pane .aphront-form-control-submit {
   margin-right: 8px;
 }
 .conpherence-message-pane .remarkup-assist-bar {
   border-width: 1px 0 0;
   border-color: #CCC;
   border-bottom: transparent;
 }
 
 .conpherence-message-pane .remarkup-assist-textarea {
   height: 124px;
   padding: 6px;
   border-width: 0 0 1px 0;
   border-color: #e7e7e7;
   box-sizing: border-box;
   -moz-box-sizing: border-box;
   -webkit-box-sizing: border-box;
   resize: none;
 }
 
 .device .conpherence-message-pane .remarkup-assist-textarea {
   margin: 0.5em 0em 0em 2%;
   padding: 6px 1%;
   width: 98%;
   height: 2em;
   resize: none;
 }
 
 .conpherence-message-pane .remarkup-assist-textarea:focus {
   outline: none;
 }
 
 .device .conpherence-message-pane .aphront-form-control-textarea {
   float: left;
   height: 2em;
 }
 .device-tablet .conpherence-message-pane .aphront-form-control-textarea {
   width: 76%;
 }
 .device-phone .conpherence-message-pane .aphront-form-control-textarea {
   width: 63%;
 }
 
 .device .conpherence-message-pane .aphront-form-control-submit button {
   margin: 0.6em 0 0 2%;
 }
diff --git a/webroot/rsrc/css/application/conpherence/widget-pane.css b/webroot/rsrc/css/application/conpherence/widget-pane.css
index bd0e909ae2..9b6ad715e1 100644
--- a/webroot/rsrc/css/application/conpherence/widget-pane.css
+++ b/webroot/rsrc/css/application/conpherence/widget-pane.css
@@ -1,427 +1,422 @@
 /**
  * @provides conpherence-widget-pane-css
  */
 
 .conpherence-widget-pane {
   position: fixed;
   right: 0px;
-  top: 76px;
-  width: 280px;
+  top: 74px;
+  width: 240px;
   height: 100%;
   border-width: 0 0 0 1px;
   border-color: #CCC;
   border-style: solid;
-  background: url('/rsrc/image/texture/dust_background.jpeg');
   overflow-y: auto;
   -webkit-overflow-scrolling: touch;
 }
 
 .device .conpherence-widget-pane {
   top: 44px;
   width: 100%;
 }
 
 .conpherence-widget-pane .aphront-form-input {
   margin: 0;
-  width: 100%;
+  width: 85%;
 }
 
 .conpherence-widget-pane .aphront-form-inset {
   border: 0;
-  background: url('/rsrc/image/texture/dust_background.jpeg');
 }
 
 .conpherence-widget-pane .widgets-header {
-  background-color: #d8dce2;
-  box-shadow: 0px 2px 2px rgba(0,0,0,0.15);
+  background: #F5F5F5;
+  border-bottom: 1px solid #ccc;
 }
 
-.conpherence-widget-pane .widgets-header .widgets-header-icon-holder {
-  height: 40px;
-  width: 280px;
-  margin: 0px auto;
+.device .conpherence-widget-pane .widgets-header {
+  display: none;
 }
 
-.device-desktop .conpherence-widget-pane .widgets-header
-.widgets-header-icon-holder {
-  width: 175px;
+.conpherence-widget-pane .widgets-header .caret {
+  float: none;
+  height: 0px;
+  width: 0px;
+  margin-right: 0px;
+  border-top-color: #000;
 }
-
-.conpherence-widget-pane .widgets-header .sprite-conpherence {
-  display: block;
-  width: 29px;
-  height: 34px;
-  margin: 4px 0px 0px 14px;
-  float: left;
-  clear: none;
+.conpherence-widget-pane .widgets-header  a:hover {
+  text-decoration: none;
 }
-
-.conpherence-widget-pane .widgets-header .conpherence_list_on,
-.conpherence-widget-pane .widgets-header .conpherence_conversation_on,
-.conpherence-widget-pane .widgets-header .conpherence_people_on,
-.conpherence-widget-pane .widgets-header .conpherence_files_on,
-.conpherence-widget-pane .widgets-header .conpherence_calendar_on,
-.conpherence-widget-pane .widgets-header .conpherence_settings_on {
-  border-bottom: 3px solid #525252;
+.device-desktop .conpherence-layout .device-widgets-selector {
+  display: none;
 }
 
-.device-desktop .conpherence-widget-pane .widgets-header
-#conpherence-menu-pane-toggle,
-.device-desktop .conpherence-widget-pane .widgets-header
-#conpherence-message-pane-toggle {
-  display: none;
+.dropdown-menu-frame {
+  width: 229px !important;
 }
 
 .conpherence-widget-pane .widgets-body {
   position: fixed;
   overflow-y: auto;
-  top: 116px;
   bottom: 0px;
   width: 100%;
+  top: 74px;
 }
 
-.device .conpherence-widget-pane .widgets-body {
-  top: 85px;
+.device-desktop .conpherence-widget-pane .widgets-body {
+  top: 104px;
+  width: 280px;
 }
 
 /* files widget */
 
+.conpherence-widget-pane #widgets-files .no-files {
+  width: 200px;
+  padding: 20px;
+  text-align: center;
+  color: #555;
+}
 .conpherence-widget-pane #widgets-files .file-entry {
   padding: 12px 0px 14px 0px;
 }
 .conpherence-widget-pane #widgets-files .file-icon {
   position: relative;
   top: 0px;
   left: 8px;
   width: 32px;
   height: 32px;
   float: left;
 }
 .conpherence-widget-pane #widgets-files .file-title {
   display: block;
   position: relative;
   top: -4px;
   left: 20px;
   overflow-x: hidden;
-  width: 210px;
+  width: 170px;
   font-weight: bold;
 }
 .conpherence-widget-pane #widgets-files .file-uploaded-by {
   color: #a1a5a9;
   position: relative;
   top: 0px;
   left: 20px;
-  width: 210px;
+  width: 170px;
   font-size: 11px;
 }
 
 .conpherence-widget-pane #widgets-files .file-extra {
   display: block;
   height: 120px;
-  width: 160px;
+  width: 120px;
   margin: 8px 0px 8px 52px;
   border: 1px solid #7289b7;
   box-shadow: 0 0px 5px rgba(0,0,0,.25);
   background: #fff;
 }
 
 .conpherence-widget-pane #widgets-files .divider {
   float: left;
   clear: both;
-  width: 210px;
+  width: 170px;
   margin: 8px 0px 0px 50px;
   border: 1px dashed #bfbfbf;
 }
 
 .device .conpherence-widget-pane #widgets-files .file-title,
 .device .conpherence-widget-pane #widgets-files .file-uploaded-by {
   width: 82%;
 }
 .device .conpherence-widget-pane #widgets-files .divider {
   width: 80%;
   margin: 8px 0px 0px 10%;
 }
 
 /* calendar widget */
 
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view {
   margin: 2px 0px 0px 0px;
-  width: 280px;
+  width: 240px;
 }
 .device .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view {
   width: 100%;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column {
   background: white;
   border-right: 1px solid #bfbfbf;
   text-align: center;
 }
 .device-phone .conpherence-widget-pane #widgets-calendar
 .aphront-multi-column-fluid .aphront-multi-column-5-up
 .aphront-multi-column-column-outer {
   width: 20%;
   margin-bottom: 0px;
+  float: left;
+  clear: none;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column-last {
   border-right: 0;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .day-column,
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .day-column-active {
   color: #bfbfbf;
   background-color: white;
   font-weight: bold;
   padding: 0px 0px 10px 0px;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .day-column-active {
   color: black;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .present ,
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .sporadic ,
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .away {
   height: 10px;
   margin: 5px 0px 5px 0px;
   width: 100%;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .present {
   background-color: white;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .sporadic {
   background-color: rgb(222, 226, 232);
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .away {
   background-color: rgb(102, 204, 255);
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .day-name {
   padding: 5px 0px 0px 0px;
   font-size: 12px;
 }
 .conpherence-widget-pane #widgets-calendar .aphront-multi-column-view
 .aphront-multi-column-column .day-number {
   font-size: 16px;
   padding: 5px 0px 5px 0px;
 }
 .conpherence-widget-pane #widgets-calendar .day-header {
   float: left;
   clear: both;
   background-color: #d8dce2;
   border-top: 1px solid #bfbfbf;
   border-bottom: 1px solid #bfbfbf;
   padding: 5px 10px 5px 10px;
-  width: 260px;
+  width: 220px;
 }
 .device .conpherence-widget-pane #widgets-calendar .day-header {
   width: 98%;
   padding: 5px 1% 5px 1%;
 }
 .conpherence-widget-pane #widgets-calendar .day-header .day-name {
   float: left;
   clear: none;
 }
 .conpherence-widget-pane #widgets-calendar .day-header .day-date {
   float: right;
   clear: none;
 }
 
 .conpherence-widget-pane #widgets-calendar .divider {
   float: left;
   clear: both;
-  width: 260px;
+  width: 220px;
   margin: 0px 0px 0px 10px;
   border: 1px dashed #bfbfbf;
 }
 .conpherence-widget-pane #widgets-calendar .divider {
   width: 96%;
   margin: 0px 0px 0px 2%;
 }
 .conpherence-widget-pane #widgets-calendar .spacer {
   float: left;
   clear: both;
   height: 10px;
   width: 100%;
 }
 
 .conpherence-widget-pane #widgets-calendar .user-status {
   float: left;
   clear: both;
   height: 60px;
-  width: 280px;
+  width: 240px;
 }
 .device .conpherence-widget-pane #widgets-calendar .user-status {
   width: 100%;
 }
 
 .conpherence-widget-pane #widgets-calendar .user-status .icon {
   border-radius: 10px;
   position: relative;
   top: 24px;
   left: 10px;
   height: 16px;
   width: 16px;
   box-shadow: 0px 0px 1px #000;
 }
 
 .conpherence-widget-pane #widgets-calendar .sporadic .icon {
   background-color: rgb(222, 226, 232);
 }
 
 .conpherence-widget-pane #widgets-calendar .away .icon {
   background-color: rgb(102, 204, 255);
 }
 
 .conpherence-widget-pane #widgets-calendar .user-status .epoch-range {
   float: right;
   font-style: italic;
   position: relative;
   top: 24px;
   right: 10px;
   font-size: 11px;
 }
 
 .conpherence-widget-pane #widgets-calendar .user-status .description {
   position: relative;
   left: 40px;
   top: 0px;
-  width: 260px;
+  width: 220px;
 }
 
 .conpherence-widget-pane #widgets-calendar .user-status .participant {
   position: relative;
   left: 40px;
   top: 0px;
   font-style: italic;
   font-size: 11px;
-  width: 260px;
+  width: 220px;
 }
 
 .device .conpherence-widget-pane #widgets-calendar .user-status .description,
 .device .conpherence-widget-pane #widgets-calendar .user-status .participant {
   /* we keep these short so no need to change the width */
 }
 
 .conpherence-widget-pane .widget-icon {
   display: block;
   height: 14px;
   width: 14px;
 }
 
 .conpherence-widget-pane .phabricator-remarkup-embed-layout-link {
   padding-bottom: 1px;
 }
 
 /* people widget */
 .conpherence-widget-pane .people-widget-header {
   float: left;
-  width: 280px;
+  width: 240px;
 }
 .conpherence-widget-pane .people-widget-header .divider {
   float: left;
   clear: both;
-  width: 260px;
+  width: 220px;
   margin: 0px 0px 0px 10px;
   border: 1px dashed #bfbfbf;
 }
 .device .conpherence-widget-pane .people-widget-header .divider {
   width: 96%;
   margin: 0px 0px 0px 2%;
 }
 .conpherence-widget-pane .people-widget-header .add-people-widget {
   float: left;
   padding: 10px 0px 10px 0px;
-  width: 280px;
+  width: 240px;
 }
-
 .device .conpherence-widget-pane .people-widget-header,
 .device .conpherence-widget-pane .people-widget-header .add-people-widget {
   width: 100%;
 }
-
+.conpherence-widget-pane .add-people-widget .aphront-form-input {
+  width: 100%;
+}
 .conpherence-widget-pane .people-widget-header .add-people-widget
 .aphront-form-control-tokenizer {
   float: left;
-  width: 180px;
+  width: 142px;
   padding: 0px 0px 0px 10px
 }
 .device .conpherence-widget-pane .people-widget-header .add-people-widget
 .aphront-form-control-tokenizer {
   width: 70%;
 }
 .conpherence-widget-pane .people-widget-header .add-people-widget
 .people-add-button {
   float: right;
-  margin: 2px 10px 0px 0px;
+  margin: 2px 8px 0px 0px;
   padding: 3px 16px 4px 16px;
 }
 @-moz-document url-prefix() {
   .conpherence-widget-pane .people-widget-header .add-people-widget
   .people-add-button {
     margin: -1px 10px 0px 0px;
   }
 }
 .conpherence-widget-pane .person-entry {
   float: left;
-  width: 270px;
+  width: 230px;
   clear: both;
   padding: 10px 0px 0px 8px;
 }
 
 .device .conpherence-widget-pane .person-entry {
   width: 98%;
   padding: 10px 0px 0px 2%;
 }
 
 .conpherence-widget-pane .person-entry a {
   float: left;
   clear: none;
   font-size: 14px;
   font-weight: bold;
-  width: 164px;
+  width: 124px;
 }
 
 .conpherence-widget-pane .person-entry .pic {
   float: left;
   clear: left;
   margin: 0px 10px 0px 0px;
   width: 50px;
   padding: 0;
 }
 
 .conpherence-widget-pane .person-entry .remove {
   float: right;
   clear: right;
   margin: 0;
   width: 34px;
   height: 36px;
   text-align: center;
   font-size: 22px;
   font-weight: bold;
   padding: 8px 0px 8px 0px;
 }
 
 .conpherence-widget-pane .person-entry .remove:hover {
   text-decoration: none;
 }
 
 .conpherence-widget-pane .person-entry .remove .icon {
   color: #bfbfbf;
 }
 
 .conpherence-widget-pane .person-entry .remove:hover .icon {
   color: #18559d;
 }
 
 /* settings widget */
+.conpherence-widget-pane .title-update,
 .conpherence-widget-pane .notifications-update {
   margin: 2px 0px 0px 8px;
 }
diff --git a/webroot/rsrc/js/application/conpherence/behavior-menu.js b/webroot/rsrc/js/application/conpherence/behavior-menu.js
index b4eb0b7532..3bbdc2b2bf 100644
--- a/webroot/rsrc/js/application/conpherence/behavior-menu.js
+++ b/webroot/rsrc/js/application/conpherence/behavior-menu.js
@@ -1,387 +1,405 @@
 /**
  * @provides javelin-behavior-conpherence-menu
  * @requires javelin-behavior
  *           javelin-dom
  *           javelin-util
  *           javelin-request
  *           javelin-stratcom
  *           javelin-workflow
  *           javelin-behavior-device
  *           javelin-history
  *           javelin-vector
  */
 
 JX.behavior('conpherence-menu', function(config) {
 
   var thread = {
     selected: null,
     node: null,
     visible: null
   };
 
   function selectthreadid(id, updatePageData) {
     var threads = JX.DOM.scry(document.body, 'a', 'conpherence-menu-click');
     for (var ii = 0; ii < threads.length; ii++) {
       var data = JX.Stratcom.getData(threads[ii]);
       if (data.id == id) {
         selectthread(threads[ii], updatePageData);
         return;
       }
     }
   }
 
   function selectthread(node, updatePageData) {
 
     if (thread.node) {
       JX.DOM.alterClass(thread.node, 'conpherence-selected', false);
       // keep the unread-count hidden still. big TODO once we ajax in updates
       // to threads to make this work right and move threads between read /
       // unread
     }
 
     JX.DOM.alterClass(node, 'conpherence-selected', true);
     JX.DOM.alterClass(node, 'hide-unread-count', true);
 
     thread.node = node;
 
     var data = JX.Stratcom.getData(node);
     thread.selected = data.id;
 
     if (updatePageData) {
       updatepagedata(data);
     }
 
     redrawthread();
   }
 
   JX.Stratcom.listen(
     'conpherence-selectthread',
     null,
     function (e) {
       var node = JX.$(e.getData().id);
       selectthread(node);
     }
   );
 
   function updatepagedata(data) {
     var uri_suffix = thread.selected + '/';
     if (data.use_base_uri) {
       uri_suffix = '';
     }
     JX.History.replace(config.base_uri + uri_suffix);
     if (data.title) {
       document.title = data.title;
     } else if (thread.node) {
       var threadData = JX.Stratcom.getData(thread.node);
       document.title = threadData.title;
     }
   }
 
   JX.Stratcom.listen(
     'conpherence-update-page-data',
     null,
     function (e) {
       updatepagedata(e.getData());
     }
   );
 
   function redrawthread() {
     if (!thread.node) {
       return;
     }
 
     if (thread.visible == thread.selected) {
       return;
     }
 
     var data = JX.Stratcom.getData(thread.node);
 
     if (thread.visible !== null || !config.hasThread) {
-    var uri = config.base_uri + data.id + '/';
+      var uri = config.base_uri + data.id + '/';
       new JX.Workflow(uri, {})
         .setHandler(onloadthreadresponse)
         .start();
     } else {
       didredrawthread();
     }
 
     if (thread.visible !== null || !config.hasWidgets) {
       var widget_uri = config.base_uri + 'widget/' + data.id + '/';
       new JX.Workflow(widget_uri, {})
         .setHandler(onwidgetresponse)
         .start();
     } else {
       updatetoggledwidget();
     }
 
     thread.visible = thread.selected;
   }
 
   function onwidgetresponse(response) {
     var root = JX.DOM.find(document, 'div', 'conpherence-layout');
     var widgetsRoot = JX.DOM.find(root, 'div', 'conpherence-widget-pane');
     JX.DOM.setContent(widgetsRoot, JX.$H(response.widgets));
     updatetoggledwidget();
   }
 
-  function updatetoggledwidget() {
+  function updatetoggledwidget(no_toggle) {
+    JX.Stratcom.invoke(
+      'conpherence-toggle-widget',
+      null,
+      {
+        widget : getdefaultwidget(),
+        no_toggle : no_toggle
+      });
+  }
+
+  function getdefaultwidget() {
     var device = JX.Device.getDevice();
-    if (device != 'desktop') {
-      if (config.role == 'list') {
-        JX.Stratcom.invoke(
-          'conpherence-toggle-widget',
-          null,
-          {
-            widget : 'conpherence-menu-pane'
-          }
-        );
-      } else {
-        JX.Stratcom.invoke(
-          'conpherence-toggle-widget',
-          null,
-          {
-            widget : 'conpherence-message-pane'
-          }
-        );
-      }
-    } else {
-      JX.Stratcom.invoke(
-        'conpherence-toggle-widget',
-        null,
-        {
-          widget : 'widgets-people'
-        }
-      );
+    var widget = 'conpherence-message-pane';
+    if (device == 'desktop') {
+      widget = 'widgets-people';
     }
+    return widget;
   }
 
   function onloadthreadresponse(response) {
     var header = JX.$H(response.header);
     var messages = JX.$H(response.messages);
     var form = JX.$H(response.form);
     var root = JX.DOM.find(document, 'div', 'conpherence-layout');
     var headerRoot = JX.DOM.find(root, 'div', 'conpherence-header-pane');
     var messagesRoot = JX.DOM.find(root, 'div', 'conpherence-messages');
     var formRoot = JX.DOM.find(root, 'div', 'conpherence-form');
     JX.DOM.setContent(headerRoot, header);
     JX.DOM.setContent(messagesRoot, messages);
     JX.DOM.setContent(formRoot, form);
 
     didredrawthread();
   }
 
   function didredrawthread() {
     var root = JX.DOM.find(document, 'div', 'conpherence-layout');
     var messagesRoot = JX.DOM.find(root, 'div', 'conpherence-messages');
     messagesRoot.scrollTop = messagesRoot.scrollHeight;
+
+    try {
+      var device = JX.Device.getDevice();
+      var deviceWidgetSelector = JX.DOM.find(
+        root,
+        'a',
+        'device-widgets-selector');
+      if (device != 'desktop') {
+        JX.DOM.show(deviceWidgetSelector);
+        updatetoggledwidget(true);
+      } else {
+        JX.DOM.hide(deviceWidgetSelector);
+      }
+    } catch (ex) {
+      // not here yet
+    }
   }
 
   JX.Stratcom.listen(
     'conpherence-redraw-thread',
     null,
     function (e) {
       didredrawthread();
     }
   );
 
   JX.Stratcom.listen(
     'click',
     'conpherence-menu-click',
     function(e) {
       if (!e.isNormalClick()) {
         return;
       }
 
       // On devices, just follow the link normally.
       if (JX.Device.getDevice() != 'desktop') {
         return;
       }
 
       e.kill();
       selectthread(e.getNode('conpherence-menu-click'), true);
     });
 
   JX.Stratcom.listen('click', 'conpherence-edit-metadata', function (e) {
     e.kill();
     var root = e.getNode('conpherence-layout');
     var form = JX.DOM.find(root, 'form', 'conpherence-pontificate');
     var data = e.getNodeData('conpherence-edit-metadata');
     var header = JX.DOM.find(root, 'div', 'conpherence-header-pane');
     var messages = JX.DOM.find(root, 'div', 'conpherence-messages');
 
     new JX.Workflow.newFromForm(form, data)
       .setHandler(JX.bind(this, function(r) {
         JX.DOM.appendContent(messages, JX.$H(r.transactions));
         messages.scrollTop = messages.scrollHeight;
 
         JX.DOM.setContent(
           header,
           JX.$H(r.header)
         );
 
         try {
           // update the menu entry
           JX.DOM.replace(
             JX.$(r.conpherence_phid + '-nav-item'),
             JX.$H(r.nav_item)
           );
           JX.Stratcom.invoke(
             'conpherence-selectthread',
             null,
             { id : r.conpherence_phid + '-nav-item' }
           );
         } catch (ex) {
           // Ignore; this view may not have a menu.
         }
       }))
       .start();
   });
 
   JX.Stratcom.listen('click', 'show-older-messages', function(e) {
     e.kill();
     var data = e.getNodeData('show-older-messages');
     var oldest_transaction_id = data.oldest_transaction_id;
     var conf_id = thread.selected;
     JX.DOM.remove(e.getNode('show-older-messages'));
     var root = JX.DOM.find(document, 'div', 'conpherence-layout');
     var messages_root = JX.DOM.find(root, 'div', 'conpherence-messages');
     new JX.Request(config.base_uri + conf_id + '/', function(r) {
       var messages = JX.$H(r.messages);
       JX.DOM.prependContent(
         messages_root,
         JX.$H(messages));
     }).setData({ oldest_transaction_id : oldest_transaction_id }).send();
   });
 
   // On mobile, we just show a thread list, so we don't want to automatically
   // select or load any threads. On Desktop, we automatically select the first
   // thread.
   var old_device = null;
   function ondevicechange() {
     var new_device = JX.Device.getDevice();
     if (new_device === old_device) {
       return;
     }
+
+    if (old_device === null) {
+      old_device = new_device;
+      if (config.role == 'list') {
+        if (new_device != 'desktop') {
+          return;
+        }
+      } else {
+        loadthreads();
+        return;
+      }
+    }
     var update_toggled_widget =
       new_device == 'desktop' || old_device == 'desktop';
     old_device = new_device;
 
     if (thread.visible !== null && update_toggled_widget) {
       updatetoggledwidget();
     }
 
-    if (!config.hasThreadList) {
-      loadthreads();
-    } else {
+    if (config.role == 'list') {
       didloadthreads();
+      config.role = 'thread';
+      var root = JX.DOM.find(document, 'div', 'conpherence-layout');
+      JX.DOM.alterClass(root, 'conpherence-role-list', false);
+      JX.DOM.alterClass(root, 'conpherence-role-thread', true);
     }
   }
 
   JX.Stratcom.listen('phabricator-device-change', null, ondevicechange);
   ondevicechange();
 
   function loadthreads() {
     var uri = config.base_uri + 'thread/' + config.selectedID + '/';
     new JX.Workflow(uri)
       .setHandler(onloadthreadsresponse)
       .start();
   }
 
   function onloadthreadsresponse(r) {
     var layout = JX.$(config.layoutID);
     var menu = JX.DOM.find(layout, 'div', 'conpherence-menu-pane');
     JX.DOM.setContent(menu, JX.$H(r));
 
     config.selectedID && selectthreadid(config.selectedID);
 
     thread.node.scrollIntoView();
   }
 
   function didloadthreads() {
     // If there's no thread selected yet, select the current thread or the
     // first thread.
     if (!thread.selected) {
       if (config.selectedID) {
         selectthreadid(config.selectedID, true);
       } else {
         var layout = JX.$(config.layoutID);
         var threads = JX.DOM.scry(layout, 'a', 'conpherence-menu-click');
         if (threads.length) {
           selectthread(threads[0]);
         } else {
           var nothreads = JX.DOM.find(layout, 'div', 'conpherence-no-threads');
           nothreads.style.display = 'block';
         }
       }
     }
     redrawthread();
   }
 
   var handlethreadscrollers = function (e) {
     e.kill();
 
     var data = e.getNodeData('conpherence-menu-scroller');
     var scroller = e.getNode('conpherence-menu-scroller');
     new JX.Workflow(scroller.href, data)
       .setHandler(
         JX.bind(null, threadscrollerresponse, scroller, data.direction))
       .start();
   };
 
   var threadscrollerresponse = function (scroller, direction, r) {
     var html = JX.$H(r.html);
 
     var threadPhids = r.phids;
     var reselectId = null;
     // remove any threads that are in the list that we just got back
     // in the result set; things have changed and they'll be in the
     // right place soon
     for (var ii = 0; ii < threadPhids.length; ii++) {
       try {
         var nodeId = threadPhids[ii] + '-nav-item';
         var node = JX.$(nodeId);
         var nodeData = JX.Stratcom.getData(node);
         if (nodeData.id == thread.selected) {
           reselectId = nodeId;
         }
         JX.DOM.remove(node);
       } catch (ex) {
         // ignore , just haven't seen this thread yet
       }
     }
 
     var root = JX.DOM.find(document, 'div', 'conpherence-layout');
     var menuRoot = JX.DOM.find(root, 'div', 'conpherence-menu-pane');
     var scrollY = 0;
     // we have to do some hyjinx in the up case to make the menu scroll to
     // where it should
     if (direction == 'up') {
       var style = {
         position: 'absolute',
         left:     '-10000px'
       };
       var test_size = JX.$N('div', {style: style}, html);
       document.body.appendChild(test_size);
       var html_size = JX.Vector.getDim(test_size);
       JX.DOM.remove(test_size);
       scrollY = html_size.y;
     }
     JX.DOM.replace(scroller, html);
     menuRoot.scrollTop += scrollY;
 
     if (reselectId) {
       JX.Stratcom.invoke(
         'conpherence-selectthread',
         null,
         { id : reselectId }
       );
     }
   };
 
   JX.Stratcom.listen(
     ['click'],
     'conpherence-menu-scroller',
     handlethreadscrollers
   );
 
 });
diff --git a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js
index bf4d89b969..a273dc2fa4 100644
--- a/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js
+++ b/webroot/rsrc/js/application/conpherence/behavior-widget-pane.js
@@ -1,186 +1,195 @@
 /**
  * @requires javelin-behavior
  *           javelin-dom
  *           javelin-stratcom
  *           javelin-workflow
  *           javelin-util
  *           phabricator-notification
  *           javelin-behavior-device
+ *           phabricator-dropdown-menu
+ *           phabricator-menu-item
  * @provides javelin-behavior-conpherence-widget-pane
  */
 
 JX.behavior('conpherence-widget-pane', function(config) {
 
+  var build_widget_selector = function (data) {
+    var widgets = config.widgetRegistry;
+    var root = JX.DOM.find(document, 'div', 'conpherence-layout');
+    var widgetPane = JX.DOM.find(root, 'div', 'conpherence-widget-pane');
+    var widgetHeader = JX.DOM.find(widgetPane, 'a', 'widgets-selector');
+    var mobileWidgetHeader = null;
+    try {
+      mobileWidgetHeader = JX.DOM.find(
+        root,
+        'a',
+        'device-widgets-selector');
+    } catch (ex) {
+      // is okay - no mobileWidgetHeader yet...
+    }
+    var widgetData = widgets[data.widget];
+    JX.DOM.setContent(
+      widgetHeader,
+      widgetData.name);
+    JX.DOM.appendContent(
+      widgetHeader,
+      JX.$N('span', { className : 'caret' }));
+    if (mobileWidgetHeader) {
+      // this is fragile but adding a sigil to this element is awkward
+      var mobileWidgetHeaderSpans = JX.DOM.scry(mobileWidgetHeader, 'span');
+      var mobileWidgetHeaderSpan = mobileWidgetHeaderSpans[1];
+      JX.DOM.setContent(
+        mobileWidgetHeaderSpan,
+        widgetData.name);
+    }
+
+    var menu = new JX.PhabricatorDropdownMenu(widgetHeader);
+    menu.toggleAlignDropdownRight(false);
+    var deviceMenu = null;
+    if (mobileWidgetHeader) {
+      deviceMenu = new JX.PhabricatorDropdownMenu(mobileWidgetHeader);
+    }
+
+    for (var widget in widgets) {
+      widgetData = widgets[widget];
+      if (mobileWidgetHeader) {
+        deviceMenu.addItem(new JX.PhabricatorMenuItem(
+          widgetData.name,
+          JX.bind(null, build_widget_selector, { widget : widget }),
+          '#'
+          ).setDisabled(widget == data.widget));
+      }
+      if (widgetData.deviceOnly) {
+        continue;
+      }
+      menu.addItem(new JX.PhabricatorMenuItem(
+        widgetData.name,
+        JX.bind(null, build_widget_selector, { widget : widget }),
+        '#'
+      ).setDisabled(widget == data.widget));
+    }
+    if (data.no_toggle) {
+      return;
+    }
+    toggle_widget(data);
+  };
+
   var toggle_widget = function (data) {
+    var widgets = config.widgetRegistry;
+    var widgetData = widgets[data.widget];
     var device = JX.Device.getDevice();
     var is_desktop = device == 'desktop';
-    if (config.widgetRegistery[data.widget] == config.devicesOnly &&
-        is_desktop) {
+
+    if (widgetData.deviceOnly && is_desktop) {
       return;
     }
 
-    var root = JX.DOM.find(document, 'div', 'conpherence-layout');
-    var widgetPane = JX.DOM.find(root, 'div', 'conpherence-widget-pane');
-    var i;
-    var tag_data;
-    var node;
-
-    for (var widget in config.widgetRegistery) {
-      // device-only widgets are *always shown* on the desktop
-      if (config.widgetRegistery[widget] == config.devicesOnly) {
-        if (is_desktop) {
+    for (var widget in config.widgetRegistry) {
+      widgetData = widgets[widget];
+      if (widgetData.deviceOnly && is_desktop) {
+        // some one off code for conpherence messages which are device-only
+        // as a widget, but shown always on the desktop
+        if (widget == 'conpherence-message-pane') {
           JX.$(widget).style.display = 'block';
-          if (config.widgetExtraNodes[widget]) {
-            for (i in config.widgetExtraNodes[widget]) {
-              tag_data = config.widgetExtraNodes[widget][i];
-              node = JX.DOM.find(root, tag_data.tagname, tag_data.sigil);
-              node.style.display = tag_data.desktopstyle;
-            }
-          }
-          continue;
+          JX.Stratcom.invoke('conpherence-redraw-thread', null, {});
         }
+        continue;
       }
-
-      var cur_toggle = JX.$(widget + '-toggle');
-      var toggle_class = config.widgetToggleMap[widget];
       if (widget == data.widget) {
-        JX.DOM.alterClass(cur_toggle, toggle_class, true);
         JX.$(widget).style.display = 'block';
-        if (config.widgetRegistery[widget] == config.devicesOnly) {
-          widgetPane.style.height = '42px';
-        } else {
-          widgetPane.style.height = '100%';
-        }
-        if (config.widgetExtraNodes[widget]) {
-          for (i in config.widgetExtraNodes[widget]) {
-            tag_data = config.widgetExtraNodes[widget][i];
-            node = JX.DOM.find(root, tag_data.tagname, tag_data.sigil);
-            node.style.display = tag_data.showstyle;
-          }
-        }
-        // some one off code for conpherence messages
+        // some one off code for conpherence messages - fancier refresh tech
         if (widget == 'conpherence-message-pane') {
           JX.Stratcom.invoke('conpherence-redraw-thread', null, {});
           JX.Stratcom.invoke('conpherence-update-page-data', null, {});
         }
-        // some one off code for conpherence list
-        if (widget == 'conpherence-menu-pane') {
-          JX.Stratcom.invoke(
-            'conpherence-update-page-data',
-            null,
-            { use_base_uri : true, title: 'Conpherence' }
-          );
-        }
       } else {
-        JX.DOM.alterClass(
-          cur_toggle,
-          toggle_class,
-          false
-        );
         JX.$(widget).style.display = 'none';
-        if (config.widgetExtraNodes[widget]) {
-          for (i in config.widgetExtraNodes[widget]) {
-            tag_data = config.widgetExtraNodes[widget][i];
-            node = JX.DOM.find(root, tag_data.tagname, tag_data.sigil);
-            node.style.display = tag_data.hidestyle;
-          }
-        }
       }
     }
   };
 
-  JX.Stratcom.listen(
-    ['touchstart', 'mousedown'],
-    'conpherence-change-widget',
-    function(e) {
-      e.kill();
-      var data = e.getNodeData('conpherence-change-widget');
-      toggle_widget(data);
-    }
-  );
-
   JX.Stratcom.listen(
     'conpherence-toggle-widget',
     null,
     function (e) {
-      toggle_widget(e.getData());
+      build_widget_selector(e.getData());
     }
   );
 
 
   /* people widget */
   JX.Stratcom.listen(
     ['submit', 'didSyntheticSubmit'],
     'add-person',
     function (e) {
       e.kill();
       var root = e.getNode('conpherence-layout');
       var form = e.getNode('tag:form');
       var data = e.getNodeData('add-person');
       var peopleRoot = e.getNode('widgets-people');
       var messages = null;
       try {
         messages = JX.DOM.find(root, 'div', 'conpherence-messages');
       } catch (ex) {
       }
       var latestTransactionData = JX.Stratcom.getData(
         JX.DOM.find(
           root,
           'input',
           'latest-transaction-id'
       ));
       data.latest_transaction_id = latestTransactionData.id;
       JX.Workflow.newFromForm(form, data)
       .setHandler(JX.bind(this, function (r) {
         if (messages) {
           JX.DOM.appendContent(messages, JX.$H(r.transactions));
           messages.scrollTop = messages.scrollHeight;
         }
 
         // update the people widget
         JX.DOM.setContent(
           peopleRoot,
           JX.$H(r.people_widget)
         );
       }))
       .start();
     }
   );
 
   JX.Stratcom.listen(
     ['touchstart', 'mousedown'],
     'remove-person',
     function (e) {
       var peopleRoot = e.getNode('widgets-people');
       var form = JX.DOM.find(peopleRoot, 'form');
       var data = e.getNodeData('remove-person');
       // we end up re-directing to conpherence home
       JX.Workflow.newFromForm(form, data)
       .start();
     }
   );
 
   /* settings widget */
   var onsubmitSettings = function (e) {
     e.kill();
     var form = e.getNode('tag:form');
     var button = JX.DOM.find(form, 'button');
     JX.Workflow.newFromForm(form)
     .setHandler(JX.bind(this, function (r) {
       new JX.Notification()
       .setDuration(6000)
       .setContent(r)
       .show();
       button.disabled = '';
       JX.DOM.alterClass(button, 'disabled', false);
     }))
     .start();
   };
 
   JX.Stratcom.listen(
     ['submit', 'didSyntheticSubmit'],
     'notifications-update',
     onsubmitSettings
   );
 
 });