diff --git a/rigify/__init__.py b/rigify/__init__.py
index 4d208e4cfbfe34f56b37f4eb570eb363eedcbb8d..e91fca510883391d61a601d04c086f8b1c5b3f4e 100644
--- a/rigify/__init__.py
+++ b/rigify/__init__.py
@@ -66,7 +66,6 @@ initial_load_order = [
     'rot_mode',
     'ui',
 ]
-utils_module_name = __name__ + '.utils'
 
 
 def get_loaded_modules():
@@ -84,7 +83,10 @@ def reload_modules():
         importlib.reload(sys.modules[name])
 
 def compare_module_list(a, b):
-    # Allow 'utils' to move around
+    # HACK: ignore the "utils" module when comparing module load orders,
+    # because it is inconsistent for reasons unknown.
+    # See rBAa918332cc3f821f5a70b1de53b65dd9ca596b093.
+    utils_module_name = __name__ + '.utils'
     a_copy = list(a)
     a_copy.remove(utils_module_name)
     b_copy = list(b)
@@ -106,16 +108,13 @@ def load_initial_modules():
     return load_list
 
 def load_rigs():
-    if not legacy_loaded:
-        rig_lists.get_internal_rigs()
-        metarig_menu.init_metarig_menu()
+    rig_lists.get_internal_rigs()
+    metarig_menu.init_metarig_menu()
 
 
 if "reload_list" in locals():
     reload_modules()
 else:
-    legacy_loaded = False
-
     load_list = load_initial_modules()
 
     from . import (base_rig, base_generate, rig_ui_template, feature_set_list, rig_lists, generate, ui, metarig_menu)
@@ -150,77 +149,13 @@ class RigifyPreferences(AddonPreferences):
     # when defining this in a submodule of a python package.
     bl_idname = __name__
 
-    def update_legacy(self, context):
-        global legacy_loaded, reload_list
-
-        if self.legacy_mode:
-            if legacy_loaded:    # already in legacy mode. needed when rigify is reloaded
-                return
-            else:
-                unregister()
-                reload_modules()
-
-                globals().pop('utils')
-                globals().pop('rig_lists')
-                globals().pop('generate')
-                globals().pop('ui')
-                globals().pop('metarig_menu')
-
-                from .legacy import utils, rig_lists, generate, ui, metarig_menu
-
-                print("ENTERING RIGIFY LEGACY\r\n")
-
-                legacy_loaded = True
-                reload_list += [ m.__name__ for m in [ legacy, utils, rig_lists, generate, ui, metarig_menu ] ]
-
-                globals()['utils'] = legacy.utils
-                globals()['rig_lists'] = legacy.rig_lists
-                globals()['generate'] = legacy.generate
-                globals()['ui'] = legacy.ui
-                globals()['metarig_menu'] = legacy.metarig_menu
-
-                register()
-
-        else:
-            unregister()
-
-            globals().pop('utils')
-            globals().pop('rig_lists')
-            globals().pop('generate')
-            globals().pop('ui')
-            globals().pop('metarig_menu')
-
-            from . import utils, rig_lists, generate, ui, metarig_menu
-
-            print("EXIT RIGIFY LEGACY\r\n")
-
-            globals()['utils'] = utils
-            globals()['rig_lists'] = rig_lists
-            globals()['generate'] = generate
-            globals()['ui'] = ui
-            globals()['metarig_menu'] = metarig_menu
-
-            legacy_loaded = False
-            reload_list = reload_list_init
-            reload_modules()
-
-            load_rigs()
-
-            register()
-
     def register_feature_sets(self, register):
         """Call register or unregister of external feature sets"""
-        if self.legacy_mode:
-            return
-
         for set_name in feature_set_list.get_installed_list():
             feature_set_list.call_register_function(set_name, register)
 
     def update_external_rigs(self, force=False):
         """Get external feature sets"""
-        if self.legacy_mode:
-            return
-
         set_list = feature_set_list.get_installed_list()
 
         # Update feature set list
@@ -243,25 +178,12 @@ class RigifyPreferences(AddonPreferences):
             # Re-register rig parameters
             register_rig_parameters()
 
-    legacy_mode: BoolProperty(
-        name='Legacy Mode',
-        description='When enabled the add-on will run in legacy mode using the old 2.76b feature set',
-        default=False,
-        update=update_legacy
-    )
-
     rigify_feature_sets: bpy.props.CollectionProperty(type=RigifyFeatureSets)
     active_feature_set_index: IntProperty()
 
     def draw(self, context):
         layout = self.layout
 
-        layout.prop(self, 'legacy_mode')
-
-        if self.legacy_mode:
-            return
-
-
         layout.label(text="Feature Sets:")
 
         layout.operator("wm.rigify_add_feature_set", text="Install Feature Set from File...", icon='FILEBROWSER')
@@ -618,42 +540,30 @@ def register():
         name="Transfer Only Selected",
         description="Transfer selected bones only", default=True)
 
-    # Update legacy on restart or reload.
-    if legacy_loaded or bpy.context.preferences.addons['rigify'].preferences.legacy_mode:
-        bpy.context.preferences.addons['rigify'].preferences.legacy_mode = True
-
-    bpy.context.preferences.addons['rigify'].preferences.register_feature_sets(True)
-    bpy.context.preferences.addons['rigify'].preferences.update_external_rigs()
+    bpy.context.preferences.addons[__package__].preferences.register_feature_sets(True)
+    bpy.context.preferences.addons[__package__].preferences.update_external_rigs()
 
     # Add rig parameters
     register_rig_parameters()
 
 
 def register_rig_parameters():
-    if bpy.context.preferences.addons['rigify'].preferences.legacy_mode:
-        for rig in rig_lists.rig_list:
-            r = utils.get_rig_type(rig)
-            try:
+    for rig in rig_lists.rigs:
+        rig_module = rig_lists.rigs[rig]['module']
+        rig_class = rig_module.Rig
+        r = rig_class if hasattr(rig_class, 'add_parameters') else rig_module
+        try:
+            if hasattr(r, 'add_parameters'):
                 r.add_parameters(RigifyParameterValidator(RigifyParameters, rig, RIGIFY_PARAMETER_TABLE))
-            except AttributeError:
-                pass
-    else:
-        for rig in rig_lists.rigs:
-            rig_module = rig_lists.rigs[rig]['module']
-            rig_class = rig_module.Rig
-            r = rig_class if hasattr(rig_class, 'add_parameters') else rig_module
-            try:
-                if hasattr(r, 'add_parameters'):
-                    r.add_parameters(RigifyParameterValidator(RigifyParameters, rig, RIGIFY_PARAMETER_TABLE))
-            except Exception:
-                import traceback
-                traceback.print_exc()
+        except Exception:
+            import traceback
+            traceback.print_exc()
 
 
 def unregister():
     from bpy.utils import unregister_class
 
-    bpy.context.preferences.addons['rigify'].preferences.register_feature_sets(False)
+    bpy.context.preferences.addons[__package__].preferences.register_feature_sets(False)
 
     # Properties on PoseBones and Armature.
     del bpy.types.PoseBone.rigify_type
diff --git a/rigify/base_rig.py b/rigify/base_rig.py
index c25e701df5c3f8ecd91319ce1fedeb0133a0a737..0cc2bc1dd2eec1ad79f0617b532afb9dbb8fe084 100644
--- a/rigify/base_rig.py
+++ b/rigify/base_rig.py
@@ -159,7 +159,7 @@ class BaseRig(GenerateCallbackHost, RaiseErrorMixin, BoneUtilityMixin, Mechanism
     """
     Base class for all rigs.
 
-    The main weak areas in the legacy Rigify rig class structure
+    The main weak areas in the legacy (pre-2.76b) Rigify rig class structure
     was that there were no provisions for intelligent interactions
     between rigs, and all processing was done via one generate
     method, necessitating frequent expensive mode switches.
diff --git a/rigify/legacy/__init__.py b/rigify/legacy/__init__.py
deleted file mode 100644
index 76c3a72ff306cafb7069146dcd753eb117ae25d6..0000000000000000000000000000000000000000
--- a/rigify/legacy/__init__.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-bl_info = {
-    "name": "Rigify",
-    "version": (0, 4),
-    "author": "Nathan Vegdahl",
-    "blender": (2, 66, 0),
-    "description": "Automatic rigging from building-block components",
-    "location": "Armature properties, Bone properties, View3d tools panel, Armature Add menu",
-    "doc_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"
-               "Scripts/Rigging/Rigify",
-    "tracker_url": "http://github.com/cessen/rigify/issues",
-    "category": "Rigging",
-}
-
-
-if "bpy" in locals():
-    import importlib
-    importlib.reload(generate)
-    importlib.reload(ui)
-    importlib.reload(utils)
-    importlib.reload(metarig_menu)
-    importlib.reload(rig_lists)
-else:
-    from . import utils, rig_lists, generate, ui, metarig_menu
-
-import bpy
-
-
-class RigifyName(bpy.types.PropertyGroup):
-    name: bpy.props.StringProperty()
-
-
-class RigifyParameters(bpy.types.PropertyGroup):
-    name: bpy.props.StringProperty()
-
-
-class RigifyArmatureLayer(bpy.types.PropertyGroup):
-    name: bpy.props.StringProperty(name="Layer Name", default=" ")
-    row: bpy.props.IntProperty(name="Layer Row", default=1, min=1, max=32)
-
-
-##### REGISTER #####
-
-def register():
-    ui.register()
-    metarig_menu.register()
-
-    bpy.utils.register_class(RigifyName)
-    bpy.utils.register_class(RigifyParameters)
-    bpy.utils.register_class(RigifyArmatureLayer)
-
-    bpy.types.PoseBone.rigify_type = bpy.props.StringProperty(name="Rigify Type", description="Rig type for this bone")
-    bpy.types.PoseBone.rigify_parameters = bpy.props.PointerProperty(type=RigifyParameters)
-
-    bpy.types.Armature.rigify_layers = bpy.props.CollectionProperty(type=RigifyArmatureLayer)
-
-    IDStore = bpy.types.WindowManager
-    IDStore.rigify_collection = bpy.props.EnumProperty(items=rig_lists.col_enum_list, default="All", name="Rigify Active Collection", description="The selected rig collection")
-    IDStore.rigify_types = bpy.props.CollectionProperty(type=RigifyName)
-    IDStore.rigify_active_type = bpy.props.IntProperty(name="Rigify Active Type", description="The selected rig type")
-
-    # Add rig parameters
-    for rig in rig_lists.rig_list:
-        r = utils.get_rig_type(rig)
-        try:
-            r.add_parameters(RigifyParameters)
-        except AttributeError:
-            pass
-
-
-def unregister():
-    del bpy.types.PoseBone.rigify_type
-    del bpy.types.PoseBone.rigify_parameters
-
-    IDStore = bpy.types.WindowManager
-    del IDStore.rigify_collection
-    del IDStore.rigify_types
-    del IDStore.rigify_active_type
-
-    bpy.utils.unregister_class(RigifyName)
-    bpy.utils.unregister_class(RigifyParameters)
-    bpy.utils.unregister_class(RigifyArmatureLayer)
-
-    metarig_menu.unregister()
-    ui.unregister()
diff --git a/rigify/legacy/generate.py b/rigify/legacy/generate.py
deleted file mode 100644
index 7045a012b60df5a11ffadd057ca5a21be1865785..0000000000000000000000000000000000000000
--- a/rigify/legacy/generate.py
+++ /dev/null
@@ -1,493 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-import re
-import time
-import traceback
-import sys
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-from .utils import MetarigError, new_bone, get_rig_type
-from .utils import ORG_PREFIX, MCH_PREFIX, DEF_PREFIX, WGT_PREFIX, ROOT_NAME, make_original_name
-from .utils import RIG_DIR
-from .utils import create_root_widget, ensure_widget_collection
-from .utils import random_id
-from .utils import copy_attributes
-from .rig_ui_template import UI_SLIDERS, layers_ui, UI_REGISTER
-from .rig_ui_pitchipoy_template import UI_P_SLIDERS, layers_P_ui, UI_P_REGISTER
-
-
-RIG_MODULE = "rigs"
-ORG_LAYER = [n == 31 for n in range(0, 32)]  # Armature layer that original bones should be moved to.
-MCH_LAYER = [n == 30 for n in range(0, 32)]  # Armature layer that mechanism bones should be moved to.
-DEF_LAYER = [n == 29 for n in range(0, 32)]  # Armature layer that deformation bones should be moved to.
-ROOT_LAYER = [n == 28 for n in range(0, 32)]  # Armature layer that root bone should be moved to.
-
-
-class Timer:
-    def __init__(self):
-        self.timez = time.time()
-
-    def tick(self, string):
-        t = time.time()
-        print(string + "%.3f" % (t - self.timez))
-        self.timez = t
-
-
-# TODO: generalize to take a group as input instead of an armature.
-def generate_rig(context, metarig):
-    """ Generates a rig from a metarig.
-
-    """
-    t = Timer()
-
-    # Random string with time appended so that
-    # different rigs don't collide id's
-    rig_id = random_id(16)
-
-    # Initial configuration
-    # mode_orig = context.mode  # UNUSED
-    rest_backup = metarig.data.pose_position
-    metarig.data.pose_position = 'REST'
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-
-    scene = context.scene
-    view_layer = context.view_layer
-    collection = context.collection
-    layer_collection = context.layer_collection
-
-    #------------------------------------------
-    # Create/find the rig object and set it up
-
-    # Check if the generated rig already exists, so we can
-    # regenerate in the same object.  If not, create a new
-    # object to generate the rig in.
-    print("Fetch rig.")
-    try:
-        name = metarig["rig_object_name"]
-    except KeyError:
-        name = "rig"
-
-    try:
-        obj = scene.objects[name]
-    except KeyError:
-        obj = bpy.data.objects.new(name, bpy.data.armatures.new(name))
-        obj.display_type = 'WIRE'
-        collection.objects.link(obj)
-
-    obj.data.pose_position = 'POSE'
-
-    # Get rid of anim data in case the rig already existed
-    print("Clear rig animation data.")
-    obj.animation_data_clear()
-    obj.data.animation_data_clear()
-
-    # Select generated rig object
-    metarig.select_set(False)
-    obj.select_set(True)
-    view_layer.objects.active = obj
-
-    # Remove all bones from the generated rig armature.
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in obj.data.edit_bones:
-        obj.data.edit_bones.remove(bone)
-    bpy.ops.object.mode_set(mode='OBJECT')
-
-    # Create temporary duplicates for merging
-    temp_rig_1 = metarig.copy()
-    temp_rig_1.data = metarig.data.copy()
-    collection.objects.link(temp_rig_1)
-
-    temp_rig_2 = metarig.copy()
-    temp_rig_2.data = obj.data
-    collection.objects.link(temp_rig_2)
-
-    # Select the temp rigs for merging
-    for objt in view_layer.objects:
-        objt.select_set(False)  # deselect all objects
-    temp_rig_1.select_set(True)
-    temp_rig_2.select_set(True)
-    view_layer.objects.active = temp_rig_2
-
-    # Merge the temporary rigs
-    bpy.ops.object.join()
-
-    # Delete the second temp rig
-    bpy.ops.object.delete()
-
-    # Select the generated rig
-    for objt in view_layer.objects:
-        objt.select_set(False) # deselect all objects
-    obj.select_set(True)
-    view_layer.objects.active = obj
-
-    # Copy over bone properties
-    for bone in metarig.data.bones:
-        bone_gen = obj.data.bones[bone.name]
-
-        # B-bone stuff
-        bone_gen.bbone_segments = bone.bbone_segments
-        bone_gen.bbone_easein = bone.bbone_easein
-        bone_gen.bbone_easeout = bone.bbone_easeout
-
-    # Copy over the pose_bone properties
-    for bone in metarig.pose.bones:
-        bone_gen = obj.pose.bones[bone.name]
-
-        # Rotation mode and transform locks
-        bone_gen.rotation_mode = bone.rotation_mode
-        bone_gen.lock_rotation = tuple(bone.lock_rotation)
-        bone_gen.lock_rotation_w = bone.lock_rotation_w
-        bone_gen.lock_rotations_4d = bone.lock_rotations_4d
-        bone_gen.lock_location = tuple(bone.lock_location)
-        bone_gen.lock_scale = tuple(bone.lock_scale)
-
-        # rigify_type and rigify_parameters
-        bone_gen.rigify_type = bone.rigify_type
-        for prop in dir(bone_gen.rigify_parameters):
-            if (not prop.startswith("_")) \
-            and (not prop.startswith("bl_")) \
-            and (prop != "rna_type"):
-                try:
-                    setattr(bone_gen.rigify_parameters, prop, \
-                            getattr(bone.rigify_parameters, prop))
-                except AttributeError:
-                    print("FAILED TO COPY PARAMETER: " + str(prop))
-
-        # Custom properties
-        for prop in bone.keys():
-            try:
-                bone_gen[prop] = bone[prop]
-            except KeyError:
-                pass
-
-        # Constraints
-        for con1 in bone.constraints:
-            con2 = bone_gen.constraints.new(type=con1.type)
-            copy_attributes(con1, con2)
-
-            # Set metarig target to rig target
-            if "target" in dir(con2):
-                if con2.target == metarig:
-                    con2.target = obj
-
-    # Copy drivers
-    if metarig.animation_data:
-        for d1 in metarig.animation_data.drivers:
-            d2 = obj.driver_add(d1.data_path)
-            copy_attributes(d1, d2)
-            copy_attributes(d1.driver, d2.driver)
-
-            # Remove default modifiers, variables, etc.
-            for m in d2.modifiers:
-                d2.modifiers.remove(m)
-            for v in d2.driver.variables:
-                d2.driver.variables.remove(v)
-
-            # Copy modifiers
-            for m1 in d1.modifiers:
-                m2 = d2.modifiers.new(type=m1.type)
-                copy_attributes(m1, m2)
-
-            # Copy variables
-            for v1 in d1.driver.variables:
-                v2 = d2.driver.variables.new()
-                copy_attributes(v1, v2)
-                for i in range(len(v1.targets)):
-                    copy_attributes(v1.targets[i], v2.targets[i])
-                    # Switch metarig targets to rig targets
-                    if v2.targets[i].id == metarig:
-                        v2.targets[i].id = obj
-
-                    # Mark targets that may need to be altered after rig generation
-                    tar = v2.targets[i]
-                    # If a custom property
-                    if v2.type == 'SINGLE_PROP' \
-                    and re.match('^pose.bones\["[^"\]]*"\]\["[^"\]]*"\]$', tar.data_path):
-                        tar.data_path = "RIGIFY-" + tar.data_path
-
-            # Copy key frames
-            for i in range(len(d1.keyframe_points)):
-                d2.keyframe_points.add()
-                k1 = d1.keyframe_points[i]
-                k2 = d2.keyframe_points[i]
-                copy_attributes(k1, k2)
-
-    t.tick("Duplicate rig: ")
-    #----------------------------------
-    # Make a list of the original bones so we can keep track of them.
-    original_bones = [bone.name for bone in obj.data.bones]
-
-    # Add the ORG_PREFIX to the original bones.
-    bpy.ops.object.mode_set(mode='OBJECT')
-    for i in range(0, len(original_bones)):
-        obj.data.bones[original_bones[i]].name = make_original_name(original_bones[i])
-        original_bones[i] = make_original_name(original_bones[i])
-
-    # Create a sorted list of the original bones, sorted in the order we're
-    # going to traverse them for rigging.
-    # (root-most -> leaf-most, alphabetical)
-    bones_sorted = []
-    for name in original_bones:
-        bones_sorted += [name]
-    bones_sorted.sort()  # first sort by names
-    bones_sorted.sort(key=lambda bone: len(obj.pose.bones[bone].parent_recursive))  # then parents before children
-
-    t.tick("Make list of org bones: ")
-    #----------------------------------
-    # Create the root bone.
-    bpy.ops.object.mode_set(mode='EDIT')
-    root_bone = new_bone(obj, ROOT_NAME)
-    obj.data.edit_bones[root_bone].head = (0, 0, 0)
-    obj.data.edit_bones[root_bone].tail = (0, 1, 0)
-    obj.data.edit_bones[root_bone].roll = 0
-    bpy.ops.object.mode_set(mode='OBJECT')
-    obj.data.bones[root_bone].layers = ROOT_LAYER
-    # Put the rig_name in the armature custom properties
-    rna_idprop_ui_prop_get(obj.data, "rig_id", create=True)
-    obj.data["rig_id"] = rig_id
-
-    # Create/find widget collection
-    ensure_widget_collection(context)
-
-    t.tick("Create root bone: ")
-    #----------------------------------
-    try:
-        # Collect/initialize all the rigs.
-        rigs = []
-        for bone in bones_sorted:
-            bpy.ops.object.mode_set(mode='EDIT')
-            rigs += get_bone_rigs(obj, bone)
-        t.tick("Initialize rigs: ")
-
-        # Generate all the rigs.
-        ui_scripts = []
-        for rig in rigs:
-            # Go into editmode in the rig armature
-            bpy.ops.object.mode_set(mode='OBJECT')
-            context.view_layer.objects.active = obj
-            obj.select_set(True)
-            bpy.ops.object.mode_set(mode='EDIT')
-            scripts = rig.generate()
-            if scripts is not None:
-                ui_scripts += [scripts[0]]
-        t.tick("Generate rigs: ")
-    except Exception as e:
-        # Cleanup if something goes wrong
-        print("Rigify: failed to generate rig.")
-        metarig.data.pose_position = rest_backup
-        obj.data.pose_position = 'POSE'
-        bpy.ops.object.mode_set(mode='OBJECT')
-
-        # Continue the exception
-        raise e
-
-    #----------------------------------
-    bpy.ops.object.mode_set(mode='OBJECT')
-
-    # Get a list of all the bones in the armature
-    bones = [bone.name for bone in obj.data.bones]
-
-    # Parent any free-floating bones to the root.
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in bones:
-        if obj.data.edit_bones[bone].parent is None:
-            obj.data.edit_bones[bone].use_connect = False
-            obj.data.edit_bones[bone].parent = obj.data.edit_bones[root_bone]
-    bpy.ops.object.mode_set(mode='OBJECT')
-
-    # Lock transforms on all non-control bones
-    r = re.compile("[A-Z][A-Z][A-Z]-")
-    for bone in bones:
-        if r.match(bone):
-            pb = obj.pose.bones[bone]
-            pb.lock_location = (True, True, True)
-            pb.lock_rotation = (True, True, True)
-            pb.lock_rotation_w = True
-            pb.lock_scale = (True, True, True)
-
-    # Every bone that has a name starting with "DEF-" make deforming.  All the
-    # others make non-deforming.
-    for bone in bones:
-        if obj.data.bones[bone].name.startswith(DEF_PREFIX):
-            obj.data.bones[bone].use_deform = True
-        else:
-            obj.data.bones[bone].use_deform = False
-
-    # Alter marked driver targets
-    if obj.animation_data:
-        for d in obj.animation_data.drivers:
-            for v in d.driver.variables:
-                for tar in v.targets:
-                    if tar.data_path.startswith("RIGIFY-"):
-                        temp, bone, prop = tuple([x.strip('"]') for x in tar.data_path.split('["')])
-                        if bone in obj.data.bones \
-                        and prop in obj.pose.bones[bone].keys():
-                            tar.data_path = tar.data_path[7:]
-                        else:
-                            tar.data_path = 'pose.bones["%s"]["%s"]' % (make_original_name(bone), prop)
-
-    # Move all the original bones to their layer.
-    for bone in original_bones:
-        obj.data.bones[bone].layers = ORG_LAYER
-
-    # Move all the bones with names starting with "MCH-" to their layer.
-    for bone in bones:
-        if obj.data.bones[bone].name.startswith(MCH_PREFIX):
-            obj.data.bones[bone].layers = MCH_LAYER
-
-    # Move all the bones with names starting with "DEF-" to their layer.
-    for bone in bones:
-        if obj.data.bones[bone].name.startswith(DEF_PREFIX):
-            obj.data.bones[bone].layers = DEF_LAYER
-
-    #  Create root bone widget
-    create_root_widget(obj, "root")
-
-    # Assign shapes to bones
-    # Object's with name WGT-<bone_name> get used as that bone's shape.
-    for bone in bones:
-        wgt_name = (WGT_PREFIX + obj.data.bones[bone].name)[:63]  # Object names are limited to 63 characters... arg
-        if wgt_name in context.scene.objects:
-            # Weird temp thing because it won't let me index by object name
-            for ob in context.scene.objects:
-                if ob.name == wgt_name:
-                    obj.pose.bones[bone].custom_shape = ob
-                    break
-            # This is what it should do:
-            # obj.pose.bones[bone].custom_shape = context.scene.objects[wgt_name]
-    # Reveal all the layers with control bones on them
-    vis_layers = [False for n in range(0, 32)]
-    for bone in bones:
-        for i in range(0, 32):
-            vis_layers[i] = vis_layers[i] or obj.data.bones[bone].layers[i]
-    for i in range(0, 32):
-        vis_layers[i] = vis_layers[i] and not (ORG_LAYER[i] or MCH_LAYER[i] or DEF_LAYER[i])
-    obj.data.layers = vis_layers
-
-    # Ensure the collection of layer names exists
-    for i in range(1 + len(metarig.data.rigify_layers), 29):
-        metarig.data.rigify_layers.add()
-
-    # Create list of layer name/row pairs
-    layer_layout = []
-    for l in metarig.data.rigify_layers:
-        print( l.name )
-        layer_layout += [(l.name, l.row)]
-
-
-    if isPitchipoy(metarig):
-
-        # Generate the UI Pitchipoy script
-        if "rig_ui.py" in bpy.data.texts:
-            script = bpy.data.texts["rig_ui.py"]
-            script.clear()
-        else:
-            script = bpy.data.texts.new("rig_ui.py")
-        script.write(UI_P_SLIDERS % rig_id)
-        for s in ui_scripts:
-            script.write("\n        " + s.replace("\n", "\n        ") + "\n")
-        script.write(layers_P_ui(vis_layers, layer_layout))
-        script.write(UI_P_REGISTER)
-        script.use_module = True
-
-    else:
-        # Generate the UI script
-        if "rig_ui.py" in bpy.data.texts:
-            script = bpy.data.texts["rig_ui.py"]
-            script.clear()
-        else:
-            script = bpy.data.texts.new("rig_ui.py")
-        script.write(UI_SLIDERS % rig_id)
-        for s in ui_scripts:
-            script.write("\n        " + s.replace("\n", "\n        ") + "\n")
-        script.write(layers_ui(vis_layers, layer_layout))
-        script.write(UI_REGISTER)
-        script.use_module = True
-
-    # Run UI script
-    exec(script.as_string(), {})
-
-    t.tick("The rest: ")
-    #----------------------------------
-    # Deconfigure
-    bpy.ops.object.mode_set(mode='OBJECT')
-    metarig.data.pose_position = rest_backup
-    obj.data.pose_position = 'POSE'
-
-    #----------------------------------
-    # Restore active collection
-    view_layer.active_layer_collection = layer_collection
-
-
-def get_bone_rigs(obj, bone_name, halt_on_missing=False):
-    """ Fetch all the rigs specified on a bone.
-    """
-    rigs = []
-    rig_type = obj.pose.bones[bone_name].rigify_type
-    rig_type = rig_type.replace(" ", "")
-
-    if rig_type == "":
-        pass
-    else:
-        # Gather parameters
-        params = obj.pose.bones[bone_name].rigify_parameters
-
-        # Get the rig
-        try:
-            rig = get_rig_type(rig_type).Rig(obj, bone_name, params)
-        except ImportError:
-            message = "Rig Type Missing: python module for type '%s' not found (bone: %s)" % (rig_type, bone_name)
-            if halt_on_missing:
-                raise MetarigError(message)
-            else:
-                print(message)
-                print('print_exc():')
-                traceback.print_exc(file=sys.stdout)
-        else:
-            rigs += [rig]
-    return rigs
-
-
-def param_matches_type(param_name, rig_type):
-    """ Returns True if the parameter name is consistent with the rig type.
-    """
-    if param_name.rsplit(".", 1)[0] == rig_type:
-        return True
-    else:
-        return False
-
-
-def param_name(param_name, rig_type):
-    """ Get the actual parameter name, sans-rig-type.
-    """
-    return param_name[len(rig_type) + 1:]
-
-def isPitchipoy(metarig):
-    """ Returns True if metarig is type pitchipoy.
-    """
-    pbones=metarig.pose.bones
-    for pb in pbones:
-        words = pb.rigify_type.partition('.')
-        if  words[0] == 'pitchipoy':
-            return True
-    return False
diff --git a/rigify/legacy/metarig_menu.py b/rigify/legacy/metarig_menu.py
deleted file mode 100644
index c0c209555da73898bc4efd99ecc977ea47721648..0000000000000000000000000000000000000000
--- a/rigify/legacy/metarig_menu.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-import os
-from string import capwords
-
-import bpy
-
-from . import utils
-
-
-def get_metarig_list(path):
-    """ Searches for metarig modules, and returns a list of the
-        imported modules.
-    """
-    metarigs = []
-    MODULE_DIR = os.path.dirname(__file__)
-    METARIG_DIR_ABS = os.path.join(MODULE_DIR, utils.METARIG_DIR)
-    SEARCH_DIR_ABS = os.path.join(METARIG_DIR_ABS, path)
-    files = os.listdir(SEARCH_DIR_ABS)
-    files.sort()
-
-    for f in files:
-        # Is it a directory?
-        if os.path.isdir(os.path.join(SEARCH_DIR_ABS, f)):
-            continue
-        elif not f.endswith(".py"):
-            continue
-        elif f == "__init__.py":
-            continue
-        else:
-            module_name = f[:-3]
-            try:
-                metarigs += [utils.get_metarig_module(module_name)]
-            except (ImportError):
-                pass
-    return metarigs
-
-
-def make_metarig_add_execute(m):
-    """ Create an execute method for a metarig creation operator.
-    """
-    def execute(self, context):
-        # Add armature object
-        bpy.ops.object.armature_add()
-        obj = context.active_object
-        obj.name = "metarig"
-
-        # Remove default bone
-        bpy.ops.object.mode_set(mode='EDIT')
-        bones = context.active_object.data.edit_bones
-        bones.remove(bones[0])
-
-        # Create metarig
-        m.create(obj)
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-        return {'FINISHED'}
-    return execute
-
-
-def make_metarig_menu_func(bl_idname, text):
-    """ For some reason lambda's don't work for adding multiple menu
-        items, so we use this instead to generate the functions.
-    """
-    def metarig_menu(self, context):
-        self.layout.operator(bl_idname, icon='OUTLINER_OB_ARMATURE', text=text)
-    return metarig_menu
-
-
-# Get the metarig modules
-metarigs = get_metarig_list("")
-
-# Create metarig add Operators
-metarig_ops = []
-for m in metarigs:
-    name = m.__name__.rsplit('.', 1)[1]
-
-    # Dynamically construct an Operator
-    T = type("Add_" + name + "_Metarig", (bpy.types.Operator,), {})
-    T.bl_idname = "object.armature_" + name + "_metarig_add"
-    T.bl_label = "Add " + name.replace("_", " ").capitalize() + " (metarig)"
-    T.bl_options = {'REGISTER', 'UNDO'}
-    T.execute = make_metarig_add_execute(m)
-
-    metarig_ops.append((T, name))
-
-# Create menu functions
-menu_funcs = []
-for mop, name in metarig_ops:
-    text = capwords(name.replace("_", " ")) + " (Meta-Rig)"
-    menu_funcs += [make_metarig_menu_func(mop.bl_idname, text)]
-
-
-def register():
-    for mop, name in metarig_ops:
-        bpy.utils.register_class(mop)
-
-    for mf in menu_funcs:
-        bpy.types.VIEW3D_MT_armature_add.append(mf)
-
-
-def unregister():
-    for mop, name in metarig_ops:
-        bpy.utils.unregister_class(mop)
-
-    for mf in menu_funcs:
-        bpy.types.VIEW3D_MT_armature_add.remove(mf)
diff --git a/rigify/legacy/metarigs/__init__.py b/rigify/legacy/metarigs/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/rigify/legacy/metarigs/human.py b/rigify/legacy/metarigs/human.py
deleted file mode 100644
index 7adc03d7e74da57e196bf5746a253d773a56cefc..0000000000000000000000000000000000000000
--- a/rigify/legacy/metarigs/human.py
+++ /dev/null
@@ -1,1200 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-import bpy
-
-def create(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    for i in range(28):
-        arm.rigify_layers.add()
-
-    arm.rigify_layers[0].name = "head"
-    arm.rigify_layers[0].row = 1
-    arm.rigify_layers[1].name = " "
-    arm.rigify_layers[1].row = 1
-    arm.rigify_layers[2].name = "Torso"
-    arm.rigify_layers[2].row = 2
-    arm.rigify_layers[3].name = " "
-    arm.rigify_layers[3].row = 1
-    arm.rigify_layers[4].name = "Fingers"
-    arm.rigify_layers[4].row = 3
-    arm.rigify_layers[5].name = "(Tweak)"
-    arm.rigify_layers[5].row = 3
-    arm.rigify_layers[6].name = "Arm.L (FK)"
-    arm.rigify_layers[6].row = 4
-    arm.rigify_layers[7].name = "Arm.L (IK)"
-    arm.rigify_layers[7].row = 5
-    arm.rigify_layers[8].name = "Arm.L (Tweak)"
-    arm.rigify_layers[8].row = 6
-    arm.rigify_layers[9].name = "Arm.R (FK)"
-    arm.rigify_layers[9].row = 4
-    arm.rigify_layers[10].name = "Arm.R (IK)"
-    arm.rigify_layers[10].row = 5
-    arm.rigify_layers[11].name = "Arm.R (Tweak)"
-    arm.rigify_layers[11].row = 6
-    arm.rigify_layers[12].name = "Leg.L (FK)"
-    arm.rigify_layers[12].row = 7
-    arm.rigify_layers[13].name = "Leg.L (IK)"
-    arm.rigify_layers[13].row = 8
-    arm.rigify_layers[14].name = "Leg.L (Tweak)"
-    arm.rigify_layers[14].row = 9
-    arm.rigify_layers[15].name = "Leg.R (FK)"
-    arm.rigify_layers[15].row = 7
-    arm.rigify_layers[16].name = "Leg.R (IK)"
-    arm.rigify_layers[16].row = 8
-    arm.rigify_layers[17].name = "Leg.R (Tweak)"
-    arm.rigify_layers[17].row = 9
-    arm.rigify_layers[18].name = " "
-    arm.rigify_layers[18].row = 1
-    arm.rigify_layers[19].name = " "
-    arm.rigify_layers[19].row = 1
-    arm.rigify_layers[20].name = " "
-    arm.rigify_layers[20].row = 1
-    arm.rigify_layers[21].name = " "
-    arm.rigify_layers[21].row = 1
-    arm.rigify_layers[22].name = " "
-    arm.rigify_layers[22].row = 1
-    arm.rigify_layers[23].name = " "
-    arm.rigify_layers[23].row = 1
-    arm.rigify_layers[24].name = " "
-    arm.rigify_layers[24].row = 1
-    arm.rigify_layers[25].name = " "
-    arm.rigify_layers[25].row = 1
-    arm.rigify_layers[26].name = " "
-    arm.rigify_layers[26].row = 1
-    arm.rigify_layers[27].name = " "
-    arm.rigify_layers[27].row = 1
-
-    bones = {}
-
-    bone = arm.edit_bones.new('hips')
-    bone.head[:] = 0.0000, 0.0552, 1.0099
-    bone.tail[:] = 0.0000, 0.0172, 1.1837
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['hips'] = bone.name
-    bone = arm.edit_bones.new('spine')
-    bone.head[:] = 0.0000, 0.0172, 1.1837
-    bone.tail[:] = 0.0000, 0.0004, 1.3418
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['hips']]
-    bones['spine'] = bone.name
-    bone = arm.edit_bones.new('thigh.L')
-    bone.head[:] = 0.0980, 0.0124, 1.0720
-    bone.tail[:] = 0.0980, -0.0286, 0.5372
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hips']]
-    bones['thigh.L'] = bone.name
-    bone = arm.edit_bones.new('thigh.R')
-    bone.head[:] = -0.0980, 0.0124, 1.0720
-    bone.tail[:] = -0.0980, -0.0286, 0.5372
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hips']]
-    bones['thigh.R'] = bone.name
-    bone = arm.edit_bones.new('chest')
-    bone.head[:] = 0.0000, 0.0004, 1.3418
-    bone.tail[:] = 0.0000, 0.0114, 1.6582
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['chest'] = bone.name
-    bone = arm.edit_bones.new('shin.L')
-    bone.head[:] = 0.0980, -0.0286, 0.5372
-    bone.tail[:] = 0.0980, 0.0162, 0.0852
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thigh.L']]
-    bones['shin.L'] = bone.name
-    bone = arm.edit_bones.new('shin.R')
-    bone.head[:] = -0.0980, -0.0286, 0.5372
-    bone.tail[:] = -0.0980, 0.0162, 0.0852
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thigh.R']]
-    bones['shin.R'] = bone.name
-    bone = arm.edit_bones.new('neck')
-    bone.head[:] = 0.0000, 0.0114, 1.6582
-    bone.tail[:] = 0.0000, -0.0247, 1.7813
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['chest']]
-    bones['neck'] = bone.name
-    bone = arm.edit_bones.new('shoulder.L')
-    bone.head[:] = 0.0183, -0.0684, 1.6051
-    bone.tail[:] = 0.1694, 0.0205, 1.6050
-    bone.roll = 0.0004
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['chest']]
-    bones['shoulder.L'] = bone.name
-    bone = arm.edit_bones.new('shoulder.R')
-    bone.head[:] = -0.0183, -0.0684, 1.6051
-    bone.tail[:] = -0.1694, 0.0205, 1.6050
-    bone.roll = -0.0004
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['chest']]
-    bones['shoulder.R'] = bone.name
-    bone = arm.edit_bones.new('foot.L')
-    bone.head[:] = 0.0980, 0.0162, 0.0852
-    bone.tail[:] = 0.0980, -0.0934, 0.0167
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin.L']]
-    bones['foot.L'] = bone.name
-    bone = arm.edit_bones.new('heel.L')
-    bone.head[:] = 0.0980, 0.0162, 0.0852
-    bone.tail[:] = 0.0980, 0.0882, -0.0000
-    bone.roll = -3.1416
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin.L']]
-    bones['heel.L'] = bone.name
-    bone = arm.edit_bones.new('foot.R')
-    bone.head[:] = -0.0980, 0.0162, 0.0852
-    bone.tail[:] = -0.0980, -0.0934, 0.0167
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin.R']]
-    bones['foot.R'] = bone.name
-    bone = arm.edit_bones.new('heel.R')
-    bone.head[:] = -0.0980, 0.0162, 0.0852
-    bone.tail[:] = -0.0980, 0.0882, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin.R']]
-    bones['heel.R'] = bone.name
-    bone = arm.edit_bones.new('head')
-    bone.head[:] = 0.0000, -0.0247, 1.7813
-    bone.tail[:] = 0.0000, -0.0247, 1.9347
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['neck']]
-    bones['head'] = bone.name
-    bone = arm.edit_bones.new('upper_arm.L')
-    bone.head[:] = 0.1953, 0.0267, 1.5846
-    bone.tail[:] = 0.4424, 0.0885, 1.4491
-    bone.roll = 2.0691
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['shoulder.L']]
-    bones['upper_arm.L'] = bone.name
-    bone = arm.edit_bones.new('upper_arm.R')
-    bone.head[:] = -0.1953, 0.0267, 1.5846
-    bone.tail[:] = -0.4424, 0.0885, 1.4491
-    bone.roll = -2.0691
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['shoulder.R']]
-    bones['upper_arm.R'] = bone.name
-    bone = arm.edit_bones.new('toe.L')
-    bone.head[:] = 0.0980, -0.0934, 0.0167
-    bone.tail[:] = 0.0980, -0.1606, 0.0167
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['foot.L']]
-    bones['toe.L'] = bone.name
-    bone = arm.edit_bones.new('heel.02.L')
-    bone.head[:] = 0.0600, 0.0000, 0.0000
-    bone.tail[:] = 0.1400, 0.0000, 0.0000
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['heel.L']]
-    bones['heel.02.L'] = bone.name
-    bone = arm.edit_bones.new('toe.R')
-    bone.head[:] = -0.0980, -0.0934, 0.0167
-    bone.tail[:] = -0.0980, -0.1606, 0.0167
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['foot.R']]
-    bones['toe.R'] = bone.name
-    bone = arm.edit_bones.new('heel.02.R')
-    bone.head[:] = -0.0600, 0.0000, 0.0000
-    bone.tail[:] = -0.1400, 0.0000, 0.0000
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['heel.R']]
-    bones['heel.02.R'] = bone.name
-    bone = arm.edit_bones.new('forearm.L')
-    bone.head[:] = 0.4424, 0.0885, 1.4491
-    bone.tail[:] = 0.6594, 0.0492, 1.3061
-    bone.roll = 2.1459
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['upper_arm.L']]
-    bones['forearm.L'] = bone.name
-    bone = arm.edit_bones.new('forearm.R')
-    bone.head[:] = -0.4424, 0.0885, 1.4491
-    bone.tail[:] = -0.6594, 0.0492, 1.3061
-    bone.roll = -2.1459
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['upper_arm.R']]
-    bones['forearm.R'] = bone.name
-    bone = arm.edit_bones.new('hand.L')
-    bone.head[:] = 0.6594, 0.0492, 1.3061
-    bone.tail[:] = 0.7234, 0.0412, 1.2585
-    bone.roll = -2.4946
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['forearm.L']]
-    bones['hand.L'] = bone.name
-    bone = arm.edit_bones.new('hand.R')
-    bone.head[:] = -0.6594, 0.0492, 1.3061
-    bone.tail[:] = -0.7234, 0.0412, 1.2585
-    bone.roll = 2.4946
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['forearm.R']]
-    bones['hand.R'] = bone.name
-    bone = arm.edit_bones.new('palm.01.L')
-    bone.head[:] = 0.6921, 0.0224, 1.2882
-    bone.tail[:] = 0.7464, 0.0051, 1.2482
-    bone.roll = -2.4928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.01.L'] = bone.name
-    bone = arm.edit_bones.new('palm.02.L')
-    bone.head[:] = 0.6970, 0.0389, 1.2877
-    bone.tail[:] = 0.7518, 0.0277, 1.2487
-    bone.roll = -2.5274
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.02.L'] = bone.name
-    bone = arm.edit_bones.new('palm.03.L')
-    bone.head[:] = 0.6963, 0.0545, 1.2874
-    bone.tail[:] = 0.7540, 0.0521, 1.2482
-    bone.roll = -2.5843
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.03.L'] = bone.name
-    bone = arm.edit_bones.new('palm.04.L')
-    bone.head[:] = 0.6929, 0.0696, 1.2871
-    bone.tail[:] = 0.7528, 0.0763, 1.2428
-    bone.roll = -2.5155
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.04.L'] = bone.name
-    bone = arm.edit_bones.new('palm.01.R')
-    bone.head[:] = -0.6921, 0.0224, 1.2882
-    bone.tail[:] = -0.7464, 0.0051, 1.2482
-    bone.roll = 2.4928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.01.R'] = bone.name
-    bone = arm.edit_bones.new('palm.02.R')
-    bone.head[:] = -0.6970, 0.0389, 1.2877
-    bone.tail[:] = -0.7518, 0.0277, 1.2487
-    bone.roll = 2.5274
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.02.R'] = bone.name
-    bone = arm.edit_bones.new('palm.03.R')
-    bone.head[:] = -0.6963, 0.0544, 1.2874
-    bone.tail[:] = -0.7540, 0.0521, 1.2482
-    bone.roll = 2.5843
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.03.R'] = bone.name
-    bone = arm.edit_bones.new('palm.04.R')
-    bone.head[:] = -0.6929, 0.0696, 1.2871
-    bone.tail[:] = -0.7528, 0.0763, 1.2428
-    bone.roll = 2.5155
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.04.R'] = bone.name
-    bone = arm.edit_bones.new('f_index.01.L')
-    bone.head[:] = 0.7464, 0.0051, 1.2482
-    bone.tail[:] = 0.7718, 0.0013, 1.2112
-    bone.roll = -2.0315
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.01.L']]
-    bones['f_index.01.L'] = bone.name
-    bone = arm.edit_bones.new('thumb.01.L')
-    bone.head[:] = 0.6705, 0.0214, 1.2738
-    bone.tail[:] = 0.6857, 0.0015, 1.2404
-    bone.roll = -0.1587
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.01.L']]
-    bones['thumb.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_middle.01.L')
-    bone.head[:] = 0.7518, 0.0277, 1.2487
-    bone.tail[:] = 0.7762, 0.0234, 1.2058
-    bone.roll = -2.0067
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.02.L']]
-    bones['f_middle.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_ring.01.L')
-    bone.head[:] = 0.7540, 0.0521, 1.2482
-    bone.tail[:] = 0.7715, 0.0499, 1.2070
-    bone.roll = -2.0082
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.03.L']]
-    bones['f_ring.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.01.L')
-    bone.head[:] = 0.7528, 0.0763, 1.2428
-    bone.tail[:] = 0.7589, 0.0765, 1.2156
-    bone.roll = -1.9749
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.04.L']]
-    bones['f_pinky.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_index.01.R')
-    bone.head[:] = -0.7464, 0.0051, 1.2482
-    bone.tail[:] = -0.7718, 0.0012, 1.2112
-    bone.roll = 2.0315
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.01.R']]
-    bones['f_index.01.R'] = bone.name
-    bone = arm.edit_bones.new('thumb.01.R')
-    bone.head[:] = -0.6705, 0.0214, 1.2738
-    bone.tail[:] = -0.6857, 0.0015, 1.2404
-    bone.roll = 0.1587
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.01.R']]
-    bones['thumb.01.R'] = bone.name
-    bone = arm.edit_bones.new('f_middle.01.R')
-    bone.head[:] = -0.7518, 0.0277, 1.2487
-    bone.tail[:] = -0.7762, 0.0233, 1.2058
-    bone.roll = 2.0067
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.02.R']]
-    bones['f_middle.01.R'] = bone.name
-    bone = arm.edit_bones.new('f_ring.01.R')
-    bone.head[:] = -0.7540, 0.0521, 1.2482
-    bone.tail[:] = -0.7715, 0.0499, 1.2070
-    bone.roll = 2.0082
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.03.R']]
-    bones['f_ring.01.R'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.01.R')
-    bone.head[:] = -0.7528, 0.0763, 1.2428
-    bone.tail[:] = -0.7589, 0.0765, 1.2156
-    bone.roll = 1.9749
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['palm.04.R']]
-    bones['f_pinky.01.R'] = bone.name
-    bone = arm.edit_bones.new('f_index.02.L')
-    bone.head[:] = 0.7718, 0.0013, 1.2112
-    bone.tail[:] = 0.7840, -0.0003, 1.1858
-    bone.roll = -1.8799
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.01.L']]
-    bones['f_index.02.L'] = bone.name
-    bone = arm.edit_bones.new('thumb.02.L')
-    bone.head[:] = 0.6857, 0.0015, 1.2404
-    bone.tail[:] = 0.7056, -0.0057, 1.2145
-    bone.roll = -0.4798
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.01.L']]
-    bones['thumb.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_middle.02.L')
-    bone.head[:] = 0.7762, 0.0234, 1.2058
-    bone.tail[:] = 0.7851, 0.0218, 1.1749
-    bone.roll = -1.8283
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.01.L']]
-    bones['f_middle.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_ring.02.L')
-    bone.head[:] = 0.7715, 0.0499, 1.2070
-    bone.tail[:] = 0.7794, 0.0494, 1.1762
-    bone.roll = -1.8946
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.01.L']]
-    bones['f_ring.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.02.L')
-    bone.head[:] = 0.7589, 0.0765, 1.2156
-    bone.tail[:] = 0.7618, 0.0770, 1.1932
-    bone.roll = -1.9059
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.01.L']]
-    bones['f_pinky.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_index.02.R')
-    bone.head[:] = -0.7718, 0.0012, 1.2112
-    bone.tail[:] = -0.7840, -0.0003, 1.1858
-    bone.roll = 1.8799
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.01.R']]
-    bones['f_index.02.R'] = bone.name
-    bone = arm.edit_bones.new('thumb.02.R')
-    bone.head[:] = -0.6857, 0.0015, 1.2404
-    bone.tail[:] = -0.7056, -0.0057, 1.2145
-    bone.roll = 0.4798
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.01.R']]
-    bones['thumb.02.R'] = bone.name
-    bone = arm.edit_bones.new('f_middle.02.R')
-    bone.head[:] = -0.7762, 0.0233, 1.2058
-    bone.tail[:] = -0.7851, 0.0218, 1.1749
-    bone.roll = 1.8283
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.01.R']]
-    bones['f_middle.02.R'] = bone.name
-    bone = arm.edit_bones.new('f_ring.02.R')
-    bone.head[:] = -0.7715, 0.0499, 1.2070
-    bone.tail[:] = -0.7794, 0.0494, 1.1762
-    bone.roll = 1.8946
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.01.R']]
-    bones['f_ring.02.R'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.02.R')
-    bone.head[:] = -0.7589, 0.0765, 1.2156
-    bone.tail[:] = -0.7618, 0.0770, 1.1932
-    bone.roll = 1.9059
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.01.R']]
-    bones['f_pinky.02.R'] = bone.name
-    bone = arm.edit_bones.new('f_index.03.L')
-    bone.head[:] = 0.7840, -0.0003, 1.1858
-    bone.tail[:] = 0.7892, 0.0006, 1.1636
-    bone.roll = -1.6760
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.02.L']]
-    bones['f_index.03.L'] = bone.name
-    bone = arm.edit_bones.new('thumb.03.L')
-    bone.head[:] = 0.7056, -0.0057, 1.2145
-    bone.tail[:] = 0.7194, -0.0098, 1.1995
-    bone.roll = -0.5826
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.02.L']]
-    bones['thumb.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_middle.03.L')
-    bone.head[:] = 0.7851, 0.0218, 1.1749
-    bone.tail[:] = 0.7888, 0.0216, 1.1525
-    bone.roll = -1.7483
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.02.L']]
-    bones['f_middle.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_ring.03.L')
-    bone.head[:] = 0.7794, 0.0494, 1.1762
-    bone.tail[:] = 0.7781, 0.0498, 1.1577
-    bone.roll = -1.6582
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.02.L']]
-    bones['f_ring.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.03.L')
-    bone.head[:] = 0.7618, 0.0770, 1.1932
-    bone.tail[:] = 0.7611, 0.0772, 1.1782
-    bone.roll = -1.7639
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.02.L']]
-    bones['f_pinky.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_index.03.R')
-    bone.head[:] = -0.7840, -0.0003, 1.1858
-    bone.tail[:] = -0.7892, 0.0006, 1.1636
-    bone.roll = 1.6760
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.02.R']]
-    bones['f_index.03.R'] = bone.name
-    bone = arm.edit_bones.new('thumb.03.R')
-    bone.head[:] = -0.7056, -0.0057, 1.2145
-    bone.tail[:] = -0.7194, -0.0098, 1.1995
-    bone.roll = 0.5826
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.02.R']]
-    bones['thumb.03.R'] = bone.name
-    bone = arm.edit_bones.new('f_middle.03.R')
-    bone.head[:] = -0.7851, 0.0218, 1.1749
-    bone.tail[:] = -0.7888, 0.0216, 1.1525
-    bone.roll = 1.7483
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.02.R']]
-    bones['f_middle.03.R'] = bone.name
-    bone = arm.edit_bones.new('f_ring.03.R')
-    bone.head[:] = -0.7794, 0.0494, 1.1762
-    bone.tail[:] = -0.7781, 0.0498, 1.1577
-    bone.roll = 1.6582
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.02.R']]
-    bones['f_ring.03.R'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.03.R')
-    bone.head[:] = -0.7618, 0.0770, 1.1932
-    bone.tail[:] = -0.7611, 0.0772, 1.1782
-    bone.roll = 1.7639
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.02.R']]
-    bones['f_pinky.03.R'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['hips']]
-    pbone.rigify_type = 'spine'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.chain_bone_controls = "1, 2, 3"
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['spine']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thigh.L']]
-    pbone.rigify_type = 'biped.leg'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['thigh.R']]
-    pbone.rigify_type = 'biped.leg'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['chest']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shin.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shin.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['neck']]
-    pbone.rigify_type = 'neck_short'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shoulder.L']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, True, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shoulder.R']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, True, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['foot.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['heel.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['foot.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['heel.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['head']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['upper_arm.L']]
-    pbone.rigify_type = 'biped.arm'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['upper_arm.R']]
-    pbone.rigify_type = 'biped.arm'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['toe.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['heel.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['toe.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['heel.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forearm.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forearm.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['hand.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['hand.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.01.L']]
-    pbone.rigify_type = 'palm'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.04.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.01.R']]
-    pbone.rigify_type = 'palm'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.04.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.01.L']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['thumb.01.L']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_middle.01.L']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_ring.01.L']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_pinky.01.L']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_index.01.R']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['thumb.01.R']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_middle.01.R']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_ring.01.R']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_pinky.01.R']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_index.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
-
-    arm.layers = [(x in [0, 2, 4, 6, 9, 12, 15]) for x in range(32)]
-
-if __name__ == "__main__":
-    create(bpy.context.active_object)
diff --git a/rigify/legacy/metarigs/pitchipoy_human.py b/rigify/legacy/metarigs/pitchipoy_human.py
deleted file mode 100644
index 98541c0770934db219be3afb2cc6d2f400ceea26..0000000000000000000000000000000000000000
--- a/rigify/legacy/metarigs/pitchipoy_human.py
+++ /dev/null
@@ -1,2720 +0,0 @@
-import bpy
-
-def create(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    for i in range(28):
-        arm.rigify_layers.add()
-
-    arm.rigify_layers[0].name = "Face"
-    arm.rigify_layers[0].row = 1
-    arm.rigify_layers[1].name = "Face (Primary)"
-    arm.rigify_layers[1].row = 2
-    arm.rigify_layers[2].name = "Face (Secondary)"
-    arm.rigify_layers[2].row = 2
-    arm.rigify_layers[3].name = "Torso"
-    arm.rigify_layers[3].row = 3
-    arm.rigify_layers[4].name = "Torso (Tweak)"
-    arm.rigify_layers[4].row = 4
-    arm.rigify_layers[5].name = "Fingers"
-    arm.rigify_layers[5].row = 5
-    arm.rigify_layers[6].name = "Fingers (Tweak)"
-    arm.rigify_layers[6].row = 6
-    arm.rigify_layers[7].name = "Arm.L (IK)"
-    arm.rigify_layers[7].row = 7
-    arm.rigify_layers[8].name = "Arm.L (FK)"
-    arm.rigify_layers[8].row = 8
-    arm.rigify_layers[9].name = "Arm.L (Tweak)"
-    arm.rigify_layers[9].row = 9
-    arm.rigify_layers[10].name = "Arm.R (IK)"
-    arm.rigify_layers[10].row = 7
-    arm.rigify_layers[11].name = "Arm.R (FK)"
-    arm.rigify_layers[11].row = 8
-    arm.rigify_layers[12].name = "Arm.R (Tweak)"
-    arm.rigify_layers[12].row = 9
-    arm.rigify_layers[13].name = "Leg.L (IK)"
-    arm.rigify_layers[13].row = 10
-    arm.rigify_layers[14].name = "Leg.L (FK)"
-    arm.rigify_layers[14].row = 11
-    arm.rigify_layers[15].name = "Leg.L (Tweak)"
-    arm.rigify_layers[15].row = 12
-    arm.rigify_layers[16].name = "Leg.R (IK)"
-    arm.rigify_layers[16].row = 10
-    arm.rigify_layers[17].name = "Leg.R (FK)"
-    arm.rigify_layers[17].row = 11
-    arm.rigify_layers[18].name = "Leg.R (Tweak)"
-    arm.rigify_layers[18].row = 12
-    arm.rigify_layers[19].name = ""
-    arm.rigify_layers[19].row = 1
-    arm.rigify_layers[20].name = ""
-    arm.rigify_layers[20].row = 1
-    arm.rigify_layers[21].name = ""
-    arm.rigify_layers[21].row = 1
-    arm.rigify_layers[22].name = ""
-    arm.rigify_layers[22].row = 1
-    arm.rigify_layers[23].name = ""
-    arm.rigify_layers[23].row = 1
-    arm.rigify_layers[24].name = ""
-    arm.rigify_layers[24].row = 1
-    arm.rigify_layers[25].name = ""
-    arm.rigify_layers[25].row = 1
-    arm.rigify_layers[26].name = ""
-    arm.rigify_layers[26].row = 1
-    arm.rigify_layers[27].name = ""
-    arm.rigify_layers[27].row = 1
-
-    bones = {}
-
-    bone = arm.edit_bones.new('spine')
-    bone.head[:] = 0.0000, 0.0552, 1.0099
-    bone.tail[:] = 0.0000, 0.0172, 1.1573
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['spine'] = bone.name
-    bone = arm.edit_bones.new('spine.001')
-    bone.head[:] = 0.0000, 0.0172, 1.1573
-    bone.tail[:] = 0.0000, 0.0004, 1.2929
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['spine.001'] = bone.name
-    bone = arm.edit_bones.new('pelvis.L')
-    bone.head[:] = 0.0000, 0.0552, 1.0099
-    bone.tail[:] = 0.1112, -0.0451, 1.1533
-    bone.roll = -1.0756
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['pelvis.L'] = bone.name
-    bone = arm.edit_bones.new('pelvis.R')
-    bone.head[:] = -0.0000, 0.0552, 1.0099
-    bone.tail[:] = -0.1112, -0.0451, 1.1533
-    bone.roll = 1.0756
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['pelvis.R'] = bone.name
-    bone = arm.edit_bones.new('thigh.L')
-    bone.head[:] = 0.0980, 0.0124, 1.0720
-    bone.tail[:] = 0.0980, -0.0286, 0.5372
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['thigh.L'] = bone.name
-    bone = arm.edit_bones.new('thigh.R')
-    bone.head[:] = -0.0980, 0.0124, 1.0720
-    bone.tail[:] = -0.0980, -0.0286, 0.5372
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['thigh.R'] = bone.name
-    bone = arm.edit_bones.new('spine.002')
-    bone.head[:] = 0.0000, 0.0004, 1.2929
-    bone.tail[:] = 0.0000, 0.0059, 1.4657
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.001']]
-    bones['spine.002'] = bone.name
-    bone = arm.edit_bones.new('shin.L')
-    bone.head[:] = 0.0980, -0.0286, 0.5372
-    bone.tail[:] = 0.0980, 0.0162, 0.0852
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thigh.L']]
-    bones['shin.L'] = bone.name
-    bone = arm.edit_bones.new('shin.R')
-    bone.head[:] = -0.0980, -0.0286, 0.5372
-    bone.tail[:] = -0.0980, 0.0162, 0.0852
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thigh.R']]
-    bones['shin.R'] = bone.name
-    bone = arm.edit_bones.new('spine.003')
-    bone.head[:] = 0.0000, 0.0059, 1.4657
-    bone.tail[:] = 0.0000, 0.0114, 1.6582
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.002']]
-    bones['spine.003'] = bone.name
-    bone = arm.edit_bones.new('foot.L')
-    bone.head[:] = 0.0980, 0.0162, 0.0852
-    bone.tail[:] = 0.0980, -0.0934, 0.0167
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin.L']]
-    bones['foot.L'] = bone.name
-    bone = arm.edit_bones.new('foot.R')
-    bone.head[:] = -0.0980, 0.0162, 0.0852
-    bone.tail[:] = -0.0980, -0.0934, 0.0167
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin.R']]
-    bones['foot.R'] = bone.name
-    bone = arm.edit_bones.new('spine.004')
-    bone.head[:] = 0.0000, 0.0114, 1.6582
-    bone.tail[:] = 0.0000, -0.0067, 1.7197
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.003']]
-    bones['spine.004'] = bone.name
-    bone = arm.edit_bones.new('shoulder.L')
-    bone.head[:] = 0.0183, -0.0684, 1.6051
-    bone.tail[:] = 0.1694, 0.0205, 1.6050
-    bone.roll = 0.0004
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine.003']]
-    bones['shoulder.L'] = bone.name
-    bone = arm.edit_bones.new('shoulder.R')
-    bone.head[:] = -0.0183, -0.0684, 1.6051
-    bone.tail[:] = -0.1694, 0.0205, 1.6050
-    bone.roll = -0.0004
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine.003']]
-    bones['shoulder.R'] = bone.name
-    bone = arm.edit_bones.new('breast.L')
-    bone.head[:] = 0.1184, 0.0485, 1.4596
-    bone.tail[:] = 0.1184, -0.0907, 1.4596
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine.003']]
-    bones['breast.L'] = bone.name
-    bone = arm.edit_bones.new('breast.R')
-    bone.head[:] = -0.1184, 0.0485, 1.4596
-    bone.tail[:] = -0.1184, -0.0907, 1.4596
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine.003']]
-    bones['breast.R'] = bone.name
-    bone = arm.edit_bones.new('toe.L')
-    bone.head[:] = 0.0980, -0.0934, 0.0167
-    bone.tail[:] = 0.0980, -0.1606, 0.0167
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['foot.L']]
-    bones['toe.L'] = bone.name
-    bone = arm.edit_bones.new('heel.02.L')
-    bone.head[:] = 0.0600, 0.0459, 0.0000
-    bone.tail[:] = 0.1400, 0.0459, 0.0000
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['foot.L']]
-    bones['heel.02.L'] = bone.name
-    bone = arm.edit_bones.new('toe.R')
-    bone.head[:] = -0.0980, -0.0934, 0.0167
-    bone.tail[:] = -0.0980, -0.1606, 0.0167
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['foot.R']]
-    bones['toe.R'] = bone.name
-    bone = arm.edit_bones.new('heel.02.R')
-    bone.head[:] = -0.0600, 0.0459, 0.0000
-    bone.tail[:] = -0.1400, 0.0459, 0.0000
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['foot.R']]
-    bones['heel.02.R'] = bone.name
-    bone = arm.edit_bones.new('spine.005')
-    bone.head[:] = 0.0000, -0.0067, 1.7197
-    bone.tail[:] = 0.0000, -0.0247, 1.7813
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.004']]
-    bones['spine.005'] = bone.name
-    bone = arm.edit_bones.new('upper_arm.L')
-    bone.head[:] = 0.1953, 0.0267, 1.5846
-    bone.tail[:] = 0.4424, 0.0885, 1.4491
-    bone.roll = 2.0724
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['shoulder.L']]
-    bones['upper_arm.L'] = bone.name
-    bone = arm.edit_bones.new('upper_arm.R')
-    bone.head[:] = -0.1953, 0.0267, 1.5846
-    bone.tail[:] = -0.4424, 0.0885, 1.4491
-    bone.roll = -2.0724
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['shoulder.R']]
-    bones['upper_arm.R'] = bone.name
-    bone = arm.edit_bones.new('spine.006')
-    bone.head[:] = 0.0000, -0.0247, 1.7813
-    bone.tail[:] = 0.0000, -0.0247, 1.9796
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.005']]
-    bones['spine.006'] = bone.name
-    bone = arm.edit_bones.new('forearm.L')
-    bone.head[:] = 0.4424, 0.0885, 1.4491
-    bone.tail[:] = 0.6594, 0.0492, 1.3061
-    bone.roll = 2.1535
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['upper_arm.L']]
-    bones['forearm.L'] = bone.name
-    bone = arm.edit_bones.new('forearm.R')
-    bone.head[:] = -0.4424, 0.0885, 1.4491
-    bone.tail[:] = -0.6594, 0.0492, 1.3061
-    bone.roll = -2.1535
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['upper_arm.R']]
-    bones['forearm.R'] = bone.name
-    bone = arm.edit_bones.new('face')
-    bone.head[:] = 0.0000, -0.0247, 1.7813
-    bone.tail[:] = 0.0000, -0.0247, 1.8725
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['spine.006']]
-    bones['face'] = bone.name
-    bone = arm.edit_bones.new('hand.L')
-    bone.head[:] = 0.6594, 0.0492, 1.3061
-    bone.tail[:] = 0.7234, 0.0412, 1.2585
-    bone.roll = 2.2103
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['forearm.L']]
-    bones['hand.L'] = bone.name
-    bone = arm.edit_bones.new('hand.R')
-    bone.head[:] = -0.6594, 0.0492, 1.3061
-    bone.tail[:] = -0.7234, 0.0412, 1.2585
-    bone.roll = -2.2103
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['forearm.R']]
-    bones['hand.R'] = bone.name
-    bone = arm.edit_bones.new('nose')
-    bone.head[:] = 0.0000, -0.1536, 1.8978
-    bone.tail[:] = 0.0000, -0.1834, 1.8589
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['nose'] = bone.name
-    bone = arm.edit_bones.new('lip.T.L')
-    bone.head[:] = -0.0000, -0.1710, 1.8140
-    bone.tail[:] = 0.0195, -0.1656, 1.8146
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.T.L'] = bone.name
-    bone = arm.edit_bones.new('lip.B.L')
-    bone.head[:] = -0.0000, -0.1667, 1.7978
-    bone.tail[:] = 0.0185, -0.1585, 1.8028
-    bone.roll = -0.0789
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.B.L'] = bone.name
-    bone = arm.edit_bones.new('jaw')
-    bone.head[:] = 0.0000, -0.0945, 1.7439
-    bone.tail[:] = 0.0000, -0.1519, 1.7392
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['jaw'] = bone.name
-    bone = arm.edit_bones.new('ear.L')
-    bone.head[:] = 0.0919, -0.0309, 1.8622
-    bone.tail[:] = 0.0989, -0.0336, 1.9017
-    bone.roll = -0.0324
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['ear.L'] = bone.name
-    bone = arm.edit_bones.new('ear.R')
-    bone.head[:] = -0.0919, -0.0309, 1.8622
-    bone.tail[:] = -0.0989, -0.0336, 1.9017
-    bone.roll = 0.0324
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['ear.R'] = bone.name
-    bone = arm.edit_bones.new('lip.T.R')
-    bone.head[:] = 0.0000, -0.1710, 1.8140
-    bone.tail[:] = -0.0195, -0.1656, 1.8146
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.T.R'] = bone.name
-    bone = arm.edit_bones.new('lip.B.R')
-    bone.head[:] = 0.0000, -0.1667, 1.7978
-    bone.tail[:] = -0.0185, -0.1585, 1.8028
-    bone.roll = 0.0789
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.B.R'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L')
-    bone.head[:] = 0.0791, -0.1237, 1.9020
-    bone.tail[:] = 0.0704, -0.1349, 1.9078
-    bone.roll = 0.0412
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['brow.B.L'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L')
-    bone.head[:] = 0.0768, -0.1218, 1.8947
-    bone.tail[:] = 0.0678, -0.1356, 1.8995
-    bone.roll = -0.2079
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lid.T.L'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R')
-    bone.head[:] = -0.0791, -0.1237, 1.9020
-    bone.tail[:] = -0.0704, -0.1349, 1.9078
-    bone.roll = -0.0412
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['brow.B.R'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R')
-    bone.head[:] = -0.0768, -0.1218, 1.8947
-    bone.tail[:] = -0.0678, -0.1356, 1.8995
-    bone.roll = 0.2079
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lid.T.R'] = bone.name
-    bone = arm.edit_bones.new('forehead.L')
-    bone.head[:] = 0.0168, -0.1325, 1.9704
-    bone.tail[:] = 0.0215, -0.1546, 1.9144
-    bone.roll = 1.4313
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['forehead.L'] = bone.name
-    bone = arm.edit_bones.new('forehead.R')
-    bone.head[:] = -0.0168, -0.1325, 1.9704
-    bone.tail[:] = -0.0215, -0.1546, 1.9144
-    bone.roll = -1.4313
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['forehead.R'] = bone.name
-    bone = arm.edit_bones.new('eye.L')
-    bone.head[:] = 0.0516, -0.1209, 1.8941
-    bone.tail[:] = 0.0516, -0.1451, 1.8941
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['eye.L'] = bone.name
-    bone = arm.edit_bones.new('eye.R')
-    bone.head[:] = -0.0516, -0.1209, 1.8941
-    bone.tail[:] = -0.0516, -0.1451, 1.8941
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['eye.R'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.L')
-    bone.head[:] = 0.0848, -0.0940, 1.8870
-    bone.tail[:] = 0.0565, -0.1430, 1.8517
-    bone.roll = -0.0096
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['cheek.T.L'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.R')
-    bone.head[:] = -0.0848, -0.0940, 1.8870
-    bone.tail[:] = -0.0565, -0.1430, 1.8517
-    bone.roll = 0.0096
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['cheek.T.R'] = bone.name
-    bone = arm.edit_bones.new('teeth.T')
-    bone.head[:] = 0.0000, -0.1568, 1.8214
-    bone.tail[:] = 0.0000, -0.1112, 1.8214
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['teeth.T'] = bone.name
-    bone = arm.edit_bones.new('teeth.B')
-    bone.head[:] = 0.0000, -0.1500, 1.7892
-    bone.tail[:] = 0.0000, -0.1043, 1.7892
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['teeth.B'] = bone.name
-    bone = arm.edit_bones.new('tongue')
-    bone.head[:] = 0.0000, -0.1354, 1.7946
-    bone.tail[:] = 0.0000, -0.1101, 1.8002
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['tongue'] = bone.name
-    bone = arm.edit_bones.new('palm.01.L')
-    bone.head[:] = 0.6921, 0.0224, 1.2882
-    bone.tail[:] = 0.7464, 0.0051, 1.2482
-    bone.roll = -2.4928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.01.L'] = bone.name
-    bone = arm.edit_bones.new('palm.02.L')
-    bone.head[:] = 0.6970, 0.0389, 1.2877
-    bone.tail[:] = 0.7518, 0.0277, 1.2487
-    bone.roll = -2.5274
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.02.L'] = bone.name
-    bone = arm.edit_bones.new('palm.03.L')
-    bone.head[:] = 0.6963, 0.0545, 1.2874
-    bone.tail[:] = 0.7540, 0.0521, 1.2482
-    bone.roll = -2.5843
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.03.L'] = bone.name
-    bone = arm.edit_bones.new('palm.04.L')
-    bone.head[:] = 0.6929, 0.0696, 1.2871
-    bone.tail[:] = 0.7528, 0.0763, 1.2428
-    bone.roll = -2.5155
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.L']]
-    bones['palm.04.L'] = bone.name
-    bone = arm.edit_bones.new('palm.01.R')
-    bone.head[:] = -0.6921, 0.0224, 1.2882
-    bone.tail[:] = -0.7464, 0.0051, 1.2482
-    bone.roll = 2.4928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.01.R'] = bone.name
-    bone = arm.edit_bones.new('palm.02.R')
-    bone.head[:] = -0.6970, 0.0389, 1.2877
-    bone.tail[:] = -0.7518, 0.0277, 1.2487
-    bone.roll = 2.5274
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.02.R'] = bone.name
-    bone = arm.edit_bones.new('palm.03.R')
-    bone.head[:] = -0.6963, 0.0544, 1.2874
-    bone.tail[:] = -0.7540, 0.0521, 1.2482
-    bone.roll = 2.5843
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.03.R'] = bone.name
-    bone = arm.edit_bones.new('palm.04.R')
-    bone.head[:] = -0.6929, 0.0696, 1.2871
-    bone.tail[:] = -0.7528, 0.0763, 1.2428
-    bone.roll = 2.5155
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['hand.R']]
-    bones['palm.04.R'] = bone.name
-    bone = arm.edit_bones.new('nose.001')
-    bone.head[:] = 0.0000, -0.1834, 1.8589
-    bone.tail[:] = 0.0000, -0.1965, 1.8450
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose']]
-    bones['nose.001'] = bone.name
-    bone = arm.edit_bones.new('lip.T.L.001')
-    bone.head[:] = 0.0195, -0.1656, 1.8146
-    bone.tail[:] = 0.0352, -0.1494, 1.8074
-    bone.roll = 0.0236
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.T.L']]
-    bones['lip.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('lip.B.L.001')
-    bone.head[:] = 0.0185, -0.1585, 1.8028
-    bone.tail[:] = 0.0352, -0.1494, 1.8074
-    bone.roll = 0.0731
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.B.L']]
-    bones['lip.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('chin')
-    bone.head[:] = 0.0000, -0.1519, 1.7392
-    bone.tail[:] = 0.0000, -0.1634, 1.7692
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw']]
-    bones['chin'] = bone.name
-    bone = arm.edit_bones.new('ear.L.001')
-    bone.head[:] = 0.0989, -0.0336, 1.9017
-    bone.tail[:] = 0.1200, -0.0088, 1.9074
-    bone.roll = 0.0656
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L']]
-    bones['ear.L.001'] = bone.name
-    bone = arm.edit_bones.new('ear.R.001')
-    bone.head[:] = -0.0989, -0.0336, 1.9017
-    bone.tail[:] = -0.1200, -0.0088, 1.9074
-    bone.roll = -0.0656
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R']]
-    bones['ear.R.001'] = bone.name
-    bone = arm.edit_bones.new('lip.T.R.001')
-    bone.head[:] = -0.0195, -0.1656, 1.8146
-    bone.tail[:] = -0.0352, -0.1494, 1.8074
-    bone.roll = -0.0236
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.T.R']]
-    bones['lip.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('lip.B.R.001')
-    bone.head[:] = -0.0185, -0.1585, 1.8028
-    bone.tail[:] = -0.0352, -0.1494, 1.8074
-    bone.roll = -0.0731
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.B.R']]
-    bones['lip.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L.001')
-    bone.head[:] = 0.0704, -0.1349, 1.9078
-    bone.tail[:] = 0.0577, -0.1427, 1.9093
-    bone.roll = 0.0192
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.L']]
-    bones['brow.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L.001')
-    bone.head[:] = 0.0678, -0.1356, 1.8995
-    bone.tail[:] = 0.0550, -0.1436, 1.9022
-    bone.roll = 0.1837
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L']]
-    bones['lid.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R.001')
-    bone.head[:] = -0.0704, -0.1349, 1.9078
-    bone.tail[:] = -0.0577, -0.1427, 1.9093
-    bone.roll = -0.0192
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.R']]
-    bones['brow.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R.001')
-    bone.head[:] = -0.0678, -0.1356, 1.8995
-    bone.tail[:] = -0.0550, -0.1436, 1.9022
-    bone.roll = -0.1837
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R']]
-    bones['lid.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('forehead.L.001')
-    bone.head[:] = 0.0479, -0.1174, 1.9756
-    bone.tail[:] = 0.0588, -0.1421, 1.9255
-    bone.roll = 0.9928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.L']]
-    bones['forehead.L.001'] = bone.name
-    bone = arm.edit_bones.new('forehead.R.001')
-    bone.head[:] = -0.0479, -0.1174, 1.9756
-    bone.tail[:] = -0.0588, -0.1421, 1.9255
-    bone.roll = -0.9928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.R']]
-    bones['forehead.R.001'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.L.001')
-    bone.head[:] = 0.0565, -0.1430, 1.8517
-    bone.tail[:] = 0.0188, -0.1448, 1.8822
-    bone.roll = 0.1387
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.L']]
-    bones['cheek.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.R.001')
-    bone.head[:] = -0.0565, -0.1430, 1.8517
-    bone.tail[:] = -0.0188, -0.1448, 1.8822
-    bone.roll = -0.1387
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.R']]
-    bones['cheek.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('tongue.001')
-    bone.head[:] = 0.0000, -0.1101, 1.8002
-    bone.tail[:] = 0.0000, -0.0761, 1.7949
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['tongue']]
-    bones['tongue.001'] = bone.name
-    bone = arm.edit_bones.new('f_index.01.L')
-    bone.head[:] = 0.7464, 0.0051, 1.2482
-    bone.tail[:] = 0.7718, 0.0013, 1.2112
-    bone.roll = -2.0315
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.01.L']]
-    bones['f_index.01.L'] = bone.name
-    bone = arm.edit_bones.new('thumb.01.L')
-    bone.head[:] = 0.6705, 0.0214, 1.2738
-    bone.tail[:] = 0.6857, 0.0015, 1.2404
-    bone.roll = -0.1587
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.01.L']]
-    bones['thumb.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_middle.01.L')
-    bone.head[:] = 0.7518, 0.0277, 1.2487
-    bone.tail[:] = 0.7762, 0.0234, 1.2058
-    bone.roll = -2.0067
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.02.L']]
-    bones['f_middle.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_ring.01.L')
-    bone.head[:] = 0.7540, 0.0521, 1.2482
-    bone.tail[:] = 0.7715, 0.0499, 1.2070
-    bone.roll = -2.0082
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.03.L']]
-    bones['f_ring.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.01.L')
-    bone.head[:] = 0.7528, 0.0763, 1.2428
-    bone.tail[:] = 0.7589, 0.0765, 1.2156
-    bone.roll = -1.9749
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.04.L']]
-    bones['f_pinky.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_index.01.R')
-    bone.head[:] = -0.7464, 0.0051, 1.2482
-    bone.tail[:] = -0.7718, 0.0012, 1.2112
-    bone.roll = 2.0315
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.01.R']]
-    bones['f_index.01.R'] = bone.name
-    bone = arm.edit_bones.new('thumb.01.R')
-    bone.head[:] = -0.6705, 0.0214, 1.2738
-    bone.tail[:] = -0.6857, 0.0015, 1.2404
-    bone.roll = 0.1587
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.01.R']]
-    bones['thumb.01.R'] = bone.name
-    bone = arm.edit_bones.new('f_middle.01.R')
-    bone.head[:] = -0.7518, 0.0277, 1.2487
-    bone.tail[:] = -0.7762, 0.0233, 1.2058
-    bone.roll = 2.0067
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.02.R']]
-    bones['f_middle.01.R'] = bone.name
-    bone = arm.edit_bones.new('f_ring.01.R')
-    bone.head[:] = -0.7540, 0.0521, 1.2482
-    bone.tail[:] = -0.7715, 0.0499, 1.2070
-    bone.roll = 2.0082
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.03.R']]
-    bones['f_ring.01.R'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.01.R')
-    bone.head[:] = -0.7528, 0.0763, 1.2428
-    bone.tail[:] = -0.7589, 0.0765, 1.2156
-    bone.roll = 1.9749
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.04.R']]
-    bones['f_pinky.01.R'] = bone.name
-    bone = arm.edit_bones.new('nose.002')
-    bone.head[:] = 0.0000, -0.1965, 1.8450
-    bone.tail[:] = 0.0000, -0.1854, 1.8402
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.001']]
-    bones['nose.002'] = bone.name
-    bone = arm.edit_bones.new('chin.001')
-    bone.head[:] = 0.0000, -0.1634, 1.7692
-    bone.tail[:] = 0.0000, -0.1599, 1.7909
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['chin']]
-    bones['chin.001'] = bone.name
-    bone = arm.edit_bones.new('ear.L.002')
-    bone.head[:] = 0.1200, -0.0088, 1.9074
-    bone.tail[:] = 0.1206, -0.0101, 1.8695
-    bone.roll = -0.0265
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L.001']]
-    bones['ear.L.002'] = bone.name
-    bone = arm.edit_bones.new('ear.R.002')
-    bone.head[:] = -0.1200, -0.0088, 1.9074
-    bone.tail[:] = -0.1206, -0.0101, 1.8695
-    bone.roll = 0.0265
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R.001']]
-    bones['ear.R.002'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L.002')
-    bone.head[:] = 0.0577, -0.1427, 1.9093
-    bone.tail[:] = 0.0388, -0.1418, 1.9069
-    bone.roll = 0.0847
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.L.001']]
-    bones['brow.B.L.002'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L.002')
-    bone.head[:] = 0.0550, -0.1436, 1.9022
-    bone.tail[:] = 0.0425, -0.1427, 1.8987
-    bone.roll = -0.0940
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L.001']]
-    bones['lid.T.L.002'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R.002')
-    bone.head[:] = -0.0577, -0.1427, 1.9093
-    bone.tail[:] = -0.0388, -0.1418, 1.9069
-    bone.roll = -0.0847
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.R.001']]
-    bones['brow.B.R.002'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R.002')
-    bone.head[:] = -0.0550, -0.1436, 1.9022
-    bone.tail[:] = -0.0425, -0.1427, 1.8987
-    bone.roll = 0.0940
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R.001']]
-    bones['lid.T.R.002'] = bone.name
-    bone = arm.edit_bones.new('forehead.L.002')
-    bone.head[:] = 0.0719, -0.0940, 1.9717
-    bone.tail[:] = 0.0830, -0.1213, 1.9164
-    bone.roll = 0.4509
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.L.001']]
-    bones['forehead.L.002'] = bone.name
-    bone = arm.edit_bones.new('forehead.R.002')
-    bone.head[:] = -0.0719, -0.0940, 1.9717
-    bone.tail[:] = -0.0830, -0.1213, 1.9164
-    bone.roll = -0.4509
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.R.001']]
-    bones['forehead.R.002'] = bone.name
-    bone = arm.edit_bones.new('nose.L')
-    bone.head[:] = 0.0188, -0.1448, 1.8822
-    bone.tail[:] = 0.0176, -0.1627, 1.8429
-    bone.roll = 0.0997
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.L.001']]
-    bones['nose.L'] = bone.name
-    bone = arm.edit_bones.new('nose.R')
-    bone.head[:] = -0.0188, -0.1448, 1.8822
-    bone.tail[:] = -0.0176, -0.1627, 1.8429
-    bone.roll = -0.0997
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.R.001']]
-    bones['nose.R'] = bone.name
-    bone = arm.edit_bones.new('tongue.002')
-    bone.head[:] = 0.0000, -0.0761, 1.7949
-    bone.tail[:] = 0.0000, -0.0538, 1.7673
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['tongue.001']]
-    bones['tongue.002'] = bone.name
-    bone = arm.edit_bones.new('f_index.02.L')
-    bone.head[:] = 0.7718, 0.0013, 1.2112
-    bone.tail[:] = 0.7840, -0.0003, 1.1858
-    bone.roll = -1.8799
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.01.L']]
-    bones['f_index.02.L'] = bone.name
-    bone = arm.edit_bones.new('thumb.02.L')
-    bone.head[:] = 0.6857, 0.0015, 1.2404
-    bone.tail[:] = 0.7056, -0.0057, 1.2145
-    bone.roll = -0.4798
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.01.L']]
-    bones['thumb.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_middle.02.L')
-    bone.head[:] = 0.7762, 0.0234, 1.2058
-    bone.tail[:] = 0.7851, 0.0218, 1.1749
-    bone.roll = -1.8283
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.01.L']]
-    bones['f_middle.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_ring.02.L')
-    bone.head[:] = 0.7715, 0.0499, 1.2070
-    bone.tail[:] = 0.7794, 0.0494, 1.1762
-    bone.roll = -1.8946
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.01.L']]
-    bones['f_ring.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.02.L')
-    bone.head[:] = 0.7589, 0.0765, 1.2156
-    bone.tail[:] = 0.7618, 0.0770, 1.1932
-    bone.roll = -1.9059
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.01.L']]
-    bones['f_pinky.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_index.02.R')
-    bone.head[:] = -0.7718, 0.0012, 1.2112
-    bone.tail[:] = -0.7840, -0.0003, 1.1858
-    bone.roll = 1.8799
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.01.R']]
-    bones['f_index.02.R'] = bone.name
-    bone = arm.edit_bones.new('thumb.02.R')
-    bone.head[:] = -0.6857, 0.0015, 1.2404
-    bone.tail[:] = -0.7056, -0.0057, 1.2145
-    bone.roll = 0.4798
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.01.R']]
-    bones['thumb.02.R'] = bone.name
-    bone = arm.edit_bones.new('f_middle.02.R')
-    bone.head[:] = -0.7762, 0.0233, 1.2058
-    bone.tail[:] = -0.7851, 0.0218, 1.1749
-    bone.roll = 1.8283
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.01.R']]
-    bones['f_middle.02.R'] = bone.name
-    bone = arm.edit_bones.new('f_ring.02.R')
-    bone.head[:] = -0.7715, 0.0499, 1.2070
-    bone.tail[:] = -0.7794, 0.0494, 1.1762
-    bone.roll = 1.8946
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.01.R']]
-    bones['f_ring.02.R'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.02.R')
-    bone.head[:] = -0.7589, 0.0765, 1.2156
-    bone.tail[:] = -0.7618, 0.0770, 1.1932
-    bone.roll = 1.9059
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.01.R']]
-    bones['f_pinky.02.R'] = bone.name
-    bone = arm.edit_bones.new('nose.003')
-    bone.head[:] = 0.0000, -0.1854, 1.8402
-    bone.tail[:] = 0.0000, -0.1706, 1.8393
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.002']]
-    bones['nose.003'] = bone.name
-    bone = arm.edit_bones.new('ear.L.003')
-    bone.head[:] = 0.1206, -0.0101, 1.8695
-    bone.tail[:] = 0.1010, -0.0347, 1.8422
-    bone.roll = 0.3033
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L.002']]
-    bones['ear.L.003'] = bone.name
-    bone = arm.edit_bones.new('ear.R.003')
-    bone.head[:] = -0.1206, -0.0101, 1.8695
-    bone.tail[:] = -0.1010, -0.0347, 1.8422
-    bone.roll = -0.3033
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R.002']]
-    bones['ear.R.003'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L.003')
-    bone.head[:] = 0.0388, -0.1418, 1.9069
-    bone.tail[:] = 0.0221, -0.1397, 1.8950
-    bone.roll = 0.1405
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.L.002']]
-    bones['brow.B.L.003'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L.003')
-    bone.head[:] = 0.0425, -0.1427, 1.8987
-    bone.tail[:] = 0.0262, -0.1418, 1.8891
-    bone.roll = 0.2194
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L.002']]
-    bones['lid.T.L.003'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R.003')
-    bone.head[:] = -0.0388, -0.1418, 1.9069
-    bone.tail[:] = -0.0221, -0.1397, 1.8950
-    bone.roll = -0.1405
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.R.002']]
-    bones['brow.B.R.003'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R.003')
-    bone.head[:] = -0.0425, -0.1427, 1.8987
-    bone.tail[:] = -0.0262, -0.1418, 1.8891
-    bone.roll = -0.2194
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R.002']]
-    bones['lid.T.R.003'] = bone.name
-    bone = arm.edit_bones.new('temple.L')
-    bone.head[:] = 0.0873, -0.0597, 1.9523
-    bone.tail[:] = 0.0926, -0.0625, 1.8738
-    bone.roll = -0.0913
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.L.002']]
-    bones['temple.L'] = bone.name
-    bone = arm.edit_bones.new('temple.R')
-    bone.head[:] = -0.0873, -0.0597, 1.9523
-    bone.tail[:] = -0.0926, -0.0625, 1.8738
-    bone.roll = 0.0913
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.R.002']]
-    bones['temple.R'] = bone.name
-    bone = arm.edit_bones.new('nose.L.001')
-    bone.head[:] = 0.0176, -0.1627, 1.8429
-    bone.tail[:] = 0.0000, -0.1965, 1.8450
-    bone.roll = 0.1070
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.L']]
-    bones['nose.L.001'] = bone.name
-    bone = arm.edit_bones.new('nose.R.001')
-    bone.head[:] = -0.0176, -0.1627, 1.8429
-    bone.tail[:] = -0.0000, -0.1965, 1.8450
-    bone.roll = -0.1070
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.R']]
-    bones['nose.R.001'] = bone.name
-    bone = arm.edit_bones.new('f_index.03.L')
-    bone.head[:] = 0.7840, -0.0003, 1.1858
-    bone.tail[:] = 0.7892, 0.0006, 1.1636
-    bone.roll = -1.6760
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.02.L']]
-    bones['f_index.03.L'] = bone.name
-    bone = arm.edit_bones.new('thumb.03.L')
-    bone.head[:] = 0.7056, -0.0057, 1.2145
-    bone.tail[:] = 0.7194, -0.0098, 1.1995
-    bone.roll = -0.5826
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.02.L']]
-    bones['thumb.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_middle.03.L')
-    bone.head[:] = 0.7851, 0.0218, 1.1749
-    bone.tail[:] = 0.7888, 0.0216, 1.1525
-    bone.roll = -1.7483
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.02.L']]
-    bones['f_middle.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_ring.03.L')
-    bone.head[:] = 0.7794, 0.0494, 1.1762
-    bone.tail[:] = 0.7781, 0.0498, 1.1577
-    bone.roll = -1.6582
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.02.L']]
-    bones['f_ring.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.03.L')
-    bone.head[:] = 0.7618, 0.0770, 1.1932
-    bone.tail[:] = 0.7611, 0.0772, 1.1782
-    bone.roll = -1.7639
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.02.L']]
-    bones['f_pinky.03.L'] = bone.name
-    bone = arm.edit_bones.new('f_index.03.R')
-    bone.head[:] = -0.7840, -0.0003, 1.1858
-    bone.tail[:] = -0.7892, 0.0006, 1.1636
-    bone.roll = 1.6760
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_index.02.R']]
-    bones['f_index.03.R'] = bone.name
-    bone = arm.edit_bones.new('thumb.03.R')
-    bone.head[:] = -0.7056, -0.0057, 1.2145
-    bone.tail[:] = -0.7194, -0.0098, 1.1995
-    bone.roll = 0.5826
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thumb.02.R']]
-    bones['thumb.03.R'] = bone.name
-    bone = arm.edit_bones.new('f_middle.03.R')
-    bone.head[:] = -0.7851, 0.0218, 1.1749
-    bone.tail[:] = -0.7888, 0.0216, 1.1525
-    bone.roll = 1.7483
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_middle.02.R']]
-    bones['f_middle.03.R'] = bone.name
-    bone = arm.edit_bones.new('f_ring.03.R')
-    bone.head[:] = -0.7794, 0.0494, 1.1762
-    bone.tail[:] = -0.7781, 0.0498, 1.1577
-    bone.roll = 1.6582
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_ring.02.R']]
-    bones['f_ring.03.R'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.03.R')
-    bone.head[:] = -0.7618, 0.0770, 1.1932
-    bone.tail[:] = -0.7611, 0.0772, 1.1782
-    bone.roll = 1.7639
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.02.R']]
-    bones['f_pinky.03.R'] = bone.name
-    bone = arm.edit_bones.new('nose.004')
-    bone.head[:] = 0.0000, -0.1706, 1.8393
-    bone.tail[:] = 0.0000, -0.1698, 1.8244
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.003']]
-    bones['nose.004'] = bone.name
-    bone = arm.edit_bones.new('ear.L.004')
-    bone.head[:] = 0.1010, -0.0347, 1.8422
-    bone.tail[:] = 0.0919, -0.0309, 1.8622
-    bone.roll = 0.1518
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L.003']]
-    bones['ear.L.004'] = bone.name
-    bone = arm.edit_bones.new('ear.R.004')
-    bone.head[:] = -0.1010, -0.0347, 1.8422
-    bone.tail[:] = -0.0919, -0.0309, 1.8622
-    bone.roll = -0.1518
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R.003']]
-    bones['ear.R.004'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L')
-    bone.head[:] = 0.0262, -0.1418, 1.8891
-    bone.tail[:] = 0.0393, -0.1425, 1.8854
-    bone.roll = 0.0756
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L.003']]
-    bones['lid.B.L'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R')
-    bone.head[:] = -0.0262, -0.1418, 1.8891
-    bone.tail[:] = -0.0393, -0.1425, 1.8854
-    bone.roll = -0.0756
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R.003']]
-    bones['lid.B.R'] = bone.name
-    bone = arm.edit_bones.new('jaw.L')
-    bone.head[:] = 0.0926, -0.0625, 1.8738
-    bone.tail[:] = 0.0783, -0.0689, 1.7975
-    bone.roll = -0.0899
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['temple.L']]
-    bones['jaw.L'] = bone.name
-    bone = arm.edit_bones.new('jaw.R')
-    bone.head[:] = -0.0926, -0.0625, 1.8738
-    bone.tail[:] = -0.0783, -0.0689, 1.7975
-    bone.roll = 0.0899
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['temple.R']]
-    bones['jaw.R'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L.001')
-    bone.head[:] = 0.0393, -0.1425, 1.8854
-    bone.tail[:] = 0.0553, -0.1418, 1.8833
-    bone.roll = 0.1015
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.L']]
-    bones['lid.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R.001')
-    bone.head[:] = -0.0393, -0.1425, 1.8854
-    bone.tail[:] = -0.0553, -0.1418, 1.8833
-    bone.roll = -0.1015
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.R']]
-    bones['lid.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('jaw.L.001')
-    bone.head[:] = 0.0783, -0.0689, 1.7975
-    bone.tail[:] = 0.0387, -0.1315, 1.7536
-    bone.roll = 0.1223
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.L']]
-    bones['jaw.L.001'] = bone.name
-    bone = arm.edit_bones.new('jaw.R.001')
-    bone.head[:] = -0.0783, -0.0689, 1.7975
-    bone.tail[:] = -0.0387, -0.1315, 1.7536
-    bone.roll = -0.1223
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.R']]
-    bones['jaw.R.001'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L.002')
-    bone.head[:] = 0.0553, -0.1418, 1.8833
-    bone.tail[:] = 0.0694, -0.1351, 1.8889
-    bone.roll = -0.0748
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.L.001']]
-    bones['lid.B.L.002'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R.002')
-    bone.head[:] = -0.0553, -0.1418, 1.8833
-    bone.tail[:] = -0.0694, -0.1351, 1.8889
-    bone.roll = 0.0748
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.R.001']]
-    bones['lid.B.R.002'] = bone.name
-    bone = arm.edit_bones.new('chin.L')
-    bone.head[:] = 0.0387, -0.1315, 1.7536
-    bone.tail[:] = 0.0352, -0.1494, 1.8074
-    bone.roll = -0.2078
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.L.001']]
-    bones['chin.L'] = bone.name
-    bone = arm.edit_bones.new('chin.R')
-    bone.head[:] = -0.0387, -0.1315, 1.7536
-    bone.tail[:] = -0.0352, -0.1494, 1.8074
-    bone.roll = 0.2078
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.R.001']]
-    bones['chin.R'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L.003')
-    bone.head[:] = 0.0694, -0.1351, 1.8889
-    bone.tail[:] = 0.0768, -0.1218, 1.8947
-    bone.roll = -0.0085
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.L.002']]
-    bones['lid.B.L.003'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R.003')
-    bone.head[:] = -0.0694, -0.1351, 1.8889
-    bone.tail[:] = -0.0768, -0.1218, 1.8947
-    bone.roll = 0.0085
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.R.002']]
-    bones['lid.B.R.003'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.L')
-    bone.head[:] = 0.0352, -0.1494, 1.8074
-    bone.tail[:] = 0.0736, -0.1216, 1.8243
-    bone.roll = 0.0015
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['chin.L']]
-    bones['cheek.B.L'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.R')
-    bone.head[:] = -0.0352, -0.1494, 1.8074
-    bone.tail[:] = -0.0736, -0.1216, 1.8243
-    bone.roll = -0.0015
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['chin.R']]
-    bones['cheek.B.R'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.L.001')
-    bone.head[:] = 0.0736, -0.1216, 1.8243
-    bone.tail[:] = 0.0848, -0.0940, 1.8870
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.L']]
-    bones['cheek.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.R.001')
-    bone.head[:] = -0.0736, -0.1216, 1.8243
-    bone.tail[:] = -0.0848, -0.0940, 1.8870
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.R']]
-    bones['cheek.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L')
-    bone.head[:] = 0.0848, -0.0940, 1.8870
-    bone.tail[:] = 0.0830, -0.1213, 1.9164
-    bone.roll = 0.1990
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.L.001']]
-    bones['brow.T.L'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R')
-    bone.head[:] = -0.0848, -0.0940, 1.8870
-    bone.tail[:] = -0.0830, -0.1213, 1.9164
-    bone.roll = -0.1990
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.R.001']]
-    bones['brow.T.R'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L.001')
-    bone.head[:] = 0.0830, -0.1213, 1.9164
-    bone.tail[:] = 0.0588, -0.1421, 1.9255
-    bone.roll = 0.2372
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.L']]
-    bones['brow.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R.001')
-    bone.head[:] = -0.0830, -0.1213, 1.9164
-    bone.tail[:] = -0.0588, -0.1421, 1.9255
-    bone.roll = -0.2372
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.R']]
-    bones['brow.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L.002')
-    bone.head[:] = 0.0588, -0.1421, 1.9255
-    bone.tail[:] = 0.0215, -0.1546, 1.9144
-    bone.roll = 0.0724
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.L.001']]
-    bones['brow.T.L.002'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R.002')
-    bone.head[:] = -0.0588, -0.1421, 1.9255
-    bone.tail[:] = -0.0215, -0.1546, 1.9144
-    bone.roll = -0.0724
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.R.001']]
-    bones['brow.T.R.002'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L.003')
-    bone.head[:] = 0.0215, -0.1546, 1.9144
-    bone.tail[:] = 0.0000, -0.1536, 1.8978
-    bone.roll = -0.0423
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.L.002']]
-    bones['brow.T.L.003'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R.003')
-    bone.head[:] = -0.0215, -0.1546, 1.9144
-    bone.tail[:] = 0.0000, -0.1536, 1.8978
-    bone.roll = 0.0423
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.R.002']]
-    bones['brow.T.R.003'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['spine']]
-    pbone.rigify_type = 'pitchipoy.super_torso_turbo'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.chain_bone_controls = "1, 2, 3"
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.neck_pos = 5
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['spine.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['pelvis.L']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.make_control = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['pelvis.R']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.make_control = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['thigh.L']]
-    pbone.rigify_type = 'pitchipoy.limbs.super_limb'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.limb_type = "leg"
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['thigh.R']]
-    pbone.rigify_type = 'pitchipoy.limbs.super_limb'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.limb_type = "leg"
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['spine.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shin.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shin.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['spine.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['foot.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['foot.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['spine.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shoulder.L']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['shoulder.R']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['breast.L']]
-    pbone.rigify_type = 'pitchipoy.super_copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['breast.R']]
-    pbone.rigify_type = 'pitchipoy.super_copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['toe.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['heel.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['toe.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['heel.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['spine.005']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['upper_arm.L']]
-    pbone.rigify_type = 'pitchipoy.limbs.super_limb'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['upper_arm.R']]
-    pbone.rigify_type = 'pitchipoy.limbs.super_limb'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['spine.006']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forearm.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forearm.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['face']]
-    pbone.rigify_type = 'pitchipoy.super_face'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.secondary_layers = [False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['hand.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['hand.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['jaw']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forehead.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forehead.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['eye.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['eye.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['teeth.T']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['teeth.B']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['tongue']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.01.L']]
-    pbone.rigify_type = 'pitchipoy.super_palm'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.04.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.01.R']]
-    pbone.rigify_type = 'pitchipoy.super_palm'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['palm.04.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['chin']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lip.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forehead.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forehead.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['tongue.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.01.L']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['thumb.01.L']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_middle.01.L']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_ring.01.L']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_pinky.01.L']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_index.01.R']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['thumb.01.R']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_middle.01.R']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_ring.01.R']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_pinky.01.R']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['nose.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['chin.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forehead.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['forehead.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['tongue.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.02.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.B.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.T.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['temple.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['temple.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_index.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['thumb.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_middle.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_ring.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['f_pinky.03.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['nose.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.L.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['ear.R.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['jaw.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['jaw.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['jaw.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['jaw.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['chin.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['chin.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['lid.B.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['cheek.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    pbone = obj.pose.bones[bones['brow.T.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
-
-    arm.layers = [(x in [0, 3, 5, 7, 10, 13, 16]) for x in range(32)]
-
-if __name__ == "__main__":
-    create(bpy.context.active_object)
diff --git a/rigify/legacy/rig_lists.py b/rigify/legacy/rig_lists.py
deleted file mode 100644
index 8de8528e6a9a9577170f422e8773bedd7dd1d7b1..0000000000000000000000000000000000000000
--- a/rigify/legacy/rig_lists.py
+++ /dev/null
@@ -1,78 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-import os
-
-from . import utils
-
-
-def get_rig_list(path):
-    """ Recursively searches for rig types, and returns a list.
-    """
-    rigs = []
-    MODULE_DIR = os.path.dirname(__file__)
-    RIG_DIR_ABS = os.path.join(MODULE_DIR, utils.RIG_DIR)
-    SEARCH_DIR_ABS = os.path.join(RIG_DIR_ABS, path)
-    files = os.listdir(SEARCH_DIR_ABS)
-    files.sort()
-
-    for f in files:
-        is_dir = os.path.isdir(os.path.join(SEARCH_DIR_ABS, f))  # Whether the file is a directory
-
-        # Stop cases
-        if f[0] in [".", "_"]:
-            continue
-        if f.count(".") >= 2 or (is_dir and "." in f):
-            print("Warning: %r, filename contains a '.', skipping" % os.path.join(SEARCH_DIR_ABS, f))
-            continue
-
-        if is_dir:
-            # Check directories
-            module_name = os.path.join(path, f).replace(os.sep, ".")
-            rig = utils.get_rig_type(module_name)
-            # Check if it's a rig itself
-            if hasattr(rig, "Rig"):
-                rigs += [f]
-            else:
-                # Check for sub-rigs
-                ls = get_rig_list(os.path.join(path, f, ""))  # "" adds a final slash
-                rigs.extend(["%s.%s" % (f, l) for l in ls])
-        elif f.endswith(".py"):
-            # Check straight-up python files
-            t = f[:-3]
-            module_name = os.path.join(path, t).replace(os.sep, ".")
-            rig = utils.get_rig_type(module_name)
-            if hasattr(rig, "Rig"):
-                rigs += [t]
-    rigs.sort()
-    return rigs
-
-
-def get_collection_list(rig_list):
-    collection_list = []
-    for r in rig_list:
-        a = r.split(".")
-        if len(a) >= 2 and a[0] not in collection_list:
-            collection_list += [a[0]]
-    return collection_list
-
-
-# Public variables
-rig_list = get_rig_list("")
-collection_list = get_collection_list(rig_list)
-col_enum_list = [("All", "All", ""), ("None", "None", "")] + [(c, c, "") for c in collection_list]
diff --git a/rigify/legacy/rig_ui_pitchipoy_template.py b/rigify/legacy/rig_ui_pitchipoy_template.py
deleted file mode 100644
index 3fc50767c1082c8631fc1cce4c9c2ae5a3285336..0000000000000000000000000000000000000000
--- a/rigify/legacy/rig_ui_pitchipoy_template.py
+++ /dev/null
@@ -1,743 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-UI_P_SLIDERS = '''
-import bpy
-from mathutils import Matrix, Vector
-from math import acos, pi, radians
-
-rig_id = "%s"
-
-
-############################
-## Math utility functions ##
-############################
-
-def perpendicular_vector(v):
-    """ Returns a vector that is perpendicular to the one given.
-        The returned vector is _not_ guaranteed to be normalized.
-    """
-    # Create a vector that is not aligned with v.
-    # It doesn't matter what vector.  Just any vector
-    # that's guaranteed to not be pointing in the same
-    # direction.
-    if abs(v[0]) < abs(v[1]):
-        tv = Vector((1,0,0))
-    else:
-        tv = Vector((0,1,0))
-
-    # Use cross prouct to generate a vector perpendicular to
-    # both tv and (more importantly) v.
-    return v.cross(tv)
-
-
-def rotation_difference(mat1, mat2):
-    """ Returns the shortest-path rotational difference between two
-        matrices.
-    """
-    q1 = mat1.to_quaternion()
-    q2 = mat2.to_quaternion()
-    angle = acos(min(1,max(-1,q1.dot(q2)))) * 2
-    if angle > pi:
-        angle = -angle + (2*pi)
-    return angle
-
-def tail_distance(angle,bone_ik,bone_fk):
-    """ Returns the distance between the tails of two bones
-        after rotating bone_ik in AXIS_ANGLE mode.
-    """
-    rot_mod=bone_ik.rotation_mode
-    if rot_mod != 'AXIS_ANGLE':
-        bone_ik.rotation_mode = 'AXIS_ANGLE'
-    bone_ik.rotation_axis_angle[0] = angle
-    bpy.context.view_layer.update()
-
-    dv = (bone_fk.tail - bone_ik.tail).length
-
-    bone_ik.rotation_mode = rot_mod
-    return dv
-
-def find_min_range(bone_ik,bone_fk,f=tail_distance,delta=pi/8):
-    """ finds the range where lies the minimum of function f applied on bone_ik and bone_fk
-        at a certain angle.
-    """
-    rot_mod=bone_ik.rotation_mode
-    if rot_mod != 'AXIS_ANGLE':
-        bone_ik.rotation_mode = 'AXIS_ANGLE'
-
-    start_angle = bone_ik.rotation_axis_angle[0]
-    angle = start_angle
-    while (angle > (start_angle - 2*pi)) and (angle < (start_angle + 2*pi)):
-        l_dist = f(angle-delta,bone_ik,bone_fk)
-        c_dist = f(angle,bone_ik,bone_fk)
-        r_dist = f(angle+delta,bone_ik,bone_fk)
-        if min((l_dist,c_dist,r_dist)) == c_dist:
-            bone_ik.rotation_mode = rot_mod
-            return (angle-delta,angle+delta)
-        else:
-            angle=angle+delta
-
-def ternarySearch(f, left, right, bone_ik, bone_fk, absolutePrecision):
-    """
-    Find minimum of unimodal function f() within [left, right]
-    To find the maximum, revert the if/else statement or revert the comparison.
-    """
-    while True:
-        #left and right are the current bounds; the maximum is between them
-        if abs(right - left) < absolutePrecision:
-            return (left + right)/2
-
-        leftThird = left + (right - left)/3
-        rightThird = right - (right - left)/3
-
-        if f(leftThird, bone_ik, bone_fk) > f(rightThird, bone_ik, bone_fk):
-            left = leftThird
-        else:
-            right = rightThird
-
-#########################################
-## "Visual Transform" helper functions ##
-#########################################
-
-def get_pose_matrix_in_other_space(mat, pose_bone):
-    """ Returns the transform matrix relative to pose_bone's current
-        transform space.  In other words, presuming that mat is in
-        armature space, slapping the returned matrix onto pose_bone
-        should give it the armature-space transforms of mat.
-        TODO: try to handle cases with axis-scaled parents better.
-    """
-    rest = pose_bone.bone.matrix_local.copy()
-    rest_inv = rest.inverted()
-    if pose_bone.parent:
-        par_mat = pose_bone.parent.matrix.copy()
-        par_inv = par_mat.inverted()
-        par_rest = pose_bone.parent.bone.matrix_local.copy()
-    else:
-        par_mat = Matrix()
-        par_inv = Matrix()
-        par_rest = Matrix()
-
-    # Get matrix in bone's current transform space
-    smat = rest_inv @ (par_rest @ (par_inv @ mat))
-
-    # Compensate for non-local location
-    #if not pose_bone.bone.use_local_location:
-    #    loc = smat.to_translation() @ (par_rest.inverted() @ rest).to_quaternion()
-    #    smat.translation = loc
-
-    return smat
-
-
-def get_local_pose_matrix(pose_bone):
-    """ Returns the local transform matrix of the given pose bone.
-    """
-    return get_pose_matrix_in_other_space(pose_bone.matrix, pose_bone)
-
-
-def set_pose_translation(pose_bone, mat):
-    """ Sets the pose bone's translation to the same translation as the given matrix.
-        Matrix should be given in bone's local space.
-    """
-    if pose_bone.bone.use_local_location == True:
-        pose_bone.location = mat.to_translation()
-    else:
-        loc = mat.to_translation()
-
-        rest = pose_bone.bone.matrix_local.copy()
-        if pose_bone.bone.parent:
-            par_rest = pose_bone.bone.parent.matrix_local.copy()
-        else:
-            par_rest = Matrix()
-
-        q = (par_rest.inverted() @ rest).to_quaternion()
-        pose_bone.location = q @ loc
-
-
-def set_pose_rotation(pose_bone, mat):
-    """ Sets the pose bone's rotation to the same rotation as the given matrix.
-        Matrix should be given in bone's local space.
-    """
-    q = mat.to_quaternion()
-
-    if pose_bone.rotation_mode == 'QUATERNION':
-        pose_bone.rotation_quaternion = q
-    elif pose_bone.rotation_mode == 'AXIS_ANGLE':
-        pose_bone.rotation_axis_angle[0] = q.angle
-        pose_bone.rotation_axis_angle[1] = q.axis[0]
-        pose_bone.rotation_axis_angle[2] = q.axis[1]
-        pose_bone.rotation_axis_angle[3] = q.axis[2]
-    else:
-        pose_bone.rotation_euler = q.to_euler(pose_bone.rotation_mode)
-
-
-def set_pose_scale(pose_bone, mat):
-    """ Sets the pose bone's scale to the same scale as the given matrix.
-        Matrix should be given in bone's local space.
-    """
-    pose_bone.scale = mat.to_scale()
-
-
-def match_pose_translation(pose_bone, target_bone):
-    """ Matches pose_bone's visual translation to target_bone's visual
-        translation.
-        This function assumes you are in pose mode on the relevant armature.
-    """
-    mat = get_pose_matrix_in_other_space(target_bone.matrix, pose_bone)
-    set_pose_translation(pose_bone, mat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-
-def match_pose_rotation(pose_bone, target_bone):
-    """ Matches pose_bone's visual rotation to target_bone's visual
-        rotation.
-        This function assumes you are in pose mode on the relevant armature.
-    """
-    mat = get_pose_matrix_in_other_space(target_bone.matrix, pose_bone)
-    set_pose_rotation(pose_bone, mat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-
-def match_pose_scale(pose_bone, target_bone):
-    """ Matches pose_bone's visual scale to target_bone's visual
-        scale.
-        This function assumes you are in pose mode on the relevant armature.
-    """
-    mat = get_pose_matrix_in_other_space(target_bone.matrix, pose_bone)
-    set_pose_scale(pose_bone, mat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-def correct_rotation(bone_ik, bone_fk):
-    """ Corrects the ik rotation in ik2fk snapping functions
-    """
-
-    alfarange = find_min_range(bone_ik,bone_fk)
-    alfamin = ternarySearch(tail_distance,alfarange[0],alfarange[1],bone_ik,bone_fk,0.1)
-
-    rot_mod = bone_ik.rotation_mode
-    if rot_mod != 'AXIS_ANGLE':
-        bone_ik.rotation_mode = 'AXIS_ANGLE'
-    bone_ik.rotation_axis_angle[0] = alfamin
-    bone_ik.rotation_mode = rot_mod
-
-##############################
-## IK/FK snapping functions ##
-##############################
-
-def match_pole_target(ik_first, ik_last, pole, match_bone, length):
-    """ Places an IK chain's pole target to match ik_first's
-        transforms to match_bone.  All bones should be given as pose bones.
-        You need to be in pose mode on the relevant armature object.
-        ik_first: first bone in the IK chain
-        ik_last:  last bone in the IK chain
-        pole:  pole target bone for the IK chain
-        match_bone:  bone to match ik_first to (probably first bone in a matching FK chain)
-        length:  distance pole target should be placed from the chain center
-    """
-    a = ik_first.matrix.to_translation()
-    b = ik_last.matrix.to_translation() + ik_last.vector
-
-    # Vector from the head of ik_first to the
-    # tip of ik_last
-    ikv = b - a
-
-    # Get a vector perpendicular to ikv
-    pv = perpendicular_vector(ikv).normalized() * length
-
-    def set_pole(pvi):
-        """ Set pole target's position based on a vector
-            from the arm center line.
-        """
-        # Translate pvi into armature space
-        ploc = a + (ikv/2) + pvi
-
-        # Set pole target to location
-        mat = get_pose_matrix_in_other_space(Matrix.Translation(ploc), pole)
-        set_pose_translation(pole, mat)
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-        bpy.ops.object.mode_set(mode='POSE')
-
-    set_pole(pv)
-
-    # Get the rotation difference between ik_first and match_bone
-    angle = rotation_difference(ik_first.matrix, match_bone.matrix)
-
-    # Try compensating for the rotation difference in both directions
-    pv1 = Matrix.Rotation(angle, 4, ikv) @ pv
-    set_pole(pv1)
-    ang1 = rotation_difference(ik_first.matrix, match_bone.matrix)
-
-    pv2 = Matrix.Rotation(-angle, 4, ikv) @ pv
-    set_pole(pv2)
-    ang2 = rotation_difference(ik_first.matrix, match_bone.matrix)
-
-    # Do the one with the smaller angle
-    if ang1 < ang2:
-        set_pole(pv1)
-
-
-def fk2ik_arm(obj, fk, ik):
-    """ Matches the fk bones in an arm rig to the ik bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    uarm  = obj.pose.bones[fk[0]]
-    farm  = obj.pose.bones[fk[1]]
-    hand  = obj.pose.bones[fk[2]]
-    uarmi = obj.pose.bones[ik[0]]
-    farmi = obj.pose.bones[ik[1]]
-    handi = obj.pose.bones[ik[2]]
-
-    if 'auto_stretch' in handi.keys():
-        # Stretch
-        if handi['auto_stretch'] == 0.0:
-            uarm['stretch_length'] = handi['stretch_length']
-        else:
-            diff = (uarmi.vector.length + farmi.vector.length) / (uarm.vector.length + farm.vector.length)
-            uarm['stretch_length'] *= diff
-
-        # Upper arm position
-        match_pose_rotation(uarm, uarmi)
-        match_pose_scale(uarm, uarmi)
-
-        # Forearm position
-        match_pose_rotation(farm, farmi)
-        match_pose_scale(farm, farmi)
-
-        # Hand position
-        match_pose_rotation(hand, handi)
-        match_pose_scale(hand, handi)
-    else:
-        # Upper arm position
-        match_pose_translation(uarm, uarmi)
-        match_pose_rotation(uarm, uarmi)
-        match_pose_scale(uarm, uarmi)
-
-        # Forearm position
-        #match_pose_translation(hand, handi)
-        match_pose_rotation(farm, farmi)
-        match_pose_scale(farm, farmi)
-
-        # Hand position
-        match_pose_translation(hand, handi)
-        match_pose_rotation(hand, handi)
-        match_pose_scale(hand, handi)
-
-
-def ik2fk_arm(obj, fk, ik):
-    """ Matches the ik bones in an arm rig to the fk bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    uarm  = obj.pose.bones[fk[0]]
-    farm  = obj.pose.bones[fk[1]]
-    hand  = obj.pose.bones[fk[2]]
-    uarmi = obj.pose.bones[ik[0]]
-    farmi = obj.pose.bones[ik[1]]
-    handi = obj.pose.bones[ik[2]]
-    if ik[3] != "":
-        pole  = obj.pose.bones[ik[3]]
-    else:
-        pole = None
-
-
-    if pole:
-        # Stretch
-        handi['stretch_length'] = uarm['stretch_length']
-
-        # Hand position
-        match_pose_translation(handi, hand)
-        match_pose_rotation(handi, hand)
-        match_pose_scale(handi, hand)
-
-        # Pole target position
-        match_pole_target(uarmi, farmi, pole, uarm, (uarmi.length + farmi.length))
-
-    else:
-        # Hand position
-        match_pose_translation(handi, hand)
-        match_pose_rotation(handi, hand)
-        match_pose_scale(handi, hand)
-
-        # Upper Arm position
-        match_pose_translation(uarmi, uarm)
-        match_pose_rotation(uarmi, uarm)
-        match_pose_scale(uarmi, uarm)
-
-        # Rotation Correction
-        correct_rotation(uarmi, uarm)
-
-def fk2ik_leg(obj, fk, ik):
-    """ Matches the fk bones in a leg rig to the ik bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    thigh  = obj.pose.bones[fk[0]]
-    shin   = obj.pose.bones[fk[1]]
-    foot   = obj.pose.bones[fk[2]]
-    mfoot  = obj.pose.bones[fk[3]]
-    thighi = obj.pose.bones[ik[0]]
-    shini  = obj.pose.bones[ik[1]]
-    footi  = obj.pose.bones[ik[2]]
-    mfooti = obj.pose.bones[ik[3]]
-
-    if 'auto_stretch' in footi.keys():
-        # Stretch
-        if footi['auto_stretch'] == 0.0:
-            thigh['stretch_length'] = footi['stretch_length']
-        else:
-            diff = (thighi.vector.length + shini.vector.length) / (thigh.vector.length + shin.vector.length)
-            thigh['stretch_length'] *= diff
-
-        # Thigh position
-        match_pose_rotation(thigh, thighi)
-        match_pose_scale(thigh, thighi)
-
-        # Shin position
-        match_pose_rotation(shin, shini)
-        match_pose_scale(shin, shini)
-
-        # Foot position
-        mat = mfoot.bone.matrix_local.inverted() @ foot.bone.matrix_local
-        footmat = get_pose_matrix_in_other_space(mfooti.matrix, foot) @ mat
-        set_pose_rotation(foot, footmat)
-        set_pose_scale(foot, footmat)
-        bpy.ops.object.mode_set(mode='OBJECT')
-        bpy.ops.object.mode_set(mode='POSE')
-
-    else:
-        # Thigh position
-        match_pose_translation(thigh, thighi)
-        match_pose_rotation(thigh, thighi)
-        match_pose_scale(thigh, thighi)
-
-        # Shin position
-        match_pose_rotation(shin, shini)
-        match_pose_scale(shin, shini)
-
-        # Foot position
-        mat = mfoot.bone.matrix_local.inverted() @ foot.bone.matrix_local
-        footmat = get_pose_matrix_in_other_space(mfooti.matrix, foot) @ mat
-        set_pose_rotation(foot, footmat)
-        set_pose_scale(foot, footmat)
-        bpy.ops.object.mode_set(mode='OBJECT')
-        bpy.ops.object.mode_set(mode='POSE')
-
-
-def ik2fk_leg(obj, fk, ik):
-    """ Matches the ik bones in a leg rig to the fk bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    thigh    = obj.pose.bones[fk[0]]
-    shin     = obj.pose.bones[fk[1]]
-    mfoot    = obj.pose.bones[fk[2]]
-    if fk[3] != "":
-        foot      = obj.pose.bones[fk[3]]
-    else:
-        foot = None
-    thighi   = obj.pose.bones[ik[0]]
-    shini    = obj.pose.bones[ik[1]]
-    footi    = obj.pose.bones[ik[2]]
-    footroll = obj.pose.bones[ik[3]]
-    if ik[4] != "":
-        pole     = obj.pose.bones[ik[4]]
-    else:
-        pole = None
-    mfooti   = obj.pose.bones[ik[5]]
-
-    if (not pole) and (foot):
-        # Stretch
-        #footi['stretch_length'] = thigh['stretch_length']
-
-        # Clear footroll
-        set_pose_rotation(footroll, Matrix())
-
-        # Foot position
-        mat = mfooti.bone.matrix_local.inverted() @ footi.bone.matrix_local
-        footmat = get_pose_matrix_in_other_space(foot.matrix, footi) @ mat
-        set_pose_translation(footi, footmat)
-        set_pose_rotation(footi, footmat)
-        set_pose_scale(footi, footmat)
-        bpy.ops.object.mode_set(mode='OBJECT')
-        bpy.ops.object.mode_set(mode='POSE')
-
-        # Thigh position
-        match_pose_translation(thighi, thigh)
-        match_pose_rotation(thighi, thigh)
-        match_pose_scale(thighi, thigh)
-
-        # Rotation Correction
-        correct_rotation(thighi,thigh)
-
-        # Pole target position
-        #match_pole_target(thighi, shini, pole, thigh, (thighi.length + shini.length))
-
-    else:
-        # Stretch
-        footi['stretch_length'] = thigh['stretch_length']
-
-        # Clear footroll
-        set_pose_rotation(footroll, Matrix())
-
-        # Foot position
-        mat = mfooti.bone.matrix_local.inverted() @ footi.bone.matrix_local
-        footmat = get_pose_matrix_in_other_space(mfoot.matrix, footi) @ mat
-        set_pose_translation(footi, footmat)
-        set_pose_rotation(footi, footmat)
-        set_pose_scale(footi, footmat)
-        bpy.ops.object.mode_set(mode='OBJECT')
-        bpy.ops.object.mode_set(mode='POSE')
-
-        # Pole target position
-        match_pole_target(thighi, shini, pole, thigh, (thighi.length + shini.length))
-
-
-##############################
-## IK/FK snapping operators ##
-##############################
-
-class Rigify_Arm_FK2IK(bpy.types.Operator):
-    """ Snaps an FK arm to an IK arm.
-    """
-    bl_idname = "pose.rigify_arm_fk2ik_" + rig_id
-    bl_label = "Rigify Snap FK arm to IK"
-    bl_options = {'UNDO'}
-
-    uarm_fk: bpy.props.StringProperty(name="Upper Arm FK Name")
-    farm_fk: bpy.props.StringProperty(name="Forerm FK Name")
-    hand_fk: bpy.props.StringProperty(name="Hand FK Name")
-
-    uarm_ik: bpy.props.StringProperty(name="Upper Arm IK Name")
-    farm_ik: bpy.props.StringProperty(name="Forearm IK Name")
-    hand_ik: bpy.props.StringProperty(name="Hand IK Name")
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object != None and context.mode == 'POSE')
-
-    def execute(self, context):
-        fk2ik_arm(context.active_object, fk=[self.uarm_fk, self.farm_fk, self.hand_fk], ik=[self.uarm_ik, self.farm_ik, self.hand_ik])
-        return {'FINISHED'}
-
-
-class Rigify_Arm_IK2FK(bpy.types.Operator):
-    """ Snaps an IK arm to an FK arm.
-    """
-    bl_idname = "pose.rigify_arm_ik2fk_" + rig_id
-    bl_label = "Rigify Snap IK arm to FK"
-    bl_options = {'UNDO'}
-
-    uarm_fk: bpy.props.StringProperty(name="Upper Arm FK Name")
-    farm_fk: bpy.props.StringProperty(name="Forerm FK Name")
-    hand_fk: bpy.props.StringProperty(name="Hand FK Name")
-
-    uarm_ik: bpy.props.StringProperty(name="Upper Arm IK Name")
-    farm_ik: bpy.props.StringProperty(name="Forearm IK Name")
-    hand_ik: bpy.props.StringProperty(name="Hand IK Name")
-    pole:    bpy.props.StringProperty(name="Pole IK Name")
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object != None and context.mode == 'POSE')
-
-    def execute(self, context):
-        ik2fk_arm(context.active_object, fk=[self.uarm_fk, self.farm_fk, self.hand_fk], ik=[self.uarm_ik, self.farm_ik, self.hand_ik, self.pole])
-        return {'FINISHED'}
-
-
-class Rigify_Leg_FK2IK(bpy.types.Operator):
-    """ Snaps an FK leg to an IK leg.
-    """
-    bl_idname = "pose.rigify_leg_fk2ik_" + rig_id
-    bl_label = "Rigify Snap FK leg to IK"
-    bl_options = {'UNDO'}
-
-    thigh_fk: bpy.props.StringProperty(name="Thigh FK Name")
-    shin_fk:  bpy.props.StringProperty(name="Shin FK Name")
-    foot_fk:  bpy.props.StringProperty(name="Foot FK Name")
-    mfoot_fk: bpy.props.StringProperty(name="MFoot FK Name")
-
-    thigh_ik: bpy.props.StringProperty(name="Thigh IK Name")
-    shin_ik:  bpy.props.StringProperty(name="Shin IK Name")
-    foot_ik:  bpy.props.StringProperty(name="Foot IK Name")
-    mfoot_ik: bpy.props.StringProperty(name="MFoot IK Name")
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object != None and context.mode == 'POSE')
-
-    def execute(self, context):
-        fk2ik_leg(context.active_object, fk=[self.thigh_fk, self.shin_fk, self.foot_fk, self.mfoot_fk], ik=[self.thigh_ik, self.shin_ik, self.foot_ik, self.mfoot_ik])
-        return {'FINISHED'}
-
-
-class Rigify_Leg_IK2FK(bpy.types.Operator):
-    """ Snaps an IK leg to an FK leg.
-    """
-    bl_idname = "pose.rigify_leg_ik2fk_" + rig_id
-    bl_label = "Rigify Snap IK leg to FK"
-    bl_options = {'UNDO'}
-
-    thigh_fk: bpy.props.StringProperty(name="Thigh FK Name")
-    shin_fk:  bpy.props.StringProperty(name="Shin FK Name")
-    mfoot_fk: bpy.props.StringProperty(name="MFoot FK Name")
-    foot_fk:  bpy.props.StringProperty(name="Foot FK Name")
-    thigh_ik: bpy.props.StringProperty(name="Thigh IK Name")
-    shin_ik:  bpy.props.StringProperty(name="Shin IK Name")
-    foot_ik:  bpy.props.StringProperty(name="Foot IK Name")
-    footroll: bpy.props.StringProperty(name="Foot Roll Name")
-    pole:     bpy.props.StringProperty(name="Pole IK Name")
-    mfoot_ik: bpy.props.StringProperty(name="MFoot IK Name")
-
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object != None and context.mode == 'POSE')
-
-    def execute(self, context):
-        ik2fk_leg(context.active_object, fk=[self.thigh_fk, self.shin_fk, self.mfoot_fk, self.foot_fk], ik=[self.thigh_ik, self.shin_ik, self.foot_ik, self.footroll, self.pole, self.mfoot_ik])
-        return {'FINISHED'}
-
-
-###################
-## Rig UI Panels ##
-###################
-
-class RigUI(bpy.types.Panel):
-    bl_space_type = 'VIEW_3D'
-    bl_region_type = 'UI'
-    bl_label = "Rig Main Properties"
-    bl_idname = "VIEW3D_PT_rig_ui_" + rig_id
-    bl_category = 'Item'
-
-    @classmethod
-    def poll(self, context):
-        if context.mode != 'POSE':
-            return False
-        try:
-            return (context.active_object.data.get("rig_id") == rig_id)
-        except (AttributeError, KeyError, TypeError):
-            return False
-
-    def draw(self, context):
-        layout = self.layout
-        pose_bones = context.active_object.pose.bones
-        try:
-            selected_bones = [bone.name for bone in context.selected_pose_bones]
-            selected_bones += [context.active_pose_bone.name]
-        except (AttributeError, TypeError):
-            return
-
-        def is_selected(names):
-            # Returns whether any of the named bones are selected.
-            if type(names) == list:
-                for name in names:
-                    if name in selected_bones:
-                        return True
-            elif names in selected_bones:
-                return True
-            return False
-
-
-'''
-
-
-def layers_P_ui(layers, layout):
-    """ Turn a list of booleans + a list of names into a layer UI.
-    """
-
-    code = '''
-class RigLayers(bpy.types.Panel):
-    bl_space_type = 'VIEW_3D'
-    bl_region_type = 'UI'
-    bl_label = "Rig Layers"
-    bl_idname = "VIEW3D_PT_rig_layers_" + rig_id
-    bl_category = 'Item'
-
-    @classmethod
-    def poll(self, context):
-        try:
-            return (context.active_object.data.get("rig_id") == rig_id)
-        except (AttributeError, KeyError, TypeError):
-            return False
-
-    def draw(self, context):
-        layout = self.layout
-        col = layout.column()
-'''
-    rows = {}
-    for i in range(28):
-        if layers[i]:
-            if layout[i][1] not in rows:
-                rows[layout[i][1]] = []
-            rows[layout[i][1]] += [(layout[i][0], i)]
-
-    keys = list(rows.keys())
-    keys.sort()
-
-    for key in keys:
-        code += "\n        row = col.row()\n"
-        i = 0
-        for l in rows[key]:
-            if i > 3:
-                code += "\n        row = col.row()\n"
-                i = 0
-            code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='%s')\n" % (str(l[1]), l[0])
-            i += 1
-
-    # Root layer
-    code += "\n        row = col.row()"
-    code += "\n        row.separator()"
-    code += "\n        row = col.row()"
-    code += "\n        row.separator()\n"
-    code += "\n        row = col.row()\n"
-    code += "        row.prop(context.active_object.data, 'layers', index=28, toggle=True, text='Root')\n"
-
-    return code
-
-
-UI_P_REGISTER = '''
-
-def register():
-    bpy.utils.register_class(Rigify_Arm_FK2IK)
-    bpy.utils.register_class(Rigify_Arm_IK2FK)
-    bpy.utils.register_class(Rigify_Leg_FK2IK)
-    bpy.utils.register_class(Rigify_Leg_IK2FK)
-    bpy.utils.register_class(RigUI)
-    bpy.utils.register_class(RigLayers)
-
-def unregister():
-    bpy.utils.unregister_class(Rigify_Arm_FK2IK)
-    bpy.utils.unregister_class(Rigify_Arm_IK2FK)
-    bpy.utils.unregister_class(Rigify_Leg_FK2IK)
-    bpy.utils.unregister_class(Rigify_Leg_IK2FK)
-    bpy.utils.unregister_class(RigUI)
-    bpy.utils.unregister_class(RigLayers)
-
-register()
-'''
diff --git a/rigify/legacy/rig_ui_template.py b/rigify/legacy/rig_ui_template.py
deleted file mode 100644
index db6ab4a145d9246467205d604d3a38da35ee6e63..0000000000000000000000000000000000000000
--- a/rigify/legacy/rig_ui_template.py
+++ /dev/null
@@ -1,590 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-UI_SLIDERS = '''
-import bpy
-from mathutils import Matrix, Vector
-from math import acos, pi
-
-rig_id = "%s"
-
-
-############################
-## Math utility functions ##
-############################
-
-def perpendicular_vector(v):
-    """ Returns a vector that is perpendicular to the one given.
-        The returned vector is _not_ guaranteed to be normalized.
-    """
-    # Create a vector that is not aligned with v.
-    # It doesn't matter what vector.  Just any vector
-    # that's guaranteed to not be pointing in the same
-    # direction.
-    if abs(v[0]) < abs(v[1]):
-        tv = Vector((1,0,0))
-    else:
-        tv = Vector((0,1,0))
-
-    # Use cross prouct to generate a vector perpendicular to
-    # both tv and (more importantly) v.
-    return v.cross(tv)
-
-
-def rotation_difference(mat1, mat2):
-    """ Returns the shortest-path rotational difference between two
-        matrices.
-    """
-    q1 = mat1.to_quaternion()
-    q2 = mat2.to_quaternion()
-    angle = acos(min(1,max(-1,q1.dot(q2)))) * 2
-    if angle > pi:
-        angle = -angle + (2*pi)
-    return angle
-
-
-#########################################
-## "Visual Transform" helper functions ##
-#########################################
-
-def get_pose_matrix_in_other_space(mat, pose_bone):
-    """ Returns the transform matrix relative to pose_bone's current
-        transform space.  In other words, presuming that mat is in
-        armature space, slapping the returned matrix onto pose_bone
-        should give it the armature-space transforms of mat.
-        TODO: try to handle cases with axis-scaled parents better.
-    """
-    rest = pose_bone.bone.matrix_local.copy()
-    rest_inv = rest.inverted()
-    if pose_bone.parent:
-        par_mat = pose_bone.parent.matrix.copy()
-        par_inv = par_mat.inverted()
-        par_rest = pose_bone.parent.bone.matrix_local.copy()
-    else:
-        par_mat = Matrix()
-        par_inv = Matrix()
-        par_rest = Matrix()
-
-    # Get matrix in bone's current transform space
-    smat = rest_inv @ (par_rest @ (par_inv @ mat))
-
-    # Compensate for non-local location
-    #if not pose_bone.bone.use_local_location:
-    #    loc = smat.to_translation() @ (par_rest.inverted() @ rest).to_quaternion()
-    #    smat.translation = loc
-
-    return smat
-
-
-def get_local_pose_matrix(pose_bone):
-    """ Returns the local transform matrix of the given pose bone.
-    """
-    return get_pose_matrix_in_other_space(pose_bone.matrix, pose_bone)
-
-
-def set_pose_translation(pose_bone, mat):
-    """ Sets the pose bone's translation to the same translation as the given matrix.
-        Matrix should be given in bone's local space.
-    """
-    if pose_bone.bone.use_local_location is True:
-        pose_bone.location = mat.to_translation()
-    else:
-        loc = mat.to_translation()
-
-        rest = pose_bone.bone.matrix_local.copy()
-        if pose_bone.bone.parent:
-            par_rest = pose_bone.bone.parent.matrix_local.copy()
-        else:
-            par_rest = Matrix()
-
-        q = (par_rest.inverted() @ rest).to_quaternion()
-        pose_bone.location = q @ loc
-
-
-def set_pose_rotation(pose_bone, mat):
-    """ Sets the pose bone's rotation to the same rotation as the given matrix.
-        Matrix should be given in bone's local space.
-    """
-    q = mat.to_quaternion()
-
-    if pose_bone.rotation_mode == 'QUATERNION':
-        pose_bone.rotation_quaternion = q
-    elif pose_bone.rotation_mode == 'AXIS_ANGLE':
-        pose_bone.rotation_axis_angle[0] = q.angle
-        pose_bone.rotation_axis_angle[1] = q.axis[0]
-        pose_bone.rotation_axis_angle[2] = q.axis[1]
-        pose_bone.rotation_axis_angle[3] = q.axis[2]
-    else:
-        pose_bone.rotation_euler = q.to_euler(pose_bone.rotation_mode)
-
-
-def set_pose_scale(pose_bone, mat):
-    """ Sets the pose bone's scale to the same scale as the given matrix.
-        Matrix should be given in bone's local space.
-    """
-    pose_bone.scale = mat.to_scale()
-
-
-def match_pose_translation(pose_bone, target_bone):
-    """ Matches pose_bone's visual translation to target_bone's visual
-        translation.
-        This function assumes you are in pose mode on the relevant armature.
-    """
-    mat = get_pose_matrix_in_other_space(target_bone.matrix, pose_bone)
-    set_pose_translation(pose_bone, mat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-
-def match_pose_rotation(pose_bone, target_bone):
-    """ Matches pose_bone's visual rotation to target_bone's visual
-        rotation.
-        This function assumes you are in pose mode on the relevant armature.
-    """
-    mat = get_pose_matrix_in_other_space(target_bone.matrix, pose_bone)
-    set_pose_rotation(pose_bone, mat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-
-def match_pose_scale(pose_bone, target_bone):
-    """ Matches pose_bone's visual scale to target_bone's visual
-        scale.
-        This function assumes you are in pose mode on the relevant armature.
-    """
-    mat = get_pose_matrix_in_other_space(target_bone.matrix, pose_bone)
-    set_pose_scale(pose_bone, mat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-
-##############################
-## IK/FK snapping functions ##
-##############################
-
-def match_pole_target(ik_first, ik_last, pole, match_bone, length):
-    """ Places an IK chain's pole target to match ik_first's
-        transforms to match_bone.  All bones should be given as pose bones.
-        You need to be in pose mode on the relevant armature object.
-        ik_first: first bone in the IK chain
-        ik_last:  last bone in the IK chain
-        pole:  pole target bone for the IK chain
-        match_bone:  bone to match ik_first to (probably first bone in a matching FK chain)
-        length:  distance pole target should be placed from the chain center
-    """
-    a = ik_first.matrix.to_translation()
-    b = ik_last.matrix.to_translation() + ik_last.vector
-
-    # Vector from the head of ik_first to the
-    # tip of ik_last
-    ikv = b - a
-
-    # Get a vector perpendicular to ikv
-    pv = perpendicular_vector(ikv).normalized() * length
-
-    def set_pole(pvi):
-        """ Set pole target's position based on a vector
-            from the arm center line.
-        """
-        # Translate pvi into armature space
-        ploc = a + (ikv/2) + pvi
-
-        # Set pole target to location
-        mat = get_pose_matrix_in_other_space(Matrix.Translation(ploc), pole)
-        set_pose_translation(pole, mat)
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-        bpy.ops.object.mode_set(mode='POSE')
-
-    set_pole(pv)
-
-    # Get the rotation difference between ik_first and match_bone
-    angle = rotation_difference(ik_first.matrix, match_bone.matrix)
-
-    # Try compensating for the rotation difference in both directions
-    pv1 = Matrix.Rotation(angle, 4, ikv) @ pv
-    set_pole(pv1)
-    ang1 = rotation_difference(ik_first.matrix, match_bone.matrix)
-
-    pv2 = Matrix.Rotation(-angle, 4, ikv) @ pv
-    set_pole(pv2)
-    ang2 = rotation_difference(ik_first.matrix, match_bone.matrix)
-
-    # Do the one with the smaller angle
-    if ang1 < ang2:
-        set_pole(pv1)
-
-
-def fk2ik_arm(obj, fk, ik):
-    """ Matches the fk bones in an arm rig to the ik bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    uarm  = obj.pose.bones[fk[0]]
-    farm  = obj.pose.bones[fk[1]]
-    hand  = obj.pose.bones[fk[2]]
-    uarmi = obj.pose.bones[ik[0]]
-    farmi = obj.pose.bones[ik[1]]
-    handi = obj.pose.bones[ik[2]]
-
-    # Stretch
-    if handi['auto_stretch'] == 0.0:
-        uarm['stretch_length'] = handi['stretch_length']
-    else:
-        diff = (uarmi.vector.length + farmi.vector.length) / (uarm.vector.length + farm.vector.length)
-        uarm['stretch_length'] *= diff
-
-    # Upper arm position
-    match_pose_rotation(uarm, uarmi)
-    match_pose_scale(uarm, uarmi)
-
-    # Forearm position
-    match_pose_rotation(farm, farmi)
-    match_pose_scale(farm, farmi)
-
-    # Hand position
-    match_pose_rotation(hand, handi)
-    match_pose_scale(hand, handi)
-
-
-def ik2fk_arm(obj, fk, ik):
-    """ Matches the ik bones in an arm rig to the fk bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    uarm  = obj.pose.bones[fk[0]]
-    farm  = obj.pose.bones[fk[1]]
-    hand  = obj.pose.bones[fk[2]]
-    uarmi = obj.pose.bones[ik[0]]
-    farmi = obj.pose.bones[ik[1]]
-    handi = obj.pose.bones[ik[2]]
-    pole  = obj.pose.bones[ik[3]]
-
-    # Stretch
-    handi['stretch_length'] = uarm['stretch_length']
-
-    # Hand position
-    match_pose_translation(handi, hand)
-    match_pose_rotation(handi, hand)
-    match_pose_scale(handi, hand)
-
-    # Pole target position
-    match_pole_target(uarmi, farmi, pole, uarm, (uarmi.length + farmi.length))
-
-
-def fk2ik_leg(obj, fk, ik):
-    """ Matches the fk bones in a leg rig to the ik bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    thigh  = obj.pose.bones[fk[0]]
-    shin   = obj.pose.bones[fk[1]]
-    foot   = obj.pose.bones[fk[2]]
-    mfoot  = obj.pose.bones[fk[3]]
-    thighi = obj.pose.bones[ik[0]]
-    shini  = obj.pose.bones[ik[1]]
-    footi  = obj.pose.bones[ik[2]]
-    mfooti = obj.pose.bones[ik[3]]
-
-    # Stretch
-    if footi['auto_stretch'] == 0.0:
-        thigh['stretch_length'] = footi['stretch_length']
-    else:
-        diff = (thighi.vector.length + shini.vector.length) / (thigh.vector.length + shin.vector.length)
-        thigh['stretch_length'] *= diff
-
-    # Thigh position
-    match_pose_rotation(thigh, thighi)
-    match_pose_scale(thigh, thighi)
-
-    # Shin position
-    match_pose_rotation(shin, shini)
-    match_pose_scale(shin, shini)
-
-    # Foot position
-    mat = mfoot.bone.matrix_local.inverted() @ foot.bone.matrix_local
-    footmat = get_pose_matrix_in_other_space(mfooti.matrix, foot) @ mat
-    set_pose_rotation(foot, footmat)
-    set_pose_scale(foot, footmat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-
-def ik2fk_leg(obj, fk, ik):
-    """ Matches the ik bones in a leg rig to the fk bones.
-        obj: armature object
-        fk:  list of fk bone names
-        ik:  list of ik bone names
-    """
-    thigh    = obj.pose.bones[fk[0]]
-    shin     = obj.pose.bones[fk[1]]
-    mfoot    = obj.pose.bones[fk[2]]
-    thighi   = obj.pose.bones[ik[0]]
-    shini    = obj.pose.bones[ik[1]]
-    footi    = obj.pose.bones[ik[2]]
-    footroll = obj.pose.bones[ik[3]]
-    pole     = obj.pose.bones[ik[4]]
-    mfooti   = obj.pose.bones[ik[5]]
-
-    # Stretch
-    footi['stretch_length'] = thigh['stretch_length']
-
-    # Clear footroll
-    set_pose_rotation(footroll, Matrix())
-
-    # Foot position
-    mat = mfooti.bone.matrix_local.inverted() @ footi.bone.matrix_local
-    footmat = get_pose_matrix_in_other_space(mfoot.matrix, footi) @ mat
-    set_pose_translation(footi, footmat)
-    set_pose_rotation(footi, footmat)
-    set_pose_scale(footi, footmat)
-    bpy.ops.object.mode_set(mode='OBJECT')
-    bpy.ops.object.mode_set(mode='POSE')
-
-    # Pole target position
-    match_pole_target(thighi, shini, pole, thigh, (thighi.length + shini.length))
-
-
-##############################
-## IK/FK snapping operators ##
-##############################
-
-class Rigify_Arm_FK2IK(bpy.types.Operator):
-    """ Snaps an FK arm to an IK arm.
-    """
-    bl_idname = "pose.rigify_arm_fk2ik_" + rig_id
-    bl_label = "Rigify Snap FK arm to IK"
-    bl_options = {'UNDO'}
-
-    uarm_fk: bpy.props.StringProperty(name="Upper Arm FK Name")
-    farm_fk: bpy.props.StringProperty(name="Forerm FK Name")
-    hand_fk: bpy.props.StringProperty(name="Hand FK Name")
-
-    uarm_ik: bpy.props.StringProperty(name="Upper Arm IK Name")
-    farm_ik: bpy.props.StringProperty(name="Forearm IK Name")
-    hand_ik: bpy.props.StringProperty(name="Hand IK Name")
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object is not None and context.mode == 'POSE')
-
-    def execute(self, context):
-        fk2ik_arm(context.active_object, fk=[self.uarm_fk, self.farm_fk, self.hand_fk], ik=[self.uarm_ik, self.farm_ik, self.hand_ik])
-        return {'FINISHED'}
-
-
-class Rigify_Arm_IK2FK(bpy.types.Operator):
-    """ Snaps an IK arm to an FK arm.
-    """
-    bl_idname = "pose.rigify_arm_ik2fk_" + rig_id
-    bl_label = "Rigify Snap IK arm to FK"
-    bl_options = {'UNDO'}
-
-    uarm_fk: bpy.props.StringProperty(name="Upper Arm FK Name")
-    farm_fk: bpy.props.StringProperty(name="Forerm FK Name")
-    hand_fk: bpy.props.StringProperty(name="Hand FK Name")
-
-    uarm_ik: bpy.props.StringProperty(name="Upper Arm IK Name")
-    farm_ik: bpy.props.StringProperty(name="Forearm IK Name")
-    hand_ik: bpy.props.StringProperty(name="Hand IK Name")
-    pole:    bpy.props.StringProperty(name="Pole IK Name")
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object is not None and context.mode == 'POSE')
-
-    def execute(self, context):
-        ik2fk_arm(context.active_object, fk=[self.uarm_fk, self.farm_fk, self.hand_fk], ik=[self.uarm_ik, self.farm_ik, self.hand_ik, self.pole])
-        return {'FINISHED'}
-
-
-class Rigify_Leg_FK2IK(bpy.types.Operator):
-    """ Snaps an FK leg to an IK leg.
-    """
-    bl_idname = "pose.rigify_leg_fk2ik_" + rig_id
-    bl_label = "Rigify Snap FK leg to IK"
-    bl_options = {'UNDO'}
-
-    thigh_fk: bpy.props.StringProperty(name="Thigh FK Name")
-    shin_fk:  bpy.props.StringProperty(name="Shin FK Name")
-    foot_fk:  bpy.props.StringProperty(name="Foot FK Name")
-    mfoot_fk: bpy.props.StringProperty(name="MFoot FK Name")
-
-    thigh_ik: bpy.props.StringProperty(name="Thigh IK Name")
-    shin_ik:  bpy.props.StringProperty(name="Shin IK Name")
-    foot_ik:  bpy.props.StringProperty(name="Foot IK Name")
-    mfoot_ik: bpy.props.StringProperty(name="MFoot IK Name")
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object is not None and context.mode == 'POSE')
-
-    def execute(self, context):
-        fk2ik_leg(context.active_object, fk=[self.thigh_fk, self.shin_fk, self.foot_fk, self.mfoot_fk], ik=[self.thigh_ik, self.shin_ik, self.foot_ik, self.mfoot_ik])
-        return {'FINISHED'}
-
-
-class Rigify_Leg_IK2FK(bpy.types.Operator):
-    """ Snaps an IK leg to an FK leg.
-    """
-    bl_idname = "pose.rigify_leg_ik2fk_" + rig_id
-    bl_label = "Rigify Snap IK leg to FK"
-    bl_options = {'UNDO'}
-
-    thigh_fk: bpy.props.StringProperty(name="Thigh FK Name")
-    shin_fk:  bpy.props.StringProperty(name="Shin FK Name")
-    mfoot_fk: bpy.props.StringProperty(name="MFoot FK Name")
-
-    thigh_ik: bpy.props.StringProperty(name="Thigh IK Name")
-    shin_ik:  bpy.props.StringProperty(name="Shin IK Name")
-    foot_ik:  bpy.props.StringProperty(name="Foot IK Name")
-    footroll: bpy.props.StringProperty(name="Foot Roll Name")
-    pole:     bpy.props.StringProperty(name="Pole IK Name")
-    mfoot_ik: bpy.props.StringProperty(name="MFoot IK Name")
-
-    @classmethod
-    def poll(cls, context):
-        return (context.active_object is not None and context.mode == 'POSE')
-
-    def execute(self, context):
-        ik2fk_leg(context.active_object, fk=[self.thigh_fk, self.shin_fk, self.mfoot_fk], ik=[self.thigh_ik, self.shin_ik, self.foot_ik, self.footroll, self.pole, self.mfoot_ik])
-        return {'FINISHED'}
-
-
-###################
-## Rig UI Panels ##
-###################
-
-class RigUI(bpy.types.Panel):
-    bl_space_type = 'VIEW_3D'
-    bl_region_type = 'UI'
-    bl_label = "Rig Main Properties"
-    bl_idname = "VIEW3D_PT_rig_ui_" + rig_id
-    bl_category = 'Item'
-
-    @classmethod
-    def poll(self, context):
-        if context.mode != 'POSE':
-            return False
-        try:
-            return (context.active_object.data.get("rig_id") == rig_id)
-        except (AttributeError, KeyError, TypeError):
-            return False
-
-    def draw(self, context):
-        layout = self.layout
-        pose_bones = context.active_object.pose.bones
-        try:
-            selected_bones = [bone.name for bone in context.selected_pose_bones]
-            selected_bones += [context.active_pose_bone.name]
-        except (AttributeError, TypeError):
-            return
-
-        def is_selected(names):
-            # Returns whether any of the named bones are selected.
-            if type(names) == list:
-                for name in names:
-                    if name in selected_bones:
-                        return True
-            elif names in selected_bones:
-                return True
-            return False
-
-
-'''
-
-
-def layers_ui(layers, layout):
-    """ Turn a list of booleans + a list of names into a layer UI.
-    """
-
-    code = '''
-class RigLayers(bpy.types.Panel):
-    bl_space_type = 'VIEW_3D'
-    bl_region_type = 'UI'
-    bl_label = "Rig Layers"
-    bl_idname = "VIEW3D_PT_rig_layers_" + rig_id
-    bl_category = 'Item'
-
-    @classmethod
-    def poll(self, context):
-        try:
-            return (context.active_object.data.get("rig_id") == rig_id)
-        except (AttributeError, KeyError, TypeError):
-            return False
-
-    def draw(self, context):
-        layout = self.layout
-        col = layout.column()
-'''
-    rows = {}
-    for i in range(28):
-        if layers[i]:
-            if layout[i][1] not in rows:
-                rows[layout[i][1]] = []
-            rows[layout[i][1]] += [(layout[i][0], i)]
-
-    keys = list(rows.keys())
-    keys.sort()
-
-    for key in keys:
-        code += "\n        row = col.row()\n"
-        i = 0
-        for l in rows[key]:
-            if i > 3:
-                code += "\n        row = col.row()\n"
-                i = 0
-            code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='%s')\n" % (str(l[1]), l[0])
-            i += 1
-
-    # Root layer
-    code += "\n        row = col.row()"
-    code += "\n        row.separator()"
-    code += "\n        row = col.row()"
-    code += "\n        row.separator()\n"
-    code += "\n        row = col.row()\n"
-    code += "        row.prop(context.active_object.data, 'layers', index=28, toggle=True, text='Root')\n"
-
-    return code
-
-
-UI_REGISTER = '''
-
-def register():
-    bpy.utils.register_class(Rigify_Arm_FK2IK)
-    bpy.utils.register_class(Rigify_Arm_IK2FK)
-    bpy.utils.register_class(Rigify_Leg_FK2IK)
-    bpy.utils.register_class(Rigify_Leg_IK2FK)
-    bpy.utils.register_class(RigUI)
-    bpy.utils.register_class(RigLayers)
-
-def unregister():
-    bpy.utils.unregister_class(Rigify_Arm_FK2IK)
-    bpy.utils.unregister_class(Rigify_Arm_IK2FK)
-    bpy.utils.unregister_class(Rigify_Leg_FK2IK)
-    bpy.utils.unregister_class(Rigify_Leg_IK2FK)
-    bpy.utils.unregister_class(RigUI)
-    bpy.utils.unregister_class(RigLayers)
-
-register()
-'''
diff --git a/rigify/legacy/rigs/__init__.py b/rigify/legacy/rigs/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/rigify/legacy/rigs/basic/__init__.py b/rigify/legacy/rigs/basic/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/rigify/legacy/rigs/basic/copy.py b/rigify/legacy/rigs/basic/copy.py
deleted file mode 100644
index 50a25767df1769374e8376ea9a2d86afb76e8fad..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/basic/copy.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from ...utils import copy_bone
-from ...utils import strip_org, make_deformer_name
-from ...utils import create_bone_widget
-
-
-class Rig:
-    """ A "copy" rig.  All it does is duplicate the original bone and
-        constrain it.
-        This is a control and deformation rig.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-        """
-        self.obj = obj
-        self.org_bone = bone
-        self.org_name = strip_org(bone)
-        self.params = params
-        self.make_control = params.make_control
-        self.make_deform = params.make_deform
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Make a control bone (copy of original).
-        if self.make_control:
-            bone = copy_bone(self.obj, self.org_bone, self.org_name)
-
-        # Make a deformation bone (copy of original, child of original).
-        if self.make_deform:
-            def_bone = copy_bone(self.obj, self.org_bone, make_deformer_name(self.org_name))
-
-        # Get edit bones
-        eb = self.obj.data.edit_bones
-        # UNUSED
-        # if self.make_control:
-        #     bone_e = eb[bone]
-        if self.make_deform:
-            def_bone_e = eb[def_bone]
-
-        # Parent
-        if self.make_deform:
-            def_bone_e.use_connect = False
-            def_bone_e.parent = eb[self.org_bone]
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        if self.make_control:
-            # Constrain the original bone.
-            con = pb[self.org_bone].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = bone
-
-            # Create control widget
-            create_bone_widget(self.obj, bone)
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    params.make_control = bpy.props.BoolProperty(name="Control", default=True, description="Create a control bone for the copy")
-    params.make_deform = bpy.props.BoolProperty(name="Deform", default=True, description="Create a deform bone for the copy")
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-    r = layout.row()
-    r.prop(params, "make_control")
-    r = layout.row()
-    r.prop(params, "make_deform")
-
-
-def create_sample(obj):
-    """ Create a sample metarig for this rig type.
-    """
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('Bone')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0000, 0.0000, 0.2000
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['Bone'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['Bone']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/basic/copy_chain.py b/rigify/legacy/rigs/basic/copy_chain.py
deleted file mode 100644
index 4e4262846924799500f8c936e50f020ae9b18e54..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/basic/copy_chain.py
+++ /dev/null
@@ -1,206 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from ...utils import MetarigError
-from ...utils import copy_bone
-from ...utils import connected_children_names
-from ...utils import strip_org, make_deformer_name
-from ...utils import create_bone_widget
-
-
-class Rig:
-    """ A "copy_chain" rig.  All it does is duplicate the original bone chain
-        and constrain it.
-        This is a control and deformation rig.
-
-    """
-    def __init__(self, obj, bone_name, params):
-        """ Gather and validate data about the rig.
-        """
-        self.obj = obj
-        self.org_bones = [bone_name] + connected_children_names(obj, bone_name)
-        self.params = params
-        self.make_controls = params.make_controls
-        self.make_deforms = params.make_deforms
-
-        if len(self.org_bones) <= 1:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': input to rig type must be a chain of 2 or more bones" % (strip_org(bone_name)))
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Create the deformation and control bone chains.
-        # Just copies of the original chain.
-        def_chain = []
-        ctrl_chain = []
-        for i in range(len(self.org_bones)):
-            name = self.org_bones[i]
-
-            # Control bone
-            if self.make_controls:
-                # Copy
-                ctrl_bone = copy_bone(self.obj, name)
-                eb = self.obj.data.edit_bones
-                ctrl_bone_e = eb[ctrl_bone]
-                # Name
-                ctrl_bone_e.name = strip_org(name)
-                # Parenting
-                if i == 0:
-                    # First bone
-                    ctrl_bone_e.parent = eb[self.org_bones[0]].parent
-                else:
-                    # The rest
-                    ctrl_bone_e.parent = eb[ctrl_chain[-1]]
-                # Add to list
-                ctrl_chain += [ctrl_bone_e.name]
-            else:
-                ctrl_chain += [None]
-
-            # Deformation bone
-            if self.make_deforms:
-                # Copy
-                def_bone = copy_bone(self.obj, name)
-                eb = self.obj.data.edit_bones
-                def_bone_e = eb[def_bone]
-                # Name
-                def_bone_e.name = make_deformer_name(strip_org(name))
-                # Parenting
-                if i == 0:
-                    # First bone
-                    def_bone_e.parent = eb[self.org_bones[0]].parent
-                else:
-                    # The rest
-                    def_bone_e.parent = eb[def_chain[-1]]
-                # Add to list
-                def_chain += [def_bone_e.name]
-            else:
-                def_chain += [None]
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        # Constraints for org and def
-        for org, ctrl, defrm in zip(self.org_bones, ctrl_chain, def_chain):
-            if self.make_controls:
-                con = pb[org].constraints.new('COPY_TRANSFORMS')
-                con.name = "copy_transforms"
-                con.target = self.obj
-                con.subtarget = ctrl
-
-            if self.make_deforms:
-                con = pb[defrm].constraints.new('COPY_TRANSFORMS')
-                con.name = "copy_transforms"
-                con.target = self.obj
-                con.subtarget = org
-
-        # Create control widgets
-        if self.make_controls:
-            for bone in ctrl_chain:
-                create_bone_widget(self.obj, bone)
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    params.make_controls = bpy.props.BoolProperty(name="Controls", default=True, description="Create control bones for the copy")
-    params.make_deforms = bpy.props.BoolProperty(name="Deform", default=True, description="Create deform bones for the copy")
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-    r = layout.row()
-    r.prop(params, "make_controls")
-    r = layout.row()
-    r.prop(params, "make_deforms")
-
-
-def create_sample(obj):
-    """ Create a sample metarig for this rig type.
-    """
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('bone.01')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0000, 0.0000, 0.3333
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['bone.01'] = bone.name
-    bone = arm.edit_bones.new('bone.02')
-    bone.head[:] = 0.0000, 0.0000, 0.3333
-    bone.tail[:] = 0.0000, 0.0000, 0.6667
-    bone.roll = 3.1416
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['bone.01']]
-    bones['bone.02'] = bone.name
-    bone = arm.edit_bones.new('bone.03')
-    bone.head[:] = 0.0000, 0.0000, 0.6667
-    bone.tail[:] = 0.0000, 0.0000, 1.0000
-    bone.roll = 3.1416
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['bone.02']]
-    bones['bone.03'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['bone.01']]
-    pbone.rigify_type = 'basic.copy_chain'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['bone.02']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['bone.03']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/biped/__init__.py b/rigify/legacy/rigs/biped/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/rigify/legacy/rigs/biped/arm/__init__.py b/rigify/legacy/rigs/biped/arm/__init__.py
deleted file mode 100644
index e30b58ccf101dbebaeef6e92147e7f0c6fb4039c..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/arm/__init__.py
+++ /dev/null
@@ -1,306 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-import importlib
-from . import fk, ik, deform
-
-importlib.reload(fk)
-importlib.reload(ik)
-importlib.reload(deform)
-
-script = """
-fk_arm = ["%s", "%s", "%s"]
-ik_arm = ["%s", "%s", "%s", "%s"]
-if is_selected(fk_arm+ik_arm):
-    layout.prop(pose_bones[ik_arm[2]], '["ikfk_switch"]', text="FK / IK (" + ik_arm[2] + ")", slider=True)
-    props = layout.operator("pose.rigify_arm_fk2ik_" + rig_id, text="Snap FK->IK (" + fk_arm[0] + ")")
-    props.uarm_fk = fk_arm[0]
-    props.farm_fk = fk_arm[1]
-    props.hand_fk = fk_arm[2]
-    props.uarm_ik = ik_arm[0]
-    props.farm_ik = ik_arm[1]
-    props.hand_ik = ik_arm[2]
-    props = layout.operator("pose.rigify_arm_ik2fk_" + rig_id, text="Snap IK->FK (" + fk_arm[0] + ")")
-    props.uarm_fk = fk_arm[0]
-    props.farm_fk = fk_arm[1]
-    props.hand_fk = fk_arm[2]
-    props.uarm_ik = ik_arm[0]
-    props.farm_ik = ik_arm[1]
-    props.hand_ik = ik_arm[2]
-    props.pole = ik_arm[3]
-if is_selected(fk_arm):
-    try:
-        pose_bones[fk_arm[0]]["isolate"]
-        layout.prop(pose_bones[fk_arm[0]], '["isolate"]', text="Isolate Rotation (" + fk_arm[0] + ")", slider=True)
-    except KeyError:
-        pass
-    layout.prop(pose_bones[fk_arm[0]], '["stretch_length"]', text="Length FK (" + fk_arm[0] + ")", slider=True)
-if is_selected(ik_arm):
-    layout.prop(pose_bones[ik_arm[2]], '["stretch_length"]', text="Length IK (" + ik_arm[2] + ")", slider=True)
-    layout.prop(pose_bones[ik_arm[2]], '["auto_stretch"]', text="Auto-Stretch IK (" + ik_arm[2] + ")", slider=True)
-if is_selected([ik_arm[3]]):
-    layout.prop(pose_bones[ik_arm[3]], '["follow"]', text="Follow Parent (" + ik_arm[3] + ")", slider=True)
-"""
-
-hose_script = """
-hose_arm = ["%s", "%s", "%s", "%s", "%s"]
-if is_selected(hose_arm):
-    layout.prop(pose_bones[hose_arm[2]], '["smooth_bend"]', text="Smooth Elbow (" + hose_arm[2] + ")", slider=True)
-"""
-
-end_script = """
-if is_selected(fk_arm+ik_arm):
-    layout.separator()
-"""
-
-
-class Rig:
-    """ An arm rig, with IK/FK switching and hinge switch.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-            Store any data or references to data that will be needed later on.
-            In particular, store names of bones that will be needed.
-            Do NOT change any data in the scene.  This is a gathering phase only.
-
-        """
-        self.obj = obj
-        self.params = params
-
-        # Gather deform rig
-        self.deform_rig = deform.Rig(obj, bone, params)
-
-        # Gather FK rig
-        self.fk_rig = fk.Rig(obj, bone, params)
-
-        # Gather IK rig
-        self.ik_rig = ik.Rig(obj, bone, params, ikfk_switch=True)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        hose_controls = self.deform_rig.generate()
-        fk_controls = self.fk_rig.generate()
-        ik_controls = self.ik_rig.generate()
-        ui_script = script % (fk_controls[0], fk_controls[1], fk_controls[2], ik_controls[0], ik_controls[1], ik_controls[2], ik_controls[3])
-        if self.params.use_complex_arm:
-            ui_script += hose_script % (hose_controls[0], hose_controls[1], hose_controls[2], hose_controls[3], hose_controls[4])
-        ui_script += end_script
-        return [ui_script]
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-
-    """
-    params.use_complex_arm = bpy.props.BoolProperty(name="Complex Arm Rig", default=True, description="Generate the full, complex arm rig with twist bones and rubber-hose controls")
-    params.bend_hint = bpy.props.BoolProperty(name="Bend Hint", default=True, description="Give IK chain a hint about which way to bend. Useful for perfectly straight chains")
-
-    items = [('X', 'X', ''), ('Y', 'Y', ''), ('Z', 'Z', ''), ('-X', '-X', ''), ('-Y', '-Y', ''), ('-Z', '-Z', '')]
-    params.primary_rotation_axis = bpy.props.EnumProperty(items=items, name="Primary Rotation Axis", default='X')
-
-    params.elbow_base_name = bpy.props.StringProperty(name="Elbow Name", default="elbow", description="Base name for the generated elbow-related controls")
-
-    params.separate_ik_layers = bpy.props.BoolProperty(name="Separate IK Control Layers:", default=False, description="Enable putting the ik controls on a separate layer from the fk controls")
-    params.ik_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the ik controls to be on")
-
-    params.separate_hose_layers = bpy.props.BoolProperty(name="Separate Rubber-hose Control Layers:", default=False, description="Enable putting the rubber-hose controls on a separate layer from the other controls")
-    params.hose_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the rubber-hose controls to be on")
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-
-    """
-    col = layout.column()
-    col.prop(params, "use_complex_arm")
-
-    r = layout.row()
-    r.label(text="Elbow rotation axis:")
-    r.prop(params, "primary_rotation_axis", text="")
-
-    r = layout.row()
-    r.prop(params, "elbow_base_name")
-
-    r = layout.row()
-    r.prop(params, "bend_hint")
-
-    r = layout.row()
-    r.prop(params, "separate_ik_layers")
-
-    r = layout.row()
-    r.active = params.separate_ik_layers
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=0, toggle=True, text="")
-    row.prop(params, "ik_layers", index=1, toggle=True, text="")
-    row.prop(params, "ik_layers", index=2, toggle=True, text="")
-    row.prop(params, "ik_layers", index=3, toggle=True, text="")
-    row.prop(params, "ik_layers", index=4, toggle=True, text="")
-    row.prop(params, "ik_layers", index=5, toggle=True, text="")
-    row.prop(params, "ik_layers", index=6, toggle=True, text="")
-    row.prop(params, "ik_layers", index=7, toggle=True, text="")
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=16, toggle=True, text="")
-    row.prop(params, "ik_layers", index=17, toggle=True, text="")
-    row.prop(params, "ik_layers", index=18, toggle=True, text="")
-    row.prop(params, "ik_layers", index=19, toggle=True, text="")
-    row.prop(params, "ik_layers", index=20, toggle=True, text="")
-    row.prop(params, "ik_layers", index=21, toggle=True, text="")
-    row.prop(params, "ik_layers", index=22, toggle=True, text="")
-    row.prop(params, "ik_layers", index=23, toggle=True, text="")
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=8, toggle=True, text="")
-    row.prop(params, "ik_layers", index=9, toggle=True, text="")
-    row.prop(params, "ik_layers", index=10, toggle=True, text="")
-    row.prop(params, "ik_layers", index=11, toggle=True, text="")
-    row.prop(params, "ik_layers", index=12, toggle=True, text="")
-    row.prop(params, "ik_layers", index=13, toggle=True, text="")
-    row.prop(params, "ik_layers", index=14, toggle=True, text="")
-    row.prop(params, "ik_layers", index=15, toggle=True, text="")
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=24, toggle=True, text="")
-    row.prop(params, "ik_layers", index=25, toggle=True, text="")
-    row.prop(params, "ik_layers", index=26, toggle=True, text="")
-    row.prop(params, "ik_layers", index=27, toggle=True, text="")
-    row.prop(params, "ik_layers", index=28, toggle=True, text="")
-    row.prop(params, "ik_layers", index=29, toggle=True, text="")
-    row.prop(params, "ik_layers", index=30, toggle=True, text="")
-    row.prop(params, "ik_layers", index=31, toggle=True, text="")
-
-    if params.use_complex_arm:
-        r = layout.row()
-        r.prop(params, "separate_hose_layers")
-
-        r = layout.row()
-        r.active = params.separate_hose_layers
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=0, toggle=True, text="")
-        row.prop(params, "hose_layers", index=1, toggle=True, text="")
-        row.prop(params, "hose_layers", index=2, toggle=True, text="")
-        row.prop(params, "hose_layers", index=3, toggle=True, text="")
-        row.prop(params, "hose_layers", index=4, toggle=True, text="")
-        row.prop(params, "hose_layers", index=5, toggle=True, text="")
-        row.prop(params, "hose_layers", index=6, toggle=True, text="")
-        row.prop(params, "hose_layers", index=7, toggle=True, text="")
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=16, toggle=True, text="")
-        row.prop(params, "hose_layers", index=17, toggle=True, text="")
-        row.prop(params, "hose_layers", index=18, toggle=True, text="")
-        row.prop(params, "hose_layers", index=19, toggle=True, text="")
-        row.prop(params, "hose_layers", index=20, toggle=True, text="")
-        row.prop(params, "hose_layers", index=21, toggle=True, text="")
-        row.prop(params, "hose_layers", index=22, toggle=True, text="")
-        row.prop(params, "hose_layers", index=23, toggle=True, text="")
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=8, toggle=True, text="")
-        row.prop(params, "hose_layers", index=9, toggle=True, text="")
-        row.prop(params, "hose_layers", index=10, toggle=True, text="")
-        row.prop(params, "hose_layers", index=11, toggle=True, text="")
-        row.prop(params, "hose_layers", index=12, toggle=True, text="")
-        row.prop(params, "hose_layers", index=13, toggle=True, text="")
-        row.prop(params, "hose_layers", index=14, toggle=True, text="")
-        row.prop(params, "hose_layers", index=15, toggle=True, text="")
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=24, toggle=True, text="")
-        row.prop(params, "hose_layers", index=25, toggle=True, text="")
-        row.prop(params, "hose_layers", index=26, toggle=True, text="")
-        row.prop(params, "hose_layers", index=27, toggle=True, text="")
-        row.prop(params, "hose_layers", index=28, toggle=True, text="")
-        row.prop(params, "hose_layers", index=29, toggle=True, text="")
-        row.prop(params, "hose_layers", index=30, toggle=True, text="")
-        row.prop(params, "hose_layers", index=31, toggle=True, text="")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_meta_rig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('upper_arm')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.3000, 0.0300, 0.0000
-    bone.roll = 1.5708
-    bone.use_connect = False
-    bones['upper_arm'] = bone.name
-    bone = arm.edit_bones.new('forearm')
-    bone.head[:] = 0.3000, 0.0300, 0.0000
-    bone.tail[:] = 0.6000, 0.0000, 0.0000
-    bone.roll = 1.5708
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['upper_arm']]
-    bones['forearm'] = bone.name
-    bone = arm.edit_bones.new('hand')
-    bone.head[:] = 0.6000, 0.0000, 0.0000
-    bone.tail[:] = 0.7000, 0.0000, 0.0000
-    bone.roll = 3.1416
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['forearm']]
-    bones['hand'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['upper_arm']]
-    pbone.rigify_type = 'biped.arm'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['forearm']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['hand']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/biped/arm/deform.py b/rigify/legacy/rigs/biped/arm/deform.py
deleted file mode 100644
index a544420775b84617a9fd44019f447ee4b41f8cdd..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/arm/deform.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from .. import limb_common
-
-from ....utils import MetarigError
-from ....utils import connected_children_names
-from ....utils import strip_org
-
-
-class Rig:
-    """ An FK arm rig, with hinge switch.
-
-    """
-    def __init__(self, obj, bone, params):
-        self.obj = obj
-        self.params = params
-
-        # Get the chain of 3 connected bones
-        self.org_bones = [bone] + connected_children_names(self.obj, bone)[:2]
-
-        if len(self.org_bones) != 3:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': input to rig type must be a chain of 3 bones" % (strip_org(bone)))
-
-        # Get rig parameters
-        if params.separate_hose_layers:
-            layers = list(params.hose_layers)
-        else:
-            layers = None
-        use_complex_rig = params.use_complex_arm
-        elbow_base_name = params.elbow_base_name
-        primary_rotation_axis = params.primary_rotation_axis
-
-        # Based on common limb
-        self.rubber_hose_limb = limb_common.RubberHoseLimb(obj, self.org_bones[0], self.org_bones[1], self.org_bones[2], use_complex_rig, elbow_base_name, primary_rotation_axis, layers)
-
-    def generate(self):
-        bone_list = self.rubber_hose_limb.generate()
-        return bone_list
diff --git a/rigify/legacy/rigs/biped/arm/fk.py b/rigify/legacy/rigs/biped/arm/fk.py
deleted file mode 100644
index 03ff6fc96ca586d09df688bd9413ec5d08ba968f..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/arm/fk.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from .. import limb_common
-
-from ....utils import MetarigError
-from ....utils import connected_children_names
-from ....utils import create_widget
-from ....utils import strip_org
-from ....utils import get_layers
-
-
-class Rig:
-    """ An FK arm rig, with hinge switch.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-            Store any data or references to data that will be needed later on.
-            In particular, store references to bones that will be needed, and
-            store names of bones that will be needed.
-            Do NOT change any data in the scene.  This is a gathering phase only.
-
-        """
-        self.obj = obj
-
-        # Get the chain of 3 connected bones
-        self.org_bones = [bone] + connected_children_names(self.obj, bone)[:2]
-
-        if len(self.org_bones) != 3:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': input to rig type must be a chain of at least 3 bones" % (strip_org(bone)))
-
-        # Get params
-        if "layers" in params:
-            layers = get_layers(params["layers"])
-        else:
-            layers = None
-
-        primary_rotation_axis = params.primary_rotation_axis
-
-        # Arm is based on common limb
-        self.fk_limb = limb_common.FKLimb(obj, self.org_bones[0], self.org_bones[1], self.org_bones[2], primary_rotation_axis, layers)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        bone_list = self.fk_limb.generate()
-        uarm = bone_list[0]
-        farm = bone_list[1]
-        hand = bone_list[2]
-
-        # Create hand widget
-        ob = create_widget(self.obj, hand)
-        if ob is not None:
-            verts = [(0.7, 1.5, 0.0), (0.7, -0.25, 0.0), (-0.7, -0.25, 0.0), (-0.7, 1.5, 0.0), (0.7, 0.723, 0.0), (-0.7, 0.723, 0.0), (0.7, 0.0, 0.0), (-0.7, 0.0, 0.0)]
-            edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)]
-            mesh = ob.data
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = ob.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-        return [uarm, farm, hand]
diff --git a/rigify/legacy/rigs/biped/arm/ik.py b/rigify/legacy/rigs/biped/arm/ik.py
deleted file mode 100644
index e4cd2b5d6e18a1713b81752b6a8ba37ea405bb72..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/arm/ik.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from .. import limb_common
-
-from ....utils import MetarigError
-from ....utils import connected_children_names
-from ....utils import strip_org
-from ....utils import create_widget
-
-
-class Rig:
-    """ An IK arm rig, with an optional ik/fk switch.
-
-    """
-    def __init__(self, obj, bone, params, ikfk_switch=False):
-        """ Gather and validate data about the rig.
-            Store any data or references to data that will be needed later on.
-            In particular, store references to bones that will be needed, and
-            store names of bones that will be needed.
-            Do NOT change any data in the scene.  This is a gathering phase only.
-
-            ikfk_switch: if True, create an ik/fk switch slider
-        """
-        self.obj = obj
-        self.params = params
-
-        # Get the chain of 3 connected bones
-        self.org_bones = [bone] + connected_children_names(self.obj, bone)[:2]
-        if len(self.org_bones) != 3:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': input to rig type must be a chain of 3 bones" % (strip_org(bone)))
-
-        # Get the rig parameters
-        if params.separate_ik_layers:
-            layers = list(params.ik_layers)
-        else:
-            layers = None
-        bend_hint = params.bend_hint
-        primary_rotation_axis = params.primary_rotation_axis
-        pole_target_base_name = self.params.elbow_base_name + "_target"
-
-        # Arm is based on common limb
-        self.ik_limb = limb_common.IKLimb(obj, self.org_bones[0], self.org_bones[1], self.org_bones[2], None, pole_target_base_name, primary_rotation_axis, bend_hint, layers, ikfk_switch)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        bone_list = self.ik_limb.generate()
-        uarm = bone_list[0]
-        farm = bone_list[1]
-        hand = bone_list[2]
-        # hand_mch = bone_list[3]
-        pole = bone_list[4]
-        # vispole = bone_list[5]
-        # vishand = bone_list[6]
-
-        ob = create_widget(self.obj, hand)
-        if ob is not None:
-            verts = [(0.7, 1.5, 0.0), (0.7, -0.25, 0.0), (-0.7, -0.25, 0.0), (-0.7, 1.5, 0.0), (0.7, 0.723, 0.0), (-0.7, 0.723, 0.0), (0.7, 0.0, 0.0), (-0.7, 0.0, 0.0)]
-            edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)]
-            mesh = ob.data
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = ob.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-        return [uarm, farm, hand, pole]
diff --git a/rigify/legacy/rigs/biped/leg/__init__.py b/rigify/legacy/rigs/biped/leg/__init__.py
deleted file mode 100644
index bfa9f5351d81bfcd95a4c33714388109af808988..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/leg/__init__.py
+++ /dev/null
@@ -1,345 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-import importlib
-from . import fk, ik, deform
-
-importlib.reload(fk)
-importlib.reload(ik)
-importlib.reload(deform)
-
-script = """
-fk_leg = ["%s", "%s", "%s", "%s"]
-ik_leg = ["%s", "%s", "%s", "%s", "%s", "%s"]
-if is_selected(fk_leg+ik_leg):
-    layout.prop(pose_bones[ik_leg[2]], '["ikfk_switch"]', text="FK / IK (" + ik_leg[2] + ")", slider=True)
-    p = layout.operator("pose.rigify_leg_fk2ik_" + rig_id, text="Snap FK->IK (" + fk_leg[0] + ")")
-    p.thigh_fk = fk_leg[0]
-    p.shin_fk  = fk_leg[1]
-    p.foot_fk  = fk_leg[2]
-    p.mfoot_fk = fk_leg[3]
-    p.thigh_ik = ik_leg[0]
-    p.shin_ik  = ik_leg[1]
-    p.foot_ik = ik_leg[2]
-    p.mfoot_ik = ik_leg[5]
-    p = layout.operator("pose.rigify_leg_ik2fk_" + rig_id, text="Snap IK->FK (" + fk_leg[0] + ")")
-    p.thigh_fk  = fk_leg[0]
-    p.shin_fk   = fk_leg[1]
-    p.mfoot_fk  = fk_leg[3]
-    p.thigh_ik  = ik_leg[0]
-    p.shin_ik   = ik_leg[1]
-    p.foot_ik   = ik_leg[2]
-    p.pole      = ik_leg[3]
-    p.footroll  = ik_leg[4]
-    p.mfoot_ik  = ik_leg[5]
-if is_selected(fk_leg):
-    try:
-        pose_bones[fk_leg[0]]["isolate"]
-        layout.prop(pose_bones[fk_leg[0]], '["isolate"]', text="Isolate Rotation (" + fk_leg[0] + ")", slider=True)
-    except KeyError:
-        pass
-    layout.prop(pose_bones[fk_leg[0]], '["stretch_length"]', text="Length FK (" + fk_leg[0] + ")", slider=True)
-if is_selected(ik_leg):
-    layout.prop(pose_bones[ik_leg[2]], '["stretch_length"]', text="Length IK (" + ik_leg[2] + ")", slider=True)
-    layout.prop(pose_bones[ik_leg[2]], '["auto_stretch"]', text="Auto-Stretch IK (" + ik_leg[2] + ")", slider=True)
-if is_selected([ik_leg[3]]):
-    layout.prop(pose_bones[ik_leg[3]], '["follow"]', text="Follow Foot (" + ik_leg[3] + ")", slider=True)
-"""
-
-hose_script = """
-hose_leg = ["%s", "%s", "%s", "%s", "%s"]
-if is_selected(hose_leg):
-    layout.prop(pose_bones[hose_leg[2]], '["smooth_bend"]', text="Smooth Knee (" + hose_leg[2] + ")", slider=True)
-"""
-
-end_script = """
-if is_selected(fk_leg+ik_leg):
-    layout.separator()
-"""
-
-
-class Rig:
-    """ A leg rig, with IK/FK switching, a hinge switch, and foot roll.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-            Store any data or references to data that will be needed later on.
-            In particular, store names of bones that will be needed.
-            Do NOT change any data in the scene.  This is a gathering phase only.
-
-        """
-        self.obj = obj
-        self.params = params
-
-        # Gather deform rig
-        self.deform_rig = deform.Rig(obj, bone, params)
-
-        # Gather FK rig
-        self.fk_rig = fk.Rig(obj, bone, params)
-
-        # Gather IK rig
-        self.ik_rig = ik.Rig(obj, bone, params, ikfk_switch=True)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        hose_controls = self.deform_rig.generate()
-        fk_controls = self.fk_rig.generate()
-        ik_controls = self.ik_rig.generate()
-        ui_script = script % (fk_controls[0], fk_controls[1], fk_controls[2], fk_controls[3], ik_controls[0], ik_controls[1], ik_controls[2], ik_controls[3], ik_controls[4], ik_controls[5])
-        if self.params.use_complex_leg:
-            ui_script += hose_script % (hose_controls[0], hose_controls[1], hose_controls[2], hose_controls[3], hose_controls[4])
-        ui_script += end_script
-        return [ui_script]
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-
-    """
-    params.use_complex_leg = bpy.props.BoolProperty(name="Complex Leg Rig", default=True, description="Generate the full, complex leg rig with twist bones and rubber-hose controls")
-    params.bend_hint = bpy.props.BoolProperty(name="Bend Hint", default=True, description="Give IK chain a hint about which way to bend. Useful for perfectly straight chains")
-
-    items = [('X', 'X', ''), ('Y', 'Y', ''), ('Z', 'Z', ''), ('-X', '-X', ''), ('-Y', '-Y', ''), ('-Z', '-Z', '')]
-    params.primary_rotation_axis = bpy.props.EnumProperty(items=items, name="Primary Rotation Axis", default='X')
-
-    params.knee_base_name = bpy.props.StringProperty(name="Knee Name", default="knee", description="Base name for the generated knee-related controls")
-
-    params.separate_ik_layers = bpy.props.BoolProperty(name="Separate IK Control Layers:", default=False, description="Enable putting the ik controls on a separate layer from the fk controls")
-    params.ik_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the ik controls to be on")
-
-    params.separate_hose_layers = bpy.props.BoolProperty(name="Separate Rubber-hose Control Layers:", default=False, description="Enable putting the rubber-hose controls on a separate layer from the other controls")
-    params.hose_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the rubber-hose controls to be on")
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-
-    """
-    col = layout.column()
-    col.prop(params, "use_complex_leg")
-
-    r = layout.row()
-    r.label(text="Knee rotation axis:")
-    r.prop(params, "primary_rotation_axis", text="")
-
-    r = layout.row()
-    r.prop(params, "knee_base_name")
-
-    r = layout.row()
-    r.prop(params, "bend_hint")
-
-    r = layout.row()
-    r.prop(params, "separate_ik_layers")
-
-    r = layout.row()
-    r.active = params.separate_ik_layers
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=0, toggle=True, text="")
-    row.prop(params, "ik_layers", index=1, toggle=True, text="")
-    row.prop(params, "ik_layers", index=2, toggle=True, text="")
-    row.prop(params, "ik_layers", index=3, toggle=True, text="")
-    row.prop(params, "ik_layers", index=4, toggle=True, text="")
-    row.prop(params, "ik_layers", index=5, toggle=True, text="")
-    row.prop(params, "ik_layers", index=6, toggle=True, text="")
-    row.prop(params, "ik_layers", index=7, toggle=True, text="")
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=16, toggle=True, text="")
-    row.prop(params, "ik_layers", index=17, toggle=True, text="")
-    row.prop(params, "ik_layers", index=18, toggle=True, text="")
-    row.prop(params, "ik_layers", index=19, toggle=True, text="")
-    row.prop(params, "ik_layers", index=20, toggle=True, text="")
-    row.prop(params, "ik_layers", index=21, toggle=True, text="")
-    row.prop(params, "ik_layers", index=22, toggle=True, text="")
-    row.prop(params, "ik_layers", index=23, toggle=True, text="")
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=8, toggle=True, text="")
-    row.prop(params, "ik_layers", index=9, toggle=True, text="")
-    row.prop(params, "ik_layers", index=10, toggle=True, text="")
-    row.prop(params, "ik_layers", index=11, toggle=True, text="")
-    row.prop(params, "ik_layers", index=12, toggle=True, text="")
-    row.prop(params, "ik_layers", index=13, toggle=True, text="")
-    row.prop(params, "ik_layers", index=14, toggle=True, text="")
-    row.prop(params, "ik_layers", index=15, toggle=True, text="")
-    row = col.row(align=True)
-    row.prop(params, "ik_layers", index=24, toggle=True, text="")
-    row.prop(params, "ik_layers", index=25, toggle=True, text="")
-    row.prop(params, "ik_layers", index=26, toggle=True, text="")
-    row.prop(params, "ik_layers", index=27, toggle=True, text="")
-    row.prop(params, "ik_layers", index=28, toggle=True, text="")
-    row.prop(params, "ik_layers", index=29, toggle=True, text="")
-    row.prop(params, "ik_layers", index=30, toggle=True, text="")
-    row.prop(params, "ik_layers", index=31, toggle=True, text="")
-
-    if params.use_complex_leg:
-        r = layout.row()
-        r.prop(params, "separate_hose_layers")
-
-        r = layout.row()
-        r.active = params.separate_hose_layers
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=0, toggle=True, text="")
-        row.prop(params, "hose_layers", index=1, toggle=True, text="")
-        row.prop(params, "hose_layers", index=2, toggle=True, text="")
-        row.prop(params, "hose_layers", index=3, toggle=True, text="")
-        row.prop(params, "hose_layers", index=4, toggle=True, text="")
-        row.prop(params, "hose_layers", index=5, toggle=True, text="")
-        row.prop(params, "hose_layers", index=6, toggle=True, text="")
-        row.prop(params, "hose_layers", index=7, toggle=True, text="")
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=16, toggle=True, text="")
-        row.prop(params, "hose_layers", index=17, toggle=True, text="")
-        row.prop(params, "hose_layers", index=18, toggle=True, text="")
-        row.prop(params, "hose_layers", index=19, toggle=True, text="")
-        row.prop(params, "hose_layers", index=20, toggle=True, text="")
-        row.prop(params, "hose_layers", index=21, toggle=True, text="")
-        row.prop(params, "hose_layers", index=22, toggle=True, text="")
-        row.prop(params, "hose_layers", index=23, toggle=True, text="")
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=8, toggle=True, text="")
-        row.prop(params, "hose_layers", index=9, toggle=True, text="")
-        row.prop(params, "hose_layers", index=10, toggle=True, text="")
-        row.prop(params, "hose_layers", index=11, toggle=True, text="")
-        row.prop(params, "hose_layers", index=12, toggle=True, text="")
-        row.prop(params, "hose_layers", index=13, toggle=True, text="")
-        row.prop(params, "hose_layers", index=14, toggle=True, text="")
-        row.prop(params, "hose_layers", index=15, toggle=True, text="")
-        row = col.row(align=True)
-        row.prop(params, "hose_layers", index=24, toggle=True, text="")
-        row.prop(params, "hose_layers", index=25, toggle=True, text="")
-        row.prop(params, "hose_layers", index=26, toggle=True, text="")
-        row.prop(params, "hose_layers", index=27, toggle=True, text="")
-        row.prop(params, "hose_layers", index=28, toggle=True, text="")
-        row.prop(params, "hose_layers", index=29, toggle=True, text="")
-        row.prop(params, "hose_layers", index=30, toggle=True, text="")
-        row.prop(params, "hose_layers", index=31, toggle=True, text="")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_meta_rig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('thigh')
-    bone.head[:] = -0.0000, 0.0000, 1.0000
-    bone.tail[:] = -0.0000, -0.0500, 0.5000
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bones['thigh'] = bone.name
-    bone = arm.edit_bones.new('shin')
-    bone.head[:] = -0.0000, -0.0500, 0.5000
-    bone.tail[:] = -0.0000, 0.0000, 0.1000
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['thigh']]
-    bones['shin'] = bone.name
-    bone = arm.edit_bones.new('foot')
-    bone.head[:] = -0.0000, 0.0000, 0.1000
-    bone.tail[:] = 0.0000, -0.1200, 0.0300
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin']]
-    bones['foot'] = bone.name
-    bone = arm.edit_bones.new('heel')
-    bone.head[:] = -0.0000, 0.0000, 0.1000
-    bone.tail[:] = -0.0000, 0.0600, 0.0000
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['shin']]
-    bones['heel'] = bone.name
-    bone = arm.edit_bones.new('heel.02')
-    bone.head[:] = -0.0500, -0.0200, 0.0000
-    bone.tail[:] = 0.0500, -0.0200, 0.0000
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['heel']]
-    bones['heel.02'] = bone.name
-    bone = arm.edit_bones.new('toe')
-    bone.head[:] = 0.0000, -0.1200, 0.0300
-    bone.tail[:] = 0.0000, -0.2000, 0.0300
-    bone.roll = 3.1416
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['foot']]
-    bones['toe'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['thigh']]
-    pbone.rigify_type = 'biped.leg'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['shin']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['foot']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['heel']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['toe']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/biped/leg/deform.py b/rigify/legacy/rigs/biped/leg/deform.py
deleted file mode 100644
index cde732501dee64f6c70319aefa940a9185f37874..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/leg/deform.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from .. import limb_common
-
-from ....utils import MetarigError
-from ....utils import copy_bone
-from ....utils import connected_children_names, has_connected_children
-from ....utils import strip_org, make_deformer_name
-
-
-class Rig:
-    """ A leg deform-bone setup.
-
-    """
-    def __init__(self, obj, bone, params):
-        self.obj = obj
-        self.params = params
-
-        # Get the chain of 2 connected bones
-        leg_bones = [bone] + connected_children_names(self.obj, bone)[:2]
-
-        if len(leg_bones) != 2:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type -- leg bones != 2" % (strip_org(bone)))
-
-        # Get the foot and heel
-        foot = None
-        heel = None
-        for b in self.obj.data.bones[leg_bones[1]].children:
-            if b.use_connect is True:
-                if len(b.children) >= 1 and has_connected_children(b):
-                    foot = b.name
-                else:
-                    heel = b.name
-
-        if foot is None:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type -- could not find foot bone (that is, a bone with >1 children connected) attached to bone '%s'" % (strip_org(bone), strip_org(leg_bones[1])))
-        if heel is None:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type -- could not find heel bone (that is, a bone with no children connected) attached to bone '%s'" % (strip_org(bone), strip_org(leg_bones[1])))
-        # Get the toe
-        toe = None
-        for b in self.obj.data.bones[foot].children:
-            if b.use_connect is True:
-                toe = b.name
-
-        if toe is None:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type -- toe is None" % (strip_org(bone)))
-
-        self.org_bones = leg_bones + [foot, toe, heel]
-
-        # Get rig parameters
-        if params.separate_hose_layers:
-            layers = list(params.hose_layers)
-        else:
-            layers = None
-        use_complex_rig = params.use_complex_leg
-        knee_base_name = params.knee_base_name
-        primary_rotation_axis = params.primary_rotation_axis
-
-        # Based on common limb
-        self.rubber_hose_limb = limb_common.RubberHoseLimb(obj, self.org_bones[0], self.org_bones[1], self.org_bones[2], use_complex_rig, knee_base_name, primary_rotation_axis, layers)
-
-    def generate(self):
-        bone_list = self.rubber_hose_limb.generate()
-
-        # Set up toe
-        bpy.ops.object.mode_set(mode='EDIT')
-        toe = copy_bone(self.obj, self.org_bones[3], make_deformer_name(strip_org(self.org_bones[3])))
-        eb = self.obj.data.edit_bones
-        eb[toe].use_connect = False
-        eb[toe].parent = eb[self.org_bones[3]]
-
-        return bone_list
diff --git a/rigify/legacy/rigs/biped/leg/fk.py b/rigify/legacy/rigs/biped/leg/fk.py
deleted file mode 100644
index bf055fa50b82567202a2da70106790c23780fb2c..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/leg/fk.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-from mathutils import Vector
-
-from .. import limb_common
-
-from ....utils import MetarigError
-from ....utils import connected_children_names, has_connected_children
-from ....utils import strip_org
-from ....utils import get_layers
-from ....utils import create_widget
-
-
-class Rig:
-    """ An FK leg rig, with hinge switch.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-            Store any data or references to data that will be needed later on.
-            In particular, store references to bones that will be needed, and
-            store names of bones that will be needed.
-            Do NOT change any data in the scene.  This is a gathering phase only.
-
-        """
-        self.obj = obj
-        self.params = params
-
-        # Get the chain of 2 connected bones
-        leg_bones = [bone] + connected_children_names(self.obj, bone)[:2]
-
-        if len(leg_bones) != 2:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type" % (strip_org(bone)))
-
-        # Get the foot and heel
-        foot = None
-        heel = None
-        for b in self.obj.data.bones[leg_bones[1]].children:
-            if b.use_connect is True:
-                if len(b.children) >= 1 and has_connected_children(b):
-                    foot = b.name
-                else:
-                    heel = b.name
-
-        if foot is None or heel is None:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type" % (strip_org(bone)))
-
-        # Get the toe
-        toe = None
-        for b in self.obj.data.bones[foot].children:
-            if b.use_connect is True:
-                toe = b.name
-
-        # Get the toe
-        if toe is None:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type" % (strip_org(bone)))
-
-        self.org_bones = leg_bones + [foot, toe, heel]
-
-        # Get (optional) parent
-        if self.obj.data.bones[bone].parent is None:
-            self.org_parent = None
-        else:
-            self.org_parent = self.obj.data.bones[bone].parent.name
-
-        # Get rig parameters
-        if "layers" in params:
-            layers = get_layers(params["layers"])
-        else:
-            layers = None
-
-        primary_rotation_axis = params.primary_rotation_axis
-
-        # Leg is based on common limb
-        self.fk_limb = limb_common.FKLimb(obj, self.org_bones[0], self.org_bones[1], self.org_bones[2], primary_rotation_axis, layers)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        ctrl_bones = self.fk_limb.generate()
-        thigh = ctrl_bones[0]
-        shin = ctrl_bones[1]
-        foot = ctrl_bones[2]
-        foot_mch = ctrl_bones[3]
-
-        # Position foot control
-        bpy.ops.object.mode_set(mode='EDIT')
-        eb = self.obj.data.edit_bones
-        foot_e = eb[foot]
-        vec = Vector(eb[self.org_bones[3]].vector)
-        vec.normalize()
-        foot_e.tail = foot_e.head + (vec * foot_e.length)
-        foot_e.roll = eb[self.org_bones[3]].roll
-        bpy.ops.object.mode_set(mode='OBJECT')
-
-        # Create foot widget
-        ob = create_widget(self.obj, foot)
-        if ob is not None:
-            verts = [(0.7, 1.5, 0.0), (0.7, -0.25, 0.0), (-0.7, -0.25, 0.0), (-0.7, 1.5, 0.0), (0.7, 0.723, 0.0), (-0.7, 0.723, 0.0), (0.7, 0.0, 0.0), (-0.7, 0.0, 0.0)]
-            edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)]
-            mesh = ob.data
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = ob.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-        return [thigh, shin, foot, foot_mch]
diff --git a/rigify/legacy/rigs/biped/leg/ik.py b/rigify/legacy/rigs/biped/leg/ik.py
deleted file mode 100644
index 82422e2720547cf45bdba92aed8c6bce329d3b3c..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/leg/ik.py
+++ /dev/null
@@ -1,350 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-from mathutils import Vector
-
-from .. import limb_common
-
-from ....utils import MetarigError
-from ....utils import align_bone_x_axis
-from ....utils import copy_bone, flip_bone, put_bone
-from ....utils import connected_children_names, has_connected_children
-from ....utils import strip_org, make_mechanism_name, insert_before_lr
-from ....utils import create_widget, create_circle_widget
-
-
-class Rig:
-    """ An IK leg rig, with an optional ik/fk switch.
-
-    """
-    def __init__(self, obj, bone, params, ikfk_switch=False):
-        """ Gather and validate data about the rig.
-            Store any data or references to data that will be needed later on.
-            In particular, store references to bones that will be needed, and
-            store names of bones that will be needed.
-            Do NOT change any data in the scene.  This is a gathering phase only.
-        """
-        self.obj = obj
-        self.params = params
-        self.switch = ikfk_switch
-
-        # Get the chain of 2 connected bones
-        leg_bones = [bone] + connected_children_names(self.obj, bone)[:2]
-
-        if len(leg_bones) != 2:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type" % (strip_org(bone)))
-
-        # Get the foot and heel
-        foot = None
-        heel = None
-        rocker = None
-        for b in self.obj.data.bones[leg_bones[1]].children:
-            if b.use_connect is True:
-                if len(b.children) >= 1 and has_connected_children(b):
-                    foot = b.name
-                else:
-                    heel = b.name
-                    if len(b.children) > 0:
-                        rocker = b.children[0].name
-
-        if foot is None or heel is None:
-            print("blah")
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type" % (strip_org(bone)))
-
-        # Get the toe
-        toe = None
-        for b in self.obj.data.bones[foot].children:
-            if b.use_connect is True:
-                toe = b.name
-
-        # Get toe
-        if toe is None:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': incorrect bone configuration for rig type" % (strip_org(bone)))
-
-        self.org_bones = leg_bones + [foot, toe, heel, rocker]
-
-        # Get rig parameters
-        if params.separate_ik_layers:
-            self.layers = list(params.ik_layers)
-        else:
-            self.layers = None
-        bend_hint = params.bend_hint
-        primary_rotation_axis = params.primary_rotation_axis
-        pole_target_base_name = self.params.knee_base_name + "_target"
-
-        # Leg is based on common limb
-        self.ik_limb = limb_common.IKLimb(obj, self.org_bones[0], self.org_bones[1], self.org_bones[2], self.org_bones[2], pole_target_base_name, primary_rotation_axis, bend_hint, self.layers, ikfk_switch)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-        """
-        # Generate base IK limb
-        bone_list = self.ik_limb.generate()
-        thigh = bone_list[0]
-        shin = bone_list[1]
-        foot = bone_list[2]
-        foot_mch = bone_list[3]
-        pole = bone_list[4]
-        # vispole = bone_list[5]
-        # visfoot = bone_list[6]
-
-        # Build IK foot rig
-        bpy.ops.object.mode_set(mode='EDIT')
-        make_rocker = False
-        if self.org_bones[5] is not None:
-            make_rocker = True
-
-        # Create the bones
-        toe = copy_bone(self.obj, self.org_bones[3], strip_org(self.org_bones[3]))
-        toe_parent = copy_bone(self.obj, self.org_bones[2], make_mechanism_name(strip_org(self.org_bones[3] + ".parent")))
-        toe_parent_socket1 = copy_bone(self.obj, self.org_bones[2], make_mechanism_name(strip_org(self.org_bones[3] + ".socket1")))
-        toe_parent_socket2 = copy_bone(self.obj, self.org_bones[2], make_mechanism_name(strip_org(self.org_bones[3] + ".socket2")))
-
-        foot_roll = copy_bone(self.obj, self.org_bones[4], strip_org(insert_before_lr(self.org_bones[2], "_roll.ik")))
-        roll1 = copy_bone(self.obj, self.org_bones[4], make_mechanism_name(strip_org(self.org_bones[2] + ".roll.01")))
-        roll2 = copy_bone(self.obj, self.org_bones[4], make_mechanism_name(strip_org(self.org_bones[2] + ".roll.02")))
-
-        if make_rocker:
-            rocker1 = copy_bone(self.obj, self.org_bones[5], make_mechanism_name(strip_org(self.org_bones[2] + ".rocker.01")))
-            rocker2 = copy_bone(self.obj, self.org_bones[5], make_mechanism_name(strip_org(self.org_bones[2] + ".rocker.02")))
-
-        # Get edit bones
-        eb = self.obj.data.edit_bones
-
-        org_foot_e = eb[self.org_bones[2]]
-        foot_e = eb[foot]
-        foot_ik_target_e = eb[foot_mch]
-        toe_e = eb[toe]
-        toe_parent_e = eb[toe_parent]
-        toe_parent_socket1_e = eb[toe_parent_socket1]
-        toe_parent_socket2_e = eb[toe_parent_socket2]
-        foot_roll_e = eb[foot_roll]
-        roll1_e = eb[roll1]
-        roll2_e = eb[roll2]
-        if make_rocker:
-            rocker1_e = eb[rocker1]
-            rocker2_e = eb[rocker2]
-
-        # Parenting
-        foot_ik_target_e.use_connect = False
-        foot_ik_target_e.parent = roll2_e
-
-        toe_e.parent = toe_parent_e
-        toe_parent_e.use_connect = False
-        toe_parent_e.parent = toe_parent_socket1_e
-        toe_parent_socket1_e.use_connect = False
-        toe_parent_socket1_e.parent = roll1_e
-        toe_parent_socket2_e.use_connect = False
-        toe_parent_socket2_e.parent = eb[self.org_bones[2]]
-
-        foot_roll_e.use_connect = False
-        foot_roll_e.parent = foot_e
-
-        roll1_e.use_connect = False
-        roll1_e.parent = foot_e
-
-        roll2_e.use_connect = False
-        roll2_e.parent = roll1_e
-
-        if make_rocker:
-            rocker1_e.use_connect = False
-            rocker2_e.use_connect = False
-
-            roll1_e.parent = rocker2_e
-            rocker2_e.parent = rocker1_e
-            rocker1_e.parent = foot_e
-
-        # Positioning
-        vec = Vector(toe_e.vector)
-        vec.normalize()
-        foot_e.tail = foot_e.head + (vec * foot_e.length)
-        foot_e.roll = toe_e.roll
-
-        flip_bone(self.obj, toe_parent_socket1)
-        flip_bone(self.obj, toe_parent_socket2)
-        toe_parent_socket1_e.head = Vector(org_foot_e.tail)
-        toe_parent_socket2_e.head = Vector(org_foot_e.tail)
-        toe_parent_socket1_e.tail = Vector(org_foot_e.tail) + (Vector((0, 0, 1)) * foot_e.length / 2)
-        toe_parent_socket2_e.tail = Vector(org_foot_e.tail) + (Vector((0, 0, 1)) * foot_e.length / 3)
-        toe_parent_socket2_e.roll = toe_parent_socket1_e.roll
-
-        tail = Vector(roll1_e.tail)
-        roll1_e.tail = Vector(org_foot_e.tail)
-        roll1_e.tail = Vector(org_foot_e.tail)
-        roll1_e.head = tail
-        roll2_e.head = Vector(org_foot_e.tail)
-        foot_roll_e.head = Vector(org_foot_e.tail)
-        put_bone(self.obj, foot_roll, roll1_e.head)
-        foot_roll_e.length /= 2
-
-        roll_axis = roll1_e.vector.cross(org_foot_e.vector)
-        align_bone_x_axis(self.obj, roll1, roll_axis)
-        align_bone_x_axis(self.obj, roll2, roll_axis)
-        foot_roll_e.roll = roll2_e.roll
-
-        if make_rocker:
-            d = toe_e.y_axis.dot(rocker1_e.x_axis)
-            if d >= 0.0:
-                flip_bone(self.obj, rocker2)
-            else:
-                flip_bone(self.obj, rocker1)
-
-        # Object mode, get pose bones
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        foot_p = pb[foot]
-        foot_roll_p = pb[foot_roll]
-        roll1_p = pb[roll1]
-        roll2_p = pb[roll2]
-        if make_rocker:
-            rocker1_p = pb[rocker1]
-            rocker2_p = pb[rocker2]
-        toe_p = pb[toe]
-        # toe_parent_p = pb[toe_parent]
-        toe_parent_socket1_p = pb[toe_parent_socket1]
-
-        # Foot roll control only rotates on x-axis, or x and y if rocker.
-        foot_roll_p.rotation_mode = 'XYZ'
-        if make_rocker:
-            foot_roll_p.lock_rotation = False, False, True
-        else:
-            foot_roll_p.lock_rotation = False, True, True
-        foot_roll_p.lock_location = True, True, True
-        foot_roll_p.lock_scale = True, True, True
-
-        # roll and rocker bones set to euler rotation
-        roll1_p.rotation_mode = 'XYZ'
-        roll2_p.rotation_mode = 'XYZ'
-        if make_rocker:
-            rocker1_p.rotation_mode = 'XYZ'
-            rocker2_p.rotation_mode = 'XYZ'
-
-        # toe_parent constraint
-        con = toe_parent_socket1_p.constraints.new('COPY_LOCATION')
-        con.name = "copy_location"
-        con.target = self.obj
-        con.subtarget = toe_parent_socket2
-
-        con = toe_parent_socket1_p.constraints.new('COPY_SCALE')
-        con.name = "copy_scale"
-        con.target = self.obj
-        con.subtarget = toe_parent_socket2
-
-        con = toe_parent_socket1_p.constraints.new('COPY_TRANSFORMS')  # drive with IK switch
-        con.name = "fk"
-        con.target = self.obj
-        con.subtarget = toe_parent_socket2
-
-        fcurve = con.driver_add("influence")
-        driver = fcurve.driver
-        var = driver.variables.new()
-        driver.type = 'AVERAGE'
-        var.name = "var"
-        var.targets[0].id_type = 'OBJECT'
-        var.targets[0].id = self.obj
-        var.targets[0].data_path = foot_p.path_from_id() + '["ikfk_switch"]'
-        mod = fcurve.modifiers[0]
-        mod.poly_order = 1
-        mod.coefficients[0] = 1.0
-        mod.coefficients[1] = -1.0
-
-        # Foot roll drivers
-        fcurve = roll1_p.driver_add("rotation_euler", 0)
-        driver = fcurve.driver
-        var = driver.variables.new()
-        driver.type = 'SCRIPTED'
-        driver.expression = "min(0,var)"
-        var.name = "var"
-        var.targets[0].id_type = 'OBJECT'
-        var.targets[0].id = self.obj
-        var.targets[0].data_path = foot_roll_p.path_from_id() + '.rotation_euler[0]'
-
-        fcurve = roll2_p.driver_add("rotation_euler", 0)
-        driver = fcurve.driver
-        var = driver.variables.new()
-        driver.type = 'SCRIPTED'
-        driver.expression = "max(0,var)"
-        var.name = "var"
-        var.targets[0].id_type = 'OBJECT'
-        var.targets[0].id = self.obj
-        var.targets[0].data_path = foot_roll_p.path_from_id() + '.rotation_euler[0]'
-
-        if make_rocker:
-            fcurve = rocker1_p.driver_add("rotation_euler", 0)
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'SCRIPTED'
-            driver.expression = "max(0,-var)"
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = foot_roll_p.path_from_id() + '.rotation_euler[1]'
-
-            fcurve = rocker2_p.driver_add("rotation_euler", 0)
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'SCRIPTED'
-            driver.expression = "max(0,var)"
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = foot_roll_p.path_from_id() + '.rotation_euler[1]'
-
-        # Constrain toe bone to toe control
-        con = pb[self.org_bones[3]].constraints.new('COPY_TRANSFORMS')
-        con.name = "copy_transforms"
-        con.target = self.obj
-        con.subtarget = toe
-
-        # Set layers if specified
-        if self.layers:
-            foot_roll_p.bone.layers = self.layers
-            toe_p.bone.layers = [(i[0] or i[1]) for i in zip(toe_p.bone.layers, self.layers)]  # Both FK and IK layers
-
-        # Create widgets
-        create_circle_widget(self.obj, toe, radius=0.7, head_tail=0.5)
-
-        ob = create_widget(self.obj, foot_roll)
-        if ob is not None:
-            verts = [(0.3999999761581421, 0.766044557094574, 0.6427875757217407), (0.17668449878692627, 3.823702598992895e-08, 3.2084670920085046e-08), (-0.17668461799621582, 9.874240447516058e-08, 8.285470443070153e-08), (-0.39999961853027344, 0.7660449147224426, 0.6427879333496094), (0.3562471270561218, 0.6159579753875732, 0.5168500542640686), (-0.35624682903289795, 0.6159582138061523, 0.5168502926826477), (0.20492683351039886, 0.09688037633895874, 0.0812922865152359), (-0.20492687821388245, 0.0968804731965065, 0.08129236847162247)]
-            edges = [(1, 2), (0, 3), (0, 4), (3, 5), (1, 6), (4, 6), (2, 7), (5, 7)]
-            mesh = ob.data
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = ob.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-        ob = create_widget(self.obj, foot)
-        if ob is not None:
-            verts = [(0.7, 1.5, 0.0), (0.7, -0.25, 0.0), (-0.7, -0.25, 0.0), (-0.7, 1.5, 0.0), (0.7, 0.723, 0.0), (-0.7, 0.723, 0.0), (0.7, 0.0, 0.0), (-0.7, 0.0, 0.0)]
-            edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)]
-            mesh = ob.data
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = ob.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-        return [thigh, shin, foot, pole, foot_roll, foot_mch]
diff --git a/rigify/legacy/rigs/biped/limb_common.py b/rigify/legacy/rigs/biped/limb_common.py
deleted file mode 100644
index 75dc3969d720199cb3006acdd1e7d3c609d2f3b6..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/biped/limb_common.py
+++ /dev/null
@@ -1,1261 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-from math import pi
-
-import bpy
-from mathutils import Vector
-
-from ...utils import angle_on_plane, align_bone_roll, align_bone_z_axis
-from ...utils import new_bone, copy_bone, put_bone, make_nonscaling_child
-from ...utils import strip_org, make_mechanism_name, make_deformer_name, insert_before_lr
-from ...utils import create_widget, create_limb_widget, create_line_widget, create_sphere_widget
-
-from ....utils.mechanism import make_property
-
-class FKLimb:
-    def __init__(self, obj, bone1, bone2, bone3, primary_rotation_axis, layers):
-        self.obj = obj
-
-        self.org_bones = [bone1, bone2, bone3]
-
-        # Get (optional) parent
-        if self.obj.data.bones[bone1].parent is None:
-            self.org_parent = None
-        else:
-            self.org_parent = self.obj.data.bones[bone1].parent.name
-
-        # Get the rig parameters
-        self.layers = layers
-        self.primary_rotation_axis = primary_rotation_axis
-
-    def generate(self):
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Create non-scaling parent bone
-        if self.org_parent is not None:
-            loc = Vector(self.obj.data.edit_bones[self.org_bones[0]].head)
-            parent = make_nonscaling_child(self.obj, self.org_parent, loc, "_fk")
-        else:
-            parent = None
-
-        # Create the control bones
-        ulimb = copy_bone(self.obj, self.org_bones[0], strip_org(insert_before_lr(self.org_bones[0], ".fk")))
-        flimb = copy_bone(self.obj, self.org_bones[1], strip_org(insert_before_lr(self.org_bones[1], ".fk")))
-        elimb = copy_bone(self.obj, self.org_bones[2], strip_org(insert_before_lr(self.org_bones[2], ".fk")))
-
-        # Create the end-limb mechanism bone
-        elimb_mch = copy_bone(self.obj, self.org_bones[2], make_mechanism_name(strip_org(self.org_bones[2])))
-
-        # Create the anti-stretch bones
-        # These sit between a parent and its child, and counteract the
-        # stretching of the parent so that the child is unaffected
-        fantistr = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[0], "_antistr.fk"))))
-        eantistr = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], "_antistr.fk"))))
-
-        # Create the hinge bones
-        if parent is not None:
-            socket1 = copy_bone(self.obj, ulimb, make_mechanism_name(ulimb + ".socket1"))
-            socket2 = copy_bone(self.obj, ulimb, make_mechanism_name(ulimb + ".socket2"))
-
-        # Get edit bones
-        eb = self.obj.data.edit_bones
-
-        ulimb_e = eb[ulimb]
-        flimb_e = eb[flimb]
-        elimb_e = eb[elimb]
-
-        fantistr_e = eb[fantistr]
-        eantistr_e = eb[eantistr]
-
-        elimb_mch_e = eb[elimb_mch]
-
-        if parent is not None:
-            socket1_e = eb[socket1]
-            socket2_e = eb[socket2]
-
-        # Parenting
-        elimb_mch_e.use_connect = False
-        elimb_mch_e.parent = elimb_e
-
-        elimb_e.use_connect = False
-        elimb_e.parent = eantistr_e
-
-        eantistr_e.use_connect = False
-        eantistr_e.parent = flimb_e
-
-        flimb_e.use_connect = False
-        flimb_e.parent = fantistr_e
-
-        fantistr_e.use_connect = False
-        fantistr_e.parent = ulimb_e
-
-        if parent is not None:
-            socket1_e.use_connect = False
-            socket1_e.parent = eb[parent]
-
-            socket2_e.use_connect = False
-            socket2_e.parent = None
-
-            ulimb_e.use_connect = False
-            ulimb_e.parent = socket2_e
-
-        # Positioning
-        fantistr_e.length /= 8
-        put_bone(self.obj, fantistr, Vector(ulimb_e.tail))
-        eantistr_e.length /= 8
-        put_bone(self.obj, eantistr, Vector(flimb_e.tail))
-
-        if parent is not None:
-            socket1_e.length /= 4
-            socket2_e.length /= 3
-
-        # Object mode, get pose bones
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        ulimb_p = pb[ulimb]
-        flimb_p = pb[flimb]
-        elimb_p = pb[elimb]
-
-        fantistr_p = pb[fantistr]
-        eantistr_p = pb[eantistr]
-
-        if parent is not None:
-            socket2_p = pb[socket2]
-
-        # Lock axes
-        ulimb_p.lock_location = (True, True, True)
-        flimb_p.lock_location = (True, True, True)
-        elimb_p.lock_location = (True, True, True)
-
-        # Set the elbow to only bend on the x-axis.
-        flimb_p.rotation_mode = 'XYZ'
-        if 'X' in self.primary_rotation_axis:
-            flimb_p.lock_rotation = (False, True, True)
-        elif 'Y' in self.primary_rotation_axis:
-            flimb_p.lock_rotation = (True, False, True)
-        else:
-            flimb_p.lock_rotation = (True, True, False)
-
-        # Set up custom properties
-        if parent is not None:
-            make_property(ulimb_p, "isolate", 0.0)
-
-        make_property(ulimb_p, "stretch_length", 1.0, min=0.05, max=20.0, soft_min=0.25, soft_max=4.0)
-
-        # Stretch drivers
-        def add_stretch_drivers(pose_bone):
-            driver = pose_bone.driver_add("scale", 1).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = ulimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "stretch_length"
-
-            driver = pose_bone.driver_add("scale", 0).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = ulimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "1/sqrt(stretch_length)"
-
-            driver = pose_bone.driver_add("scale", 2).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = ulimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "1/sqrt(stretch_length)"
-
-        def add_antistretch_drivers(pose_bone):
-            driver = pose_bone.driver_add("scale", 1).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = ulimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "1/stretch_length"
-
-            driver = pose_bone.driver_add("scale", 0).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = ulimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "sqrt(stretch_length)"
-
-            driver = pose_bone.driver_add("scale", 2).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = ulimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "sqrt(stretch_length)"
-
-        add_stretch_drivers(ulimb_p)
-        add_stretch_drivers(flimb_p)
-        add_antistretch_drivers(fantistr_p)
-        add_antistretch_drivers(eantistr_p)
-
-        # Hinge constraints / drivers
-        if parent is not None:
-            con = socket2_p.constraints.new('COPY_LOCATION')
-            con.name = "copy_location"
-            con.target = self.obj
-            con.subtarget = socket1
-
-            con = socket2_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "isolate_off"
-            con.target = self.obj
-            con.subtarget = socket1
-
-            # Driver
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'AVERAGE'
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = ulimb_p.path_from_id() + '["isolate"]'
-            mod = fcurve.modifiers[0]
-            mod.poly_order = 1
-            mod.coefficients[0] = 1.0
-            mod.coefficients[1] = -1.0
-
-        # Constrain org bones to controls
-        con = pb[self.org_bones[0]].constraints.new('COPY_TRANSFORMS')
-        con.name = "fk"
-        con.target = self.obj
-        con.subtarget = ulimb
-
-        con = pb[self.org_bones[1]].constraints.new('COPY_TRANSFORMS')
-        con.name = "fk"
-        con.target = self.obj
-        con.subtarget = flimb
-
-        con = pb[self.org_bones[2]].constraints.new('COPY_TRANSFORMS')
-        con.name = "fk"
-        con.target = self.obj
-        con.subtarget = elimb_mch
-
-        # Set layers if specified
-        if self.layers:
-            ulimb_p.bone.layers = self.layers
-            flimb_p.bone.layers = self.layers
-            elimb_p.bone.layers = self.layers
-
-        # Create control widgets
-        create_limb_widget(self.obj, ulimb)
-        create_limb_widget(self.obj, flimb)
-
-        ob = create_widget(self.obj, elimb)
-        if ob is not None:
-            verts = [(0.7, 1.5, 0.0), (0.7, -0.25, 0.0), (-0.7, -0.25, 0.0), (-0.7, 1.5, 0.0), (0.7, 0.723, 0.0), (-0.7, 0.723, 0.0), (0.7, 0.0, 0.0), (-0.7, 0.0, 0.0)]
-            edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)]
-            mesh = ob.data
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = ob.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-        return [ulimb, flimb, elimb, elimb_mch]
-
-
-class IKLimb:
-    """ An IK limb rig, with an optional ik/fk switch.
-
-    """
-    def __init__(self, obj, bone1, bone2, bone3, pole_parent, pole_target_base_name, primary_rotation_axis, bend_hint, layers, ikfk_switch=False):
-        self.obj = obj
-        self.switch = ikfk_switch
-
-        # Get the chain of 3 connected bones
-        self.org_bones = [bone1, bone2, bone3]
-
-        # Get (optional) parent
-        if self.obj.data.bones[bone1].parent is None:
-            self.org_parent = None
-        else:
-            self.org_parent = self.obj.data.bones[bone1].parent.name
-
-        self.pole_parent = pole_parent
-
-        # Get the rig parameters
-        self.pole_target_base_name = pole_target_base_name
-        self.layers = layers
-        self.bend_hint = bend_hint
-        self.primary_rotation_axis = primary_rotation_axis
-
-    def generate(self):
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Create non-scaling parent bone
-        if self.org_parent is not None:
-            loc = Vector(self.obj.data.edit_bones[self.org_bones[0]].head)
-            parent = make_nonscaling_child(self.obj, self.org_parent, loc, "_ik")
-            if self.pole_parent is None:
-                self.pole_parent = parent
-        else:
-            parent = None
-
-        # Create the bones
-        ulimb = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[0], ".ik"))))
-        flimb = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], ".ik"))))
-        elimb = copy_bone(self.obj, self.org_bones[2], strip_org(insert_before_lr(self.org_bones[2], ".ik")))
-        elimb_mch = copy_bone(self.obj, self.org_bones[2], make_mechanism_name(strip_org(self.org_bones[2])))
-
-        ulimb_nostr = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[0], ".nostr.ik"))))
-        flimb_nostr = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], ".nostr.ik"))))
-
-        ulimb_str = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[0], ".stretch.ik"))))
-        flimb_str = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], ".stretch.ik"))))
-
-        pole_target_name = self.pole_target_base_name + "." + insert_before_lr(self.org_bones[0], ".ik").split(".", 1)[1]
-        pole = copy_bone(self.obj, self.org_bones[0], pole_target_name)
-        if self.pole_parent == self.org_bones[2]:
-            self.pole_parent = elimb_mch
-        if self.pole_parent is not None:
-            pole_par = copy_bone(self.obj, self.pole_parent, make_mechanism_name(insert_before_lr(pole_target_name, "_parent")))
-
-        viselimb = copy_bone(self.obj, self.org_bones[2], "VIS-" + strip_org(insert_before_lr(self.org_bones[2], ".ik")))
-        vispole = copy_bone(self.obj, self.org_bones[1], "VIS-" + strip_org(insert_before_lr(self.org_bones[0], "_pole.ik")))
-
-        # Get edit bones
-        eb = self.obj.data.edit_bones
-
-        if parent is not None:
-            parent_e = eb[parent]
-        ulimb_e = eb[ulimb]
-        flimb_e = eb[flimb]
-        elimb_e = eb[elimb]
-        elimb_mch_e = eb[elimb_mch]
-        ulimb_nostr_e = eb[ulimb_nostr]
-        flimb_nostr_e = eb[flimb_nostr]
-        ulimb_str_e = eb[ulimb_str]
-        flimb_str_e = eb[flimb_str]
-        pole_e = eb[pole]
-        if self.pole_parent is not None:
-            pole_par_e = eb[pole_par]
-        viselimb_e = eb[viselimb]
-        vispole_e = eb[vispole]
-
-        # Parenting
-        ulimb_e.use_connect = False
-        ulimb_nostr_e.use_connect = False
-        if parent is not None:
-            ulimb_e.parent = parent_e
-            ulimb_nostr_e.parent = parent_e
-
-        flimb_e.parent = ulimb_e
-        flimb_nostr_e.parent = ulimb_nostr_e
-
-        elimb_e.use_connect = False
-        elimb_e.parent = None
-
-        elimb_mch_e.use_connect = False
-        elimb_mch_e.parent = elimb_e
-
-        ulimb_str_e.use_connect = False
-        ulimb_str_e.parent = ulimb_e.parent
-
-        flimb_str_e.use_connect = False
-        flimb_str_e.parent = ulimb_e.parent
-
-        pole_e.use_connect = False
-        if self.pole_parent is not None:
-            pole_par_e.parent = None
-            pole_e.parent = pole_par_e
-
-        viselimb_e.use_connect = False
-        viselimb_e.parent = None
-
-        vispole_e.use_connect = False
-        vispole_e.parent = None
-
-        # Misc
-        elimb_e.use_local_location = False
-
-        viselimb_e.hide_select = True
-        vispole_e.hide_select = True
-
-        # Positioning
-        v1 = flimb_e.tail - ulimb_e.head
-        if 'X' in self.primary_rotation_axis or 'Y' in self.primary_rotation_axis:
-            v2 = v1.cross(flimb_e.x_axis)
-            if (v2 @ flimb_e.z_axis) > 0.0:
-                v2 *= -1.0
-        else:
-            v2 = v1.cross(flimb_e.z_axis)
-            if (v2 @ flimb_e.x_axis) < 0.0:
-                v2 *= -1.0
-        v2.normalize()
-        v2 *= v1.length
-
-        if '-' in self.primary_rotation_axis:
-            v2 *= -1
-
-        pole_e.head = flimb_e.head + v2
-        pole_e.tail = pole_e.head + (Vector((0, 1, 0)) * (v1.length / 8))
-        pole_e.roll = 0.0
-        if parent is not None:
-            pole_par_e.length *= 0.75
-
-        viselimb_e.tail = viselimb_e.head + Vector((0, 0, v1.length / 32))
-        vispole_e.tail = vispole_e.head + Vector((0, 0, v1.length / 32))
-
-        # Determine the pole offset value
-        plane = (flimb_e.tail - ulimb_e.head).normalized()
-        vec1 = ulimb_e.x_axis.normalized()
-        vec2 = (pole_e.head - ulimb_e.head).normalized()
-        pole_offset = angle_on_plane(plane, vec1, vec2)
-
-        # Object mode, get pose bones
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        ulimb_p = pb[ulimb]
-        flimb_p = pb[flimb]
-        elimb_p = pb[elimb]
-        ulimb_nostr_p = pb[ulimb_nostr]
-        flimb_nostr_p = pb[flimb_nostr]
-        ulimb_str_p = pb[ulimb_str]
-        flimb_str_p = pb[flimb_str]
-        pole_p = pb[pole]
-        if self.pole_parent is not None:
-            pole_par_p = pb[pole_par]
-        viselimb_p = pb[viselimb]
-        vispole_p = pb[vispole]
-
-        # Set the elbow to only bend on the primary axis
-        if 'X' in self.primary_rotation_axis:
-            flimb_p.lock_ik_y = True
-            flimb_p.lock_ik_z = True
-            flimb_nostr_p.lock_ik_y = True
-            flimb_nostr_p.lock_ik_z = True
-        elif 'Y' in self.primary_rotation_axis:
-            flimb_p.lock_ik_x = True
-            flimb_p.lock_ik_z = True
-            flimb_nostr_p.lock_ik_x = True
-            flimb_nostr_p.lock_ik_z = True
-        else:
-            flimb_p.lock_ik_x = True
-            flimb_p.lock_ik_y = True
-            flimb_nostr_p.lock_ik_x = True
-            flimb_nostr_p.lock_ik_y = True
-
-        # Limb stretches
-        ulimb_nostr_p.ik_stretch = 0.0
-        flimb_nostr_p.ik_stretch = 0.0
-
-        # This next bit is weird.  The values calculated cause
-        # ulimb and flimb to preserve their relative lengths
-        # while stretching.
-        l1 = ulimb_p.length
-        l2 = flimb_p.length
-        if l1 < l2:
-            ulimb_p.ik_stretch = (l1 ** (1 / 3)) / (l2 ** (1 / 3))
-            flimb_p.ik_stretch = 1.0
-        else:
-            ulimb_p.ik_stretch = 1.0
-            flimb_p.ik_stretch = (l2 ** (1 / 3)) / (l1 ** (1 / 3))
-
-        # Pole target only translates
-        pole_p.lock_location = False, False, False
-        pole_p.lock_rotation = True, True, True
-        pole_p.lock_rotation_w = True
-        pole_p.lock_scale = True, True, True
-
-        # Set up custom properties
-        if self.switch is True:
-            make_property(elimb_p, "ikfk_switch", 0.0)
-
-        if self.pole_parent is not None:
-            make_property(pole_p, "follow", 1.0)
-
-        make_property(elimb_p, "stretch_length", 1.0, min=0.05, max=20.0, soft_min=0.25, soft_max=4.0)
-        make_property(elimb_p, "auto_stretch", 1.0)
-
-        # Stretch parameter drivers
-        def add_stretch_drivers(pose_bone):
-            driver = pose_bone.driver_add("scale", 1).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = elimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "stretch_length"
-
-            driver = pose_bone.driver_add("scale", 0).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = elimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "stretch_length"
-
-            driver = pose_bone.driver_add("scale", 2).driver
-            var = driver.variables.new()
-            var.name = "stretch_length"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = elimb_p.path_from_id() + '["stretch_length"]'
-            driver.type = 'SCRIPTED'
-            driver.expression = "stretch_length"
-        add_stretch_drivers(ulimb_nostr_p)
-
-        # Bend direction hint
-        def add_bend_hint(pose_bone, axis):
-            con = pose_bone.constraints.new('LIMIT_ROTATION')
-            con.name = "bend_hint"
-            con.owner_space = 'LOCAL'
-            if axis == 'X':
-                con.use_limit_x = True
-                con.min_x = pi / 10
-                con.max_x = pi / 10
-            elif axis == '-X':
-                con.use_limit_x = True
-                con.min_x = -pi / 10
-                con.max_x = -pi / 10
-            elif axis == 'Y':
-                con.use_limit_y = True
-                con.min_y = pi / 10
-                con.max_y = pi / 10
-            elif axis == '-Y':
-                con.use_limit_y = True
-                con.min_y = -pi / 10
-                con.max_y = -pi / 10
-            elif axis == 'Z':
-                con.use_limit_z = True
-                con.min_z = pi / 10
-                con.max_z = pi / 10
-            elif axis == '-Z':
-                con.use_limit_z = True
-                con.min_z = -pi / 10
-                con.max_z = -pi / 10
-        if self.bend_hint:
-            add_bend_hint(flimb_p, self.primary_rotation_axis)
-            add_bend_hint(flimb_nostr_p, self.primary_rotation_axis)
-
-        # Constrain normal IK chain to no-stretch IK chain
-        con = ulimb_p.constraints.new('COPY_TRANSFORMS')
-        con.name = "pre_stretch"
-        con.target = self.obj
-        con.subtarget = ulimb_nostr
-
-        con = flimb_p.constraints.new('COPY_TRANSFORMS')
-        con.name = "pre_stretch"
-        con.target = self.obj
-        con.subtarget = flimb_nostr
-
-        # IK Constraints
-        con = flimb_nostr_p.constraints.new('IK')
-        con.name = "ik"
-        con.target = self.obj
-        con.subtarget = elimb_mch
-        con.pole_target = self.obj
-        con.pole_subtarget = pole
-        con.pole_angle = pole_offset
-        con.chain_count = 2
-
-        con = flimb_p.constraints.new('IK')
-        con.name = "ik"
-        con.target = self.obj
-        con.subtarget = elimb_mch
-        con.chain_count = 2
-
-        # Driver to enable/disable auto stretching IK chain
-        fcurve = con.driver_add("influence")
-        driver = fcurve.driver
-        var = driver.variables.new()
-        driver.type = 'AVERAGE'
-        var.name = "var"
-        var.targets[0].id_type = 'OBJECT'
-        var.targets[0].id = self.obj
-        var.targets[0].data_path = elimb_p.path_from_id() + '["auto_stretch"]'
-
-        # Stretch bone constraints
-        con = ulimb_str_p.constraints.new('COPY_TRANSFORMS')
-        con.name = "anchor"
-        con.target = self.obj
-        con.subtarget = ulimb
-        con = ulimb_str_p.constraints.new('MAINTAIN_VOLUME')
-        con.name = "stretch"
-        con.owner_space = 'LOCAL'
-
-        con = flimb_str_p.constraints.new('COPY_TRANSFORMS')
-        con.name = "anchor"
-        con.target = self.obj
-        con.subtarget = flimb
-        con = flimb_str_p.constraints.new('MAINTAIN_VOLUME')
-        con.name = "stretch"
-        con.owner_space = 'LOCAL'
-
-        # Pole target parent
-        if self.pole_parent is not None:
-            con = pole_par_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "parent"
-            con.target = self.obj
-            con.subtarget = self.pole_parent
-
-            driver = con.driver_add("influence").driver
-            var = driver.variables.new()
-            var.name = "follow"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = pole_p.path_from_id() + '["follow"]'
-            driver.type = 'SUM'
-
-        # Constrain org bones
-        con = pb[self.org_bones[0]].constraints.new('COPY_TRANSFORMS')
-        con.name = "ik"
-        con.target = self.obj
-        con.subtarget = ulimb_str
-        if self.switch is True:
-            # IK/FK switch driver
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'AVERAGE'
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = elimb_p.path_from_id() + '["ikfk_switch"]'
-
-        con = pb[self.org_bones[1]].constraints.new('COPY_TRANSFORMS')
-        con.name = "ik"
-        con.target = self.obj
-        con.subtarget = flimb_str
-        if self.switch is True:
-            # IK/FK switch driver
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'AVERAGE'
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = elimb_p.path_from_id() + '["ikfk_switch"]'
-
-        con = pb[self.org_bones[2]].constraints.new('COPY_TRANSFORMS')
-        con.name = "ik"
-        con.target = self.obj
-        con.subtarget = elimb_mch
-        if self.switch is True:
-            # IK/FK switch driver
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'AVERAGE'
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = elimb_p.path_from_id() + '["ikfk_switch"]'
-
-        # VIS limb-end constraints
-        con = viselimb_p.constraints.new('COPY_LOCATION')
-        con.name = "copy_loc"
-        con.target = self.obj
-        con.subtarget = self.org_bones[2]
-
-        con = viselimb_p.constraints.new('STRETCH_TO')
-        con.name = "stretch_to"
-        con.target = self.obj
-        con.subtarget = elimb
-        con.volume = 'NO_VOLUME'
-        con.rest_length = viselimb_p.length
-
-        # VIS pole constraints
-        con = vispole_p.constraints.new('COPY_LOCATION')
-        con.name = "copy_loc"
-        con.target = self.obj
-        con.subtarget = self.org_bones[1]
-
-        con = vispole_p.constraints.new('STRETCH_TO')
-        con.name = "stretch_to"
-        con.target = self.obj
-        con.subtarget = pole
-        con.volume = 'NO_VOLUME'
-        con.rest_length = vispole_p.length
-
-        # Set layers if specified
-        if self.layers:
-            elimb_p.bone.layers = self.layers
-            pole_p.bone.layers = self.layers
-            viselimb_p.bone.layers = self.layers
-            vispole_p.bone.layers = self.layers
-
-        # Create widgets
-        create_line_widget(self.obj, vispole)
-        create_line_widget(self.obj, viselimb)
-        create_sphere_widget(self.obj, pole)
-
-        ob = create_widget(self.obj, elimb)
-        if ob is not None:
-            verts = [(0.7, 1.5, 0.0), (0.7, -0.25, 0.0), (-0.7, -0.25, 0.0), (-0.7, 1.5, 0.0), (0.7, 0.723, 0.0), (-0.7, 0.723, 0.0), (0.7, 0.0, 0.0), (-0.7, 0.0, 0.0)]
-            edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)]
-            mesh = ob.data
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = ob.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-        return [ulimb, flimb, elimb, elimb_mch, pole, vispole, viselimb]
-
-
-class RubberHoseLimb:
-    def __init__(self, obj, bone1, bone2, bone3, use_complex_limb, junc_base_name, primary_rotation_axis, layers):
-        self.obj = obj
-
-        # Get the chain of 3 connected bones
-        self.org_bones = [bone1, bone2, bone3]
-
-        # Get (optional) parent
-        if self.obj.data.bones[bone1].parent is None:
-            self.org_parent = None
-        else:
-            self.org_parent = self.obj.data.bones[bone1].parent.name
-
-        # Get rig parameters
-        self.layers = layers
-        self.primary_rotation_axis = primary_rotation_axis
-        self.use_complex_limb = use_complex_limb
-        self.junc_base_name = junc_base_name
-
-    def generate(self):
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Create non-scaling parent bone
-        if self.org_parent is not None:
-            loc = Vector(self.obj.data.edit_bones[self.org_bones[0]].head)
-            parent = make_nonscaling_child(self.obj, self.org_parent, loc, "_rh")
-        else:
-            parent = None
-
-        if not self.use_complex_limb:
-            # Simple rig
-
-            # Create bones
-            ulimb = copy_bone(self.obj, self.org_bones[0], make_deformer_name(strip_org(self.org_bones[0])))
-            flimb = copy_bone(self.obj, self.org_bones[1], make_deformer_name(strip_org(self.org_bones[1])))
-            elimb = copy_bone(self.obj, self.org_bones[2], make_deformer_name(strip_org(self.org_bones[2])))
-
-            # Get edit bones
-            eb = self.obj.data.edit_bones
-
-            ulimb_e = eb[ulimb]
-            flimb_e = eb[flimb]
-            elimb_e = eb[elimb]
-
-            # Parenting
-            elimb_e.parent = flimb_e
-            elimb_e.use_connect = True
-
-            flimb_e.parent = ulimb_e
-            flimb_e.use_connect = True
-
-            if parent is not None:
-                elimb_e.use_connect = False
-                ulimb_e.parent = eb[parent]
-
-            # Object mode, get pose bones
-            bpy.ops.object.mode_set(mode='OBJECT')
-            pb = self.obj.pose.bones
-
-            ulimb_p = pb[ulimb]
-            flimb_p = pb[flimb]
-            elimb_p = pb[elimb]
-
-            # Constrain def bones to org bones
-            con = ulimb_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "def"
-            con.target = self.obj
-            con.subtarget = self.org_bones[0]
-
-            con = flimb_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "def"
-            con.target = self.obj
-            con.subtarget = self.org_bones[1]
-
-            con = elimb_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "def"
-            con.target = self.obj
-            con.subtarget = self.org_bones[2]
-
-            return []
-        else:
-            # Complex rig
-
-            # Get the .R or .L off the end of the upper limb name if it exists
-            lr = self.org_bones[0].split(".", 1)
-            if len(lr) == 1:
-                lr = ""
-            else:
-                lr = lr[1]
-
-            # Create bones
-            # Deformation bones
-            ulimb1 = copy_bone(self.obj, self.org_bones[0], make_deformer_name(strip_org(insert_before_lr(self.org_bones[0], ".01"))))
-            ulimb2 = copy_bone(self.obj, self.org_bones[0], make_deformer_name(strip_org(insert_before_lr(self.org_bones[0], ".02"))))
-            flimb1 = copy_bone(self.obj, self.org_bones[1], make_deformer_name(strip_org(insert_before_lr(self.org_bones[1], ".01"))))
-            flimb2 = copy_bone(self.obj, self.org_bones[1], make_deformer_name(strip_org(insert_before_lr(self.org_bones[1], ".02"))))
-            elimb = copy_bone(self.obj, self.org_bones[2], make_deformer_name(strip_org(self.org_bones[2])))
-
-            # Bones for switchable smooth bbone transition at elbow/knee
-            ulimb2_smoother = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[0], "_smth.02"))))
-            flimb1_smoother = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], "_smth.01"))))
-            flimb1_pos = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], ".01"))))
-
-            # Elbow/knee junction bone
-            junc = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], ".junc"))))
-
-            # Hose controls
-            uhoseend = new_bone(self.obj, strip_org(insert_before_lr(self.org_bones[0], "_hose_end")))
-            uhose = new_bone(self.obj, strip_org(insert_before_lr(self.org_bones[0], "_hose")))
-            jhose = new_bone(self.obj, self.junc_base_name + "_hose." + lr)
-            fhose = new_bone(self.obj, strip_org(insert_before_lr(self.org_bones[1], "_hose")))
-            fhoseend = new_bone(self.obj, strip_org(insert_before_lr(self.org_bones[1], "_hose_end")))
-
-            # Hose control parents
-            uhoseend_par = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(uhoseend, "_p"))))
-            uhose_par = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(uhose, "_p"))))
-            jhose_par = copy_bone(self.obj, junc, make_mechanism_name(strip_org(insert_before_lr(jhose, "_p"))))
-            fhose_par = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(fhose, "_p"))))
-            fhoseend_par = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(fhoseend, "_p"))))
-
-            # Get edit bones
-            eb = self.obj.data.edit_bones
-
-            if parent is not None:
-                parent_e = eb[parent]
-            else:
-                parent_e = None
-
-            ulimb1_e = eb[ulimb1]
-            ulimb2_e = eb[ulimb2]
-            flimb1_e = eb[flimb1]
-            flimb2_e = eb[flimb2]
-            elimb_e = eb[elimb]
-
-            ulimb2_smoother_e = eb[ulimb2_smoother]
-            flimb1_smoother_e = eb[flimb1_smoother]
-            flimb1_pos_e = eb[flimb1_pos]
-
-            junc_e = eb[junc]
-
-            uhoseend_e = eb[uhoseend]
-            uhose_e = eb[uhose]
-            jhose_e = eb[jhose]
-            fhose_e = eb[fhose]
-            fhoseend_e = eb[fhoseend]
-
-            uhoseend_par_e = eb[uhoseend_par]
-            uhose_par_e = eb[uhose_par]
-            jhose_par_e = eb[jhose_par]
-            fhose_par_e = eb[fhose_par]
-            fhoseend_par_e = eb[fhoseend_par]
-
-            # Parenting
-            if parent is not None:
-                ulimb1_e.use_connect = False
-                ulimb1_e.parent = parent_e
-
-            ulimb2_e.use_connect = False
-            ulimb2_e.parent = eb[self.org_bones[0]]
-
-            ulimb2_smoother_e.use_connect = True
-            ulimb2_smoother_e.parent = ulimb2_e
-
-            flimb1_e.use_connect = True
-            flimb1_e.parent = flimb1_smoother_e
-
-            flimb1_smoother_e.use_connect = False
-            flimb1_smoother_e.parent = flimb1_pos_e
-
-            flimb1_pos_e.use_connect = False
-            flimb1_pos_e.parent = eb[self.org_bones[1]]
-
-            flimb2_e.use_connect = False
-            flimb2_e.parent = eb[self.org_bones[1]]
-
-            elimb_e.use_connect = False
-            elimb_e.parent = eb[self.org_bones[2]]
-
-            junc_e.use_connect = False
-            junc_e.parent = eb[self.org_bones[0]]
-
-            uhoseend_e.use_connect = False
-            uhoseend_e.parent = uhoseend_par_e
-
-            uhose_e.use_connect = False
-            uhose_e.parent = uhose_par_e
-
-            jhose_e.use_connect = False
-            jhose_e.parent = jhose_par_e
-
-            fhose_e.use_connect = False
-            fhose_e.parent = fhose_par_e
-
-            fhoseend_e.use_connect = False
-            fhoseend_e.parent = fhoseend_par_e
-
-            uhoseend_par_e.use_connect = False
-            uhoseend_par_e.parent = parent_e
-
-            uhose_par_e.use_connect = False
-            uhose_par_e.parent = parent_e
-
-            jhose_par_e.use_connect = False
-            jhose_par_e.parent = parent_e
-
-            fhose_par_e.use_connect = False
-            fhose_par_e.parent = parent_e
-
-            fhoseend_par_e.use_connect = False
-            fhoseend_par_e.parent = parent_e
-
-            # Positioning
-            ulimb1_e.length *= 0.5
-            ulimb2_e.head = Vector(ulimb1_e.tail)
-            flimb1_e.length *= 0.5
-            flimb2_e.head = Vector(flimb1_e.tail)
-            align_bone_roll(self.obj, flimb2, elimb)
-
-            ulimb2_smoother_e.tail = Vector(flimb1_e.tail)
-            ulimb2_smoother_e.roll = flimb1_e.roll
-
-            flimb1_smoother_e.head = Vector(ulimb1_e.tail)
-            flimb1_pos_e.length *= 0.5
-
-            junc_e.length *= 0.2
-
-            uhoseend_par_e.length *= 0.25
-            uhose_par_e.length *= 0.25
-            jhose_par_e.length *= 0.15
-            fhose_par_e.length *= 0.25
-            fhoseend_par_e.length *= 0.25
-            put_bone(self.obj, uhoseend_par, Vector(ulimb1_e.head))
-            put_bone(self.obj, uhose_par, Vector(ulimb1_e.tail))
-            put_bone(self.obj, jhose_par, Vector(ulimb2_e.tail))
-            put_bone(self.obj, fhose_par, Vector(flimb1_e.tail))
-            put_bone(self.obj, fhoseend_par, Vector(flimb2_e.tail))
-
-            put_bone(self.obj, uhoseend, Vector(ulimb1_e.head))
-            put_bone(self.obj, uhose, Vector(ulimb1_e.tail))
-            put_bone(self.obj, jhose, Vector(ulimb2_e.tail))
-            put_bone(self.obj, fhose, Vector(flimb1_e.tail))
-            put_bone(self.obj, fhoseend, Vector(flimb2_e.tail))
-
-            if 'X' in self.primary_rotation_axis:
-                upoint = Vector(ulimb1_e.z_axis)
-                fpoint = Vector(flimb1_e.z_axis)
-            elif 'Z' in self.primary_rotation_axis:
-                upoint = Vector(ulimb1_e.x_axis)
-                fpoint = Vector(flimb1_e.x_axis)
-            else:  # Y
-                upoint = Vector(ulimb1_e.z_axis)
-                fpoint = Vector(flimb1_e.z_axis)
-
-            if '-' not in self.primary_rotation_axis:
-                upoint *= -1
-                fpoint *= -1
-
-            if 'Y' in self.primary_rotation_axis:
-                uside = Vector(ulimb1_e.x_axis)
-                fside = Vector(flimb1_e.x_axis)
-            else:
-                uside = Vector(ulimb1_e.y_axis) * -1
-                fside = Vector(flimb1_e.y_axis) * -1
-
-            uhoseend_e.tail = uhoseend_e.head + upoint
-            uhose_e.tail = uhose_e.head + upoint
-            jhose_e.tail = fhose_e.head + upoint + fpoint
-            fhose_e.tail = fhose_e.head + fpoint
-            fhoseend_e.tail = fhoseend_e.head + fpoint
-
-            align_bone_z_axis(self.obj, uhoseend, uside)
-            align_bone_z_axis(self.obj, uhose, uside)
-            align_bone_z_axis(self.obj, jhose, uside + fside)
-            align_bone_z_axis(self.obj, fhose, fside)
-            align_bone_z_axis(self.obj, fhoseend, fside)
-
-            l = 0.125 * (ulimb1_e.length + ulimb2_e.length + flimb1_e.length + flimb2_e.length)
-            uhoseend_e.length = l
-            uhose_e.length = l
-            jhose_e.length = l
-            fhose_e.length = l
-            fhoseend_e.length = l
-
-            # Object mode, get pose bones
-            bpy.ops.object.mode_set(mode='OBJECT')
-            pb = self.obj.pose.bones
-
-            ulimb1_p = pb[ulimb1]
-            ulimb2_p = pb[ulimb2]
-            flimb1_p = pb[flimb1]
-            flimb2_p = pb[flimb2]
-            elimb_p = pb[elimb]
-
-            ulimb2_smoother_p = pb[ulimb2_smoother]
-            flimb1_smoother_p = pb[flimb1_smoother]
-            flimb1_pos_p = pb[flimb1_pos]
-
-            junc_p = pb[junc]
-
-            uhoseend_p = pb[uhoseend]
-            uhose_p = pb[uhose]
-            jhose_p = pb[jhose]
-            fhose_p = pb[fhose]
-            fhoseend_p = pb[fhoseend]
-
-            #uhoseend_par_p = pb[uhoseend_par]
-            uhose_par_p = pb[uhose_par]
-            jhose_par_p = pb[jhose_par]
-            fhose_par_p = pb[fhose_par]
-            fhoseend_par_p = pb[fhoseend_par]
-
-            # Lock axes
-            uhose_p.lock_rotation = (True, True, True)
-            uhose_p.lock_rotation_w = True
-            uhose_p.lock_scale = (True, True, True)
-
-            jhose_p.lock_rotation = (True, True, True)
-            jhose_p.lock_rotation_w = True
-            jhose_p.lock_scale = (True, True, True)
-
-            fhose_p.lock_rotation = (True, True, True)
-            fhose_p.lock_rotation_w = True
-            fhose_p.lock_scale = (True, True, True)
-
-            # B-bone settings
-            ulimb2_p.bone.bbone_segments = 16
-            ulimb2_p.bone.bbone_easein = 0.0
-            ulimb2_p.bone.bbone_easeout = 1.0
-
-            ulimb2_smoother_p.bone.bbone_segments = 16
-            ulimb2_smoother_p.bone.bbone_easein = 1.0
-            ulimb2_smoother_p.bone.bbone_easeout = 0.0
-
-            flimb1_p.bone.bbone_segments = 16
-            flimb1_p.bone.bbone_easein = 1.0
-            flimb1_p.bone.bbone_easeout = 0.0
-
-            flimb1_smoother_p.bone.bbone_segments = 16
-            flimb1_smoother_p.bone.bbone_easein = 0.0
-            flimb1_smoother_p.bone.bbone_easeout = 1.0
-
-            # Custom properties
-            make_property(jhose_p, "smooth_bend", 0.0)
-
-            # Constraints
-            con = ulimb1_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = uhoseend
-            con = ulimb1_p.constraints.new('COPY_SCALE')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = self.org_bones[0]
-            con = ulimb1_p.constraints.new('DAMPED_TRACK')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = uhose
-            con = ulimb1_p.constraints.new('STRETCH_TO')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = uhose
-            con.volume = 'NO_VOLUME'
-
-            con = ulimb2_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = uhose
-            con = ulimb2_p.constraints.new('DAMPED_TRACK')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = jhose
-            con = ulimb2_p.constraints.new('STRETCH_TO')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = jhose
-            con.volume = 'NO_VOLUME'
-
-            con = ulimb2_smoother_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "smoother"
-            con.target = self.obj
-            con.subtarget = flimb1_pos
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'SUM'
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = jhose_p.path_from_id() + '["smooth_bend"]'
-
-            con = flimb1_pos_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = jhose
-            con = flimb1_pos_p.constraints.new('DAMPED_TRACK')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = fhose
-            con = flimb1_pos_p.constraints.new('STRETCH_TO')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = fhose
-            con.volume = 'NO_VOLUME'
-
-            con = flimb1_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "position"
-            con.target = self.obj
-            con.subtarget = flimb1_pos
-
-            con = flimb1_smoother_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "smoother"
-            con.target = self.obj
-            con.subtarget = ulimb2
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'SUM'
-            var.name = "var"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = jhose_p.path_from_id() + '["smooth_bend"]'
-            con = flimb1_smoother_p.constraints.new('STRETCH_TO')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = jhose
-            con.volume = 'NO_VOLUME'
-
-            con = flimb2_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = fhose
-            con = flimb2_p.constraints.new('COPY_ROTATION')
-            con.name = "twist"
-            con.target = self.obj
-            con.subtarget = elimb
-            con = flimb2_p.constraints.new('DAMPED_TRACK')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = fhoseend
-            con = flimb2_p.constraints.new('STRETCH_TO')
-            con.name = "track"
-            con.target = self.obj
-            con.subtarget = fhoseend
-            con.volume = 'NO_VOLUME'
-
-            con = junc_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "bend"
-            con.target = self.obj
-            con.subtarget = self.org_bones[1]
-            con.influence = 0.5
-
-            con = uhose_par_p.constraints.new('COPY_ROTATION')
-            con.name = "follow"
-            con.target = self.obj
-            con.subtarget = self.org_bones[0]
-            con.influence = 1.0
-            con = uhose_par_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = self.org_bones[0]
-            con.influence = 1.0
-            con = uhose_par_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = jhose
-            con.influence = 0.5
-
-            con = jhose_par_p.constraints.new('COPY_ROTATION')
-            con.name = "follow"
-            con.target = self.obj
-            con.subtarget = junc
-            con.influence = 1.0
-            con = jhose_par_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = junc
-            con.influence = 1.0
-
-            con = fhose_par_p.constraints.new('COPY_ROTATION')
-            con.name = "follow"
-            con.target = self.obj
-            con.subtarget = self.org_bones[1]
-            con.influence = 1.0
-            con = fhose_par_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = jhose
-            con.influence = 1.0
-            con = fhose_par_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = self.org_bones[2]
-            con.influence = 0.5
-
-            con = fhoseend_par_p.constraints.new('COPY_ROTATION')
-            con.name = "follow"
-            con.target = self.obj
-            con.subtarget = self.org_bones[1]
-            con.influence = 1.0
-            con = fhoseend_par_p.constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            con.subtarget = self.org_bones[2]
-            con.influence = 1.0
-
-            # Layers
-            if self.layers:
-                uhoseend_p.bone.layers = self.layers
-                uhose_p.bone.layers = self.layers
-                jhose_p.bone.layers = self.layers
-                fhose_p.bone.layers = self.layers
-                fhoseend_p.bone.layers = self.layers
-            else:
-                layers = list(pb[self.org_bones[0]].bone.layers)
-                uhoseend_p.bone.layers = layers
-                uhose_p.bone.layers = layers
-                jhose_p.bone.layers = layers
-                fhose_p.bone.layers = layers
-                fhoseend_p.bone.layers = layers
-
-            # Create widgets
-            create_sphere_widget(self.obj, uhoseend)
-            create_sphere_widget(self.obj, uhose)
-            create_sphere_widget(self.obj, jhose)
-            create_sphere_widget(self.obj, fhose)
-            create_sphere_widget(self.obj, fhoseend)
-
-            return [uhoseend, uhose, jhose, fhose, fhoseend]
diff --git a/rigify/legacy/rigs/finger.py b/rigify/legacy/rigs/finger.py
deleted file mode 100644
index 94684606af9e1695a741d030da3a8c81668cc790..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/finger.py
+++ /dev/null
@@ -1,408 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import re
-
-import bpy
-from mathutils import Vector
-
-from ..utils import MetarigError
-from ..utils import copy_bone
-from ..utils import connected_children_names
-from ..utils import strip_org, make_mechanism_name, make_deformer_name
-from ..utils import create_widget, create_limb_widget
-
-from ...utils.mechanism import make_property
-
-class Rig:
-    """ A finger rig.  It takes a single chain of bones.
-        This is a control and deformation rig.
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-        """
-        self.obj = obj
-        self.org_bones = [bone] + connected_children_names(obj, bone)
-        self.params = params
-
-        if len(self.org_bones) <= 1:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': input to rig type must be a chain of 2 or more bones" % (strip_org(bone)))
-
-        # Get user-specified layers, if they exist
-        if params.separate_extra_layers:
-            self.ex_layers = list(params.extra_layers)
-        else:
-            self.ex_layers = None
-
-        # Get other rig parameters
-        self.primary_rotation_axis = params.primary_rotation_axis
-        self.use_digit_twist = params.use_digit_twist
-
-    def deform(self):
-        """ Generate the deformation rig.
-            Just a copy of the original bones, except the first digit which is a twist bone.
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Create the bones
-        # First bone is a twist bone
-        if self.use_digit_twist:
-            b1a = copy_bone(self.obj, self.org_bones[0], make_deformer_name(strip_org(self.org_bones[0] + ".01")))
-            b1b = copy_bone(self.obj, self.org_bones[0], make_deformer_name(strip_org(self.org_bones[0] + ".02")))
-            b1tip = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(self.org_bones[0] + ".tip")))
-        else:
-            b1 = copy_bone(self.obj, self.org_bones[0], make_deformer_name(strip_org(self.org_bones[0])))
-
-        # The rest are normal
-        bones = []
-        for bone in self.org_bones[1:]:
-            bones += [copy_bone(self.obj, bone, make_deformer_name(strip_org(bone)))]
-
-        # Position bones
-        eb = self.obj.data.edit_bones
-        if self.use_digit_twist:
-            b1a_e = eb[b1a]
-            b1b_e = eb[b1b]
-            b1tip_e = eb[b1tip]
-
-            b1tip_e.use_connect = False
-            b1tip_e.tail += Vector((0.1, 0, 0))
-            b1tip_e.head = b1b_e.tail
-            b1tip_e.length = b1a_e.length / 4
-
-            center = (b1a_e.head + b1a_e.tail) / 2
-            b1a_e.tail = center
-            b1b_e.use_connect = False
-            b1b_e.head = center
-
-        # Parenting
-        if self.use_digit_twist:
-            b1b_e.parent = eb[self.org_bones[0]]
-            b1tip_e.parent = eb[self.org_bones[0]]
-        else:
-            eb[b1].use_connect = False
-            eb[b1].parent = eb[self.org_bones[0]]
-
-        for (ba, bb) in zip(bones, self.org_bones[1:]):
-            eb[ba].use_connect = False
-            eb[ba].parent = eb[bb]
-
-        # Constraints
-        if self.use_digit_twist:
-            bpy.ops.object.mode_set(mode='OBJECT')
-            pb = self.obj.pose.bones
-
-            b1a_p = pb[b1a]
-
-            con = b1a_p.constraints.new('COPY_LOCATION')
-            con.name = "copy_location"
-            con.target = self.obj
-            con.subtarget = self.org_bones[0]
-
-            con = b1a_p.constraints.new('COPY_SCALE')
-            con.name = "copy_scale"
-            con.target = self.obj
-            con.subtarget = self.org_bones[0]
-
-            con = b1a_p.constraints.new('DAMPED_TRACK')
-            con.name = "track_to"
-            con.target = self.obj
-            con.subtarget = b1tip
-
-    def control(self):
-        """ Generate the control rig.
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Figure out the name for the control bone (remove the last .##)
-        ctrl_name = re.sub("([0-9]+\.)", "", strip_org(self.org_bones[0])[::-1], count=1)[::-1]
-
-        # Create the bones
-        ctrl = copy_bone(self.obj, self.org_bones[0], ctrl_name)
-
-        helpers = []
-        bones = []
-        for bone in self.org_bones:
-            bones += [copy_bone(self.obj, bone, strip_org(bone))]
-            helpers += [copy_bone(self.obj, bone, make_mechanism_name(strip_org(bone)))]
-
-        # Position bones
-        eb = self.obj.data.edit_bones
-
-        length = 0.0
-        for bone in helpers:
-            length += eb[bone].length
-            eb[bone].length /= 2
-
-        eb[ctrl].length = length * 1.5
-
-        # Parent bones
-        prev = eb[self.org_bones[0]].parent
-        for (b, h) in zip(bones, helpers):
-            b_e = eb[b]
-            h_e = eb[h]
-            b_e.use_connect = False
-            h_e.use_connect = False
-
-            b_e.parent = h_e
-            h_e.parent = prev
-
-            prev = b_e
-
-        # Transform locks and rotation mode
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        for bone in bones[1:]:
-            pb[bone].lock_location = True, True, True
-
-        if pb[self.org_bones[0]].bone.use_connect is True:
-            pb[bones[0]].lock_location = True, True, True
-
-        pb[ctrl].lock_scale = True, False, True
-
-        for bone in helpers:
-            pb[bone].rotation_mode = 'XYZ'
-
-        # Drivers
-        i = 1
-        val = 1.2 / (len(self.org_bones) - 1)
-        for bone in helpers:
-            # Add custom prop
-            prop_name = "bend_%02d" % i
-            if i == 1:
-                propval = 0.0
-            else:
-                propval = val
-
-            make_property(pb[ctrl], prop_name, propval)
-
-            # Add driver
-            if 'X' in self.primary_rotation_axis:
-                fcurve = pb[bone].driver_add("rotation_euler", 0)
-            elif 'Y' in self.primary_rotation_axis:
-                fcurve = pb[bone].driver_add("rotation_euler", 1)
-            else:
-                fcurve = pb[bone].driver_add("rotation_euler", 2)
-
-            driver = fcurve.driver
-            driver.type = 'SCRIPTED'
-
-            var = driver.variables.new()
-            var.name = "ctrl_y"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = pb[ctrl].path_from_id() + '.scale[1]'
-
-            var = driver.variables.new()
-            var.name = "bend"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = pb[ctrl].path_from_id() + '["' + prop_name + '"]'
-
-            if '-' in self.primary_rotation_axis:
-                driver.expression = "-(1.0-ctrl_y) * bend * 3.14159 * 2"
-            else:
-                driver.expression = "(1.0-ctrl_y) * bend * 3.14159 * 2"
-
-            i += 1
-
-        # Constraints
-        con = pb[helpers[0]].constraints.new('COPY_LOCATION')
-        con.name = "copy_location"
-        con.target = self.obj
-        con.subtarget = ctrl
-
-        con = pb[helpers[0]].constraints.new('COPY_ROTATION')
-        con.name = "copy_rotation"
-        con.target = self.obj
-        con.subtarget = ctrl
-
-        # Constrain org bones to the control bones
-        for (bone, org) in zip(bones, self.org_bones):
-            con = pb[org].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = bone
-
-        # Set layers for extra control bones
-        if self.ex_layers:
-            for bone in bones:
-                pb[bone].bone.layers = self.ex_layers
-
-        # Create control widgets
-        w = create_widget(self.obj, ctrl)
-        if w is not None:
-            mesh = w.data
-            verts = [(0, 0, 0), (0, 1, 0), (0.05, 1, 0), (0.05, 1.1, 0), (-0.05, 1.1, 0), (-0.05, 1, 0)]
-            if 'Z' in self.primary_rotation_axis:
-                # Flip x/z coordinates
-                temp = []
-                for v in verts:
-                    temp += [(v[2], v[1], v[0])]
-                verts = temp
-            edges = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 1)]
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-        for bone in bones:
-            create_limb_widget(self.obj, bone)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-        """
-        self.deform()
-        self.control()
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    items = [('X', 'X', ''), ('Y', 'Y', ''), ('Z', 'Z', ''), ('-X', '-X', ''), ('-Y', '-Y', ''), ('-Z', '-Z', '')]
-    params.primary_rotation_axis = bpy.props.EnumProperty(items=items, name="Primary Rotation Axis", default='X')
-
-    params.separate_extra_layers = bpy.props.BoolProperty(name="Separate Secondary Control Layers:", default=False, description="Enable putting the secondary controls on a separate layer from the primary controls")
-    params.extra_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the secondary controls to be on")
-
-    params.use_digit_twist = bpy.props.BoolProperty(name="Digit Twist", default=True, description="Generate the dual-bone twist setup for the first finger digit")
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-    r = layout.row()
-    r.prop(params, "separate_extra_layers")
-
-    r = layout.row()
-    r.active = params.separate_extra_layers
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-    row.prop(params, "extra_layers", index=0, toggle=True, text="")
-    row.prop(params, "extra_layers", index=1, toggle=True, text="")
-    row.prop(params, "extra_layers", index=2, toggle=True, text="")
-    row.prop(params, "extra_layers", index=3, toggle=True, text="")
-    row.prop(params, "extra_layers", index=4, toggle=True, text="")
-    row.prop(params, "extra_layers", index=5, toggle=True, text="")
-    row.prop(params, "extra_layers", index=6, toggle=True, text="")
-    row.prop(params, "extra_layers", index=7, toggle=True, text="")
-    row = col.row(align=True)
-    row.prop(params, "extra_layers", index=16, toggle=True, text="")
-    row.prop(params, "extra_layers", index=17, toggle=True, text="")
-    row.prop(params, "extra_layers", index=18, toggle=True, text="")
-    row.prop(params, "extra_layers", index=19, toggle=True, text="")
-    row.prop(params, "extra_layers", index=20, toggle=True, text="")
-    row.prop(params, "extra_layers", index=21, toggle=True, text="")
-    row.prop(params, "extra_layers", index=22, toggle=True, text="")
-    row.prop(params, "extra_layers", index=23, toggle=True, text="")
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-    row.prop(params, "extra_layers", index=8, toggle=True, text="")
-    row.prop(params, "extra_layers", index=9, toggle=True, text="")
-    row.prop(params, "extra_layers", index=10, toggle=True, text="")
-    row.prop(params, "extra_layers", index=11, toggle=True, text="")
-    row.prop(params, "extra_layers", index=12, toggle=True, text="")
-    row.prop(params, "extra_layers", index=13, toggle=True, text="")
-    row.prop(params, "extra_layers", index=14, toggle=True, text="")
-    row.prop(params, "extra_layers", index=15, toggle=True, text="")
-    row = col.row(align=True)
-    row.prop(params, "extra_layers", index=24, toggle=True, text="")
-    row.prop(params, "extra_layers", index=25, toggle=True, text="")
-    row.prop(params, "extra_layers", index=26, toggle=True, text="")
-    row.prop(params, "extra_layers", index=27, toggle=True, text="")
-    row.prop(params, "extra_layers", index=28, toggle=True, text="")
-    row.prop(params, "extra_layers", index=29, toggle=True, text="")
-    row.prop(params, "extra_layers", index=30, toggle=True, text="")
-    row.prop(params, "extra_layers", index=31, toggle=True, text="")
-
-    r = layout.row()
-    r.label(text="Bend rotation axis:")
-    r.prop(params, "primary_rotation_axis", text="")
-
-    col = layout.column()
-    col.prop(params, "use_digit_twist")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('finger.01')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.2529, 0.0000, 0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bones['finger.01'] = bone.name
-    bone = arm.edit_bones.new('finger.02')
-    bone.head[:] = 0.2529, 0.0000, 0.0000
-    bone.tail[:] = 0.4024, 0.0000, -0.0264
-    bone.roll = -2.9671
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['finger.01']]
-    bones['finger.02'] = bone.name
-    bone = arm.edit_bones.new('finger.03')
-    bone.head[:] = 0.4024, 0.0000, -0.0264
-    bone.tail[:] = 0.4975, -0.0000, -0.0610
-    bone.roll = -2.7925
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['finger.02']]
-    bones['finger.03'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['finger.01']]
-    pbone.rigify_type = 'finger'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YZX'
-    pbone = obj.pose.bones[bones['finger.02']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YZX'
-    pbone = obj.pose.bones[bones['finger.03']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YZX'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/misc/__init__.py b/rigify/legacy/rigs/misc/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/rigify/legacy/rigs/misc/delta.py b/rigify/legacy/rigs/misc/delta.py
deleted file mode 100644
index 84f3612b2d2fcb34db3ae798263c57b78b1b4fe5..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/misc/delta.py
+++ /dev/null
@@ -1,165 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-if False:
-    # This rig type is disabled due to its obscurity.
-    # However, some of the code may be useful in the future, so
-    # I'm leaving it here.
-    from math import acos
-
-    import bpy
-
-    from ...utils import MetarigError
-    from ...utils import copy_bone
-    from ...utils import org_name, make_mechanism_name
-
-
-    class Rig:
-        """ A delta rig.
-            Creates a setup that will place its child at its position in pose mode,
-            but will not modifying its child's position in edit mode.
-            This is a mechanism-only rig (no control or deformation bones).
-
-        """
-        def __init__(self, obj, bone, params):
-            """ Gather and validate data about the rig.
-                Store any data or references to data that will be needed later on.
-                In particular, store references to bones that will be needed.
-                Do NOT change any data in the scene.  This is a gathering phase only.
-
-            """
-            bb = obj.data.bones
-
-            if bb[bone].children is None:
-                raise MetarigError("RIGIFY ERROR: bone '%s': rig type requires one child" % org_name(bone.name))
-            if bb[bone].use_connect is True:
-                raise MetarigError("RIGIFY ERROR: bone '%s': rig type cannot be connected to parent" % org_name(bone.name))
-
-            self.obj = obj
-            self.org_bones = {"delta": bone, "child": bb[bone].children[0].name}
-            self.org_names = [org_name(bone), org_name(bb[bone].children[0].name)]
-
-        def generate(self):
-            """ Generate the rig.
-                Do NOT modify any of the original bones, except for adding constraints.
-                The main armature should be selected and active before this is called.
-
-            """
-            bpy.ops.object.mode_set(mode='EDIT')
-            eb = self.obj.data.edit_bones
-
-            org_delta = self.org_bones["delta"]
-            org_delta_e = eb[self.org_bones["delta"]]
-            # org_child = self.org_bones["child"]  # UNUSED
-            org_child_e = eb[self.org_bones["child"]]
-
-            # Calculate the matrix for achieving the delta
-            child_mat = org_delta_e.matrix.invert() * org_child_e.matrix
-            mat = org_delta_e.matrix * child_mat.invert()
-
-            # Create the delta bones.
-            delta_e = eb[copy_bone(self.obj, self.org_bones["delta"])]
-            delta_e.name = make_mechanism_name(self.org_names[0])
-            delta = delta_e.name
-
-            # Set the delta to the matrix's transforms
-            set_mat(self.obj, delta, mat)
-
-            bpy.ops.object.mode_set(mode='OBJECT')
-
-            # Constrain org_delta to delta
-            con = self.obj.pose.bones[org_delta].constraints.new('COPY_TRANSFORMS')
-            con.name = "delta"
-            con.target = self.obj
-            con.subtarget = delta
-
-    def create_sample(obj):
-        # generated by rigify.utils.write_metarig
-        bpy.ops.object.mode_set(mode='EDIT')
-        arm = obj.data
-
-        bones = {}
-
-        bone = arm.edit_bones.new('delta')
-        bone.head[:] = 0.0000, -0.1198, 0.1253
-        bone.tail[:] = -0.0000, -0.2483, 0.2785
-        bone.roll = -0.0000
-        bone.use_connect = False
-        bones['delta'] = bone.name
-        bone = arm.edit_bones.new('Bone')
-        bone.head[:] = -0.0000, 0.0000, 0.0000
-        bone.tail[:] = -0.0000, 0.0000, 0.2000
-        bone.roll = 0.0000
-        bone.use_connect = False
-        bone.parent = arm.edit_bones[bones['delta']]
-        bones['Bone'] = bone.name
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pbone = obj.pose.bones[bones['delta']]
-        pbone.rigify_type = 'misc.delta'
-        pbone.lock_location = (False, False, False)
-        pbone.lock_rotation = (False, False, False)
-        pbone.lock_rotation_w = False
-        pbone.lock_scale = (False, False, False)
-        pbone.rotation_mode = 'QUATERNION'
-        pbone = obj.pose.bones[bones['Bone']]
-        pbone.rigify_type = ''
-        pbone.lock_location = (False, False, False)
-        pbone.lock_rotation = (False, False, False)
-        pbone.lock_rotation_w = False
-        pbone.lock_scale = (False, False, False)
-        pbone.rotation_mode = 'QUATERNION'
-
-        bpy.ops.object.mode_set(mode='EDIT')
-        for bone in arm.edit_bones:
-            bone.select = False
-            bone.select_head = False
-            bone.select_tail = False
-        for b in bones:
-            bone = arm.edit_bones[bones[b]]
-            bone.select = True
-            bone.select_head = True
-            bone.select_tail = True
-            arm.edit_bones.active = bone
-
-    def set_mat(obj, bone_name, matrix):
-        """ Sets the bone to have the given transform matrix.
-        """
-        a = obj.data.edit_bones[bone_name]
-
-        a.head = (0, 0, 0)
-        a.tail = (0, 1, 0)
-
-        a.transform(matrix)
-
-        d = acos(a.matrix.to_quaternion().dot(matrix.to_quaternion())) * 2.0
-
-        roll_1 = a.roll + d
-        roll_2 = a.roll - d
-
-        a.roll = roll_1
-        d1 = a.matrix.to_quaternion().dot(matrix.to_quaternion())
-        a.roll = roll_2
-        d2 = a.matrix.to_quaternion().dot(matrix.to_quaternion())
-
-        if d1 > d2:
-            a.roll = roll_1
-        else:
-            a.roll = roll_2
diff --git a/rigify/legacy/rigs/neck_short.py b/rigify/legacy/rigs/neck_short.py
deleted file mode 100644
index e7743ddf8a056d29c89ca2a307f408fd5277422b..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/neck_short.py
+++ /dev/null
@@ -1,372 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from ..utils import MetarigError
-from ..utils import copy_bone, new_bone, put_bone
-from ..utils import connected_children_names
-from ..utils import strip_org, make_mechanism_name, make_deformer_name
-from ..utils import create_circle_widget
-
-from ...utils.mechanism import make_property
-
-script1 = """
-head_neck = ["%s", "%s"]
-"""
-
-script2 = """
-if is_selected(head_neck[0]):
-    layout.prop(pose_bones[head_neck[0]], '["isolate"]', text="Isolate (" + head_neck[0] + ")", slider=True)
-"""
-
-script3 = """
-if is_selected(head_neck):
-    layout.prop(pose_bones[head_neck[0]], '["neck_follow"]', text="Neck Follow Head (" + head_neck[0] + ")", slider=True)
-"""
-
-
-class Rig:
-    """ A "neck" rig.  It turns a chain of bones into a rig with two controls:
-        One for the head, and one for the neck.
-
-    """
-    def __init__(self, obj, bone_name, params):
-        """ Gather and validate data about the rig.
-
-        """
-        self.obj = obj
-        self.org_bones = [bone_name] + connected_children_names(obj, bone_name)
-        self.params = params
-
-        if len(self.org_bones) <= 1:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': input to rig type must be a chain of 2 or more bones" % (strip_org(bone_name)))
-
-        self.isolate = False
-        if self.obj.data.bones[bone_name].parent:
-            self.isolate = True
-
-    def gen_deform(self):
-        """ Generate the deformation rig.
-
-        """
-        for name in self.org_bones:
-            bpy.ops.object.mode_set(mode='EDIT')
-            eb = self.obj.data.edit_bones
-
-            # Create deform bone
-            bone_e = eb[copy_bone(self.obj, name)]
-
-            # Change its name
-            bone_e.name = make_deformer_name(strip_org(name))
-            bone_name = bone_e.name
-
-            # Leave edit mode
-            bpy.ops.object.mode_set(mode='OBJECT')
-
-            # Get the pose bone
-            bone = self.obj.pose.bones[bone_name]
-
-            # Constrain to the original bone
-            con = bone.constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = name
-
-    def gen_control(self):
-        """ Generate the control rig.
-
-        """
-        #---------------------------------
-        # Create the neck and head controls
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Create bones
-        neck_ctrl = copy_bone(self.obj, self.org_bones[0], strip_org(self.org_bones[0]))
-        neck_follow = copy_bone(self.obj, self.org_bones[-1], make_mechanism_name(strip_org(self.org_bones[0] + ".follow")))
-        neck_child = new_bone(self.obj, make_mechanism_name(strip_org(self.org_bones[0] + ".child")))
-
-        head_ctrl = copy_bone(self.obj, self.org_bones[-1], strip_org(self.org_bones[-1]))
-        head_mch = new_bone(self.obj, make_mechanism_name(strip_org(self.org_bones[-1])))
-        if self.isolate:
-            head_socket1 = copy_bone(self.obj, self.org_bones[-1], make_mechanism_name(strip_org(self.org_bones[-1] + ".socket1")))
-            head_socket2 = copy_bone(self.obj, self.org_bones[-1], make_mechanism_name(strip_org(self.org_bones[-1] + ".socket2")))
-
-        # Create neck chain bones
-        neck = []
-        helpers = []
-        for name in self.org_bones:
-            neck += [copy_bone(self.obj, name, make_mechanism_name(strip_org(name)))]
-            helpers += [copy_bone(self.obj, neck_child, make_mechanism_name(strip_org(name + ".02")))]
-
-        # Fetch edit bones
-        eb = self.obj.data.edit_bones
-
-        neck_ctrl_e = eb[neck_ctrl]
-        neck_follow_e = eb[neck_follow]
-        neck_child_e = eb[neck_child]
-        head_ctrl_e = eb[head_ctrl]
-        head_mch_e = eb[head_mch]
-        if self.isolate:
-            head_socket1_e = eb[head_socket1]
-            head_socket2_e = eb[head_socket2]
-
-        # Parenting
-        head_ctrl_e.use_connect = False
-        head_ctrl_e.parent = neck_ctrl_e.parent
-        head_mch_e.use_connect = False
-        head_mch_e.parent = head_ctrl_e
-
-        if self.isolate:
-            head_socket1_e.use_connect = False
-            head_socket1_e.parent = neck_ctrl_e.parent
-
-            head_socket2_e.use_connect = False
-            head_socket2_e.parent = None
-
-            head_ctrl_e.parent = head_socket2_e
-
-        for (name1, name2) in zip(neck, helpers):
-            eb[name1].use_connect = False
-            eb[name1].parent = eb[name2]
-            eb[name2].use_connect = False
-            eb[name2].parent = neck_ctrl_e.parent
-
-        neck_follow_e.use_connect = False
-        neck_follow_e.parent = neck_ctrl_e.parent
-        neck_child_e.use_connect = False
-        neck_child_e.parent = neck_ctrl_e
-        neck_ctrl_e.parent = neck_follow_e
-
-        # Position
-        put_bone(self.obj, neck_follow, neck_ctrl_e.head)
-        put_bone(self.obj, neck_child, neck_ctrl_e.head)
-        put_bone(self.obj, head_ctrl, neck_ctrl_e.head)
-        put_bone(self.obj, head_mch, neck_ctrl_e.head)
-        head_mch_e.length = head_ctrl_e.length / 2
-        neck_child_e.length = neck_ctrl_e.length / 2
-
-        if self.isolate:
-            put_bone(self.obj, head_socket1, neck_ctrl_e.head)
-            head_mch_e.length /= 2
-
-            put_bone(self.obj, head_socket2, neck_ctrl_e.head)
-            head_mch_e.length /= 3
-
-        for (name1, name2) in zip(neck, helpers):
-            put_bone(self.obj, name2, eb[name1].head)
-            eb[name2].length = eb[name1].length / 2
-
-        # Switch to object mode
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-        neck_ctrl_p = pb[neck_ctrl]
-        neck_follow_p = pb[neck_follow]
-        # neck_child_p = pb[neck_child]  # UNUSED
-        head_ctrl_p = pb[head_ctrl]
-        if self.isolate:
-            # head_socket1_p = pb[head_socket1]  # UNUSED
-            head_socket2_p = pb[head_socket2]
-
-        # Custom bone appearance
-        neck_ctrl_p.custom_shape_transform = pb[self.org_bones[(len(self.org_bones) - 1) // 2]]
-        head_ctrl_p.custom_shape_transform = pb[self.org_bones[-1]]
-
-        # Custom properties
-        make_property(head_ctrl_p, "inf_extent", 0.5)
-        make_property(head_ctrl_p, "neck_follow", 1.0, max=2.0, soft_max=1.0)
-
-        if self.isolate:
-            make_property(head_ctrl_p, "isolate", 0.0)
-
-        # Constraints
-
-        # Neck follow
-        con = neck_follow_p.constraints.new('COPY_ROTATION')
-        con.name = "copy_rotation"
-        con.target = self.obj
-        con.subtarget = head_ctrl
-
-        fcurve = con.driver_add("influence")
-        driver = fcurve.driver
-        var = driver.variables.new()
-        driver.type = 'SCRIPTED'
-        var.name = "follow"
-        var.targets[0].id_type = 'OBJECT'
-        var.targets[0].id = self.obj
-        var.targets[0].data_path = head_ctrl_p.path_from_id() + '["neck_follow"]'
-        driver.expression = "follow / 2"
-
-        # Isolate
-        if self.isolate:
-            con = head_socket2_p.constraints.new('COPY_LOCATION')
-            con.name = "copy_location"
-            con.target = self.obj
-            con.subtarget = head_socket1
-
-            con = head_socket2_p.constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = head_socket1
-
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'SCRIPTED'
-            var.name = "isolate"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = head_ctrl_p.path_from_id() + '["isolate"]'
-            driver.expression = "1.0 - isolate"
-
-        # Neck chain
-        first = True
-        prev = None
-        i = 0
-        l = len(neck)
-        for (name1, name2, org_name) in zip(neck, helpers, self.org_bones):
-            con = pb[org_name].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = name1
-
-            n_con = pb[name2].constraints.new('COPY_TRANSFORMS')
-            n_con.name = "neck"
-            n_con.target = self.obj
-            n_con.subtarget = neck_child
-
-            h_con = pb[name2].constraints.new('COPY_TRANSFORMS')
-            h_con.name = "head"
-            h_con.target = self.obj
-            h_con.subtarget = head_mch
-
-            con = pb[name2].constraints.new('COPY_LOCATION')
-            con.name = "anchor"
-            con.target = self.obj
-            if first:
-                con.subtarget = neck_ctrl
-            else:
-                con.subtarget = prev
-                con.head_tail = 1.0
-
-            # Drivers
-            n = (i + 1) / l
-
-            # Neck influence
-            fcurve = n_con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'SCRIPTED'
-            var.name = "ext"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = head_ctrl_p.path_from_id() + '["inf_extent"]'
-            driver.expression = "1.0 if (%.4f > (1.0-ext) or (1.0-ext) == 0.0) else (%.4f / (1.0-ext))" % (n, n)
-
-            # Head influence
-            if (i + 1) == l:
-                h_con.influence = 1.0
-            else:
-                fcurve = h_con.driver_add("influence")
-                driver = fcurve.driver
-                var = driver.variables.new()
-                driver.type = 'SCRIPTED'
-                var.name = "ext"
-                var.targets[0].id_type = 'OBJECT'
-                var.targets[0].id = self.obj
-                var.targets[0].data_path = head_ctrl_p.path_from_id() + '["inf_extent"]'
-                driver.expression = "0.0 if (%.4f <= (1.0-ext)) else ((%.4f - (1.0-ext)) / ext)" % (n, n)
-
-            first = False
-            prev = name1
-            i += 1
-
-        # Create control widgets
-        create_circle_widget(self.obj, neck_ctrl, radius=1.0, head_tail=0.5, bone_transform_name=self.org_bones[(len(self.org_bones) - 1) // 2])
-        create_circle_widget(self.obj, head_ctrl, radius=1.0, head_tail=0.5, bone_transform_name=self.org_bones[-1])
-
-        # Return control bones
-        return (head_ctrl, neck_ctrl)
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        self.gen_deform()
-        (head, neck) = self.gen_control()
-
-        script = script1 % (head, neck)
-        if self.isolate:
-            script += script2
-        script += script3
-
-        return [script]
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('neck')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0000, -0.0500, 0.1500
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['neck'] = bone.name
-    bone = arm.edit_bones.new('head')
-    bone.head[:] = 0.0000, -0.0500, 0.1500
-    bone.tail[:] = 0.0000, -0.0500, 0.4000
-    bone.roll = 3.1416
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['neck']]
-    bones['head'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['neck']]
-    pbone.rigify_type = 'neck_short'
-    pbone.lock_location = (True, True, True)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['head']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/palm.py b/rigify/legacy/rigs/palm.py
deleted file mode 100644
index 6bcaad1121907844e1dbc65c47b1677730d90008..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/palm.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import re
-from math import cos, pi
-
-import bpy
-
-from ..utils import MetarigError
-from ..utils import copy_bone
-from ..utils import strip_org, deformer
-from ..utils import create_widget
-
-
-def bone_siblings(obj, bone):
-    """ Returns a list of the siblings of the given bone.
-        This requires that the bones has a parent.
-
-    """
-    parent = obj.data.bones[bone].parent
-
-    if parent is None:
-        return []
-
-    bones = []
-
-    for b in parent.children:
-        if b.name != bone:
-            bones += [b.name]
-
-    return bones
-
-
-def bone_distance(obj, bone1, bone2):
-    """ Returns the distance between two bones.
-
-    """
-    vec = obj.data.bones[bone1].head - obj.data.bones[bone2].head
-    return vec.length
-
-
-class Rig:
-    """ A "palm" rig.  A set of sibling bones that bend with each other.
-        This is a control and deformation rig.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-        """
-        self.obj = obj
-        self.params = params
-
-        siblings = bone_siblings(obj, bone)
-
-        if len(siblings) == 0:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': must have a parent and at least one sibling" % (strip_org(bone)))
-
-        # Sort list by name and distance
-        siblings.sort()
-        siblings.sort(key=lambda b: bone_distance(obj, bone, b))
-
-        self.org_bones = [bone] + siblings
-
-        # Get rig parameters
-        self.palm_rotation_axis = params.palm_rotation_axis
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Figure out the name for the control bone (remove the last .##)
-        last_bone = self.org_bones[-1:][0]
-        ctrl_name = re.sub("([0-9]+\.)", "", strip_org(last_bone)[::-1], count=1)[::-1]
-
-        # Make control bone
-        ctrl = copy_bone(self.obj, last_bone, ctrl_name)
-
-        # Make deformation bones
-        def_bones = []
-        for bone in self.org_bones:
-            b = copy_bone(self.obj, bone, deformer(strip_org(bone)))
-            def_bones += [b]
-
-        # Parenting
-        eb = self.obj.data.edit_bones
-
-        for d, b in zip(def_bones, self.org_bones):
-            eb[d].use_connect = False
-            eb[d].parent = eb[b]
-
-        # Constraints
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        i = 0
-        div = len(self.org_bones) - 1
-        for b in self.org_bones:
-            con = pb[b].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = ctrl
-            con.target_space = 'LOCAL'
-            con.owner_space = 'LOCAL'
-            con.influence = i / div
-
-            con = pb[b].constraints.new('COPY_ROTATION')
-            con.name = "copy_rotation"
-            con.target = self.obj
-            con.subtarget = ctrl
-            con.target_space = 'LOCAL'
-            con.owner_space = 'LOCAL'
-            if 'X' in self.palm_rotation_axis:
-                con.invert_x = True
-                con.use_x = True
-                con.use_z = False
-            else:
-                con.invert_z = True
-                con.use_x = False
-                con.use_z = True
-            con.use_y = False
-
-            con.influence = (i / div) - (1 - cos((i * pi / 2) / div))
-
-            i += 1
-
-        # Create control widget
-        w = create_widget(self.obj, ctrl)
-        if w is not None:
-            mesh = w.data
-            verts = [(0.15780271589756012, 2.086162567138672e-07, -0.30000004172325134), (0.15780259668827057, 1.0, -0.2000001072883606), (-0.15780280530452728, 0.9999999403953552, -0.20000004768371582), (-0.15780259668827057, -2.086162567138672e-07, -0.29999998211860657), (-0.15780256688594818, -2.7089754439657554e-07, 0.30000004172325134), (-0.1578027755022049, 0.9999998807907104, 0.19999995827674866), (0.15780262649059296, 0.9999999403953552, 0.19999989867210388), (0.1578027456998825, 1.4633496903115883e-07, 0.29999998211860657), (0.15780268609523773, 0.2500001788139343, -0.27500003576278687), (-0.15780264139175415, 0.24999985098838806, -0.2749999761581421), (0.15780262649059296, 0.7500000596046448, -0.22500008344650269), (-0.1578027606010437, 0.7499998807907104, -0.2250000238418579), (0.15780265629291534, 0.75, 0.22499991953372955), (0.15780271589756012, 0.2500000596046448, 0.2749999761581421), (-0.15780261158943176, 0.2499997615814209, 0.27500003576278687), (-0.1578027307987213, 0.7499998807907104, 0.22499997913837433)]
-            if 'Z' in self.palm_rotation_axis:
-                # Flip x/z coordinates
-                temp = []
-                for v in verts:
-                    temp += [(v[2], v[1], v[0])]
-                verts = temp
-            edges = [(1, 2), (0, 3), (4, 7), (5, 6), (8, 0), (9, 3), (10, 1), (11, 2), (12, 6), (13, 7), (4, 14), (15, 5), (10, 8), (11, 9), (15, 14), (12, 13)]
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = w.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-
-    """
-    items = [('X', 'X', ''), ('Z', 'Z', '')]
-    params.palm_rotation_axis = bpy.props.EnumProperty(items=items, name="Palm Rotation Axis", default='X')
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-
-    """
-    r = layout.row()
-    r.label(text="Primary rotation axis:")
-    r.prop(params, "palm_rotation_axis", text="")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('palm.parent')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0577, 0.0000, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bones['palm.parent'] = bone.name
-    bone = arm.edit_bones.new('palm.04')
-    bone.head[:] = 0.0577, 0.0315, -0.0000
-    bone.tail[:] = 0.1627, 0.0315, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.04'] = bone.name
-    bone = arm.edit_bones.new('palm.03')
-    bone.head[:] = 0.0577, 0.0105, -0.0000
-    bone.tail[:] = 0.1627, 0.0105, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.03'] = bone.name
-    bone = arm.edit_bones.new('palm.02')
-    bone.head[:] = 0.0577, -0.0105, -0.0000
-    bone.tail[:] = 0.1627, -0.0105, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.02'] = bone.name
-    bone = arm.edit_bones.new('palm.01')
-    bone.head[:] = 0.0577, -0.0315, -0.0000
-    bone.tail[:] = 0.1627, -0.0315, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.01'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['palm.parent']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['palm.04']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone = obj.pose.bones[bones['palm.03']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone = obj.pose.bones[bones['palm.02']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone = obj.pose.bones[bones['palm.01']]
-    pbone.rigify_type = 'palm'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/pitchipoy/__init__.py b/rigify/legacy/rigs/pitchipoy/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/rigify/legacy/rigs/pitchipoy/limbs/__init__.py b/rigify/legacy/rigs/pitchipoy/limbs/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/rigify/legacy/rigs/pitchipoy/limbs/arm.py b/rigify/legacy/rigs/pitchipoy/limbs/arm.py
deleted file mode 100644
index 2c68c2c06f7e99d30a966615ba071235dc780e92..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/limbs/arm.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-import bpy
-from ....utils       import copy_bone
-from .limb_utils     import get_bone_name, make_constraint
-from ..super_widgets import create_hand_widget
-
-from .....utils.mechanism import make_property
-
-def create_arm( cls, bones ):
-    org_bones = cls.org_bones
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    eb = cls.obj.data.edit_bones
-
-    ctrl = get_bone_name( org_bones[2], 'ctrl', 'ik' )
-
-    # Create IK arm control
-    ctrl = copy_bone( cls.obj, org_bones[2], ctrl )
-
-    # clear parent (so that rigify will parent to root)
-    eb[ ctrl ].parent      = None
-    eb[ ctrl ].use_connect = False
-
-    # Parent
-    eb[ bones['ik']['mch_target'] ].parent      = eb[ ctrl ]
-    eb[ bones['ik']['mch_target'] ].use_connect = False
-
-    # Set up constraints
-    # Constrain mch target bone to the ik control and mch stretch
-
-    make_constraint( cls, bones['ik']['mch_target'], {
-        'constraint'  : 'COPY_LOCATION',
-        'subtarget'   : bones['ik']['mch_str'],
-        'head_tail'   : 1.0
-    })
-
-    # Constrain mch ik stretch bone to the ik control
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'DAMPED_TRACK',
-        'subtarget'   : ctrl,
-    })
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'STRETCH_TO',
-        'subtarget'   : ctrl,
-    })
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'LIMIT_SCALE',
-        'use_min_y'   : True,
-        'use_max_y'   : True,
-        'max_y'       : 1.05,
-        'owner_space' : 'LOCAL'
-    })
-
-    pb = cls.obj.pose.bones
-
-    # Modify rotation mode for ik and tweak controls
-    pb[bones['ik']['ctrl']['limb']].rotation_mode = 'ZXY'
-
-    for b in bones['tweak']['ctrl']:
-        pb[b].rotation_mode = 'ZXY'
-
-    # Create ik/fk switch property
-    pb_parent = pb[ bones['parent'] ]
-
-    prop = make_property(pb_parent, 'IK_Strertch', 1.0, description='IK Stretch')
-
-    # Add driver to limit scale constraint influence
-    b        = bones['ik']['mch_str']
-    drv_fcu  = pb[b].constraints[-1].driver_add("influence")
-    drv      = drv_fcu.driver
-    drv.type = 'SUM'
-
-    var = drv.variables.new()
-    var.name = prop.name
-    var.type = "SINGLE_PROP"
-    var.targets[0].id = cls.obj
-    var.targets[0].data_path = \
-        pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
-
-    drv_modifier = drv_fcu.modifiers[0]
-
-    drv_modifier.mode            = 'POLYNOMIAL'
-    drv_modifier.poly_order      = 1
-    drv_modifier.coefficients[0] = 1.0
-    drv_modifier.coefficients[1] = -1.0
-
-    # Create hand widget
-    create_hand_widget(cls.obj, ctrl, bone_transform_name=None)
-
-    bones['ik']['ctrl']['terminal'] = [ ctrl ]
-
-    return bones
diff --git a/rigify/legacy/rigs/pitchipoy/limbs/leg.py b/rigify/legacy/rigs/pitchipoy/limbs/leg.py
deleted file mode 100644
index 9abf956fd41de9e6d258ca70954b7dbd6b1069ef..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/limbs/leg.py
+++ /dev/null
@@ -1,330 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-import bpy, math
-from ....utils       import connected_children_names, create_circle_widget
-from ....utils       import copy_bone, flip_bone, put_bone
-from rna_prop_ui     import rna_idprop_ui_prop_get
-from ..super_widgets import create_foot_widget, create_ballsocket_widget
-from .limb_utils     import orient_bone, make_constraint, get_bone_name
-
-from .....utils.mechanism import make_property
-
-def create_leg( cls, bones ):
-    org_bones = list(
-        [cls.org_bones[0]] + connected_children_names(cls.obj, cls.org_bones[0])
-    )
-
-    bones['ik']['ctrl']['terminal'] = []
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    eb = cls.obj.data.edit_bones
-
-    # Create toes def bone
-    toes_def = get_bone_name( org_bones[-1], 'def' )
-    toes_def = copy_bone( cls.obj, org_bones[-1], toes_def )
-
-    eb[ toes_def ].use_connect = False
-    eb[ toes_def ].parent      = eb[ bones['def'][-1] ]
-    eb[ toes_def ].use_connect = True
-
-    bones['def'] += [ toes_def ]
-
-    # Create IK leg control
-    ctrl = get_bone_name( org_bones[2], 'ctrl', 'ik' )
-    ctrl = copy_bone( cls.obj, org_bones[2], ctrl )
-
-    # clear parent (so that rigify will parent to root)
-    eb[ ctrl ].parent      = None
-    eb[ ctrl ].use_connect = False
-
-    # Create heel ctrl bone
-    heel = get_bone_name( org_bones[2], 'ctrl', 'heel_ik' )
-    heel = copy_bone( cls.obj, org_bones[2], heel )
-    orient_bone( cls, eb[ heel ], 'y', 0.5 )
-    eb[ heel ].length = eb[ org_bones[2] ].length / 2
-
-    # Reset control position and orientation
-    l = eb[ ctrl ].length
-    orient_bone( cls, eb[ ctrl ], 'y', reverse = True )
-    eb[ ctrl ].length = l
-
-    # Parent
-    eb[ heel ].use_connect = False
-    eb[ heel ].parent      = eb[ ctrl ]
-
-    eb[ bones['ik']['mch_target'] ].parent      = eb[ heel ]
-    eb[ bones['ik']['mch_target'] ].use_connect = False
-
-    # Create foot mch rock and roll bones
-
-    # Get the tmp heel (floating unconnected without children)
-    tmp_heel = ""
-    for b in cls.obj.data.bones[ org_bones[2] ].children:
-        if not b.use_connect and not b.children:
-            tmp_heel = b.name
-
-    # roll1 MCH bone
-    roll1_mch = get_bone_name( tmp_heel, 'mch', 'roll' )
-    roll1_mch = copy_bone( cls.obj, org_bones[2], roll1_mch )
-
-    # clear parent
-    eb[ roll1_mch ].use_connect = False
-    eb[ roll1_mch ].parent      = None
-
-    flip_bone( cls.obj, roll1_mch )
-
-    # Create 2nd roll mch, and two rock mch bones
-    roll2_mch = get_bone_name( tmp_heel, 'mch', 'roll' )
-    roll2_mch = copy_bone( cls.obj, org_bones[3], roll2_mch )
-
-    eb[ roll2_mch ].use_connect = False
-    eb[ roll2_mch ].parent      = None
-
-    put_bone(
-        cls.obj,
-        roll2_mch,
-        ( eb[ tmp_heel ].head + eb[ tmp_heel ].tail ) / 2
-    )
-
-    eb[ roll2_mch ].length /= 4
-
-    # Rock MCH bones
-    rock1_mch = get_bone_name( tmp_heel, 'mch', 'rock' )
-    rock1_mch = copy_bone( cls.obj, tmp_heel, rock1_mch )
-
-    eb[ rock1_mch ].use_connect = False
-    eb[ rock1_mch ].parent      = None
-
-    orient_bone( cls, eb[ rock1_mch ], 'y', 1.0, reverse = True )
-    eb[ rock1_mch ].length = eb[ tmp_heel ].length / 2
-
-    rock2_mch = get_bone_name( tmp_heel, 'mch', 'rock' )
-    rock2_mch = copy_bone( cls.obj, tmp_heel, rock2_mch )
-
-    eb[ rock2_mch ].use_connect = False
-    eb[ rock2_mch ].parent      = None
-
-    orient_bone( cls, eb[ rock2_mch ], 'y', 1.0 )
-    eb[ rock2_mch ].length = eb[ tmp_heel ].length / 2
-
-    # Parent rock and roll MCH bones
-    eb[ roll1_mch ].parent = eb[ roll2_mch ]
-    eb[ roll2_mch ].parent = eb[ rock1_mch ]
-    eb[ rock1_mch ].parent = eb[ rock2_mch ]
-    eb[ rock2_mch ].parent = eb[ ctrl ]
-
-    # Constrain rock and roll MCH bones
-    make_constraint( cls, roll1_mch, {
-        'constraint'   : 'COPY_ROTATION',
-        'subtarget'    : heel,
-        'owner_space'  : 'LOCAL',
-        'target_space' : 'LOCAL'
-    })
-    make_constraint( cls, roll1_mch, {
-        'constraint'  : 'LIMIT_ROTATION',
-        'use_limit_x' : True,
-        'max_x'       : math.radians(360),
-        'owner_space' : 'LOCAL'
-    })
-    make_constraint( cls, roll2_mch, {
-        'constraint'   : 'COPY_ROTATION',
-        'subtarget'    : heel,
-        'use_y'        : False,
-        'use_z'        : False,
-        'invert_x'     : True,
-        'owner_space'  : 'LOCAL',
-        'target_space' : 'LOCAL'
-    })
-    make_constraint( cls, roll2_mch, {
-        'constraint'  : 'LIMIT_ROTATION',
-        'use_limit_x' : True,
-        'max_x'       : math.radians(360),
-        'owner_space' : 'LOCAL'
-    })
-
-    pb = cls.obj.pose.bones
-    for i,b in enumerate([ rock1_mch, rock2_mch ]):
-        head_tail = pb[b].head - pb[tmp_heel].head
-        if '.L' in b:
-            if not i:
-                min_y = 0
-                max_y = math.radians(360)
-            else:
-                min_y = math.radians(-360)
-                max_y = 0
-        else:
-            if not i:
-                min_y = math.radians(-360)
-                max_y = 0
-            else:
-                min_y = 0
-                max_y = math.radians(360)
-
-
-        make_constraint( cls, b, {
-            'constraint'   : 'COPY_ROTATION',
-            'subtarget'    : heel,
-            'use_x'        : False,
-            'use_z'        : False,
-            'owner_space'  : 'LOCAL',
-            'target_space' : 'LOCAL'
-        })
-        make_constraint( cls, b, {
-            'constraint'  : 'LIMIT_ROTATION',
-            'use_limit_y' : True,
-            'min_y'       : min_y,
-            'max_y'       : max_y,
-            'owner_space' : 'LOCAL'
-        })
-
-    # Constrain 4th ORG to roll2 MCH bone
-    make_constraint( cls, org_bones[3], {
-        'constraint'  : 'COPY_TRANSFORMS',
-        'subtarget'   : roll2_mch
-    })
-
-    # Set up constraints
-    # Constrain mch target bone to the ik control and mch stretch
-
-    make_constraint( cls, bones['ik']['mch_target'], {
-        'constraint'  : 'COPY_LOCATION',
-        'subtarget'   : bones['ik']['mch_str'],
-        'head_tail'   : 1.0
-    })
-
-    # Constrain mch ik stretch bone to the ik control
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'DAMPED_TRACK',
-        'subtarget'   : roll1_mch,
-        'head_tail'   : 1.0
-    })
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'STRETCH_TO',
-        'subtarget'   : roll1_mch,
-        'head_tail'   : 1.0
-    })
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'LIMIT_SCALE',
-        'use_min_y'   : True,
-        'use_max_y'   : True,
-        'max_y'       : 1.05,
-        'owner_space' : 'LOCAL'
-    })
-
-    # Modify rotation mode for ik and tweak controls
-    pb[bones['ik']['ctrl']['limb']].rotation_mode = 'ZXY'
-
-    for b in bones['tweak']['ctrl']:
-        pb[b].rotation_mode = 'ZXY'
-
-    # Create ik/fk switch property
-    pb_parent = pb[ bones['parent'] ]
-
-    prop = make_property(pb_parent, 'IK_Strertch', 1.0, description='IK Stretch')
-
-    # Add driver to limit scale constraint influence
-    b        = bones['ik']['mch_str']
-    drv_fcu  = pb[b].constraints[-1].driver_add("influence")
-    drv      = drv_fcu.driver
-    drv.type = 'AVERAGE'
-
-    var = drv.variables.new()
-    var.name = prop.name
-    var.type = "SINGLE_PROP"
-    var.targets[0].id = cls.obj
-    var.targets[0].data_path = \
-        pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
-
-    drv_modifier = drv_fcu.modifiers[0]
-
-    drv_modifier.mode            = 'POLYNOMIAL'
-    drv_modifier.poly_order      = 1
-    drv_modifier.coefficients[0] = 1.0
-    drv_modifier.coefficients[1] = -1.0
-
-    # Create leg widget
-    create_foot_widget(cls.obj, ctrl, bone_transform_name=None)
-
-    # Create heel ctrl locks
-    pb[ heel ].lock_location = True, True, True
-    pb[ heel ].lock_rotation = False, False, True
-    pb[ heel ].lock_scale    = True, True, True
-
-    # Add ballsocket widget to heel
-    create_ballsocket_widget(cls.obj, heel, bone_transform_name=None)
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    eb = cls.obj.data.edit_bones
-
-    if len( org_bones ) >= 4:
-        # Create toes control bone
-        toes = get_bone_name( org_bones[3], 'ctrl' )
-        toes = copy_bone( cls.obj, org_bones[3], toes )
-
-        eb[ toes ].use_connect = False
-        eb[ toes ].parent      = eb[ org_bones[3] ]
-
-        # Constrain toes def bones
-        make_constraint( cls, bones['def'][-2], {
-            'constraint'  : 'DAMPED_TRACK',
-            'subtarget'   : toes
-        })
-        make_constraint( cls, bones['def'][-2], {
-            'constraint'  : 'STRETCH_TO',
-            'subtarget'   : toes
-        })
-
-        make_constraint( cls, bones['def'][-1], {
-            'constraint'  : 'COPY_TRANSFORMS',
-            'subtarget'   : toes
-        })
-
-        # Find IK/FK switch property
-        pb   = cls.obj.pose.bones
-        prop = rna_idprop_ui_prop_get( pb[ bones['parent'] ], 'IK/FK' )
-
-        # Add driver to limit scale constraint influence
-        b        = org_bones[3]
-        drv_fcu  = pb[b].constraints[-1].driver_add("influence")
-        drv      = drv_fcu.driver
-        drv.type = 'AVERAGE'
-
-        var = drv.variables.new()
-        var.name = prop.name
-        var.type = "SINGLE_PROP"
-        var.targets[0].id = cls.obj
-        var.targets[0].data_path = \
-            pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
-
-        drv_modifier = drv_fcu.modifiers[0]
-
-        drv_modifier.mode            = 'POLYNOMIAL'
-        drv_modifier.poly_order      = 1
-        drv_modifier.coefficients[0] = 1.0
-        drv_modifier.coefficients[1] = -1.0
-
-        # Create toe circle widget
-        create_circle_widget(cls.obj, toes, radius=0.4, head_tail=0.5)
-
-        bones['ik']['ctrl']['terminal'] += [ toes ]
-
-    bones['ik']['ctrl']['terminal'] += [ heel, ctrl ]
-
-    return bones
diff --git a/rigify/legacy/rigs/pitchipoy/limbs/limb_utils.py b/rigify/legacy/rigs/pitchipoy/limbs/limb_utils.py
deleted file mode 100644
index 69449bb71db606c38da66e971acba967dc623f4f..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/limbs/limb_utils.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import bpy, re
-from mathutils import Vector
-from ....utils import org, strip_org, make_mechanism_name, make_deformer_name
-from ....utils import MetarigError
-
-bilateral_suffixes = ['.L','.R']
-
-def orient_bone( cls, eb, axis, scale = 1.0, reverse = False ):
-    v = Vector((0,0,0))
-
-    setattr(v,axis,scale)
-
-    if reverse:
-        tail_vec = v @ cls.obj.matrix_world
-        eb.head[:] = eb.tail
-        eb.tail[:] = eb.head + tail_vec
-    else:
-        tail_vec = v @ cls.obj.matrix_world
-        eb.tail[:] = eb.head + tail_vec
-
-    eb.roll = 0.0
-
-def make_constraint( cls, bone, constraint ):
-    bpy.ops.object.mode_set(mode = 'OBJECT')
-    pb = cls.obj.pose.bones
-
-    owner_pb = pb[bone]
-    const    = owner_pb.constraints.new( constraint['constraint'] )
-
-    constraint['target'] = cls.obj
-
-    # filter constraint props to those that actually exist in the currnet
-    # type of constraint, then assign values to each
-    for p in [ k for k in constraint.keys() if k in dir(const) ]:
-        if p in dir( const ):
-            setattr( const, p, constraint[p] )
-        else:
-            raise MetarigError(
-                "RIGIFY ERROR: property %s does not exist in %s constraint" % (
-                    p, constraint['constraint']
-            ))
-
-def get_bone_name( name, btype, suffix = '' ):
-    # RE pattern match right or left parts
-    # match the letter "L" (or "R"), followed by an optional dot (".")
-    # and 0 or more digits at the end of the the string
-    pattern = r'^(\S+)(\.\S+)$'
-
-    name = strip_org( name )
-
-    types = {
-        'mch'  : make_mechanism_name( name ),
-        'org'  : org( name ),
-        'def'  : make_deformer_name( name ),
-        'ctrl' : name
-    }
-
-    name = types[btype]
-
-    if suffix:
-        results = re.match( pattern,  name )
-        bname, addition = ('','')
-
-        if results:
-            bname, addition = results.groups()
-            name = bname + "_" + suffix + addition
-        else:
-            name = name  + "_" + suffix
-
-    return name
diff --git a/rigify/legacy/rigs/pitchipoy/limbs/paw.py b/rigify/legacy/rigs/pitchipoy/limbs/paw.py
deleted file mode 100644
index 2fdb56f70c36bbf3aef3f3d48d609eb2f2db8eca..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/limbs/paw.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-import bpy
-from ....utils       import connected_children_names, create_circle_widget
-from ....utils       import copy_bone, flip_bone
-from rna_prop_ui     import rna_idprop_ui_prop_get
-from ..super_widgets import create_foot_widget, create_ballsocket_widget
-from .limb_utils     import orient_bone, make_constraint, get_bone_name
-
-from .....utils.mechanism import make_property
-
-def create_paw( cls, bones ):
-    org_bones = list(
-        [cls.org_bones[0]] + connected_children_names(cls.obj, cls.org_bones[0])
-    )
-
-
-    bones['ik']['ctrl']['terminal'] = []
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    eb = cls.obj.data.edit_bones
-
-    # Create IK paw control
-    ctrl = get_bone_name( org_bones[2], 'ctrl', 'ik' )
-    ctrl = copy_bone( cls.obj, org_bones[2], ctrl )
-
-    # clear parent (so that rigify will parent to root)
-    eb[ ctrl ].parent      = None
-    eb[ ctrl ].use_connect = False
-
-    # Create heel control bone
-    heel = get_bone_name( org_bones[2], 'ctrl', 'heel_ik' )
-    heel = copy_bone( cls.obj, org_bones[2], heel )
-
-    # clear parent
-    eb[ heel ].parent      = None
-    eb[ heel ].use_connect = False
-
-    # Parent
-    eb[ heel ].parent      = eb[ ctrl ]
-    eb[ heel ].use_connect = False
-
-    flip_bone( cls.obj, heel )
-
-    eb[ bones['ik']['mch_target'] ].parent      = eb[ heel ]
-    eb[ bones['ik']['mch_target'] ].use_connect = False
-
-    # Reset control position and orientation
-    l = eb[ ctrl ].length
-    orient_bone( cls, eb[ ctrl ], 'y', reverse = True )
-    eb[ ctrl ].length = l
-
-    # Set up constraints
-    # Constrain mch target bone to the ik control and mch stretch
-
-    make_constraint( cls, bones['ik']['mch_target'], {
-        'constraint'  : 'COPY_LOCATION',
-        'subtarget'   : bones['ik']['mch_str'],
-        'head_tail'   : 1.0
-    })
-
-    # Constrain mch ik stretch bone to the ik control
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'DAMPED_TRACK',
-        'subtarget'   : heel,
-        'head_tail'   : 1.0
-    })
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'STRETCH_TO',
-        'subtarget'   : heel,
-        'head_tail'   : 1.0
-    })
-    make_constraint( cls, bones['ik']['mch_str'], {
-        'constraint'  : 'LIMIT_SCALE',
-        'use_min_y'   : True,
-        'use_max_y'   : True,
-        'max_y'       : 1.05,
-        'owner_space' : 'LOCAL'
-    })
-
-    pb = cls.obj.pose.bones
-
-    # Modify rotation mode for ik and tweak controls
-    pb[bones['ik']['ctrl']['limb']].rotation_mode = 'ZXY'
-
-    for b in bones['tweak']['ctrl']:
-        pb[b].rotation_mode = 'ZXY'
-
-    # Create ik/fk switch property
-    pb_parent = pb[ bones['parent'] ]
-
-    prop = make_property(pb_parent, 'IK_Strertch', 1.0, description='IK Stretch')
-
-    # Add driver to limit scale constraint influence
-    b        = bones['ik']['mch_str']
-    drv_fcu  = pb[b].constraints[-1].driver_add("influence")
-    drv      = drv_fcu.driver
-    drv.type = 'AVERAGE'
-
-    var = drv.variables.new()
-    var.name = prop.name
-    var.type = "SINGLE_PROP"
-    var.targets[0].id = cls.obj
-    var.targets[0].data_path = \
-        pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
-
-    drv_modifier = drv_fcu.modifiers[0]
-
-    drv_modifier.mode            = 'POLYNOMIAL'
-    drv_modifier.poly_order      = 1
-    drv_modifier.coefficients[0] = 1.0
-    drv_modifier.coefficients[1] = -1.0
-
-    # Create paw widget
-    create_foot_widget(cls.obj, ctrl, bone_transform_name=None)
-
-    # Create heel ctrl locks
-    pb[ heel ].lock_location = True, True, True
-
-    # Add ballsocket widget to heel
-    create_ballsocket_widget(cls.obj, heel, bone_transform_name=None)
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    eb = cls.obj.data.edit_bones
-
-    if len( org_bones ) >= 4:
-        # Create toes control bone
-        toes = get_bone_name( org_bones[3], 'ctrl' )
-        toes = copy_bone( cls.obj, org_bones[3], toes )
-
-        eb[ toes ].use_connect = False
-        eb[ toes ].parent      = eb[ org_bones[3] ]
-
-        # Create toes mch bone
-        toes_mch = get_bone_name( org_bones[3], 'mch' )
-        toes_mch = copy_bone( cls.obj, org_bones[3], toes_mch )
-
-        eb[ toes_mch ].use_connect = False
-        eb[ toes_mch ].parent      = eb[ ctrl ]
-
-        eb[ toes_mch ].length /= 4
-
-        # Constrain 4th ORG to toes MCH bone
-        make_constraint( cls, org_bones[3], {
-            'constraint'  : 'COPY_TRANSFORMS',
-            'subtarget'   : toes_mch
-        })
-
-        # Constrain toes def bones
-
-        make_constraint( cls, bones['def'][-1], {
-            'constraint'  : 'DAMPED_TRACK',
-            'subtarget'   : toes,
-            'head_tail'   : 1
-        })
-        make_constraint( cls, bones['def'][-1], {
-            'constraint'  : 'STRETCH_TO',
-            'subtarget'   : toes,
-            'head_tail'   : 1
-        })
-
-
-        # Find IK/FK switch property
-        pb   = cls.obj.pose.bones
-        prop = rna_idprop_ui_prop_get( pb[ bones['parent'] ], 'IK/FK' )
-
-        # Add driver to limit scale constraint influence
-        b        = org_bones[3]
-        drv_fcu  = pb[b].constraints[-1].driver_add("influence")
-        drv      = drv_fcu.driver
-        drv.type = 'AVERAGE'
-
-        var = drv.variables.new()
-        var.name = prop.name
-        var.type = "SINGLE_PROP"
-        var.targets[0].id = cls.obj
-        var.targets[0].data_path = \
-            pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
-
-        drv_modifier = drv_fcu.modifiers[0]
-
-        drv_modifier.mode            = 'POLYNOMIAL'
-        drv_modifier.poly_order      = 1
-        drv_modifier.coefficients[0] = 1.0
-        drv_modifier.coefficients[1] = -1.0
-
-        # Create toe circle widget
-        create_circle_widget(cls.obj, toes, radius=0.4, head_tail=0.5)
-
-        bones['ik']['ctrl']['terminal'] += [ toes ]
-
-    bones['ik']['ctrl']['terminal'] += [ heel, ctrl ]
-
-    return bones
diff --git a/rigify/legacy/rigs/pitchipoy/limbs/super_limb.py b/rigify/legacy/rigs/pitchipoy/limbs/super_limb.py
deleted file mode 100644
index daedbaca57d4f63e469760e1ce60358e3efe950f..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/limbs/super_limb.py
+++ /dev/null
@@ -1,764 +0,0 @@
-import bpy, re
-from   .arm            import create_arm
-from   .leg            import create_leg
-from   .paw            import create_paw
-from   .ui             import create_script
-from   .limb_utils     import orient_bone, make_constraint, get_bone_name
-from   mathutils       import Vector
-from   ....utils       import copy_bone, put_bone, strip_org
-from   ....utils       import create_circle_widget, create_sphere_widget
-from   ....utils       import create_limb_widget, connected_children_names
-from   ..super_widgets import create_ikarrow_widget
-from   math            import trunc
-
-from .....utils.mechanism import make_property
-
-class Rig:
-
-    def __init__(self, obj, bone_name, params):
-        """ Initialize super_limb rig and key rig properties """
-        self.obj = obj
-        self.params = params
-
-        if params.limb_type != 'paw':
-            self.org_bones = list(
-                [bone_name] + connected_children_names(obj, bone_name)
-                )[:3]  # The basic limb is the first 3 bones
-        else:
-            self.org_bones = list(
-                [bone_name] + connected_children_names(obj, bone_name)
-                )[:4]  # The basic limb is the first 4 bones for a paw
-
-        self.segments = params.segments
-        self.bbones = params.bbones
-        self.limb_type = params.limb_type
-        self.rot_axis = params.rotation_axis
-
-        # Assign values to tweak/FK layers props if opted by user
-        if params.tweak_extra_layers:
-            self.tweak_layers = list(params.tweak_layers)
-        else:
-            self.tweak_layers = None
-
-        if params.fk_extra_layers:
-            self.fk_layers = list(params.fk_layers)
-        else:
-            self.fk_layers = None
-
-    def create_parent(self):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        name = get_bone_name( strip_org( org_bones[0] ), 'mch', 'parent' )
-
-        mch = copy_bone( self.obj, org_bones[0], name )
-        orient_bone( self, eb[mch], 'y' )
-        eb[ mch ].length = eb[ org_bones[0] ].length / 4
-
-        eb[ mch ].parent = eb[ org_bones[0] ].parent
-
-        eb[ mch ].roll = 0.0
-
-        # Constraints
-        make_constraint( self, mch, {
-            'constraint'  : 'COPY_ROTATION',
-            'subtarget'   : 'root'
-        })
-
-        make_constraint( self, mch, {
-            'constraint'  : 'COPY_SCALE',
-            'subtarget'   : 'root'
-        })
-
-        # Limb Follow Driver
-        pb = self.obj.pose.bones
-
-        name = 'FK_limb_follow'
-
-        make_property(pb[ mch ], name, 0.0)
-
-        drv = pb[ mch ].constraints[ 0 ].driver_add("influence").driver
-
-        drv.type = 'AVERAGE'
-        var = drv.variables.new()
-        var.name = name
-        var.type = "SINGLE_PROP"
-        var.targets[0].id = self.obj
-        var.targets[0].data_path = pb[ mch ].path_from_id() + \
-                                   '[' + '"' + name + '"' + ']'
-
-        return mch
-
-    def create_tweak( self ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        tweaks         = {}
-        tweaks['ctrl'] = []
-        tweaks['mch' ] = []
-
-        # Create and parent mch and ctrl tweaks
-        for i,org in enumerate(org_bones):
-            if i < len(org_bones) - 1:
-                # Create segments if specified
-                for j in range( self.segments ):
-                    # MCH
-                    name = get_bone_name( strip_org(org), 'mch', 'tweak' )
-                    mch = copy_bone( self.obj, org, name )
-
-                    # CTRL
-                    name = get_bone_name( strip_org(org), 'ctrl', 'tweak' )
-                    ctrl = copy_bone( self.obj, org, name )
-
-                    eb[ mch  ].length /= self.segments
-                    eb[ ctrl ].length /= self.segments
-
-                    # If we have more than one segments, place the head of the
-                    # 2nd and onwards at the correct position
-                    if j > 0:
-                        put_bone(self.obj, mch,  eb[ tweaks['mch' ][-1] ].tail)
-                        put_bone(self.obj, ctrl, eb[ tweaks['ctrl'][-1] ].tail)
-
-                    tweaks['ctrl'] += [ ctrl ]
-                    tweaks['mch' ] += [ mch  ]
-
-                    # Parenting the tweak ctrls to mchs
-                    eb[ mch  ].parent = eb[ org ]
-                    eb[ ctrl ].parent = eb[ mch ]
-
-            else: # Last limb bone - is not subdivided
-                name = get_bone_name( strip_org(org), 'mch', 'tweak' )
-                mch = copy_bone( self.obj, org_bones[i-1], name )
-                eb[ mch ].length = eb[org].length / 4
-                put_bone(
-                    self.obj,
-                    mch,
-                    eb[org_bones[i-1]].tail
-                )
-
-                ctrl = get_bone_name( strip_org(org), 'ctrl', 'tweak' )
-                ctrl = copy_bone( self.obj, org, ctrl )
-                eb[ ctrl ].length = eb[org].length / 2
-
-                tweaks['mch']  += [ mch  ]
-                tweaks['ctrl'] += [ ctrl ]
-
-                # Parenting the tweak ctrls to mchs
-                eb[ mch  ].parent = eb[ org ]
-                eb[ ctrl ].parent = eb[ mch ]
-
-        # Scale to reduce widget size and maintain conventions!
-        for mch, ctrl in zip( tweaks['mch'], tweaks['ctrl'] ):
-            eb[ mch  ].length /= 4
-            eb[ ctrl ].length /= 2
-
-        # Constraints
-        if self.limb_type == 'paw':
-
-            for i,b in enumerate( tweaks['mch'] ):
-                first  = 0
-                middle = trunc( len( tweaks['mch'] ) / 3 )
-                middle1 = middle + self.segments
-                last   =  len( tweaks['mch'] ) - 1
-
-                if i == first or i == middle or i == middle1:
-                    make_constraint( self, b, {
-                        'constraint'  : 'COPY_SCALE',
-                        'subtarget'   : 'root'
-                    })
-                elif i != last:
-                    targets       = []
-                    factor        = 0
-                    if i < middle:
-                        dt_target_idx = middle
-                        targets = [first,middle]
-                    elif i > middle and i < middle1:
-                        targets = [middle,middle1]
-                        factor = self.segments
-                        dt_target_idx = middle1
-                    else:
-                        targets       = [middle1,last]
-                        factor        = self.segments * 2
-                        dt_target_idx = last
-
-
-                    # Use copy transforms constraints to position each bone
-                    # exactly in the location respective to its index (between
-                    # the two edges)
-                    make_constraint( self, b, {
-                        'constraint'  : 'COPY_TRANSFORMS',
-                        'subtarget'   : tweaks['ctrl'][targets[0]],
-                    })
-                    make_constraint( self, b, {
-                        'constraint'  : 'COPY_TRANSFORMS',
-                        'subtarget'   : tweaks['ctrl'][targets[1]],
-                        'influence'   : (i - factor) / self.segments
-                    })
-                    make_constraint( self, b, {
-                        'constraint'  : 'DAMPED_TRACK',
-                        'subtarget'   : tweaks['ctrl'][ dt_target_idx ],
-                    })
-
-        else:
-            for i,b in enumerate( tweaks['mch'] ):
-                first  = 0
-                middle = trunc( len( tweaks['mch'] ) / 2 )
-                last   = len( tweaks['mch'] ) - 1
-
-                if i == first or i == middle:
-                    make_constraint( self, b, {
-                        'constraint'  : 'COPY_SCALE',
-                        'subtarget'   : 'root'
-                    })
-                elif i != last:
-                    targets       = []
-                    dt_target_idx = middle
-                    factor        = 0
-                    if i < middle:
-                        targets = [first,middle]
-                    else:
-                        targets       = [middle,last]
-                        factor        = self.segments
-                        dt_target_idx = last
-
-                    # Use copy transforms constraints to position each bone
-                    # exactly in the location respective to its index (between
-                    # the two edges)
-                    make_constraint( self, b, {
-                        'constraint'  : 'COPY_TRANSFORMS',
-                        'subtarget'   : tweaks['ctrl'][targets[0]],
-                    })
-                    make_constraint( self, b, {
-                        'constraint'  : 'COPY_TRANSFORMS',
-                        'subtarget'   : tweaks['ctrl'][targets[1]],
-                        'influence'   : (i - factor) / self.segments
-                    })
-                    make_constraint( self, b, {
-                        'constraint'  : 'DAMPED_TRACK',
-                        'subtarget'   : tweaks['ctrl'][ dt_target_idx ],
-                    })
-
-        # Ctrl bones Locks and Widgets
-        pb = self.obj.pose.bones
-        for t in tweaks['ctrl']:
-            pb[t].lock_rotation = True, False, True
-            pb[t].lock_scale    = False, True, False
-
-            create_sphere_widget(self.obj, t, bone_transform_name=None)
-
-            if self.tweak_layers:
-                pb[t].bone.layers = self.tweak_layers
-
-        return tweaks
-
-
-    def create_def( self, tweaks ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        def_bones = []
-        for i,org in enumerate(org_bones):
-            if i < len(org_bones) - 1:
-                # Create segments if specified
-                for j in range( self.segments ):
-                    name = get_bone_name( strip_org(org), 'def' )
-                    def_name = copy_bone( self.obj, org, name )
-
-                    eb[ def_name ].length /= self.segments
-
-                    # If we have more than one segments, place the 2nd and
-                    # onwards on the tail of the previous bone
-                    if j > 0:
-                         put_bone(self.obj, def_name, eb[ def_bones[-1] ].tail)
-
-                    def_bones += [ def_name ]
-            else:
-                name     = get_bone_name( strip_org(org), 'def' )
-                def_name = copy_bone( self.obj, org, name )
-                def_bones.append( def_name )
-
-        # Parent deform bones
-        for i,b in enumerate( def_bones ):
-            if i > 0: # For all bones but the first (which has no parent)
-                eb[b].parent      = eb[ def_bones[i-1] ] # to previous
-                eb[b].use_connect = True
-
-        # Constraint def to tweaks
-        for d,t in zip(def_bones, tweaks):
-            tidx = tweaks.index(t)
-
-            make_constraint( self, d, {
-                'constraint'  : 'COPY_TRANSFORMS',
-                'subtarget'   : t
-            })
-
-            if tidx != len(tweaks) - 1:
-                make_constraint( self, d, {
-                    'constraint'  : 'DAMPED_TRACK',
-                    'subtarget'   : tweaks[ tidx + 1 ],
-                })
-
-                make_constraint( self, d, {
-                    'constraint'  : 'STRETCH_TO',
-                    'subtarget'   : tweaks[ tidx + 1 ],
-                })
-
-        # Create bbone segments
-        for bone in def_bones[:-1]:
-            self.obj.data.bones[bone].bbone_segments = self.bbones
-
-        self.obj.data.bones[ def_bones[0]  ].bbone_easein  = 0.0
-        self.obj.data.bones[ def_bones[-2] ].bbone_easeout = 0.0
-        self.obj.data.bones[ def_bones[-1] ].bbone_easein  = 0.0
-        self.obj.data.bones[ def_bones[-1] ].bbone_easeout = 0.0
-
-
-        # Rubber hose drivers
-        pb = self.obj.pose.bones
-        for i,t in enumerate( tweaks[1:-1] ):
-            # Create custom property on tweak bone to control rubber hose
-            name = 'rubber_tweak'
-
-            if i == trunc( len( tweaks[1:-1] ) / 2 ):
-                defval = 0.0
-            else:
-                defval = 1.0
-
-            make_property(pb[t], name, defval, max=2.0, soft_max=1.0)
-
-        for j,d in enumerate(def_bones[:-1]):
-            drvs = {}
-            if j != 0:
-                tidx = j
-                drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easein").driver
-
-            if j != len( def_bones[:-1] ) - 1:
-                tidx = j + 1
-                drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easeout").driver
-
-            for d in drvs:
-                drv = drvs[d]
-                name = 'rubber_tweak'
-                drv.type = 'AVERAGE'
-                var = drv.variables.new()
-                var.name = name
-                var.type = "SINGLE_PROP"
-                var.targets[0].id = self.obj
-                var.targets[0].data_path = pb[tweaks[d]].path_from_id() + \
-                                           '[' + '"' + name + '"' + ']'
-
-        return def_bones
-
-
-    def create_ik( self, parent ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        ctrl       = get_bone_name( org_bones[0], 'ctrl', 'ik'        )
-        mch_ik     = get_bone_name( org_bones[0], 'mch',  'ik'        )
-        mch_target = get_bone_name( org_bones[0], 'mch',  'ik_target' )
-
-        for o, ik in zip( org_bones, [ ctrl, mch_ik, mch_target ] ):
-            bone = copy_bone( self.obj, o, ik )
-
-            if org_bones.index(o) == len( org_bones ) - 1:
-                eb[ bone ].length /= 4
-
-        # Create MCH Stretch
-        mch_str = copy_bone(
-            self.obj,
-            org_bones[0],
-            get_bone_name( org_bones[0], 'mch', 'ik_stretch' )
-        )
-
-        if self.limb_type != 'paw':
-            eb[ mch_str ].tail = eb[ org_bones[-1] ].head
-        else:
-            eb[ mch_str ].tail = eb[ org_bones[-2] ].head
-
-        # Parenting
-        eb[ ctrl    ].parent = eb[ parent ]
-        eb[ mch_str ].parent = eb[ parent ]
-        eb[ mch_ik  ].parent = eb[ ctrl   ]
-
-
-        make_constraint( self, mch_ik, {
-            'constraint'  : 'IK',
-            'subtarget'   : mch_target,
-            'chain_count' : 2,
-        })
-
-        pb = self.obj.pose.bones
-        pb[ mch_ik ].ik_stretch = 0.1
-        pb[ ctrl   ].ik_stretch = 0.1
-
-        # IK constraint Rotation locks
-        for axis in ['x','y','z']:
-            if axis != self.rot_axis:
-               setattr( pb[ mch_ik ], 'lock_ik_' + axis, True )
-
-        # Locks and Widget
-        pb[ ctrl ].lock_rotation = True, False, True
-        create_ikarrow_widget( self.obj, ctrl, bone_transform_name=None )
-
-        return { 'ctrl'       : { 'limb' : ctrl },
-                 'mch_ik'     : mch_ik,
-                 'mch_target' : mch_target,
-                 'mch_str'    : mch_str
-        }
-
-
-    def create_fk( self, parent ):
-        org_bones = self.org_bones.copy()
-
-        if self.limb_type == 'paw':  # Paw base chain is one bone longer
-            org_bones.pop()
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        ctrls = []
-
-        for o in org_bones:
-            bone = copy_bone( self.obj, o, get_bone_name( o, 'ctrl', 'fk' ) )
-            ctrls.append( bone )
-
-        # MCH
-        mch = copy_bone(
-            self.obj, org_bones[-1], get_bone_name( o, 'mch', 'fk' )
-        )
-
-        eb[ mch ].length /= 4
-
-        # Parenting
-        eb[ ctrls[0] ].parent      = eb[ parent   ]
-        eb[ ctrls[1] ].parent      = eb[ ctrls[0] ]
-        eb[ ctrls[1] ].use_connect = True
-        eb[ ctrls[2] ].parent      = eb[ mch      ]
-        eb[ mch      ].parent      = eb[ ctrls[1] ]
-        eb[ mch      ].use_connect = True
-
-        # Constrain MCH's scale to root
-        make_constraint( self, mch, {
-            'constraint'  : 'COPY_SCALE',
-            'subtarget'   : 'root'
-        })
-
-        # Locks and widgets
-        pb = self.obj.pose.bones
-        pb[ ctrls[2] ].lock_location = True, True, True
-
-        create_limb_widget( self.obj, ctrls[0] )
-        create_limb_widget( self.obj, ctrls[1] )
-
-        create_circle_widget(self.obj, ctrls[2], radius=0.4, head_tail=0.0)
-
-        for c in ctrls:
-            if self.fk_layers:
-                pb[c].bone.layers = self.fk_layers
-
-        return { 'ctrl' : ctrls, 'mch' : mch }
-
-
-    def org_parenting_and_switch( self, org, ik, fk, parent ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-        # re-parent ORGs in a connected chain
-        for i,o in enumerate(org):
-            if i > 0:
-                eb[o].parent = eb[ org[i-1] ]
-                if i <= len(org)-1:
-                    eb[o].use_connect = True
-
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        pb = self.obj.pose.bones
-        pb_parent = pb[ parent ]
-
-        # Create ik/fk switch property
-        prop = make_property(pb_parent, 'IK/FK', 0.0, description='IK/FK Switch')
-
-        # Constrain org to IK and FK bones
-        iks =  [ ik['ctrl']['limb'] ]
-        iks += [ ik[k] for k in [ 'mch_ik', 'mch_target'] ]
-
-        for o, i, f in zip( org, iks, fk ):
-            make_constraint( self, o, {
-                'constraint'  : 'COPY_TRANSFORMS',
-                'subtarget'   : i
-            })
-            make_constraint( self, o, {
-                'constraint'  : 'COPY_TRANSFORMS',
-                'subtarget'   : f
-            })
-
-            # Add driver to relevant constraint
-            drv = pb[o].constraints[-1].driver_add("influence").driver
-            drv.type = 'AVERAGE'
-
-            var = drv.variables.new()
-            var.name = prop.name
-            var.type = "SINGLE_PROP"
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = \
-                pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
-
-
-    def create_terminal( self, limb_type, bones ):
-        if   limb_type == 'arm':
-            return create_arm( self, bones )
-        elif limb_type == 'leg':
-            return create_leg( self, bones )
-        elif limb_type == 'paw':
-            return create_paw( self, bones )
-
-
-    def generate( self ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Clear parents for org bones
-        for bone in self.org_bones[1:]:
-            eb[bone].use_connect = False
-            eb[bone].parent      = None
-
-        bones = {}
-
-        # Create mch limb parent
-        bones['parent'] = self.create_parent()
-        bones['tweak']  = self.create_tweak()
-        bones['def']    = self.create_def( bones['tweak']['ctrl'] )
-        bones['ik']     = self.create_ik(  bones['parent']        )
-        bones['fk']     = self.create_fk(  bones['parent']        )
-
-        self.org_parenting_and_switch(
-            self.org_bones, bones['ik'], bones['fk']['ctrl'], bones['parent']
-        )
-
-        bones = self.create_terminal( self.limb_type, bones )
-
-        return [ create_script( bones, self.limb_type ) ]
-
-def add_parameters( params ):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-
-    items = [
-        ('arm', 'Arm', ''),
-        ('leg', 'Leg', ''),
-        ('paw', 'Paw', '')
-    ]
-    params.limb_type = bpy.props.EnumProperty(
-        items   = items,
-        name    = "Limb Type",
-        default = 'arm'
-    )
-
-    items = [
-        ('x', 'X', ''),
-        ('y', 'Y', ''),
-        ('z', 'Z', '')
-    ]
-    params.rotation_axis = bpy.props.EnumProperty(
-        items   = items,
-        name    = "Rotation Axis",
-        default = 'x'
-    )
-
-    params.segments = bpy.props.IntProperty(
-        name        = 'limb segments',
-        default     = 2,
-        min         = 1,
-        description = 'Number of segments'
-    )
-
-    params.bbones = bpy.props.IntProperty(
-        name        = 'bbone segments',
-        default     = 10,
-        min         = 1,
-        description = 'Number of segments'
-    )
-
-    # Setting up extra layers for the FK and tweak
-    params.tweak_extra_layers = bpy.props.BoolProperty(
-        name        = "tweak_extra_layers",
-        default     = True,
-        description = ""
-        )
-
-    params.tweak_layers = bpy.props.BoolVectorProperty(
-        size        = 32,
-        description = "Layers for the tweak controls to be on",
-        default     = tuple( [ i == 1 for i in range(0, 32) ] )
-        )
-
-    # Setting up extra layers for the FK and tweak
-    params.fk_extra_layers = bpy.props.BoolProperty(
-        name        = "fk_extra_layers",
-        default     = True,
-        description = ""
-        )
-
-    params.fk_layers = bpy.props.BoolVectorProperty(
-        size        = 32,
-        description = "Layers for the FK controls to be on",
-        default     = tuple( [ i == 1 for i in range(0, 32) ] )
-        )
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters."""
-
-    r = layout.row()
-    r.prop(params, "limb_type")
-
-    r = layout.row()
-    r.prop(params, "rotation_axis")
-
-    r = layout.row()
-    r.prop(params, "segments")
-
-    r = layout.row()
-    r.prop(params, "bbones")
-
-    for layer in [ 'fk', 'tweak' ]:
-        r = layout.row()
-        r.prop(params, layer + "_extra_layers")
-        r.active = params.tweak_extra_layers
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-
-        for i in range(8):
-            row.prop(params, layer + "_layers", index=i, toggle=True, text="")
-
-        row = col.row(align=True)
-
-        for i in range(16,24):
-            row.prop(params, layer + "_layers", index=i, toggle=True, text="")
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-
-        for i in range(8,16):
-            row.prop(params, layer + "_layers", index=i, toggle=True, text="")
-
-        row = col.row(align=True)
-
-        for i in range(24,32):
-            row.prop(params, layer + "_layers", index=i, toggle=True, text="")
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('upper_arm.L')
-    bone.head[:] = -0.0016, 0.0060, -0.0012
-    bone.tail[:] = 0.2455, 0.0678, -0.1367
-    bone.roll = 2.0724
-    bone.use_connect = False
-    bones['upper_arm.L'] = bone.name
-    bone = arm.edit_bones.new('forearm.L')
-    bone.head[:] = 0.2455, 0.0678, -0.1367
-    bone.tail[:] = 0.4625, 0.0285, -0.2797
-    bone.roll = 2.1535
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['upper_arm.L']]
-    bones['forearm.L'] = bone.name
-    bone = arm.edit_bones.new('hand.L')
-    bone.head[:] = 0.4625, 0.0285, -0.2797
-    bone.tail[:] = 0.5265, 0.0205, -0.3273
-    bone.roll = 2.2103
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['forearm.L']]
-    bones['hand.L'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['upper_arm.L']]
-    pbone.rigify_type = 'pitchipoy.limbs.super_limb'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    try:
-        pbone.rigify_parameters.separate_ik_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.ik_layers = [
-            False, False, False, False, False, False, False, False, True, False,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False
-        ]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.separate_hose_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.hose_layers = [
-            False, False, False, False, False, False, False, False, False, True,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False
-        ]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_layers = [
-            False, False, False, False, False, False, False, False, False, True,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False
-        ]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.fk_layers = [
-            False, False, False, False, False, False, False, False, True, False,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False, False, False, False, False, False, False, False, False,
-            False, False
-        ]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['forearm.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['hand.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/pitchipoy/limbs/ui.py b/rigify/legacy/rigs/pitchipoy/limbs/ui.py
deleted file mode 100644
index a7ed95a702374d321acbffed23461b2835ed528b..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/limbs/ui.py
+++ /dev/null
@@ -1,143 +0,0 @@
-script_arm = """
-controls = [%s]
-tweaks   = [%s]
-ik_ctrl  = [%s]
-fk_ctrl  = '%s'
-parent   = '%s'
-
-# IK/FK Switch on all Control Bones
-if is_selected( controls ):
-    layout.prop( pose_bones[ parent ], '["%s"]', slider = True )
-    props = layout.operator("pose.rigify_arm_fk2ik_" + rig_id, text="Snap FK->IK (" + fk_ctrl + ")")
-    props.uarm_fk = controls[1]
-    props.farm_fk = controls[2]
-    props.hand_fk = controls[3]
-    props.uarm_ik = controls[0]
-    props.farm_ik = ik_ctrl[1]
-    props.hand_ik = controls[4]
-    props = layout.operator("pose.rigify_arm_ik2fk_" + rig_id, text="Snap IK->FK (" + fk_ctrl + ")")
-    props.uarm_fk = controls[1]
-    props.farm_fk = controls[2]
-    props.hand_fk = controls[3]
-    props.uarm_ik = controls[0]
-    props.farm_ik = ik_ctrl[1]
-    props.hand_ik = controls[4]
-    props.pole = ""
-
-
-# BBone rubber hose on each Respective Tweak
-for t in tweaks:
-    if is_selected( t ):
-        layout.prop( pose_bones[ t ], '["%s"]', slider = True )
-
-# IK Stretch on IK Control bone
-if is_selected( ik_ctrl ):
-    layout.prop( pose_bones[ parent ], '["%s"]', slider = True )
-
-# FK limb follow
-if is_selected( fk_ctrl ):
-    layout.prop( pose_bones[ parent ], '["%s"]', slider = True )
-"""
-
-script_leg = """
-controls = [%s]
-tweaks   = [%s]
-ik_ctrl  = [%s]
-fk_ctrl  = '%s'
-parent   = '%s'
-
-# IK/FK Switch on all Control Bones
-if is_selected( controls ):
-    layout.prop( pose_bones[ parent ], '["%s"]', slider = True )
-    props = layout.operator("pose.rigify_leg_fk2ik_" + rig_id, text="Snap FK->IK (" + fk_ctrl + ")")
-    props.thigh_fk = controls[1]
-    props.shin_fk  = controls[2]
-    props.foot_fk  = controls[3]
-    props.mfoot_fk = controls[7]
-    props.thigh_ik = controls[0]
-    props.shin_ik  = ik_ctrl[1]
-    props.foot_ik = ik_ctrl[2]
-    props.mfoot_ik = ik_ctrl[2]
-    props = layout.operator("pose.rigify_leg_ik2fk_" + rig_id, text="Snap IK->FK (" + fk_ctrl + ")")
-    props.thigh_fk  = controls[1]
-    props.shin_fk   = controls[2]
-    props.foot_fk  = controls[3]
-    props.mfoot_fk  = controls[7]
-    props.thigh_ik  = controls[0]
-    props.shin_ik   = ik_ctrl[1]
-    props.foot_ik   = controls[6]
-    props.pole      = ""
-    props.footroll  = controls[5]
-    props.mfoot_ik  = ik_ctrl[2]
-
-# BBone rubber hose on each Respective Tweak
-for t in tweaks:
-    if is_selected( t ):
-        layout.prop( pose_bones[ t ], '["%s"]', slider = True )
-
-# IK Stretch on IK Control bone
-if is_selected( ik_ctrl ):
-    layout.prop( pose_bones[ parent ], '["%s"]', slider = True )
-
-# FK limb follow
-if is_selected( fk_ctrl ):
-    layout.prop( pose_bones[ parent ], '["%s"]', slider = True )
-"""
-
-def create_script( bones, limb_type=None):
-    # All ctrls have IK/FK switch
-    controls =  [ bones['ik']['ctrl']['limb'] ] + bones['fk']['ctrl']
-    controls += bones['ik']['ctrl']['terminal']
-    controls += [ bones['fk']['mch'] ]
-
-    controls_string = ", ".join(["'" + x + "'" for x in controls])
-
-    # All tweaks have their own bbone prop
-    tweaks        = bones['tweak']['ctrl'][1:-1]
-    tweaks_string = ", ".join(["'" + x + "'" for x in tweaks])
-
-    # IK ctrl has IK stretch
-    ik_ctrl = [ bones['ik']['ctrl']['terminal'][-1] ]
-    ik_ctrl += [ bones['ik']['mch_ik'] ]
-    ik_ctrl += [ bones['ik']['mch_target'] ]
-
-    ik_ctrl_string = ", ".join(["'" + x + "'" for x in ik_ctrl])
-
-    if limb_type == 'arm':
-        return script_arm % (
-            controls_string,
-            tweaks_string,
-            ik_ctrl_string,
-            bones['fk']['ctrl'][0],
-            bones['parent'],
-            'IK/FK',
-            'rubber_tweak',
-            'IK_Strertch',
-            'FK_limb_follow'
-        )
-
-    elif limb_type == 'leg':
-        return script_leg % (
-            controls_string,
-            tweaks_string,
-            ik_ctrl_string,
-            bones['fk']['ctrl'][0],
-            bones['parent'],
-            'IK/FK',
-            'rubber_tweak',
-            'IK_Strertch',
-            'FK_limb_follow'
-        )
-
-    elif limb_type == 'paw':
-        return script_leg % (
-            controls_string,
-            tweaks_string,
-            ik_ctrl_string,
-            bones['fk']['ctrl'][0],
-            bones['parent'],
-            'IK/FK',
-            'rubber_tweak',
-            'IK_Strertch',
-            'FK_limb_follow'
-        )
diff --git a/rigify/legacy/rigs/pitchipoy/simple_tentacle.py b/rigify/legacy/rigs/pitchipoy/simple_tentacle.py
deleted file mode 100644
index 46166db9c075fb746178bedd6347339f0a80d534..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/simple_tentacle.py
+++ /dev/null
@@ -1,349 +0,0 @@
-import bpy
-from ...utils    import copy_bone
-from ...utils    import strip_org, make_deformer_name, connected_children_names
-from ...utils    import put_bone, create_sphere_widget
-from ...utils    import create_circle_widget
-from ...utils    import MetarigError
-
-class Rig:
-
-    def __init__(self, obj, bone_name, params):
-        self.obj = obj
-        self.org_bones = [bone_name] + connected_children_names(obj, bone_name)
-        self.params = params
-
-        self.copy_rotaion_axes = params.copy_rotaion_axes
-
-        if params.tweak_extra_layers:
-            self.tweak_layers = list( params.tweak_layers )
-        else:
-            self.tweak_layers = None
-
-        if len(self.org_bones) <= 1:
-            raise MetarigError(
-                "RIGIFY ERROR: invalid rig structure" % (strip_org(bone_name))
-            )
-
-
-    def make_controls( self ):
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        org_bones = self.org_bones
-
-        ctrl_chain = []
-        for i in range( len( org_bones ) ):
-            name = org_bones[i]
-
-            ctrl_bone  = copy_bone(
-                self.obj,
-                name,
-                strip_org(name)
-            )
-
-            ctrl_chain.append( ctrl_bone )
-
-        # Make widgets
-        bpy.ops.object.mode_set(mode ='OBJECT')
-
-        for ctrl in ctrl_chain:
-            create_circle_widget(self.obj, ctrl, radius=0.3, head_tail=0.5)
-
-        return ctrl_chain
-
-
-    def make_tweaks( self ):
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-        org_bones = self.org_bones
-
-        tweak_chain = []
-        for i in range( len( org_bones ) + 1 ):
-            if i == len( org_bones ):
-                # Make final tweak at the tip of the tentacle
-                name = org_bones[i-1]
-            else:
-                name = org_bones[i]
-
-            tweak_bone = copy_bone(
-                self.obj,
-                name,
-                "tweak_" + strip_org(name)
-            )
-
-            tweak_e = eb[ tweak_bone ]
-
-            tweak_e.length /= 2 # Set size to half
-
-            if i == len( org_bones ):
-                # Position final tweak at the tip
-                put_bone( self.obj, tweak_bone, eb[ org_bones[-1]].tail )
-
-            tweak_chain.append( tweak_bone )
-
-        # Make widgets
-        bpy.ops.object.mode_set(mode = 'OBJECT')
-
-        for tweak in tweak_chain:
-            create_sphere_widget( self.obj, tweak )
-
-            tweak_pb = self.obj.pose.bones[ tweak ]
-
-            # Set locks
-            if tweak_chain.index( tweak ) != len( tweak_chain ) - 1:
-                tweak_pb.lock_rotation = (True, False, True)
-                tweak_pb.lock_scale    = (False, True, False)
-            else:
-                tweak_pb.lock_rotation_w = True
-                tweak_pb.lock_rotation   = (True, True, True)
-                tweak_pb.lock_scale      = (True, True, True)
-
-            # Set up tweak bone layers
-            if self.tweak_layers:
-                tweak_pb.bone.layers = self.tweak_layers
-
-        return tweak_chain
-
-
-    def make_deform( self ):
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        org_bones = self.org_bones
-
-        def_chain = []
-        for i in range( len( org_bones ) ):
-            name = org_bones[i]
-
-            def_bone  = copy_bone(
-                self.obj,
-                name,
-                make_deformer_name(strip_org(name))
-            )
-
-            def_chain.append( def_bone )
-
-        return def_chain
-
-
-    def parent_bones( self, all_bones ):
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        org_bones = self.org_bones
-        eb        = self.obj.data.edit_bones
-
-        # Parent control bones
-        for bone in all_bones['control'][1:]:
-            previous_index    = all_bones['control'].index( bone ) - 1
-            eb[ bone ].parent = eb[ all_bones['control'][previous_index] ]
-
-        # Parent tweak bones
-        tweaks = all_bones['tweak']
-        for tweak in all_bones['tweak']:
-            parent = ''
-            if tweaks.index( tweak ) == len( tweaks ) - 1:
-                parent = all_bones['control'][ -1 ]
-            else:
-                parent = all_bones['control'][ tweaks.index( tweak ) ]
-
-            eb[ tweak ].parent = eb[ parent ]
-
-        # Parent deform bones
-        for bone in all_bones['deform'][1:]:
-            previous_index = all_bones['deform'].index( bone ) - 1
-
-            eb[ bone ].parent = eb[ all_bones['deform'][previous_index] ]
-            eb[ bone ].use_connect = True
-
-        # Parent org bones ( to tweaks by default, or to the controls )
-        for org, tweak in zip( org_bones, all_bones['tweak'] ):
-            eb[ org ].parent = eb[ tweak ]
-
-
-    def make_constraints( self, all_bones ):
-
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        org_bones = self.org_bones
-        pb        = self.obj.pose.bones
-
-        # Deform bones' constraints
-        ctrls   = all_bones['control']
-        tweaks  = all_bones['tweak'  ]
-        deforms = all_bones['deform' ]
-
-        for deform, tweak, ctrl in zip( deforms, tweaks, ctrls ):
-            con           = pb[deform].constraints.new('COPY_TRANSFORMS')
-            con.target    = self.obj
-            con.subtarget = tweak
-
-            con           = pb[deform].constraints.new('DAMPED_TRACK')
-            con.target    = self.obj
-            con.subtarget = tweaks[ tweaks.index( tweak ) + 1 ]
-
-            con           = pb[deform].constraints.new('STRETCH_TO')
-            con.target    = self.obj
-            con.subtarget = tweaks[ tweaks.index( tweak ) + 1 ]
-
-            # Control bones' constraints
-            if ctrl != ctrls[0]:
-                con = pb[ctrl].constraints.new('COPY_ROTATION')
-                con.target       = self.obj
-                con.subtarget    = ctrls[ ctrls.index(ctrl) - 1 ]
-                for i, prop in enumerate( [ 'use_x', 'use_y', 'use_z' ] ):
-                    if self.copy_rotaion_axes[i]:
-                        setattr( con, prop, True )
-                    else:
-                        setattr( con, prop, False )
-                con.mix_mode     = 'OFFSET'
-                con.target_space = 'LOCAL'
-                con.owner_space  = 'LOCAL'
-
-
-
-    def generate(self):
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Clear all initial parenting
-        for bone in self.org_bones:
-        #    eb[ bone ].parent      = None
-            eb[ bone ].use_connect = False
-
-        # Creating all bones
-        ctrl_chain  = self.make_controls()
-        tweak_chain = self.make_tweaks()
-        def_chain   = self.make_deform()
-
-        all_bones = {
-            'control' : ctrl_chain,
-            'tweak'   : tweak_chain,
-            'deform'  : def_chain
-        }
-
-        self.make_constraints( all_bones )
-        self.parent_bones( all_bones )
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    params.copy_rotaion_axes = bpy.props.BoolVectorProperty(
-        size        = 3,
-        description = "Layers for the tweak controls to be on",
-        default     = tuple( [ i == 0 for i in range(0, 3) ] )
-        )
-
-    # Setting up extra tweak layers
-    params.tweak_extra_layers = bpy.props.BoolProperty(
-        name        = "tweak_extra_layers",
-        default     = True,
-        description = ""
-        )
-
-    params.tweak_layers = bpy.props.BoolVectorProperty(
-        size        = 32,
-        description = "Layers for the tweak controls to be on",
-        default     = tuple( [ i == 1 for i in range(0, 32) ] )
-        )
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-
-    r = layout.row()
-    col = r.column(align=True)
-    row = col.row(align=True)
-    for i,axis in enumerate( [ 'x', 'y', 'z' ] ):
-        row.prop(params, "copy_rotaion_axes", index=i, toggle=True, text=axis)
-
-    r = layout.row()
-    r.prop(params, "tweak_extra_layers")
-    r.active = params.tweak_extra_layers
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-
-    for i in range( 8 ): # Layers 0-7
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    row = col.row(align=True)
-
-    for i in range( 16, 24 ): # Layers 16-23
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-
-    for i in range( 8, 16 ): # Layers 8-15
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    row = col.row(align=True)
-
-    for i in range( 24, 32 ): # Layers 24-31
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('Bone')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0000, 0.0000, 0.3333
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['Bone'] = bone.name
-
-    bone = arm.edit_bones.new('Bone.002')
-    bone.head[:] = 0.0000, 0.0000, 0.3333
-    bone.tail[:] = 0.0000, 0.0000, 0.6667
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['Bone']]
-    bones['Bone.002'] = bone.name
-
-    bone = arm.edit_bones.new('Bone.001')
-    bone.head[:] = 0.0000, 0.0000, 0.6667
-    bone.tail[:] = 0.0000, 0.0000, 1.0000
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['Bone.002']]
-    bones['Bone.001'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['Bone']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['Bone.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['Bone.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/pitchipoy/super_copy.py b/rigify/legacy/rigs/pitchipoy/super_copy.py
deleted file mode 100644
index 27e887750ce5c369e36f1cbfa9f62a0408fba3eb..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/super_copy.py
+++ /dev/null
@@ -1,159 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-
-from ...utils import copy_bone
-from ...utils import strip_org, make_deformer_name
-from ...utils import create_bone_widget, create_circle_widget
-
-
-class Rig:
-    """ A "copy" rig.  All it does is duplicate the original bone and
-        constrain it.
-        This is a control and deformation rig.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-        """
-        self.obj          = obj
-        self.org_bone     = bone
-        self.org_name     = strip_org(bone)
-        self.params       = params
-        self.make_control = params.make_control
-        self.make_widget  = params.make_widget
-        self.make_deform  = params.make_deform
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Make a control bone (copy of original).
-        if self.make_control:
-            bone = copy_bone(self.obj, self.org_bone, self.org_name)
-
-        # Make a deformation bone (copy of original, child of original).
-        if self.make_deform:
-            def_bone = copy_bone(self.obj, self.org_bone, make_deformer_name(self.org_name))
-
-        # Get edit bones
-        eb = self.obj.data.edit_bones
-        # UNUSED
-        # if self.make_control:
-        #     bone_e = eb[bone]
-        if self.make_deform:
-            def_bone_e = eb[def_bone]
-
-        # Parent
-        if self.make_deform:
-            def_bone_e.use_connect = False
-            def_bone_e.parent = eb[self.org_bone]
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        if self.make_control:
-            # Constrain the original bone.
-            con = pb[self.org_bone].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = bone
-
-            # Create control widget
-            if self.make_widget:
-                create_circle_widget(self.obj, bone, radius = 0.5 )
-            else:
-                create_bone_widget(self.obj, bone, radius = 0.5 )
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    params.make_control = bpy.props.BoolProperty(
-        name        = "Control",
-        default     = True,
-        description = "Create a control bone for the copy"
-    )
-
-    params.make_widget = bpy.props.BoolProperty(
-        name        = "Widget",
-        default     = True,
-        description = "Choose a widget for the bone control"
-    )
-
-    params.make_deform = bpy.props.BoolProperty(
-        name        = "Deform",
-        default     = True,
-        description = "Create a deform bone for the copy"
-    )
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-    r = layout.row()
-    r.prop(params, "make_control")
-    r = layout.row()
-    r.prop(params, "make_widget")
-    r = layout.row()
-    r.prop(params, "make_deform")
-
-
-def create_sample(obj):
-    """ Create a sample metarig for this rig type.
-    """
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('Bone')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0000, 0.0000, 0.2000
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['Bone'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['Bone']]
-    pbone.rigify_type = 'basic.copy'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/pitchipoy/super_face.py b/rigify/legacy/rigs/pitchipoy/super_face.py
deleted file mode 100644
index 45347060a1232387f9a1fe38d15b56720da0f1a1..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/super_face.py
+++ /dev/null
@@ -1,2396 +0,0 @@
-import bpy, re
-from   mathutils      import Vector
-from   ...utils       import copy_bone, flip_bone
-from   ...utils       import org, strip_org, make_deformer_name, connected_children_names, make_mechanism_name
-from   ...utils       import create_widget
-from   .super_widgets import create_face_widget, create_eye_widget, create_eyes_widget, create_ear_widget, create_jaw_widget, create_teeth_widget
-
-from ....utils.mechanism import make_property
-
-script = """
-all_controls   = [%s]
-jaw_ctrl_name  = '%s'
-eyes_ctrl_name = '%s'
-
-if is_selected(all_controls):
-    layout.prop(pose_bones[jaw_ctrl_name],  '["%s"]', slider=True)
-    layout.prop(pose_bones[eyes_ctrl_name], '["%s"]', slider=True)
-"""
-class Rig:
-
-    def __init__(self, obj, bone_name, params):
-        self.obj = obj
-
-        b = self.obj.data.bones
-
-        children = [
-            "nose", "lip.T.L", "lip.B.L", "jaw", "ear.L", "ear.R", "lip.T.R",
-            "lip.B.R", "brow.B.L", "lid.T.L", "brow.B.R", "lid.T.R",
-            "forehead.L", "forehead.R", "forehead.L.001", "forehead.R.001",
-            "forehead.L.002", "forehead.R.002", "eye.L", "eye.R", "cheek.T.L",
-            "cheek.T.R", "teeth.T", "teeth.B", "tongue", "temple.L",
-            "temple.R"
-        ]
-
-        #create_pose_lib( self.obj )
-
-        children     = [ org(b) for b in children ]
-        grand_children = []
-
-        for child in children:
-            grand_children += connected_children_names( self.obj, child )
-
-        self.org_bones   = [bone_name] + children + grand_children
-        self.face_length = obj.data.edit_bones[ self.org_bones[0] ].length
-        self.params      = params
-
-        if params.primary_layers_extra:
-            self.primary_layers = list(params.primary_layers)
-        else:
-            self.primary_layers = None
-
-        if params.secondary_layers_extra:
-            self.secondary_layers = list(params.secondary_layers)
-        else:
-            self.secondary_layers = None
-
-    def symmetrical_split( self, bones ):
-
-        # RE pattern match right or left parts
-        # match the letter "L" (or "R"), followed by an optional dot (".")
-        # and 0 or more digits at the end of the the string
-        left_pattern  = 'L\.?\d*$'
-        right_pattern = 'R\.?\d*$'
-
-        left  = sorted( [ name for name in bones if re.search( left_pattern,  name ) ] )
-        right = sorted( [ name for name in bones if re.search( right_pattern, name ) ] )
-
-        return left, right
-
-    def create_deformation( self ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        def_bones = []
-        for org in org_bones:
-            if 'face' in org or 'teeth' in org or 'eye' in org:
-                continue
-
-            def_name = make_deformer_name( strip_org( org ) )
-            def_name = copy_bone( self.obj, org, def_name )
-            def_bones.append( def_name )
-
-            eb[def_name].use_connect = False
-            eb[def_name].parent      = None
-
-        brow_top_names = [ bone for bone in def_bones if 'brow.T'   in bone ]
-        forehead_names = [ bone for bone in def_bones if 'forehead' in bone ]
-
-        brow_left, brow_right         = self.symmetrical_split( brow_top_names )
-        forehead_left, forehead_right = self.symmetrical_split( forehead_names )
-
-        brow_left  = brow_left[1:]
-        brow_right = brow_right[1:]
-        brow_left.reverse()
-        brow_right.reverse()
-
-        for browL, browR, foreheadL, foreheadR in zip(
-            brow_left, brow_right, forehead_left, forehead_right ):
-
-            eb[foreheadL].tail = eb[browL].head
-            eb[foreheadR].tail = eb[browR].head
-
-        return { 'all' : def_bones }
-
-
-    def create_ctrl( self, bones ):
-        org_bones = self.org_bones
-
-        ## create control bones
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # eyes ctrls
-        eyeL_e = eb[ bones['eyes'][0] ]
-        eyeR_e = eb[ bones['eyes'][1] ]
-
-        distance = ( eyeL_e.head - eyeR_e.head ) * 3
-        distance = distance.cross( (0, 0, 1) )
-        eye_length = eyeL_e.length
-
-        eyeL_ctrl_name = strip_org( bones['eyes'][0] )
-        eyeR_ctrl_name = strip_org( bones['eyes'][1] )
-
-        eyeL_ctrl_name = copy_bone( self.obj, bones['eyes'][0],  eyeL_ctrl_name )
-        eyeR_ctrl_name = copy_bone( self.obj, bones['eyes'][1],  eyeR_ctrl_name )
-        eyes_ctrl_name = copy_bone( self.obj, bones['eyes'][0], 'eyes'          )
-
-        eyeL_ctrl_e = eb[ eyeL_ctrl_name ]
-        eyeR_ctrl_e = eb[ eyeR_ctrl_name ]
-        eyes_ctrl_e = eb[ 'eyes' ]
-
-        eyeL_ctrl_e.head    += distance
-        eyeR_ctrl_e.head    += distance
-        eyes_ctrl_e.head[:] =  ( eyeL_ctrl_e.head + eyeR_ctrl_e.head ) / 2
-
-        for bone in [ eyeL_ctrl_e, eyeR_ctrl_e, eyes_ctrl_e ]:
-            bone.tail[:] = bone.head + Vector( [ 0, 0, eye_length * 0.75 ] )
-
-        ## Widget for transforming the both eyes
-        eye_master_names = []
-        for bone in bones['eyes']:
-            eye_master = copy_bone(
-                self.obj,
-                bone,
-                'master_' + strip_org(bone)
-            )
-
-            eye_master_names.append( eye_master )
-
-        ## turbo: adding a master nose for transforming the whole nose
-        master_nose = copy_bone(self.obj, 'ORG-nose.004', 'nose_master')
-        eb[master_nose].tail[:] = \
-            eb[master_nose].head + Vector([0, self.face_length / -4, 0])
-
-        # ears ctrls
-        earL_name = strip_org( bones['ears'][0] )
-        earR_name = strip_org( bones['ears'][1] )
-
-        earL_ctrl_name = copy_bone( self.obj, org( bones['ears'][0] ), earL_name )
-        earR_ctrl_name = copy_bone( self.obj, org( bones['ears'][1] ), earR_name )
-
-        # jaw ctrl
-        jaw_ctrl_name = strip_org( bones['jaw'][2] ) + '_master'
-        jaw_ctrl_name = copy_bone( self.obj, bones['jaw'][2], jaw_ctrl_name )
-
-        jawL_org_e = eb[ bones['jaw'][0] ]
-        jawR_org_e = eb[ bones['jaw'][1] ]
-        jaw_org_e  = eb[ bones['jaw'][2] ]
-
-        eb[ jaw_ctrl_name ].head[:] = ( jawL_org_e.head + jawR_org_e.head ) / 2
-
-        # teeth ctrls
-        teethT_name = strip_org( bones['teeth'][0] )
-        teethB_name = strip_org( bones['teeth'][1] )
-
-        teethT_ctrl_name = copy_bone( self.obj, org( bones['teeth'][0] ), teethT_name )
-        teethB_ctrl_name = copy_bone( self.obj, org( bones['teeth'][1] ), teethB_name )
-
-        # tongue ctrl
-        tongue_org  = bones['tongue'].pop()
-        tongue_name = strip_org( tongue_org ) + '_master'
-
-        tongue_ctrl_name = copy_bone( self.obj, tongue_org, tongue_name )
-
-        flip_bone( self.obj, tongue_ctrl_name )
-
-        ## Assign widgets
-        bpy.ops.object.mode_set(mode ='OBJECT')
-
-        # Assign each eye widgets
-        create_eye_widget( self.obj, eyeL_ctrl_name )
-        create_eye_widget( self.obj, eyeR_ctrl_name )
-
-        # Assign eyes widgets
-        create_eyes_widget( self.obj, eyes_ctrl_name )
-
-        # Assign each eye_master widgets
-        for master in eye_master_names:
-            create_square_widget(self.obj, master)
-
-        # Assign nose_master widget
-        create_square_widget( self.obj, master_nose, size = 1 )
-
-        # Assign ears widget
-        create_ear_widget( self.obj, earL_ctrl_name )
-        create_ear_widget( self.obj, earR_ctrl_name )
-
-        # Assign jaw widget
-        create_jaw_widget( self.obj, jaw_ctrl_name )
-
-        # Assign teeth widget
-        create_teeth_widget( self.obj, teethT_ctrl_name )
-        create_teeth_widget( self.obj, teethB_ctrl_name )
-
-        # Assign tongue widget ( using the jaw widget )
-        create_jaw_widget( self.obj, tongue_ctrl_name )
-
-        return {
-            'eyes'   : [
-                eyeL_ctrl_name,
-                eyeR_ctrl_name,
-                eyes_ctrl_name,
-            ] + eye_master_names,
-            'ears'   : [ earL_ctrl_name, earR_ctrl_name     ],
-            'jaw'    : [ jaw_ctrl_name                      ],
-            'teeth'  : [ teethT_ctrl_name, teethB_ctrl_name ],
-            'tongue' : [ tongue_ctrl_name                   ],
-            'nose'   : [ master_nose                        ]
-            }
-
-
-    def create_tweak( self, bones, uniques, tails ):
-        org_bones = self.org_bones
-
-        ## create tweak bones
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        tweaks = []
-
-        for bone in bones + list( uniques.keys() ):
-
-            tweak_name = strip_org( bone )
-
-            # pick name for unique bone from the uniques dictionary
-            if bone in list( uniques.keys() ):
-                tweak_name = uniques[bone]
-
-            tweak_name = copy_bone( self.obj, bone, tweak_name )
-            eb[ tweak_name ].use_connect = False
-            eb[ tweak_name ].parent      = None
-
-            tweaks.append( tweak_name )
-
-            eb[ tweak_name ].tail[:] = \
-                eb[ tweak_name ].head + Vector(( 0, 0, self.face_length / 7 ))
-
-            # create tail bone
-            if bone in tails:
-                if 'lip.T.L.001' in bone:
-                    tweak_name = copy_bone( self.obj, bone,  'lips.L' )
-                elif 'lip.T.R.001' in bone:
-                    tweak_name = copy_bone( self.obj, bone,  'lips.R' )
-                else:
-                    tweak_name = copy_bone( self.obj, bone,  tweak_name )
-
-                eb[ tweak_name ].use_connect = False
-                eb[ tweak_name ].parent      = None
-
-                eb[ tweak_name ].head    = eb[ bone ].tail
-                eb[ tweak_name ].tail[:] = \
-                    eb[ tweak_name ].head + Vector(( 0, 0, self.face_length / 7 ))
-
-                tweaks.append( tweak_name )
-
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        pb = self.obj.pose.bones
-
-        primary_tweaks = [
-            "lid.B.L.002", "lid.T.L.002", "lid.B.R.002", "lid.T.R.002",
-            "chin", "brow.T.L.001", "brow.T.L.002", "brow.T.L.003",
-            "brow.T.R.001", "brow.T.R.002", "brow.T.R.003", "lip.B",
-            "lip.B.L.001", "lip.B.R.001", "cheek.B.L.001", "cheek.B.R.001",
-            "lips.L", "lips.R", "lip.T.L.001", "lip.T.R.001", "lip.T",
-            "nose.002", "nose.L.001", "nose.R.001"
-        ]
-
-        for bone in tweaks:
-            if bone in primary_tweaks:
-                if self.primary_layers:
-                    pb[bone].bone.layers = self.primary_layers
-                create_face_widget( self.obj, bone, size = 1.5 )
-            else:
-                if self.secondary_layers:
-                    pb[bone].bone.layers = self.secondary_layers
-                create_face_widget( self.obj, bone )
-
-        return { 'all' : tweaks }
-
-
-    def all_controls( self ):
-        org_bones = self.org_bones
-
-        org_tongue_bones  = sorted([ bone for bone in org_bones if 'tongue' in bone ])
-
-        org_to_ctrls = {
-            'eyes'   : [ 'eye.L',   'eye.R'        ],
-            'ears'   : [ 'ear.L',   'ear.R'        ],
-            'jaw'    : [ 'jaw.L',   'jaw.R', 'jaw' ],
-            'teeth'  : [ 'teeth.T', 'teeth.B'      ],
-            'tongue' : [ org_tongue_bones[0]       ]
-        }
-
-        tweak_unique = { 'lip.T.L'     : 'lip.T',
-                         'lip.B.L'     : 'lip.B'  }
-
-        org_to_ctrls = { key : [ org( bone ) for bone in org_to_ctrls[key] ] for key in org_to_ctrls.keys() }
-        tweak_unique = { org( key ) : tweak_unique[key] for key in tweak_unique.keys() }
-
-        tweak_exceptions = [] # bones not used to create tweaks
-        tweak_exceptions += [ bone for bone in org_bones if 'forehead' in bone or 'temple' in bone ]
-
-        tweak_tail =  [ 'brow.B.L.003', 'brow.B.R.003', 'nose.004', 'chin.001' ]
-        tweak_tail += [ 'lip.T.L.001', 'lip.T.R.001', 'tongue.002' ]
-
-        tweak_exceptions += [ 'lip.T.R', 'lip.B.R', 'ear.L.001', 'ear.R.001' ] + list(tweak_unique.keys())
-        tweak_exceptions += [ 'face', 'cheek.T.L', 'cheek.T.R', 'cheek.B.L', 'cheek.B.R' ]
-        tweak_exceptions += [ 'ear.L', 'ear.R', 'eye.L', 'eye.R' ]
-
-        tweak_exceptions += org_to_ctrls.keys()
-        tweak_exceptions += org_to_ctrls['teeth']
-
-        tweak_exceptions.pop( tweak_exceptions.index('tongue') )
-        tweak_exceptions.pop( tweak_exceptions.index('jaw')    )
-
-        tweak_exceptions = [ org( bone ) for bone in tweak_exceptions ]
-        tweak_tail       = [ org( bone ) for bone in tweak_tail       ]
-
-        org_to_tweak = sorted( [ bone for bone in org_bones if bone not in tweak_exceptions ] )
-
-        ctrls  = self.create_ctrl( org_to_ctrls )
-        tweaks = self.create_tweak( org_to_tweak, tweak_unique, tweak_tail )
-
-        return { 'ctrls' : ctrls, 'tweaks' : tweaks }, tweak_unique
-
-    def create_mch( self, jaw_ctrl, tongue_ctrl ):
-        org_bones = self.org_bones
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Create eyes mch bones
-        eyes = [ bone for bone in org_bones if 'eye' in bone ]
-
-        mch_bones = { strip_org( eye ) : [] for eye in eyes }
-
-        for eye in eyes:
-            mch_name = make_mechanism_name( strip_org( eye ) )
-            mch_name = copy_bone( self.obj, eye, mch_name )
-            eb[ mch_name ].use_connect = False
-            eb[ mch_name ].parent      = None
-
-            mch_bones[ strip_org( eye ) ].append( mch_name )
-
-            mch_name = copy_bone( self.obj, eye, mch_name )
-            eb[ mch_name ].use_connect = False
-            eb[ mch_name ].parent      = None
-
-            mch_bones[ strip_org( eye ) ].append( mch_name )
-
-            eb[ mch_name ].head[:] = eb[ mch_name ].tail
-            eb[ mch_name ].tail[:] = eb[ mch_name ].head + Vector( ( 0, 0, 0.005 ) )
-
-        # Create the eyes' parent mch
-        face = [ bone for bone in org_bones if 'face' in bone ].pop()
-
-        mch_name = 'eyes_parent'
-        mch_name = make_mechanism_name( mch_name )
-        mch_name = copy_bone( self.obj, face, mch_name )
-        eb[ mch_name ].use_connect = False
-        eb[ mch_name ].parent      = None
-
-        eb[ mch_name ].length /= 4
-
-        mch_bones['eyes_parent'] = [ mch_name ]
-
-        # Create the lids' mch bones
-        all_lids       = [ bone for bone in org_bones if 'lid' in bone ]
-        lids_L, lids_R = self.symmetrical_split( all_lids )
-
-        all_lids = [ lids_L, lids_R ]
-
-        mch_bones['lids'] = []
-
-        for i in range( 2 ):
-            for bone in all_lids[i]:
-                mch_name = make_mechanism_name( strip_org( bone ) )
-                mch_name = copy_bone( self.obj, eyes[i], mch_name  )
-
-                eb[ mch_name ].use_connect = False
-                eb[ mch_name ].parent      = None
-
-                eb[ mch_name ].tail[:] = eb[ bone ].head
-
-                mch_bones['lids'].append( mch_name )
-
-        mch_bones['jaw'] = []
-
-        length_subtractor = eb[ jaw_ctrl ].length / 6
-        # Create the jaw mch bones
-        for i in range( 6 ):
-            if i == 0:
-                mch_name = make_mechanism_name( 'mouth_lock' )
-            else:
-                mch_name = make_mechanism_name( jaw_ctrl )
-
-            mch_name = copy_bone( self.obj, jaw_ctrl, mch_name  )
-
-            eb[ mch_name ].use_connect = False
-            eb[ mch_name ].parent      = None
-
-            eb[ mch_name ].length = eb[ jaw_ctrl ].length - length_subtractor * i
-
-            mch_bones['jaw'].append( mch_name )
-
-        # Tongue mch bones
-
-        mch_bones['tongue'] = []
-
-        # create mch bones for all tongue org_bones except the first one
-        for bone in sorted([ org for org in org_bones if 'tongue' in org ])[1:]:
-            mch_name = make_mechanism_name( strip_org( bone ) )
-            mch_name = copy_bone( self.obj, tongue_ctrl, mch_name )
-
-            eb[ mch_name ].use_connect = False
-            eb[ mch_name ].parent      = None
-
-            mch_bones['tongue'].append( mch_name )
-
-        return mch_bones
-
-    def parent_bones( self, all_bones, tweak_unique ):
-        org_bones = self.org_bones
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        face_name = [ bone for bone in org_bones if 'face' in bone ].pop()
-
-        # Initially parenting all bones to the face org bone.
-        for category in list( all_bones.keys() ):
-            for area in list( all_bones[category] ):
-                for bone in all_bones[category][area]:
-                    eb[ bone ].parent = eb[ face_name ]
-
-        ## Parenting all deformation bones and org bones
-
-        # Parent all the deformation bones that have respective tweaks
-        def_tweaks = [ bone for bone in all_bones['deform']['all'] if bone[4:] in all_bones['tweaks']['all'] ]
-
-        # Parent all org bones to the ORG-face
-        for bone in [ bone for bone in org_bones if 'face' not in bone ]:
-            eb[ bone ].parent = eb[ org('face') ]
-
-        for bone in def_tweaks:
-            # the def and the matching org bone are parented to their corresponding tweak,
-            # whose name is the same as that of the def bone, without the "DEF-" (first 4 chars)
-            eb[ bone ].parent            = eb[ bone[4:] ]
-            eb[ org( bone[4:] ) ].parent = eb[ bone[4:] ]
-
-        # Parent ORG eyes to corresponding mch bones
-        for bone in [ bone for bone in org_bones if 'eye' in bone ]:
-            eb[ bone ].parent = eb[ make_mechanism_name( strip_org( bone ) ) ]
-
-        for lip_tweak in list( tweak_unique.values() ):
-            # find the def bones that match unique lip_tweaks by slicing [4:-2]
-            # example: 'lip.B' matches 'DEF-lip.B.R' and 'DEF-lip.B.L' if
-            # you cut off the "DEF-" [4:] and the ".L" or ".R" [:-2]
-            lip_defs = [ bone for bone in all_bones['deform']['all'] if bone[4:-2] == lip_tweak ]
-
-            for bone in lip_defs:
-                eb[bone].parent = eb[ lip_tweak ]
-
-        # parent cheek bones top respetive tweaks
-        lips  = [ 'lips.L',   'lips.R'   ]
-        brows = [ 'brow.T.L', 'brow.T.R' ]
-        cheekB_defs = [ 'DEF-cheek.B.L', 'DEF-cheek.B.R' ]
-        cheekT_defs = [ 'DEF-cheek.T.L', 'DEF-cheek.T.R' ]
-
-        for lip, brow, cheekB, cheekT in zip( lips, brows, cheekB_defs, cheekT_defs ):
-            eb[ cheekB ].parent = eb[ lip ]
-            eb[ cheekT ].parent = eb[ brow ]
-
-        # parent ear deform bones to their controls
-        ear_defs  = [ 'DEF-ear.L', 'DEF-ear.L.001', 'DEF-ear.R', 'DEF-ear.R.001' ]
-        ear_ctrls = [ 'ear.L', 'ear.R' ]
-
-        eb[ 'DEF-jaw' ].parent = eb[ 'jaw' ] # Parent jaw def bone to jaw tweak
-
-        for ear_ctrl in ear_ctrls:
-            for ear_def in ear_defs:
-                if ear_ctrl in ear_def:
-                    eb[ ear_def ].parent = eb[ ear_ctrl ]
-
-        # Parent eyelid deform bones (each lid def bone is parented to its respective MCH bone)
-        def_lids = [ bone for bone in all_bones['deform']['all'] if 'lid' in bone ]
-
-        for bone in def_lids:
-            mch = make_mechanism_name( bone[4:] )
-            eb[ bone ].parent = eb[ mch ]
-
-        ## Parenting all mch bones
-
-        eb[ 'MCH-eyes_parent' ].parent = None  # eyes_parent will be parented to root
-
-        # parent all mch tongue bones to the jaw master control bone
-        for bone in all_bones['mch']['tongue']:
-            eb[ bone ].parent = eb[ all_bones['ctrls']['jaw'][0] ]
-
-        ## Parenting the control bones
-
-        # parent teeth.B and tongue master controls to the jaw master control bone
-        for bone in [ 'teeth.B', 'tongue_master' ]:
-            eb[ bone ].parent = eb[ all_bones['ctrls']['jaw'][0] ]
-
-        # eyes
-        eb[ 'eyes' ].parent = eb[ 'MCH-eyes_parent' ]
-
-        eyes = [
-            bone for bone in all_bones['ctrls']['eyes'] if 'eyes' not in bone
-        ][0:2]
-
-        for eye in eyes:
-            eb[ eye ].parent = eb[ 'eyes' ]
-
-        ## turbo: parent eye master bones to face
-        for eye_master in eyes[2:]:
-            eb[ eye_master ].parent = eb[ 'ORG-face' ]
-
-        # Parent brow.b, eyes mch and lid tweaks and mch bones to masters
-        tweaks = [
-            b for b in all_bones['tweaks']['all'] if 'lid' in b or 'brow.B' in b
-        ]
-        mch = all_bones['mch']['lids']  + \
-              all_bones['mch']['eye.R'] + \
-              all_bones['mch']['eye.L']
-
-        everyone = tweaks + mch
-
-        left, right = self.symmetrical_split( everyone )
-
-        for l in left:
-            eb[ l ].parent = eb[ 'master_eye.L' ]
-
-        for r in right:
-            eb[ r ].parent = eb[ 'master_eye.R' ]
-
-        ## turbo: nose to mch jaw.004
-        eb[ all_bones['ctrls']['nose'].pop() ].parent = eb['MCH-jaw_master.004']
-
-        ## Parenting the tweak bones
-
-        # Jaw children (values) groups and their parents (keys)
-        groups = {
-            'jaw_master'         : [
-                'jaw',
-                'jaw.R.001',
-                'jaw.L.001',
-                'chin.L',
-                'chin.R',
-                'chin',
-                'tongue.003'
-                ],
-            'MCH-jaw_master'     : [
-                 'lip.B'
-                ],
-            'MCH-jaw_master.001' : [
-                'lip.B.L.001',
-                'lip.B.R.001'
-                ],
-            'MCH-jaw_master.002' : [
-                'lips.L',
-                'lips.R',
-                'cheek.B.L.001',
-                'cheek.B.R.001'
-                ],
-            'MCH-jaw_master.003' : [
-                'lip.T',
-                'lip.T.L.001',
-                'lip.T.R.001'
-                ],
-            'MCH-jaw_master.004' : [
-                'cheek.T.L.001',
-                'cheek.T.R.001'
-                ],
-            'nose_master'        : [
-                'nose.002',
-                'nose.004',
-                'nose.L.001',
-                'nose.R.001'
-                ]
-             }
-
-        for parent in list( groups.keys() ):
-            for bone in groups[parent]:
-                eb[ bone ].parent = eb[ parent ]
-
-        # Remaining arbitrary relatioships for tweak bone parenting
-        eb[ 'chin.001'   ].parent = eb[ 'chin'           ]
-        eb[ 'chin.002'   ].parent = eb[ 'lip.B'          ]
-        eb[ 'nose.001'   ].parent = eb[ 'nose.002'       ]
-        eb[ 'nose.003'   ].parent = eb[ 'nose.002'       ]
-        eb[ 'nose.005'   ].parent = eb[ 'lip.T'          ]
-        eb[ 'tongue'     ].parent = eb[ 'tongue_master'  ]
-        eb[ 'tongue.001' ].parent = eb[ 'MCH-tongue.001' ]
-        eb[ 'tongue.002' ].parent = eb[ 'MCH-tongue.002' ]
-
-        for bone in [ 'ear.L.002', 'ear.L.003', 'ear.L.004' ]:
-            eb[ bone                       ].parent = eb[ 'ear.L' ]
-            eb[ bone.replace( '.L', '.R' ) ].parent = eb[ 'ear.R' ]
-
-
-    def make_constraits( self, constraint_type, bone, subtarget, influence = 1 ):
-        org_bones = self.org_bones
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        pb = self.obj.pose.bones
-
-        owner_pb = pb[bone]
-
-        if   constraint_type == 'def_tweak':
-
-            const = owner_pb.constraints.new( 'DAMPED_TRACK' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-
-            const = owner_pb.constraints.new( 'STRETCH_TO' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-
-        elif constraint_type == 'def_lids':
-
-            const = owner_pb.constraints.new( 'DAMPED_TRACK' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-            const.head_tail = 1.0
-
-            const = owner_pb.constraints.new( 'STRETCH_TO' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-            const.head_tail = 1.0
-
-        elif constraint_type == 'mch_eyes':
-
-            const = owner_pb.constraints.new( 'DAMPED_TRACK' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-
-        elif constraint_type == 'mch_eyes_lids_follow':
-
-            const = owner_pb.constraints.new( 'COPY_LOCATION' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-            const.head_tail = 1.0
-
-        elif constraint_type == 'mch_eyes_parent':
-
-            const = owner_pb.constraints.new( 'COPY_TRANSFORMS' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-
-        elif constraint_type == 'mch_jaw_master':
-
-            const = owner_pb.constraints.new( 'COPY_TRANSFORMS' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-            const.influence = influence
-
-        elif constraint_type == 'teeth':
-
-            const = owner_pb.constraints.new( 'COPY_TRANSFORMS' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-            const.influence = influence
-
-        elif constraint_type == 'tweak_copyloc':
-
-            const = owner_pb.constraints.new( 'COPY_LOCATION' )
-            const.target       = self.obj
-            const.subtarget    = subtarget
-            const.influence    = influence
-            const.use_offset   = True
-            const.target_space = 'LOCAL'
-            const.owner_space  = 'LOCAL'
-
-        elif constraint_type == 'tweak_copy_rot_scl':
-
-            const = owner_pb.constraints.new( 'COPY_ROTATION' )
-            const.target       = self.obj
-            const.subtarget    = subtarget
-            const.mix_mode     = 'OFFSET'
-            const.target_space = 'LOCAL'
-            const.owner_space  = 'LOCAL'
-
-            const = owner_pb.constraints.new( 'COPY_SCALE' )
-            const.target       = self.obj
-            const.subtarget    = subtarget
-            const.use_offset   = True
-            const.target_space = 'LOCAL'
-            const.owner_space  = 'LOCAL'
-
-        elif constraint_type == 'tweak_copyloc_inv':
-
-            const = owner_pb.constraints.new( 'COPY_LOCATION' )
-            const.target       = self.obj
-            const.subtarget    = subtarget
-            const.influence    = influence
-            const.target_space = 'LOCAL'
-            const.owner_space  = 'LOCAL'
-            const.use_offset   = True
-            const.invert_x     = True
-            const.invert_y     = True
-            const.invert_z     = True
-
-        elif constraint_type == 'mch_tongue_copy_trans':
-
-            const = owner_pb.constraints.new( 'COPY_TRANSFORMS' )
-            const.target    = self.obj
-            const.subtarget = subtarget
-            const.influence = influence
-
-
-    def constraints( self, all_bones ):
-        ## Def bone constraints
-
-        def_specials = {
-            # 'bone'             : 'target'
-            'DEF-jaw'               : 'chin',
-            'DEF-chin.L'            : 'lips.L',
-            'DEF-jaw.L.001'         : 'chin.L',
-            'DEF-chin.R'            : 'lips.R',
-            'DEF-jaw.R.001'         : 'chin.R',
-            'DEF-brow.T.L.003'      : 'nose',
-            'DEF-ear.L'             : None,
-            'DEF-ear.L.003'         : 'ear.L.004',
-            'DEF-ear.L.004'         : 'ear.L',
-            'DEF-ear.R'             : None,
-            'DEF-ear.R.003'         : 'ear.R.004',
-            'DEF-ear.R.004'         : 'ear.R',
-            'DEF-lip.B.L.001'       : 'lips.L',
-            'DEF-lip.B.R.001'       : 'lips.R',
-            'DEF-cheek.B.L.001'     : 'brow.T.L',
-            'DEF-cheek.B.R.001'     : 'brow.T.R',
-            'DEF-lip.T.L.001'       : 'lips.L',
-            'DEF-lip.T.R.001'       : 'lips.R',
-            'DEF-cheek.T.L.001'     : 'nose.L',
-            'DEF-nose.L.001'        : 'nose.002',
-            'DEF-cheek.T.R.001'     : 'nose.R',
-            'DEF-nose.R.001'        : 'nose.002',
-            'DEF-forehead.L'        : 'brow.T.L.003',
-            'DEF-forehead.L.001'    : 'brow.T.L.002',
-            'DEF-forehead.L.002'    : 'brow.T.L.001',
-            'DEF-temple.L'          : 'jaw.L',
-            'DEF-brow.T.R.003'      : 'nose',
-            'DEF-forehead.R'        : 'brow.T.R.003',
-            'DEF-forehead.R.001'    : 'brow.T.R.002',
-            'DEF-forehead.R.002'    : 'brow.T.R.001',
-            'DEF-temple.R'          : 'jaw.R'
-        }
-
-        pattern = r'^DEF-(\w+\.?\w?\.?\w?)(\.?)(\d*?)(\d?)$'
-
-        for bone in [ bone for bone in all_bones['deform']['all'] if 'lid' not in bone ]:
-            if bone in def_specials:
-                if def_specials[bone] is not None:
-                    self.make_constraits('def_tweak', bone, def_specials[bone] )
-            else:
-                matches = re.match( pattern, bone ).groups()
-                if len( matches ) > 1 and matches[-1]:
-                    num = int( matches[-1] ) + 1
-                    str_list = list( matches )[:-1] + [ str( num ) ]
-                    tweak = "".join( str_list )
-                else:
-                    tweak = "".join( matches ) + ".001"
-                self.make_constraits('def_tweak', bone, tweak )
-
-        def_lids = sorted( [ bone for bone in all_bones['deform']['all'] if 'lid' in bone ] )
-        mch_lids = sorted( [ bone for bone in all_bones['mch']['lids'] ] )
-
-        def_lidsL, def_lidsR = self.symmetrical_split( def_lids )
-        mch_lidsL, mch_lidsR = self.symmetrical_split( mch_lids )
-
-        # Take the last mch_lid bone and place it at the end
-        mch_lidsL = mch_lidsL[1:] + [ mch_lidsL[0] ]
-        mch_lidsR = mch_lidsR[1:] + [ mch_lidsR[0] ]
-
-        for boneL, boneR, mchL, mchR in zip( def_lidsL, def_lidsR, mch_lidsL, mch_lidsR ):
-            self.make_constraits('def_lids', boneL, mchL )
-            self.make_constraits('def_lids', boneR, mchR )
-
-        ## MCH constraints
-
-        # mch lids constraints
-        for bone in all_bones['mch']['lids']:
-            tweak = bone[4:]  # remove "MCH-" from bone name
-            self.make_constraits('mch_eyes', bone, tweak )
-
-        # mch eyes constraints
-        for bone in [ 'MCH-eye.L', 'MCH-eye.R' ]:
-            ctrl = bone[4:]  # remove "MCH-" from bone name
-            self.make_constraits('mch_eyes', bone, ctrl )
-
-        for bone in [ 'MCH-eye.L.001', 'MCH-eye.R.001' ]:
-            target = bone[:-4] # remove number from the end of the name
-            self.make_constraits('mch_eyes_lids_follow', bone, target )
-
-        # mch eyes parent constraints
-        self.make_constraits('mch_eyes_parent', 'MCH-eyes_parent', 'ORG-face' )
-
-        ## Jaw constraints
-
-        # jaw master mch bones
-        self.make_constraits( 'mch_jaw_master', 'MCH-mouth_lock',     'jaw_master', 0.20  )
-        self.make_constraits( 'mch_jaw_master', 'MCH-jaw_master',     'jaw_master', 1.00  )
-        self.make_constraits( 'mch_jaw_master', 'MCH-jaw_master.001', 'jaw_master', 0.75  )
-        self.make_constraits( 'mch_jaw_master', 'MCH-jaw_master.002', 'jaw_master', 0.35  )
-        self.make_constraits( 'mch_jaw_master', 'MCH-jaw_master.003', 'jaw_master', 0.10  )
-        self.make_constraits( 'mch_jaw_master', 'MCH-jaw_master.004', 'jaw_master', 0.025 )
-
-        self.make_constraits( 'teeth', 'ORG-teeth.T', 'teeth.T', 1.00 )
-        self.make_constraits( 'teeth', 'ORG-teeth.B', 'teeth.B', 1.00 )
-
-        for bone in all_bones['mch']['jaw'][1:-1]:
-            self.make_constraits( 'mch_jaw_master', bone, 'MCH-mouth_lock' )
-
-        ## Tweak bones constraints
-
-        # copy location constraints for tweak bones of both sides
-        tweak_copyloc_L = {
-            'brow.T.L.002'  : [ [ 'brow.T.L.001', 'brow.T.L.003'   ], [ 0.5, 0.5  ] ],
-            'ear.L.003'     : [ [ 'ear.L.004', 'ear.L.002'         ], [ 0.5, 0.5  ] ],
-            'brow.B.L.001'  : [ [ 'brow.B.L.002'                   ], [ 0.6       ] ],
-            'brow.B.L.003'  : [ [ 'brow.B.L.002'                   ], [ 0.6       ] ],
-            'brow.B.L.002'  : [ [ 'lid.T.L.001',                   ], [ 0.25      ] ],
-            'brow.B.L.002'  : [ [ 'brow.T.L.002',                  ], [ 0.25      ] ],
-            'lid.T.L.001'   : [ [ 'lid.T.L.002'                    ], [ 0.6       ] ],
-            'lid.T.L.003'   : [ [ 'lid.T.L.002',                   ], [ 0.6       ] ],
-            'lid.T.L.002'   : [ [ 'MCH-eye.L.001',                 ], [ 0.5       ] ],
-            'lid.B.L.001'   : [ [ 'lid.B.L.002',                   ], [ 0.6       ] ],
-            'lid.B.L.003'   : [ [ 'lid.B.L.002',                   ], [ 0.6       ] ],
-            'lid.B.L.002'   : [ [ 'MCH-eye.L.001', 'cheek.T.L.001' ], [ 0.5, 0.1  ] ],
-            'cheek.T.L.001' : [ [ 'cheek.B.L.001',                 ], [ 0.5       ] ],
-            'nose.L'        : [ [ 'nose.L.001',                    ], [ 0.25      ] ],
-            'nose.L.001'    : [ [ 'lip.T.L.001',                   ], [ 0.2       ] ],
-            'cheek.B.L.001' : [ [ 'lips.L',                        ], [ 0.5       ] ],
-            'lip.T.L.001'   : [ [ 'lips.L', 'lip.T'                ], [ 0.25, 0.5 ] ],
-            'lip.B.L.001'   : [ [ 'lips.L', 'lip.B'                ], [ 0.25, 0.5 ] ]
-            }
-
-        for owner in list( tweak_copyloc_L.keys() ):
-
-            targets, influences = tweak_copyloc_L[owner]
-            for target, influence in zip( targets, influences ):
-
-                # Left side constraints
-                self.make_constraits( 'tweak_copyloc', owner, target, influence )
-
-                # create constraints for the right side too
-                ownerR  = owner.replace(  '.L', '.R' )
-                targetR = target.replace( '.L', '.R' )
-                self.make_constraits( 'tweak_copyloc', ownerR, targetR, influence )
-
-        # copy rotation & scale constraints for tweak bones of both sides
-        tweak_copy_rot_scl_L = {
-            'lip.T.L.001' : 'lip.T',
-            'lip.B.L.001' : 'lip.B'
-        }
-
-        for owner in list( tweak_copy_rot_scl_L.keys() ):
-            target    = tweak_copy_rot_scl_L[owner]
-            influence = tweak_copy_rot_scl_L[owner]
-            self.make_constraits( 'tweak_copy_rot_scl', owner, target )
-
-            # create constraints for the right side too
-            owner = owner.replace( '.L', '.R' )
-            self.make_constraits( 'tweak_copy_rot_scl', owner, target )
-
-        # inverted tweak bones constraints
-        tweak_nose = {
-            'nose.001' : [ 'nose.002', 0.35 ],
-            'nose.003' : [ 'nose.002', 0.5  ],
-            'nose.005' : [ 'lip.T',    0.5  ],
-            'chin.002' : [ 'lip.B',    0.5  ]
-        }
-
-        for owner in list( tweak_nose.keys() ):
-            target    = tweak_nose[owner][0]
-            influence = tweak_nose[owner][1]
-            self.make_constraits( 'tweak_copyloc_inv', owner, target, influence )
-
-        # MCH tongue constraints
-        divider = len( all_bones['mch']['tongue'] ) + 1
-        factor  = len( all_bones['mch']['tongue'] )
-
-        for owner in all_bones['mch']['tongue']:
-            self.make_constraits( 'mch_tongue_copy_trans', owner, 'tongue_master', ( 1 / divider ) * factor )
-            factor -= 1
-
-
-    def drivers_and_props( self, all_bones ):
-
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        pb = self.obj.pose.bones
-
-        jaw_ctrl  = all_bones['ctrls']['jaw'][0]
-        eyes_ctrl = all_bones['ctrls']['eyes'][2]
-
-        jaw_prop  = 'mouth_lock'
-        eyes_prop = 'eyes_follow'
-
-        for bone, prop_name in zip( [ jaw_ctrl, eyes_ctrl ], [ jaw_prop, eyes_prop ] ):
-            if bone == jaw_ctrl:
-                defval = 0.0
-            else:
-                defval = 1.0
-
-            make_property(pb[ bone ], prop_name, defval)
-
-        # Jaw drivers
-        mch_jaws = all_bones['mch']['jaw'][1:-1]
-
-        for bone in mch_jaws:
-            drv = pb[ bone ].constraints[1].driver_add("influence").driver
-            drv.type='SUM'
-
-            var = drv.variables.new()
-            var.name = jaw_prop
-            var.type = "SINGLE_PROP"
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = pb[ jaw_ctrl ].path_from_id() + '['+ '"' + jaw_prop + '"' + ']'
-
-
-        # Eyes driver
-        mch_eyes_parent = all_bones['mch']['eyes_parent'][0]
-
-        drv = pb[ mch_eyes_parent ].constraints[0].driver_add("influence").driver
-        drv.type='SUM'
-
-        var = drv.variables.new()
-        var.name = eyes_prop
-        var.type = "SINGLE_PROP"
-        var.targets[0].id = self.obj
-        var.targets[0].data_path = pb[ eyes_ctrl ].path_from_id() + '['+ '"' + eyes_prop + '"' + ']'
-
-        return jaw_prop, eyes_prop
-
-    def create_bones(self):
-        org_bones = self.org_bones
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Clear parents for org bones
-        for bone in [ bone for bone in org_bones if 'face' not in bone ]:
-            eb[bone].use_connect = False
-            eb[bone].parent      = None
-
-        all_bones = {}
-
-        def_names           = self.create_deformation()
-        ctrls, tweak_unique = self.all_controls()
-        mchs                = self.create_mch(
-                                    ctrls['ctrls']['jaw'][0],
-                                    ctrls['ctrls']['tongue'][0]
-                                    )
-        return {
-            'deform' : def_names,
-            'ctrls'  : ctrls['ctrls'],
-            'tweaks' : ctrls['tweaks'],
-            'mch'    : mchs
-            }, tweak_unique
-
-
-    def generate(self):
-
-        all_bones, tweak_unique = self.create_bones()
-        self.parent_bones( all_bones, tweak_unique )
-        self.constraints( all_bones )
-        jaw_prop, eyes_prop = self.drivers_and_props( all_bones )
-
-
-        # Create UI
-        all_controls = []
-        all_controls += [ bone for bone in [ bgroup for bgroup in [ all_bones['ctrls'][group] for group in list( all_bones['ctrls'].keys() ) ] ] ]
-        all_controls += [ bone for bone in [ bgroup for bgroup in [ all_bones['tweaks'][group] for group in list( all_bones['tweaks'].keys() ) ] ] ]
-
-        all_ctrls = []
-        for group in all_controls:
-            for bone in group:
-                all_ctrls.append( bone )
-
-        controls_string = ", ".join(["'" + x + "'" for x in all_ctrls])
-        return [ script % (
-            controls_string,
-            all_bones['ctrls']['jaw'][0],
-            all_bones['ctrls']['eyes'][2],
-            jaw_prop,
-            eyes_prop )
-            ]
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-
-    #Setting up extra layers for the tweak bones
-    params.primary_layers_extra = bpy.props.BoolProperty(
-        name        = "primary_layers_extra",
-        default     = True,
-        description = ""
-        )
-    params.primary_layers = bpy.props.BoolVectorProperty(
-        size        = 32,
-        description = "Layers for the 1st tweak controls to be on",
-        default     = tuple( [ i == 1 for i in range(0, 32) ] )
-        )
-    params.secondary_layers_extra = bpy.props.BoolProperty(
-        name        = "secondary_layers_extra",
-        default     = True,
-        description = ""
-        )
-    params.secondary_layers = bpy.props.BoolVectorProperty(
-        size        = 32,
-        description = "Layers for the 2nd tweak controls to be on",
-        default     = tuple( [ i == 1 for i in range(0, 32) ] )
-        )
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters."""
-    layers = ["primary_layers", "secondary_layers"]
-
-    for layer in layers:
-        r = layout.row()
-        r.prop( params, layer + "_extra" )
-        r.active = getattr( params, layer + "_extra" )
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-        for i in range(8):
-            row.prop(params, layer, index=i, toggle=True, text="")
-
-        row = col.row(align=True)
-        for i in range(16,24):
-            row.prop(params, layer, index=i, toggle=True, text="")
-
-        col = r.column(align=True)
-        row = col.row(align=True)
-
-        for i in range(8,16):
-            row.prop(params, layer, index=i, toggle=True, text="")
-
-        row = col.row(align=True)
-        for i in range(24,32):
-            row.prop(params, layer, index=i, toggle=True, text="")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('face')
-    bone.head[:] = -0.0000, -0.0013, 0.0437
-    bone.tail[:] = -0.0000, -0.0013, 0.1048
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['face'] = bone.name
-    bone = arm.edit_bones.new('nose')
-    bone.head[:] = 0.0000, -0.0905, 0.1125
-    bone.tail[:] = 0.0000, -0.1105, 0.0864
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['nose'] = bone.name
-    bone = arm.edit_bones.new('lip.T.L')
-    bone.head[:] = 0.0000, -0.1022, 0.0563
-    bone.tail[:] = 0.0131, -0.0986, 0.0567
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.T.L'] = bone.name
-    bone = arm.edit_bones.new('lip.B.L')
-    bone.head[:] = 0.0000, -0.0993, 0.0455
-    bone.tail[:] = 0.0124, -0.0938, 0.0488
-    bone.roll = -0.0789
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.B.L'] = bone.name
-    bone = arm.edit_bones.new('jaw')
-    bone.head[:] = 0.0000, -0.0389, 0.0222
-    bone.tail[:] = 0.0000, -0.0923, 0.0044
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['jaw'] = bone.name
-    bone = arm.edit_bones.new('ear.L')
-    bone.head[:] = 0.0616, -0.0083, 0.0886
-    bone.tail[:] = 0.0663, -0.0101, 0.1151
-    bone.roll = -0.0324
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['ear.L'] = bone.name
-    bone = arm.edit_bones.new('ear.R')
-    bone.head[:] = -0.0616, -0.0083, 0.0886
-    bone.tail[:] = -0.0663, -0.0101, 0.1151
-    bone.roll = 0.0324
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['ear.R'] = bone.name
-    bone = arm.edit_bones.new('lip.T.R')
-    bone.head[:] = -0.0000, -0.1022, 0.0563
-    bone.tail[:] = -0.0131, -0.0986, 0.0567
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.T.R'] = bone.name
-    bone = arm.edit_bones.new('lip.B.R')
-    bone.head[:] = -0.0000, -0.0993, 0.0455
-    bone.tail[:] = -0.0124, -0.0938, 0.0488
-    bone.roll = 0.0789
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lip.B.R'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L')
-    bone.head[:] = 0.0530, -0.0705, 0.1153
-    bone.tail[:] = 0.0472, -0.0780, 0.1192
-    bone.roll = 0.0412
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['brow.B.L'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L')
-    bone.head[:] = 0.0515, -0.0692, 0.1104
-    bone.tail[:] = 0.0474, -0.0785, 0.1136
-    bone.roll = 0.1166
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lid.T.L'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R')
-    bone.head[:] = -0.0530, -0.0705, 0.1153
-    bone.tail[:] = -0.0472, -0.0780, 0.1192
-    bone.roll = -0.0412
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['brow.B.R'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R')
-    bone.head[:] = -0.0515, -0.0692, 0.1104
-    bone.tail[:] = -0.0474, -0.0785, 0.1136
-    bone.roll = -0.1166
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['lid.T.R'] = bone.name
-    bone = arm.edit_bones.new('forehead.L')
-    bone.head[:] = 0.0113, -0.0764, 0.1611
-    bone.tail[:] = 0.0144, -0.0912, 0.1236
-    bone.roll = 1.4313
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['forehead.L'] = bone.name
-    bone = arm.edit_bones.new('forehead.R')
-    bone.head[:] = -0.0113, -0.0764, 0.1611
-    bone.tail[:] = -0.0144, -0.0912, 0.1236
-    bone.roll = -1.4313
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['forehead.R'] = bone.name
-    bone = arm.edit_bones.new('eye.L')
-    bone.head[:] = 0.0360, -0.0686, 0.1107
-    bone.tail[:] = 0.0360, -0.0848, 0.1107
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['eye.L'] = bone.name
-    bone = arm.edit_bones.new('eye.R')
-    bone.head[:] = -0.0360, -0.0686, 0.1107
-    bone.tail[:] = -0.0360, -0.0848, 0.1107
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['eye.R'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.L')
-    bone.head[:] = 0.0568, -0.0506, 0.1052
-    bone.tail[:] = 0.0379, -0.0834, 0.0816
-    bone.roll = -0.0096
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['cheek.T.L'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.R')
-    bone.head[:] = -0.0568, -0.0506, 0.1052
-    bone.tail[:] = -0.0379, -0.0834, 0.0816
-    bone.roll = 0.0096
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['cheek.T.R'] = bone.name
-    bone = arm.edit_bones.new('teeth.T')
-    bone.head[:] = 0.0000, -0.0927, 0.0613
-    bone.tail[:] = 0.0000, -0.0621, 0.0613
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['teeth.T'] = bone.name
-    bone = arm.edit_bones.new('teeth.B')
-    bone.head[:] = 0.0000, -0.0881, 0.0397
-    bone.tail[:] = 0.0000, -0.0575, 0.0397
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['teeth.B'] = bone.name
-    bone = arm.edit_bones.new('tongue')
-    bone.head[:] = 0.0000, -0.0781, 0.0493
-    bone.tail[:] = 0.0000, -0.0620, 0.0567
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['face']]
-    bones['tongue'] = bone.name
-    bone = arm.edit_bones.new('nose.001')
-    bone.head[:] = 0.0000, -0.1105, 0.0864
-    bone.tail[:] = 0.0000, -0.1193, 0.0771
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose']]
-    bones['nose.001'] = bone.name
-    bone = arm.edit_bones.new('lip.T.L.001')
-    bone.head[:] = 0.0131, -0.0986, 0.0567
-    bone.tail[:] = 0.0236, -0.0877, 0.0519
-    bone.roll = 0.0236
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.T.L']]
-    bones['lip.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('lip.B.L.001')
-    bone.head[:] = 0.0124, -0.0938, 0.0488
-    bone.tail[:] = 0.0236, -0.0877, 0.0519
-    bone.roll = 0.0731
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.B.L']]
-    bones['lip.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('chin')
-    bone.head[:] = 0.0000, -0.0923, 0.0044
-    bone.tail[:] = 0.0000, -0.0921, 0.0158
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw']]
-    bones['chin'] = bone.name
-    bone = arm.edit_bones.new('ear.L.001')
-    bone.head[:] = 0.0663, -0.0101, 0.1151
-    bone.tail[:] = 0.0804, 0.0065, 0.1189
-    bone.roll = 0.0656
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L']]
-    bones['ear.L.001'] = bone.name
-    bone = arm.edit_bones.new('ear.R.001')
-    bone.head[:] = -0.0663, -0.0101, 0.1151
-    bone.tail[:] = -0.0804, 0.0065, 0.1189
-    bone.roll = -0.0656
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R']]
-    bones['ear.R.001'] = bone.name
-    bone = arm.edit_bones.new('lip.T.R.001')
-    bone.head[:] = -0.0131, -0.0986, 0.0567
-    bone.tail[:] = -0.0236, -0.0877, 0.0519
-    bone.roll = -0.0236
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.T.R']]
-    bones['lip.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('lip.B.R.001')
-    bone.head[:] = -0.0124, -0.0938, 0.0488
-    bone.tail[:] = -0.0236, -0.0877, 0.0519
-    bone.roll = -0.0731
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lip.B.R']]
-    bones['lip.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L.001')
-    bone.head[:] = 0.0472, -0.0780, 0.1192
-    bone.tail[:] = 0.0387, -0.0832, 0.1202
-    bone.roll = 0.0192
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.L']]
-    bones['brow.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L.001')
-    bone.head[:] = 0.0474, -0.0785, 0.1136
-    bone.tail[:] = 0.0394, -0.0838, 0.1147
-    bone.roll = 0.0791
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L']]
-    bones['lid.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R.001')
-    bone.head[:] = -0.0472, -0.0780, 0.1192
-    bone.tail[:] = -0.0387, -0.0832, 0.1202
-    bone.roll = -0.0192
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.R']]
-    bones['brow.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R.001')
-    bone.head[:] = -0.0474, -0.0785, 0.1136
-    bone.tail[:] = -0.0394, -0.0838, 0.1147
-    bone.roll = -0.0791
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R']]
-    bones['lid.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('forehead.L.001')
-    bone.head[:] = 0.0321, -0.0663, 0.1646
-    bone.tail[:] = 0.0394, -0.0828, 0.1310
-    bone.roll = 0.9928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.L']]
-    bones['forehead.L.001'] = bone.name
-    bone = arm.edit_bones.new('forehead.R.001')
-    bone.head[:] = -0.0321, -0.0663, 0.1646
-    bone.tail[:] = -0.0394, -0.0828, 0.1310
-    bone.roll = -0.9928
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.R']]
-    bones['forehead.R.001'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.L.001')
-    bone.head[:] = 0.0379, -0.0834, 0.0816
-    bone.tail[:] = 0.0093, -0.0846, 0.1002
-    bone.roll = 0.0320
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.L']]
-    bones['cheek.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('cheek.T.R.001')
-    bone.head[:] = -0.0379, -0.0834, 0.0816
-    bone.tail[:] = -0.0093, -0.0846, 0.1002
-    bone.roll = -0.0320
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.R']]
-    bones['cheek.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('tongue.001')
-    bone.head[:] = 0.0000, -0.0620, 0.0567
-    bone.tail[:] = 0.0000, -0.0406, 0.0584
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['tongue']]
-    bones['tongue.001'] = bone.name
-    bone = arm.edit_bones.new('nose.002')
-    bone.head[:] = 0.0000, -0.1193, 0.0771
-    bone.tail[:] = 0.0000, -0.1118, 0.0739
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.001']]
-    bones['nose.002'] = bone.name
-    bone = arm.edit_bones.new('chin.001')
-    bone.head[:] = 0.0000, -0.0921, 0.0158
-    bone.tail[:] = 0.0000, -0.0914, 0.0404
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['chin']]
-    bones['chin.001'] = bone.name
-    bone = arm.edit_bones.new('ear.L.002')
-    bone.head[:] = 0.0804, 0.0065, 0.1189
-    bone.tail[:] = 0.0808, 0.0056, 0.0935
-    bone.roll = -0.0265
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L.001']]
-    bones['ear.L.002'] = bone.name
-    bone = arm.edit_bones.new('ear.R.002')
-    bone.head[:] = -0.0804, 0.0065, 0.1189
-    bone.tail[:] = -0.0808, 0.0056, 0.0935
-    bone.roll = 0.0265
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R.001']]
-    bones['ear.R.002'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L.002')
-    bone.head[:] = 0.0387, -0.0832, 0.1202
-    bone.tail[:] = 0.0295, -0.0826, 0.1179
-    bone.roll = -0.0278
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.L.001']]
-    bones['brow.B.L.002'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L.002')
-    bone.head[:] = 0.0394, -0.0838, 0.1147
-    bone.tail[:] = 0.0317, -0.0832, 0.1131
-    bone.roll = -0.0356
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L.001']]
-    bones['lid.T.L.002'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R.002')
-    bone.head[:] = -0.0387, -0.0832, 0.1202
-    bone.tail[:] = -0.0295, -0.0826, 0.1179
-    bone.roll = 0.0278
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.R.001']]
-    bones['brow.B.R.002'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R.002')
-    bone.head[:] = -0.0394, -0.0838, 0.1147
-    bone.tail[:] = -0.0317, -0.0832, 0.1131
-    bone.roll = 0.0356
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R.001']]
-    bones['lid.T.R.002'] = bone.name
-    bone = arm.edit_bones.new('forehead.L.002')
-    bone.head[:] = 0.0482, -0.0506, 0.1620
-    bone.tail[:] = 0.0556, -0.0689, 0.1249
-    bone.roll = 0.4509
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.L.001']]
-    bones['forehead.L.002'] = bone.name
-    bone = arm.edit_bones.new('forehead.R.002')
-    bone.head[:] = -0.0482, -0.0506, 0.1620
-    bone.tail[:] = -0.0556, -0.0689, 0.1249
-    bone.roll = -0.4509
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.R.001']]
-    bones['forehead.R.002'] = bone.name
-    bone = arm.edit_bones.new('nose.L')
-    bone.head[:] = 0.0093, -0.0846, 0.1002
-    bone.tail[:] = 0.0118, -0.0966, 0.0757
-    bone.roll = -0.0909
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.L.001']]
-    bones['nose.L'] = bone.name
-    bone = arm.edit_bones.new('nose.R')
-    bone.head[:] = -0.0093, -0.0846, 0.1002
-    bone.tail[:] = -0.0118, -0.0966, 0.0757
-    bone.roll = 0.0909
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.T.R.001']]
-    bones['nose.R'] = bone.name
-    bone = arm.edit_bones.new('tongue.002')
-    bone.head[:] = 0.0000, -0.0406, 0.0584
-    bone.tail[:] = 0.0000, -0.0178, 0.0464
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['tongue.001']]
-    bones['tongue.002'] = bone.name
-    bone = arm.edit_bones.new('nose.003')
-    bone.head[:] = 0.0000, -0.1118, 0.0739
-    bone.tail[:] = 0.0000, -0.1019, 0.0733
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.002']]
-    bones['nose.003'] = bone.name
-    bone = arm.edit_bones.new('ear.L.003')
-    bone.head[:] = 0.0808, 0.0056, 0.0935
-    bone.tail[:] = 0.0677, -0.0109, 0.0752
-    bone.roll = 0.3033
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L.002']]
-    bones['ear.L.003'] = bone.name
-    bone = arm.edit_bones.new('ear.R.003')
-    bone.head[:] = -0.0808, 0.0056, 0.0935
-    bone.tail[:] = -0.0677, -0.0109, 0.0752
-    bone.roll = -0.3033
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R.002']]
-    bones['ear.R.003'] = bone.name
-    bone = arm.edit_bones.new('brow.B.L.003')
-    bone.head[:] = 0.0295, -0.0826, 0.1179
-    bone.tail[:] = 0.0201, -0.0812, 0.1095
-    bone.roll = 0.0417
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.L.002']]
-    bones['brow.B.L.003'] = bone.name
-    bone = arm.edit_bones.new('lid.T.L.003')
-    bone.head[:] = 0.0317, -0.0832, 0.1131
-    bone.tail[:] = 0.0237, -0.0826, 0.1058
-    bone.roll = 0.0245
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L.002']]
-    bones['lid.T.L.003'] = bone.name
-    bone = arm.edit_bones.new('brow.B.R.003')
-    bone.head[:] = -0.0295, -0.0826, 0.1179
-    bone.tail[:] = -0.0201, -0.0812, 0.1095
-    bone.roll = -0.0417
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.B.R.002']]
-    bones['brow.B.R.003'] = bone.name
-    bone = arm.edit_bones.new('lid.T.R.003')
-    bone.head[:] = -0.0317, -0.0832, 0.1131
-    bone.tail[:] = -0.0237, -0.0826, 0.1058
-    bone.roll = -0.0245
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R.002']]
-    bones['lid.T.R.003'] = bone.name
-    bone = arm.edit_bones.new('temple.L')
-    bone.head[:] = 0.0585, -0.0276, 0.1490
-    bone.tail[:] = 0.0607, -0.0295, 0.0962
-    bone.roll = -0.0650
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.L.002']]
-    bones['temple.L'] = bone.name
-    bone = arm.edit_bones.new('temple.R')
-    bone.head[:] = -0.0585, -0.0276, 0.1490
-    bone.tail[:] = -0.0607, -0.0295, 0.0962
-    bone.roll = 0.0650
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['forehead.R.002']]
-    bones['temple.R'] = bone.name
-    bone = arm.edit_bones.new('nose.L.001')
-    bone.head[:] = 0.0118, -0.0966, 0.0757
-    bone.tail[:] = 0.0000, -0.1193, 0.0771
-    bone.roll = 0.1070
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.L']]
-    bones['nose.L.001'] = bone.name
-    bone = arm.edit_bones.new('nose.R.001')
-    bone.head[:] = -0.0118, -0.0966, 0.0757
-    bone.tail[:] = -0.0000, -0.1193, 0.0771
-    bone.roll = -0.1070
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.R']]
-    bones['nose.R.001'] = bone.name
-    bone = arm.edit_bones.new('nose.004')
-    bone.head[:] = 0.0000, -0.1019, 0.0733
-    bone.tail[:] = 0.0000, -0.1014, 0.0633
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['nose.003']]
-    bones['nose.004'] = bone.name
-    bone = arm.edit_bones.new('ear.L.004')
-    bone.head[:] = 0.0677, -0.0109, 0.0752
-    bone.tail[:] = 0.0616, -0.0083, 0.0886
-    bone.roll = 0.1518
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.L.003']]
-    bones['ear.L.004'] = bone.name
-    bone = arm.edit_bones.new('ear.R.004')
-    bone.head[:] = -0.0677, -0.0109, 0.0752
-    bone.tail[:] = -0.0616, -0.0083, 0.0886
-    bone.roll = -0.1518
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['ear.R.003']]
-    bones['ear.R.004'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L')
-    bone.head[:] = 0.0237, -0.0826, 0.1058
-    bone.tail[:] = 0.0319, -0.0831, 0.1050
-    bone.roll = -0.1108
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.L.003']]
-    bones['lid.B.L'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R')
-    bone.head[:] = -0.0237, -0.0826, 0.1058
-    bone.tail[:] = -0.0319, -0.0831, 0.1050
-    bone.roll = 0.1108
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.T.R.003']]
-    bones['lid.B.R'] = bone.name
-    bone = arm.edit_bones.new('jaw.L')
-    bone.head[:] = 0.0607, -0.0295, 0.0962
-    bone.tail[:] = 0.0451, -0.0338, 0.0533
-    bone.roll = 0.0871
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['temple.L']]
-    bones['jaw.L'] = bone.name
-    bone = arm.edit_bones.new('jaw.R')
-    bone.head[:] = -0.0607, -0.0295, 0.0962
-    bone.tail[:] = -0.0451, -0.0338, 0.0533
-    bone.roll = -0.0871
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['temple.R']]
-    bones['jaw.R'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L.001')
-    bone.head[:] = 0.0319, -0.0831, 0.1050
-    bone.tail[:] = 0.0389, -0.0826, 0.1050
-    bone.roll = -0.0207
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.L']]
-    bones['lid.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R.001')
-    bone.head[:] = -0.0319, -0.0831, 0.1050
-    bone.tail[:] = -0.0389, -0.0826, 0.1050
-    bone.roll = 0.0207
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.R']]
-    bones['lid.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('jaw.L.001')
-    bone.head[:] = 0.0451, -0.0338, 0.0533
-    bone.tail[:] = 0.0166, -0.0758, 0.0187
-    bone.roll = 0.0458
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.L']]
-    bones['jaw.L.001'] = bone.name
-    bone = arm.edit_bones.new('jaw.R.001')
-    bone.head[:] = -0.0451, -0.0338, 0.0533
-    bone.tail[:] = -0.0166, -0.0758, 0.0187
-    bone.roll = -0.0458
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.R']]
-    bones['jaw.R.001'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L.002')
-    bone.head[:] = 0.0389, -0.0826, 0.1050
-    bone.tail[:] = 0.0472, -0.0781, 0.1068
-    bone.roll = 0.0229
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.L.001']]
-    bones['lid.B.L.002'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R.002')
-    bone.head[:] = -0.0389, -0.0826, 0.1050
-    bone.tail[:] = -0.0472, -0.0781, 0.1068
-    bone.roll = -0.0229
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.R.001']]
-    bones['lid.B.R.002'] = bone.name
-    bone = arm.edit_bones.new('chin.L')
-    bone.head[:] = 0.0166, -0.0758, 0.0187
-    bone.tail[:] = 0.0236, -0.0877, 0.0519
-    bone.roll = 0.1513
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.L.001']]
-    bones['chin.L'] = bone.name
-    bone = arm.edit_bones.new('chin.R')
-    bone.head[:] = -0.0166, -0.0758, 0.0187
-    bone.tail[:] = -0.0236, -0.0877, 0.0519
-    bone.roll = -0.1513
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['jaw.R.001']]
-    bones['chin.R'] = bone.name
-    bone = arm.edit_bones.new('lid.B.L.003')
-    bone.head[:] = 0.0472, -0.0781, 0.1068
-    bone.tail[:] = 0.0515, -0.0692, 0.1104
-    bone.roll = -0.0147
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.L.002']]
-    bones['lid.B.L.003'] = bone.name
-    bone = arm.edit_bones.new('lid.B.R.003')
-    bone.head[:] = -0.0472, -0.0781, 0.1068
-    bone.tail[:] = -0.0515, -0.0692, 0.1104
-    bone.roll = 0.0147
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['lid.B.R.002']]
-    bones['lid.B.R.003'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.L')
-    bone.head[:] = 0.0236, -0.0877, 0.0519
-    bone.tail[:] = 0.0493, -0.0691, 0.0632
-    bone.roll = 0.0015
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['chin.L']]
-    bones['cheek.B.L'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.R')
-    bone.head[:] = -0.0236, -0.0877, 0.0519
-    bone.tail[:] = -0.0493, -0.0691, 0.0632
-    bone.roll = -0.0015
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['chin.R']]
-    bones['cheek.B.R'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.L.001')
-    bone.head[:] = 0.0493, -0.0691, 0.0632
-    bone.tail[:] = 0.0568, -0.0506, 0.1052
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.L']]
-    bones['cheek.B.L.001'] = bone.name
-    bone = arm.edit_bones.new('cheek.B.R.001')
-    bone.head[:] = -0.0493, -0.0691, 0.0632
-    bone.tail[:] = -0.0568, -0.0506, 0.1052
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.R']]
-    bones['cheek.B.R.001'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L')
-    bone.head[:] = 0.0568, -0.0506, 0.1052
-    bone.tail[:] = 0.0556, -0.0689, 0.1249
-    bone.roll = 0.1990
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.L.001']]
-    bones['brow.T.L'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R')
-    bone.head[:] = -0.0568, -0.0506, 0.1052
-    bone.tail[:] = -0.0556, -0.0689, 0.1249
-    bone.roll = -0.1990
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['cheek.B.R.001']]
-    bones['brow.T.R'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L.001')
-    bone.head[:] = 0.0556, -0.0689, 0.1249
-    bone.tail[:] = 0.0394, -0.0828, 0.1310
-    bone.roll = 0.2372
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.L']]
-    bones['brow.T.L.001'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R.001')
-    bone.head[:] = -0.0556, -0.0689, 0.1249
-    bone.tail[:] = -0.0394, -0.0828, 0.1310
-    bone.roll = -0.2372
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.R']]
-    bones['brow.T.R.001'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L.002')
-    bone.head[:] = 0.0394, -0.0828, 0.1310
-    bone.tail[:] = 0.0144, -0.0912, 0.1236
-    bone.roll = 0.0724
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.L.001']]
-    bones['brow.T.L.002'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R.002')
-    bone.head[:] = -0.0394, -0.0828, 0.1310
-    bone.tail[:] = -0.0144, -0.0912, 0.1236
-    bone.roll = -0.0724
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.R.001']]
-    bones['brow.T.R.002'] = bone.name
-    bone = arm.edit_bones.new('brow.T.L.003')
-    bone.head[:] = 0.0144, -0.0912, 0.1236
-    bone.tail[:] = 0.0003, -0.0905, 0.1125
-    bone.roll = -0.0423
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.L.002']]
-    bones['brow.T.L.003'] = bone.name
-    bone = arm.edit_bones.new('brow.T.R.003')
-    bone.head[:] = -0.0144, -0.0912, 0.1236
-    bone.tail[:] = -0.0003, -0.0905, 0.1125
-    bone.roll = 0.0423
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['brow.T.R.002']]
-    bones['brow.T.R.003'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['face']]
-    pbone.rigify_type = 'pitchipoy.super_face'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['jaw']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['forehead.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['forehead.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['eye.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['eye.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['teeth.T']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['teeth.B']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['tongue']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['chin']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lip.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['forehead.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['forehead.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['tongue.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['chin.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['forehead.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['forehead.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['tongue.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.B.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.T.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['temple.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['temple.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['nose.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.L.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ear.R.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['jaw.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['jaw.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['jaw.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['jaw.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['chin.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['chin.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['lid.B.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.B.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.B.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.B.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['cheek.B.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.R']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.L.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.R.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.L.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.R.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.L.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['brow.T.R.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
-
-
-def create_square_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [
-            (  0.5 * size, -2.9802322387695312e-08 * size,  0.5 * size ),
-            ( -0.5 * size, -2.9802322387695312e-08 * size,  0.5 * size ),
-            (  0.5 * size,  2.9802322387695312e-08 * size, -0.5 * size ),
-            ( -0.5 * size,  2.9802322387695312e-08 * size, -0.5 * size ),
-        ]
-
-        edges = [(0, 1), (2, 3), (0, 2), (3, 1) ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        mesh.update()
-        return obj
-    else:
-        return None
diff --git a/rigify/legacy/rigs/pitchipoy/super_finger.py b/rigify/legacy/rigs/pitchipoy/super_finger.py
deleted file mode 100644
index 05c32829889581a6a08b269d98ab377e90204d24..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/super_finger.py
+++ /dev/null
@@ -1,402 +0,0 @@
-import bpy
-from ...utils import copy_bone, flip_bone
-from ...utils import strip_org, make_deformer_name, connected_children_names, make_mechanism_name
-from ...utils import MetarigError, create_circle_widget, create_widget
-
-from ....utils.mechanism import make_property
-
-script = """
-controls    = [%s]
-master_name = '%s'
-if is_selected(controls):
-    layout.prop(pose_bones[master_name], '["%s"]', text="Curvature", slider=True)
-"""
-
-class Rig:
-
-    def __init__(self, obj, bone_name, params):
-        self.obj = obj
-        self.org_bones = [bone_name] + connected_children_names(obj, bone_name)
-        self.params = params
-
-        if len(self.org_bones) <= 1:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': listen bro, that finger rig jusaint put tugetha rite. A little hint, use more than one bone!!" % (strip_org(bone_name)))
-
-
-    def generate(self):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Bone name lists
-        ctrl_chain    = []
-        def_chain     = []
-        mch_chain     = []
-        mch_drv_chain = []
-
-        # Create ctrl master bone
-        org_name  = self.org_bones[0]
-        temp_name = strip_org(self.org_bones[0])
-
-        suffix = temp_name[-2:]
-        master_name      = temp_name[:-5] + "_master" + suffix
-        master_name      = copy_bone( self.obj, org_name, master_name )
-        ctrl_bone_master = eb[ master_name ]
-
-        ## Parenting bug fix ??
-        ctrl_bone_master.use_connect = False
-        ctrl_bone_master.parent      = None
-
-        ctrl_bone_master.tail += ( eb[ org_bones[-1] ].tail - eb[org_name].head ) * 1.25
-
-        for bone in org_bones:
-            eb[bone].use_connect = False
-            if org_bones.index( bone ) != 0:
-               eb[bone].parent      = None
-
-        # Creating the bone chains
-        for i in range(len(self.org_bones)):
-
-            name      = self.org_bones[i]
-            ctrl_name = strip_org(name)
-
-            # Create control bones
-            ctrl_bone   = copy_bone( self.obj, name, ctrl_name )
-            ctrl_bone_e = eb[ ctrl_name ]
-
-            # Create deformation bones
-            def_name  = make_deformer_name( ctrl_name )
-            def_bone  = copy_bone( self.obj, name, def_name )
-
-            # Create mechanism bones
-            mch_name  = make_mechanism_name( ctrl_name )
-            mch_bone  = copy_bone( self.obj, name, mch_name )
-
-            # Create mechanism driver bones
-            drv_name  = make_mechanism_name(ctrl_name) + "_drv"
-            mch_bone_drv    = copy_bone(self.obj, name, drv_name)
-            mch_bone_drv_e  = eb[drv_name]
-
-            # Adding to lists
-            ctrl_chain    += [ctrl_name]
-            def_chain     += [def_bone]
-            mch_chain     += [mch_bone]
-            mch_drv_chain += [drv_name]
-
-        # Restoring org chain parenting
-        for bone in org_bones[1:]:
-            eb[bone].parent = eb[ org_bones[ org_bones.index(bone) - 1 ] ]
-
-        # Parenting the master bone to the first org
-        ctrl_bone_master = eb[ master_name ]
-        ctrl_bone_master.parent = eb[ org_bones[0] ]
-
-        # Parenting chain bones
-        for i in range(len(self.org_bones)):
-            # Edit bone references
-            def_bone_e     = eb[def_chain[i]]
-            ctrl_bone_e    = eb[ctrl_chain[i]]
-            mch_bone_e     = eb[mch_chain[i]]
-            mch_bone_drv_e = eb[mch_drv_chain[i]]
-
-            if i == 0:
-                # First ctl bone
-                ctrl_bone_e.parent      = mch_bone_drv_e
-                ctrl_bone_e.use_connect = False
-                # First def bone
-                def_bone_e.parent       = eb[self.org_bones[i]].parent
-                def_bone_e.use_connect  = False
-                # First mch bone
-                mch_bone_e.parent = eb[self.org_bones[i]].parent
-                mch_bone_e.use_connect  = False
-                # First mch driver bone
-                mch_bone_drv_e.parent = eb[self.org_bones[i]].parent
-                mch_bone_drv_e.use_connect  = False
-            else:
-                # The rest
-                ctrl_bone_e.parent         = mch_bone_drv_e
-                ctrl_bone_e.use_connect    = False
-
-                def_bone_e.parent          = eb[def_chain[i-1]]
-                def_bone_e.use_connect     = True
-
-                mch_bone_drv_e.parent      = eb[ctrl_chain[i-1]]
-                mch_bone_drv_e.use_connect = False
-
-                # Parenting mch bone
-                mch_bone_e.parent      = ctrl_bone_e
-                mch_bone_e.use_connect = False
-
-        # Creating tip conrtol bone
-        tip_name      = copy_bone( self.obj, org_bones[-1], temp_name )
-        ctrl_bone_tip = eb[ tip_name ]
-        flip_bone( self.obj, tip_name )
-        ctrl_bone_tip.length /= 2
-
-        ctrl_bone_tip.parent = eb[ctrl_chain[-1]]
-
-        bpy.ops.object.mode_set(mode ='OBJECT')
-
-        pb = self.obj.pose.bones
-
-        # Setting pose bones locks
-        pb_master = pb[master_name]
-        pb_master.lock_scale    = True,False,True
-
-        pb[tip_name].lock_scale      = True,True,True
-        pb[tip_name].lock_rotation   = True,True,True
-        pb[tip_name].lock_rotation_w = True
-
-        make_property(pb_master, 'finger_curve', 0.0, description="Rubber hose finger cartoon effect")
-
-        # Pose settings
-        for org, ctrl, deform, mch, mch_drv in zip(self.org_bones, ctrl_chain, def_chain, mch_chain, mch_drv_chain):
-
-            # Constraining the org bones
-            #con           = pb[org].constraints.new('COPY_TRANSFORMS')
-            #con.target    = self.obj
-            #con.subtarget = ctrl
-
-            # Constraining the deform bones
-            con           = pb[deform].constraints.new('COPY_TRANSFORMS')
-            con.target    = self.obj
-            con.subtarget = mch
-
-            # Constraining the mch bones
-            if mch_chain.index(mch) == 0:
-                con           = pb[mch].constraints.new('COPY_LOCATION')
-                con.target    = self.obj
-                con.subtarget = ctrl
-
-                con           = pb[mch].constraints.new('COPY_SCALE')
-                con.target    = self.obj
-                con.subtarget = ctrl
-
-                con           = pb[mch].constraints.new('DAMPED_TRACK')
-                con.target    = self.obj
-                con.subtarget = ctrl_chain[ctrl_chain.index(ctrl)+1]
-
-                con           = pb[mch].constraints.new('STRETCH_TO')
-                con.target    = self.obj
-                con.subtarget = ctrl_chain[ctrl_chain.index(ctrl)+1]
-                con.volume    = 'NO_VOLUME'
-
-            elif mch_chain.index(mch) == len(mch_chain) - 1:
-                con           = pb[mch].constraints.new('DAMPED_TRACK')
-                con.target    = self.obj
-                con.subtarget = tip_name
-
-                con           = pb[mch].constraints.new('STRETCH_TO')
-                con.target    = self.obj
-                con.subtarget = tip_name
-                con.volume    = 'NO_VOLUME'
-            else:
-                con           = pb[mch].constraints.new('DAMPED_TRACK')
-                con.target    = self.obj
-                con.subtarget = ctrl_chain[ctrl_chain.index(ctrl)+1]
-
-                con           = pb[mch].constraints.new('STRETCH_TO')
-                con.target    = self.obj
-                con.subtarget = ctrl_chain[ctrl_chain.index(ctrl)+1]
-                con.volume    = 'NO_VOLUME'
-
-            # Constraining and driving mch driver bones
-            pb[mch_drv].rotation_mode = 'YZX'
-
-            if mch_drv_chain.index(mch_drv) == 0:
-                # Constraining to master bone
-                con              = pb[mch_drv].constraints.new('COPY_LOCATION')
-                con.target       = self.obj
-                con.subtarget    = master_name
-
-                con              = pb[mch_drv].constraints.new('COPY_ROTATION')
-                con.target       = self.obj
-                con.subtarget    = master_name
-                con.target_space = 'LOCAL'
-                con.owner_space  = 'LOCAL'
-
-            else:
-                # Match axis to expression
-                options = {
-                    "X"  : { "axis" : 0,
-                             "expr" : '(1-sy)*pi' },
-                    "-X" : { "axis" : 0,
-                             "expr" : '-((1-sy)*pi)' },
-                    "Y"  : { "axis" : 1,
-                             "expr" : '(1-sy)*pi' },
-                    "-Y" : { "axis" : 1,
-                             "expr" : '-((1-sy)*pi)' },
-                    "Z"  : { "axis" : 2,
-                             "expr" : '(1-sy)*pi' },
-                    "-Z" : { "axis" : 2,
-                             "expr" : '-((1-sy)*pi)' }
-                }
-
-                axis = self.params.primary_rotation_axis
-
-                # Drivers
-                drv                          = pb[mch_drv].driver_add("rotation_euler", options[axis]["axis"]).driver
-                drv.type                     = 'SCRIPTED'
-                drv.expression               = options[axis]["expr"]
-                drv_var                      = drv.variables.new()
-                drv_var.name                 = 'sy'
-                drv_var.type                 = "SINGLE_PROP"
-                drv_var.targets[0].id        = self.obj
-                drv_var.targets[0].data_path = pb[master_name].path_from_id() + '.scale.y'
-
-            # Setting bone curvature setting, costum property, and drivers
-            def_bone = self.obj.data.bones[deform]
-
-            def_bone.bbone_segments = 8
-            drv = def_bone.driver_add("bbone_easein").driver # Ease in
-
-            drv.type='SUM'
-            drv_var = drv.variables.new()
-            drv_var.name = "curvature"
-            drv_var.type = "SINGLE_PROP"
-            drv_var.targets[0].id = self.obj
-            drv_var.targets[0].data_path = pb_master.path_from_id() + '["finger_curve"]'
-
-            drv = def_bone.driver_add("bbone_easeout").driver # Ease out
-
-            drv.type='SUM'
-            drv_var = drv.variables.new()
-            drv_var.name = "curvature"
-            drv_var.type = "SINGLE_PROP"
-            drv_var.targets[0].id = self.obj
-            drv_var.targets[0].data_path = pb_master.path_from_id() + '["finger_curve"]'
-
-
-            # Assigning shapes to control bones
-            create_circle_widget(self.obj, ctrl, radius=0.3, head_tail=0.5)
-
-        # Create ctrl master widget
-        w = create_widget(self.obj, master_name)
-        if w is not None:
-            mesh = w.data
-            verts = [(0, 0, 0), (0, 1, 0), (0.05, 1, 0), (0.05, 1.1, 0), (-0.05, 1.1, 0), (-0.05, 1, 0)]
-            if 'Z' in self.params.primary_rotation_axis:
-                # Flip x/z coordinates
-                temp = []
-                for v in verts:
-                    temp += [(v[2], v[1], v[0])]
-                verts = temp
-            edges = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 1)]
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-        # Create tip control widget
-        create_circle_widget(self.obj, tip_name, radius=0.3, head_tail=0.0)
-
-        # Create UI
-        controls_string = ", ".join(
-            ["'" + x + "'" for x in ctrl_chain]
-            ) + ", " + "'" + master_name + "'"
-        return [script % (controls_string, master_name, 'finger_curve')]
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    items = [('X', 'X', ''), ('Y', 'Y', ''), ('Z', 'Z', ''), ('-X', '-X', ''), ('-Y', '-Y', ''), ('-Z', '-Z', '')]
-    params.primary_rotation_axis = bpy.props.EnumProperty(items=items, name="Primary Rotation Axis", default='X')
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-    r = layout.row()
-    r.label(text="Bend rotation axis:")
-    r.prop(params, "primary_rotation_axis", text="")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('palm.04.L')
-    bone.head[:] = 0.0043, -0.0030, -0.0026
-    bone.tail[:] = 0.0642, 0.0037, -0.0469
-    bone.roll = -2.5155
-    bone.use_connect = False
-    bones['palm.04.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.01.L')
-    bone.head[:] = 0.0642, 0.0037, -0.0469
-    bone.tail[:] = 0.0703, 0.0039, -0.0741
-    bone.roll = -1.9749
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.04.L']]
-    bones['f_pinky.01.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.02.L')
-    bone.head[:] = 0.0703, 0.0039, -0.0741
-    bone.tail[:] = 0.0732, 0.0044, -0.0965
-    bone.roll = -1.9059
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.01.L']]
-    bones['f_pinky.02.L'] = bone.name
-    bone = arm.edit_bones.new('f_pinky.03.L')
-    bone.head[:] = 0.0732, 0.0044, -0.0965
-    bone.tail[:] = 0.0725, 0.0046, -0.1115
-    bone.roll = -1.7639
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['f_pinky.02.L']]
-    bones['f_pinky.03.L'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['palm.04.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone = obj.pose.bones[bones['f_pinky.01.L']]
-    pbone.rigify_type = 'pitchipoy.simple_tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    try:
-        pbone.rigify_parameters.separate_extra_layers = True
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.extra_layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_extra_layers = False
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['f_pinky.02.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['f_pinky.03.L']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/pitchipoy/super_palm.py b/rigify/legacy/rigs/pitchipoy/super_palm.py
deleted file mode 100644
index a87eb735582a6eecbe96cf6bc6fd1ed02de8d553..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/super_palm.py
+++ /dev/null
@@ -1,324 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-import re
-from math import cos, pi
-
-import bpy
-
-from ...utils import MetarigError
-from ...utils import copy_bone
-from ...utils import strip_org, deformer
-from ...utils import create_widget
-
-
-def bone_siblings(obj, bone):
-    """ Returns a list of the siblings of the given bone.
-        This requires that the bones has a parent.
-
-    """
-    parent = obj.data.bones[bone].parent
-
-    if parent is None:
-        return []
-
-    bones = []
-
-    for b in parent.children:
-        if b.name != bone:
-            bones += [b.name]
-
-    return bones
-
-
-def bone_distance(obj, bone1, bone2):
-    """ Returns the distance between two bones.
-
-    """
-    vec = obj.data.bones[bone1].head - obj.data.bones[bone2].head
-    return vec.length
-
-
-class Rig:
-    """ A "palm" rig.  A set of sibling bones that bend with each other.
-        This is a control and deformation rig.
-
-    """
-    def __init__(self, obj, bone, params):
-        """ Gather and validate data about the rig.
-        """
-        self.obj = obj
-        self.params = params
-
-        siblings = bone_siblings(obj, bone)
-
-        if len(siblings) == 0:
-            raise MetarigError(
-                    "RIGIFY ERROR: Bone '%s': must have a parent and at least one sibling" %
-                    (strip_org(bone)))
-
-        # Sort list by name and distance
-        siblings.sort()
-        siblings.sort(key=lambda b: bone_distance(obj, bone, b))
-
-        self.org_bones = [bone] + siblings
-
-        # Get rig parameters
-        self.palm_rotation_axis = params.palm_rotation_axis
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        # Figure out the name for the control bone (remove the last .##)
-        last_bone = self.org_bones[-1:][0]
-        ctrl_name = re.sub("([0-9]+\.)", "", strip_org(last_bone)[::-1], count=1)[::-1]
-
-        # Make control bone
-        ctrl = copy_bone(self.obj, last_bone, ctrl_name)
-
-        # Make deformation bones
-        def_bones = []
-        for bone in self.org_bones:
-            b = copy_bone(self.obj, bone, deformer(strip_org(bone)))
-            def_bones += [b]
-
-        # Parenting
-        eb = self.obj.data.edit_bones
-
-        # turn off inherit scale for all ORG-bones to prevent undesired transformations
-
-        for o in self.org_bones:
-            eb[o].inherit_scale = 'NONE'
-
-        for d, b in zip(def_bones, self.org_bones):
-            eb[d].use_connect = False
-            eb[d].parent = eb[b]
-
-        # Get ORG parent bone
-        org_parent = eb[self.org_bones[0]].parent.name
-
-        # Get DEF parent from ORG parent
-        def_parent = deformer(strip_org(org_parent))
-
-        # Switch parent
-        for o in self.org_bones:
-            eb[o].parent = eb[def_parent]
-        eb[ctrl].parent = eb[def_parent]
-
-        # Constraints
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        i = 0
-        div = len(self.org_bones) - 1
-        for b in self.org_bones:
-            con = pb[b].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = ctrl
-            con.target_space = 'LOCAL'
-            con.owner_space = 'LOCAL'
-            con.influence = i / div
-
-            con = pb[b].constraints.new('COPY_SCALE')
-            con.name = "copy_scale"
-            con.target = self.obj
-            con.subtarget = def_parent
-            con.target_space = 'WORLD'
-            con.owner_space = 'WORLD'
-            con.influence = 1
-
-            con = pb[b].constraints.new('COPY_ROTATION')
-            con.name = "copy_rotation"
-            con.target = self.obj
-            con.subtarget = ctrl
-            con.target_space = 'LOCAL'
-            con.owner_space = 'LOCAL'
-            if 'X' in self.palm_rotation_axis:
-                con.invert_x = True
-                con.use_x = True
-                con.use_z = False
-            else:
-                con.invert_z = True
-                con.use_x = False
-                con.use_z = True
-            con.use_y = False
-
-            con.influence = (i / div) - (1 - cos((i * pi / 2) / div))
-
-            i += 1
-
-        # Create control widget
-        w = create_widget(self.obj, ctrl)
-        if w is not None:
-            mesh = w.data
-            verts = [
-                (0.1578, 0.0, -0.3),
-                (0.1578, 1.0, -0.2),
-                (-0.1578, 1.0, -0.2),
-                (-0.1578, -0.0, -0.3),
-                (-0.1578, -0.0, 0.3),
-                (-0.1578, 1.0, 0.2),
-                (0.1578, 1.0, 0.2),
-                (0.1578, 0.0, 0.3),
-                (0.1578, 0.25, -0.275),
-                (-0.1578, 0.25, -0.275),
-                (0.1578, 0.75, -0.225),
-                (-0.1578, 0.75, -0.225),
-                (0.1578, 0.75, 0.225),
-                (0.1578, 0.25, 0.275),
-                (-0.1578, 0.25, 0.275),
-                (-0.1578, 0.75, 0.225),
-                ]
-
-            if 'Z' in self.palm_rotation_axis:
-                # Flip x/z coordinates
-                verts = [v[::-1] for v in verts]
-
-            edges = [
-                (1, 2), (0, 3), (4, 7), (5, 6),
-                (8, 0), (9, 3), (10, 1), (11, 2),
-                (12, 6), (13, 7), (4, 14), (15, 5),
-                (10, 8), (11, 9), (15, 14), (12, 13),
-                ]
-            mesh.from_pydata(verts, edges, [])
-            mesh.update()
-
-            mod = w.modifiers.new("subsurf", 'SUBSURF')
-            mod.levels = 2
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-
-    """
-    items = [('X', 'X', ''), ('Z', 'Z', '')]
-    params.palm_rotation_axis = bpy.props.EnumProperty(
-            items=items,
-            name="Palm Rotation Axis",
-            default='X',
-            )
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-
-    """
-    r = layout.row()
-    r.label(text="Primary rotation axis:")
-    r.prop(params, "palm_rotation_axis", text="")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('palm.parent')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0577, 0.0000, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bones['palm.parent'] = bone.name
-    bone = arm.edit_bones.new('palm.04')
-    bone.head[:] = 0.0577, 0.0315, -0.0000
-    bone.tail[:] = 0.1627, 0.0315, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.04'] = bone.name
-    bone = arm.edit_bones.new('palm.03')
-    bone.head[:] = 0.0577, 0.0105, -0.0000
-    bone.tail[:] = 0.1627, 0.0105, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.03'] = bone.name
-    bone = arm.edit_bones.new('palm.02')
-    bone.head[:] = 0.0577, -0.0105, -0.0000
-    bone.tail[:] = 0.1627, -0.0105, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.02'] = bone.name
-    bone = arm.edit_bones.new('palm.01')
-    bone.head[:] = 0.0577, -0.0315, -0.0000
-    bone.tail[:] = 0.1627, -0.0315, -0.0000
-    bone.roll = 3.1416
-    bone.use_connect = False
-    bone.parent = arm.edit_bones[bones['palm.parent']]
-    bones['palm.01'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['palm.parent']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['palm.04']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone = obj.pose.bones[bones['palm.03']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone = obj.pose.bones[bones['palm.02']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-    pbone = obj.pose.bones[bones['palm.01']]
-    pbone.rigify_type = 'palm'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, True, True)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'YXZ'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/pitchipoy/super_torso_turbo.py b/rigify/legacy/rigs/pitchipoy/super_torso_turbo.py
deleted file mode 100644
index 08d06a03863c425900cd70c913b5977d3cdebf02..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/super_torso_turbo.py
+++ /dev/null
@@ -1,908 +0,0 @@
-import bpy
-from mathutils import Vector
-from ...utils import copy_bone, put_bone, org
-from ...utils import strip_org, make_deformer_name, connected_children_names
-from ...utils import create_circle_widget, create_sphere_widget
-from ...utils import MetarigError, make_mechanism_name, create_cube_widget
-
-from ....utils.mechanism import make_property
-
-script = """
-controls = [%s]
-torso    = '%s'
-
-if is_selected( controls ):
-    layout.prop( pose_bones[ torso ], '["%s"]', slider = True )
-    layout.prop( pose_bones[ torso ], '["%s"]', slider = True )
-"""
-
-class Rig:
-
-    def __init__(self, obj, bone_name, params):
-        """ Initialize torso rig and key rig properties """
-
-        eb = obj.data.edit_bones
-
-        self.obj          = obj
-        self.org_bones    = [bone_name] + connected_children_names(obj, bone_name)
-        self.params       = params
-        self.spine_length = sum( [ eb[b].length for b in self.org_bones ] )
-
-        # Check if user provided the positions of the neck and pivot
-        if params.neck_pos and params.pivot_pos:
-            self.neck_pos  = params.neck_pos
-            self.pivot_pos = params.pivot_pos
-        else:
-            raise MetarigError(
-                "RIGIFY ERROR: please specify neck and pivot bone positions"
-            )
-
-        # Check if neck is lower than pivot
-        if params.neck_pos <= params.pivot_pos:
-            raise MetarigError(
-                "RIGIFY ERROR: Neck cannot be below or the same as pivot"
-            )
-
-        # TODO:
-        # Limit neck_pos prop  to 1 --> num of bones - 1 (last is head)
-        # Limit pivot_pos prop to 2 --> num of bones (must leave place for lower torso)
-
-        if params.tail_pos:
-            self.tail_pos = params.tail_pos
-
-        # Assign values to tweak layers props if opted by user
-        if params.tweak_extra_layers:
-            self.tweak_layers = list(params.tweak_layers)
-        else:
-            self.tweak_layers = None
-
-        # Report error of user created less than the minimum of 4 bones for rig
-        if len(self.org_bones) <= 4:
-            raise MetarigError(
-                "RIGIFY ERROR: invalid rig structure" % (strip_org(bone_name))
-            )
-
-
-    def build_bone_structure( self ):
-        """ Divide meta-rig into lists of bones according to torso rig anatomy:
-            Neck --> Upper torso --> Lower torso --> Tail (optional) """
-
-        if self.pivot_pos and self.neck_pos:
-
-            neck_index  = self.neck_pos  - 1
-            pivot_index = self.pivot_pos - 1
-
-            tail_index = 0
-            if 'tail_pos' in dir(self):
-                tail_index  = self.tail_pos  - 1
-
-            neck_bones        = self.org_bones[neck_index::]
-            upper_torso_bones = self.org_bones[pivot_index:neck_index]
-            lower_torso_bones = self.org_bones[tail_index:pivot_index]
-
-            tail_bones        = []
-            if tail_index:
-                tail_bones = self.org_bones[::tail_index+1]
-
-            return {
-                'neck'  : neck_bones,
-                'upper' : upper_torso_bones,
-                'lower' : lower_torso_bones,
-                'tail'  : tail_bones
-            }
-
-        else:
-            return 'ERROR'
-
-    def orient_bone( self, eb, axis, scale, reverse = False ):
-        v = Vector((0,0,0))
-
-        setattr(v,axis,scale)
-
-        if reverse:
-            tail_vec = v @ self.obj.matrix_world
-            eb.head[:] = eb.tail
-            eb.tail[:] = eb.head + tail_vec
-        else:
-            tail_vec = v @ self.obj.matrix_world
-            eb.tail[:] = eb.head + tail_vec
-
-
-    def create_pivot( self, pivot ):
-        """ Create the pivot control and mechanism bones """
-        org_bones  = self.org_bones
-        pivot_name = org_bones[pivot-1]
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Create torso control bone
-        torso_name = 'torso'
-        ctrl_name  = copy_bone(self.obj, pivot_name, torso_name)
-        ctrl_eb    = eb[ ctrl_name ]
-
-        self.orient_bone( ctrl_eb, 'y', self.spine_length / 2.5 )
-
-        # Create mch_pivot
-        mch_name = make_mechanism_name( 'pivot' )
-        mch_name = copy_bone(self.obj, ctrl_name, mch_name)
-        mch_eb   = eb[ mch_name ]
-
-        mch_eb.length /= 4
-
-        # Positioning pivot in a more usable location for animators
-        if hasattr(self,'tail_pos') and self.tail_pos > 0:
-            pivot_loc = eb[ org_bones[pivot-1]].head
-        else:
-            pivot_loc = ( eb[ org_bones[0]].head + eb[ org_bones[0]].tail ) / 2
-
-        put_bone( self.obj, ctrl_name, pivot_loc )
-
-        return {
-            'ctrl' : ctrl_name,
-            'mch'  : mch_name
-        }
-
-
-    def create_deform( self ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        def_bones = []
-        for org in org_bones:
-            def_name = make_deformer_name( strip_org( org ) )
-            def_name = copy_bone( self.obj, org, def_name )
-            def_bones.append( def_name )
-
-        return def_bones
-
-
-    def create_neck( self, neck_bones ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Create neck control
-        neck    = copy_bone( self.obj, org(neck_bones[0]), 'neck' )
-        neck_eb = eb[ neck ]
-
-        # Neck spans all neck bones (except head)
-        neck_eb.tail[:] = eb[ org(neck_bones[-1]) ].head
-
-        # Create head control
-        head = copy_bone( self.obj, org(neck_bones[-1]), 'head' )
-
-        # MCH bones
-        # Neck MCH stretch
-        mch_str = copy_bone( self.obj, neck, make_mechanism_name('STR-neck') )
-
-        # Neck MCH rotation
-        mch_neck = copy_bone(
-            self.obj, neck, make_mechanism_name('ROT-neck')
-        )
-
-        self.orient_bone( eb[mch_neck], 'y', self.spine_length / 10 )
-
-        # Head MCH rotation
-        mch_head = copy_bone(
-            self.obj, head, make_mechanism_name('ROT-head')
-        )
-
-        self.orient_bone( eb[mch_head], 'y', self.spine_length / 10 )
-
-        twk,mch = [],[]
-
-        # Intermediary bones
-        for b in neck_bones[1:-1]: # All except 1st neck and (last) head
-            mch_name = copy_bone( self.obj, org(b), make_mechanism_name(b) )
-            eb[mch_name].length /= 4
-
-            mch += [ mch_name ]
-
-        # Tweak bones
-        for b in neck_bones[:-1]: # All except last bone
-            twk_name = "tweak_" + b
-            twk_name = copy_bone( self.obj, org(b), twk_name )
-
-            eb[twk_name].length /= 2
-
-            twk += [ twk_name ]
-
-        return {
-            'ctrl_neck' : neck,
-            'ctrl'      : head,
-            'mch_str'   : mch_str,
-            'mch_neck'  : mch_neck,
-            'mch_head'  : mch_head,
-            'mch'       : mch,
-            'tweak'     : twk
-        }
-
-
-    def create_chest( self, chest_bones ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # get total spine length
-
-        # Create chest control bone
-        chest = copy_bone( self.obj, org( chest_bones[0] ), 'chest' )
-        self.orient_bone( eb[chest], 'y', self.spine_length / 3 )
-
-        # create chest mch_wgt
-        mch_wgt = copy_bone(
-            self.obj, org( chest_bones[-1] ),
-            make_mechanism_name( 'WGT-chest' )
-        )
-
-        # Create mch and twk bones
-        twk,mch = [],[]
-
-        for b in chest_bones:
-            mch_name = copy_bone( self.obj, org(b), make_mechanism_name(b) )
-            self.orient_bone( eb[mch_name], 'y', self.spine_length / 10 )
-
-            twk_name = "tweak_" + b
-            twk_name = copy_bone( self.obj, org(b), twk_name )
-            eb[twk_name].length /= 2
-
-            mch += [ mch_name ]
-            twk += [ twk_name ]
-
-        return {
-            'ctrl'    : chest,
-            'mch'     : mch,
-            'tweak'   : twk,
-            'mch_wgt' : mch_wgt
-        }
-
-
-    def create_hips( self, hip_bones ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Create hips control bone
-        hips = copy_bone( self.obj, org( hip_bones[-1] ), 'hips' )
-        self.orient_bone(
-            eb[hips],
-            'y',
-            self.spine_length / 4,
-            reverse = True
-        )
-
-        # create hips mch_wgt
-        mch_wgt = copy_bone(
-            self.obj, org( hip_bones[0] ),
-            make_mechanism_name( 'WGT-hips' )
-        )
-
-        # Create mch and tweak bones
-        twk,mch = [],[]
-        for b in hip_bones:
-            mch_name = copy_bone( self.obj, org(b), make_mechanism_name(b) )
-            self.orient_bone(
-                eb[mch_name], 'y', self.spine_length / 10, reverse = True
-            )
-
-            twk_name = "tweak_" + b
-            twk_name = copy_bone( self.obj, org( b ), twk_name )
-
-            eb[twk_name].length /= 2
-
-            mch += [ mch_name ]
-            twk += [ twk_name ]
-
-        return {
-            'ctrl'    : hips,
-            'mch'     : mch,
-            'tweak'   : twk,
-            'mch_wgt' : mch_wgt
-        }
-
-
-    def create_tail( self, tail_bones ):
-        pass
-
-
-    def parent_bones( self, bones ):
-        org_bones = self.org_bones
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Parent deform bones
-        for i,b in enumerate( bones['def'] ):
-            if i > 0: # For all bones but the first (which has no parent)
-                eb[b].parent      = eb[ bones['def'][i-1] ] # to previous
-                eb[b].use_connect = True
-
-        # Parent control bones
-        # Head control => MCH-rotation_head
-        eb[ bones['neck']['ctrl'] ].parent = eb[ bones['neck']['mch_head'] ]
-
-        # MCH stretch => neck ctrl
-        eb[ bones['neck']['mch_str'] ].parent = eb[ bones['neck']['ctrl_neck'] ]
-
-        # Neck control => MCH-rotation_neck
-        eb[ bones['neck']['ctrl_neck'] ].parent = eb[ bones['neck']['mch_neck'] ]
-
-        # Parent hips and chest controls to torso
-        eb[ bones['chest']['ctrl'] ].parent = eb[ bones['pivot']['ctrl'] ]
-        eb[ bones['hips']['ctrl'] ].parent  = eb[ bones['pivot']['ctrl'] ]
-
-        # Parent mch bones
-        # Neck mch
-        eb[ bones['neck']['mch_head'] ].parent = eb[ bones['neck']['ctrl_neck'] ]
-
-        parent = eb[ bones['neck']['mch_str'] ]
-        for i,b in enumerate([ eb[n] for n in bones['neck']['mch'] ]):
-            b.parent = parent
-
-        # Chest mch bones and neck mch
-        chest_mch = bones['chest']['mch'] + [ bones['neck']['mch_neck'] ]
-        for i,b in enumerate(chest_mch):
-            if i == 0:
-                eb[b].parent = eb[ bones['pivot']['ctrl'] ]
-            else:
-                eb[b].parent = eb[ chest_mch[i-1] ]
-
-        # Hips mch bones
-        for i,b in enumerate( bones['hips']['mch'] ):
-            if i == len(bones['hips']['mch']) - 1:
-                eb[b].parent = eb[ bones['pivot']['ctrl'] ]
-            else:
-                eb[b].parent = eb[ bones['hips']['mch'][i+1] ]
-
-        # mch pivot
-        eb[ bones['pivot']['mch'] ].parent = eb[ bones['chest']['mch'][0] ]
-
-        # MCH widgets
-        eb[ bones['chest']['mch_wgt'] ].parent = eb[ bones['chest']['mch'][-1] ]
-        eb[ bones['hips' ]['mch_wgt'] ].parent = eb[ bones['hips' ]['mch'][0 ] ]
-
-        # Tweaks
-
-        # Neck tweaks
-        for i,twk in enumerate( bones['neck']['tweak'] ):
-            if i == 0:
-                eb[ twk ].parent = eb[ bones['neck']['ctrl_neck'] ]
-            else:
-                eb[ twk ].parent = eb[ bones['neck']['mch'][i-1] ]
-
-        # Chest tweaks
-        for twk,mch in zip( bones['chest']['tweak'], bones['chest']['mch'] ):
-            if bones['chest']['tweak'].index( twk ) == 0:
-                eb[ twk ].parent = eb[ bones['pivot']['mch'] ]
-            else:
-                eb[ twk ].parent = eb[ mch ]
-
-        # Hips tweaks
-        for i,twk in enumerate(bones['hips']['tweak']):
-            if i == 0:
-                eb[twk].parent = eb[ bones['hips']['mch'][i] ]
-            else:
-                eb[twk].parent = eb[ bones['hips']['mch'][i-1] ]
-
-        # Parent orgs to matching tweaks
-        tweaks =  bones['hips']['tweak'] + bones['chest']['tweak']
-        tweaks += bones['neck']['tweak'] + [ bones['neck']['ctrl'] ]
-
-        if 'tail' in bones.keys():
-            tweaks += bones['tail']['tweak']
-
-        for org, twk in zip( org_bones, tweaks ):
-            eb[ org ].parent = eb[ twk ]
-
-
-    def make_constraint( self, bone, constraint ):
-        bpy.ops.object.mode_set(mode = 'OBJECT')
-        pb = self.obj.pose.bones
-
-        owner_pb     = pb[bone]
-        const        = owner_pb.constraints.new( constraint['constraint'] )
-        const.target = self.obj
-
-        # filter constraint props to those that actually exist in the currnet
-        # type of constraint, then assign values to each
-        for p in [ k for k in constraint.keys() if k in dir(const) ]:
-            setattr( const, p, constraint[p] )
-
-
-    def constrain_bones( self, bones ):
-        # MCH bones
-
-        # head and neck MCH bones
-        for b in [ bones['neck']['mch_head'], bones['neck']['mch_neck'] ]:
-            self.make_constraint( b, {
-                'constraint' : 'COPY_ROTATION',
-                'subtarget'  : bones['pivot']['ctrl'],
-            } )
-            self.make_constraint( b, {
-                'constraint' : 'COPY_SCALE',
-                'subtarget'  : bones['pivot']['ctrl'],
-            } )
-
-        # Neck MCH Stretch
-        self.make_constraint( bones['neck']['mch_str'], {
-            'constraint'  : 'DAMPED_TRACK',
-            'subtarget'   : bones['neck']['ctrl'],
-        })
-
-        self.make_constraint( bones['neck']['mch_str'], {
-            'constraint'  : 'STRETCH_TO',
-            'subtarget'   : bones['neck']['ctrl'],
-        })
-
-        # Intermediary mch bones
-        intermediaries = [ bones['neck'], bones['chest'], bones['hips'] ]
-
-        if 'tail' in bones.keys():
-            intermediaries += bones['tail']
-
-        for i,l in enumerate(intermediaries):
-            mch     = l['mch']
-            factor  = float( 1 / len( l['tweak'] ) )
-
-            for j,b in enumerate(mch):
-                if i == 0:
-                    nfactor = float( (j + 1) / len( mch ) )
-                    self.make_constraint( b, {
-                        'constraint'   : 'COPY_ROTATION',
-                        'subtarget'    : l['ctrl'],
-                        'influence'    : nfactor
-                    } )
-                else:
-                    self.make_constraint( b, {
-                        'constraint'   : 'COPY_TRANSFORMS',
-                        'subtarget'    : l['ctrl'],
-                        'influence'    : factor,
-                        'owner_space'  : 'LOCAL',
-                        'target_space' : 'LOCAL'
-                    } )
-
-
-        # MCH pivot
-        self.make_constraint( bones['pivot']['mch'], {
-            'constraint'   : 'COPY_TRANSFORMS',
-            'subtarget'    : bones['hips']['mch'][-1],
-            'owner_space'  : 'LOCAL',
-            'target_space' : 'LOCAL'
-        })
-
-        # DEF bones
-        deform =  bones['def']
-        tweaks =  bones['hips']['tweak'] + bones['chest']['tweak']
-        tweaks += bones['neck']['tweak'] + [ bones['neck']['ctrl'] ]
-
-        for d,t in zip(deform, tweaks):
-            tidx = tweaks.index(t)
-
-            self.make_constraint( d, {
-                'constraint'  : 'COPY_TRANSFORMS',
-                'subtarget'   : t
-            })
-
-            if tidx != len(tweaks) - 1:
-                self.make_constraint( d, {
-                    'constraint'  : 'DAMPED_TRACK',
-                    'subtarget'   : tweaks[ tidx + 1 ],
-                })
-
-                self.make_constraint( d, {
-                    'constraint'  : 'STRETCH_TO',
-                    'subtarget'   : tweaks[ tidx + 1 ],
-                })
-
-        pb = self.obj.pose.bones
-
-        for t in tweaks:
-            if t != bones['neck']['ctrl']:
-                pb[t].rotation_mode = 'ZXY'
-
-
-    def create_drivers( self, bones ):
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        pb = self.obj.pose.bones
-
-        # Setting the torso's props
-        torso = pb[ bones['pivot']['ctrl'] ]
-
-        props  = [ "head_follow", "neck_follow" ]
-        owners = [ bones['neck']['mch_head'], bones['neck']['mch_neck'] ]
-
-        for prop in props:
-            if prop == 'neck_follow':
-                defval = 0.5
-            else:
-                defval = 0.0
-
-            make_property(torso, prop, defval)
-
-        # driving the follow rotation switches for neck and head
-        for bone, prop, in zip( owners, props ):
-            # Add driver to copy rotation constraint
-            drv_fcu = pb[ bone ].constraints[ 0 ].driver_add("influence")
-            drv = drv_fcu.driver
-            drv.type = 'AVERAGE'
-
-            var = drv.variables.new()
-            var.name = prop
-            var.type = "SINGLE_PROP"
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = \
-                torso.path_from_id() + '['+ '"' + prop + '"' + ']'
-
-            drv_modifier = drv_fcu.modifiers[0]
-
-            drv_modifier.mode            = 'POLYNOMIAL'
-            drv_modifier.poly_order      = 1
-            drv_modifier.coefficients[0] = 1.0
-            drv_modifier.coefficients[1] = -1.0
-
-
-    def locks_and_widgets( self, bones ):
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        pb = self.obj.pose.bones
-
-        # deform bones bbone segments
-        for bone in bones['def'][:-1]:
-            self.obj.data.bones[bone].bbone_segments = 8
-
-        self.obj.data.bones[ bones['def'][0]  ].bbone_easein  = 0.0
-        self.obj.data.bones[ bones['def'][-2] ].bbone_easeout = 0.0
-
-        # Locks
-        tweaks =  bones['neck']['tweak'] + bones['chest']['tweak']
-        tweaks += bones['hips']['tweak']
-
-        if 'tail' in bones.keys():
-            tweaks += bones['tail']['tweak']
-
-        # Tweak bones locks
-        for bone in tweaks:
-            pb[bone].lock_rotation = True, False, True
-            pb[bone].lock_scale    = False, True, False
-
-        # Widgets
-
-        # Assigning a widget to torso bone
-        create_cube_widget(
-            self.obj,
-            bones['pivot']['ctrl'],
-            radius              = 0.5,
-            bone_transform_name = None
-        )
-
-        # Assigning widgets to control bones
-        gen_ctrls = [
-            bones['neck']['ctrl_neck'],
-            bones['chest']['ctrl'],
-            bones['hips']['ctrl']
-        ]
-
-        if 'tail' in bones.keys():
-            gen_ctrls += [ bones['tail']['ctrl'] ]
-
-        for bone in gen_ctrls:
-            create_circle_widget(
-                self.obj,
-                bone,
-                radius              = 1.0,
-                head_tail           = 0.5,
-                with_line           = False,
-                bone_transform_name = None
-            )
-
-        # Head widget
-        create_circle_widget(
-            self.obj,
-            bones['neck']['ctrl'],
-            radius              = 0.75,
-            head_tail           = 1.0,
-            with_line           = False,
-            bone_transform_name = None
-        )
-
-        # place widgets on correct bones
-        chest_widget_loc = pb[ bones['chest']['mch_wgt'] ]
-        pb[ bones['chest']['ctrl'] ].custom_shape_transform = chest_widget_loc
-
-        hips_widget_loc = pb[ bones['hips']['mch_wgt'] ]
-        if 'tail' in bones.keys():
-            hips_widget_loc = bones['def'][self.tail_pos -1]
-
-        pb[ bones['hips']['ctrl'] ].custom_shape_transform = hips_widget_loc
-
-        # Assigning widgets to tweak bones and layers
-        for bone in tweaks:
-            create_sphere_widget(self.obj, bone, bone_transform_name=None)
-
-            if self.tweak_layers:
-                pb[bone].bone.layers = self.tweak_layers
-
-
-    def generate( self ):
-
-        # Torso Rig Anatomy:
-        # Neck: all bones above neck point, last bone is head
-        # Upper torso: all bones between pivot and neck start
-        # Lower torso: all bones below pivot until tail point
-        # Tail: all bones below tail point
-
-        bone_chains = self.build_bone_structure()
-
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Clear parents for org bones
-        for bone in self.org_bones:
-            eb[bone].use_connect = False
-            eb[bone].parent      = None
-
-        if bone_chains != 'ERROR':
-
-            # Create lists of bones and strip "ORG" from their names
-            neck_bones        = [ strip_org(b) for b in bone_chains['neck' ] ]
-            upper_torso_bones = [ strip_org(b) for b in bone_chains['upper'] ]
-            lower_torso_bones = [ strip_org(b) for b in bone_chains['lower'] ]
-            tail_bones        = [ strip_org(b) for b in bone_chains['tail' ] ]
-
-            bones = {}
-
-            bones['def']   = self.create_deform() # Gets org bones from self
-            bones['pivot'] = self.create_pivot( self.pivot_pos )
-            bones['neck']  = self.create_neck( neck_bones )
-            bones['chest'] = self.create_chest( upper_torso_bones )
-            bones['hips']  = self.create_hips( lower_torso_bones )
-            # TODO: Add create tail
-
-            if tail_bones:
-                bones['tail'] = self.create_tail( tail_bones )
-
-            # TEST
-            bpy.ops.object.mode_set(mode ='EDIT')
-            eb = self.obj.data.edit_bones
-
-            self.parent_bones(      bones )
-            self.constrain_bones(   bones )
-            self.create_drivers(    bones )
-            self.locks_and_widgets( bones )
-
-
-        controls =  [ bones['neck']['ctrl'],  bones['neck']['ctrl_neck'] ]
-        controls += [ bones['chest']['ctrl'], bones['hips']['ctrl']      ]
-        controls += [ bones['pivot']['ctrl'] ]
-
-        if 'tail' in bones.keys():
-            controls += [ bones['tail']['ctrl'] ]
-
-        # Create UI
-        controls_string = ", ".join(["'" + x + "'" for x in controls])
-        return [script % (
-            controls_string,
-            bones['pivot']['ctrl'],
-            'head_follow',
-            'neck_follow'
-            )]
-
-def add_parameters( params ):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    params.neck_pos = bpy.props.IntProperty(
-        name        = 'neck_position',
-        default     = 6,
-        min         = 0,
-        description = 'Neck start position'
-    )
-
-    params.pivot_pos = bpy.props.IntProperty(
-        name         = 'pivot_position',
-        default      = 3,
-        min          = 0,
-        description  = 'Position of the torso control and pivot point'
-    )
-
-    params.tail_pos = bpy.props.IntProperty(
-        name        = 'tail_position',
-        default     = 0,
-        min         = 0,
-        description = 'Where the tail starts (change from 0 to enable)'
-    )
-
-    # Setting up extra layers for the FK and tweak
-    params.tweak_extra_layers = bpy.props.BoolProperty(
-        name        = "tweak_extra_layers",
-        default     = True,
-        description = ""
-        )
-
-    params.tweak_layers = bpy.props.BoolVectorProperty(
-        size        = 32,
-        description = "Layers for the tweak controls to be on",
-        default     = tuple( [ i == 1 for i in range(0, 32) ] )
-        )
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters."""
-
-    r = layout.row()
-    r.prop(params, "neck_pos")
-
-    r = layout.row()
-    r.prop(params, "pivot_pos")
-
-    r = layout.row()
-    r.prop(params, "tail_pos")
-
-    r = layout.row()
-    r.prop(params, "tweak_extra_layers")
-    r.active = params.tweak_extra_layers
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-
-    for i in range(8):
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    row = col.row(align=True)
-
-    for i in range(16,24):
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-
-    for i in range(8,16):
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    row = col.row(align=True)
-
-    for i in range(24,32):
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('spine')
-    bone.head[:] = 0.0000, 0.0552, 1.0099
-    bone.tail[:] = 0.0000, 0.0172, 1.1573
-    bone.roll = 0.0000
-    bone.use_connect = False
-    bones['spine'] = bone.name
-
-    bone = arm.edit_bones.new('spine.001')
-    bone.head[:] = 0.0000, 0.0172, 1.1573
-    bone.tail[:] = 0.0000, 0.0004, 1.2929
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['spine.001'] = bone.name
-
-    bone = arm.edit_bones.new('spine.002')
-    bone.head[:] = 0.0000, 0.0004, 1.2929
-    bone.tail[:] = 0.0000, 0.0059, 1.4657
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.001']]
-    bones['spine.002'] = bone.name
-
-    bone = arm.edit_bones.new('spine.003')
-    bone.head[:] = 0.0000, 0.0059, 1.4657
-    bone.tail[:] = 0.0000, 0.0114, 1.6582
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.002']]
-    bones['spine.003'] = bone.name
-
-    bone = arm.edit_bones.new('spine.004')
-    bone.head[:] = 0.0000, 0.0114, 1.6582
-    bone.tail[:] = 0.0000, -0.0067, 1.7197
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.003']]
-    bones['spine.004'] = bone.name
-
-    bone = arm.edit_bones.new('spine.005')
-    bone.head[:] = 0.0000, -0.0067, 1.7197
-    bone.tail[:] = 0.0000, -0.0247, 1.7813
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.004']]
-    bones['spine.005'] = bone.name
-
-    bone = arm.edit_bones.new('spine.006')
-    bone.head[:] = 0.0000, -0.0247, 1.7813
-    bone.tail[:] = 0.0000, -0.0247, 1.9796
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine.005']]
-    bones['spine.006'] = bone.name
-
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['spine']]
-    pbone.rigify_type = 'pitchipoy.super_torso_turbo'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    try:
-        pbone.rigify_parameters.chain_bone_controls = "1, 2, 3"
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.neck_pos = 5
-    except AttributeError:
-        pass
-    try:
-        pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
-    except AttributeError:
-        pass
-    pbone = obj.pose.bones[bones['spine.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['spine.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['spine.003']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['spine.004']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['spine.005']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['spine.006']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/pitchipoy/super_widgets.py b/rigify/legacy/rigs/pitchipoy/super_widgets.py
deleted file mode 100644
index fabc800bc5bd71f4bb8550101d35177cb0c4b6ad..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/super_widgets.py
+++ /dev/null
@@ -1,158 +0,0 @@
-from   ...utils import create_widget
-
-MODULE_NAME = "super_widgets"  # Windows/Mac blender is weird, so __package__ doesn't work
-
-
-def create_eye_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(1.1920928955078125e-07*size, 0.5000000596046448*size, 0.0*size), (-0.12940943241119385*size, 0.482962965965271*size, 0.0*size), (-0.24999988079071045*size, 0.4330127537250519*size, 0.0*size), (-0.35355329513549805*size, 0.35355344414711*size, 0.0*size), (-0.43301260471343994*size, 0.2500000596046448*size, 0.0*size), (-0.4829627275466919*size, 0.12940959632396698*size, 0.0*size), (-0.49999988079071045*size, 1.0094120739267964e-07*size, 0.0*size), (-0.482962965965271*size, -0.12940940260887146*size, 0.0*size), (-0.43301260471343994*size, -0.24999986588954926*size, 0.0*size), (-0.3535534143447876*size, -0.35355323553085327*size, 0.0*size), (-0.25*size, -0.43301257491111755*size, 0.0*size), (-0.1294095516204834*size, -0.48296281695365906*size, 0.0*size), (-1.1920928955078125e-07*size, -0.4999999403953552*size, 0.0*size), (0.12940943241119385*size, -0.4829629063606262*size, 0.0*size), (0.24999988079071045*size, -0.4330127537250519*size, 0.0*size), (0.35355329513549805*size, -0.35355353355407715*size, 0.0*size), (0.4330127239227295*size, -0.25000008940696716*size, 0.0*size), (0.482962965965271*size, -0.12940965592861176*size, 0.0*size), (0.5000001192092896*size, -1.6926388468618825e-07*size, 0.0*size), (0.48296308517456055*size, 0.1294093281030655*size, 0.0*size), (0.4330129623413086*size, 0.24999980628490448*size, 0.0*size), (0.35355377197265625*size, 0.35355323553085327*size, 0.0*size), (0.25000035762786865*size, 0.43301260471343994*size, 0.0*size), (0.1294100284576416*size, 0.48296287655830383*size, 0.0*size), ]
-        edges = [(1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (9, 8), (10, 9), (11, 10), (12, 11), (13, 12), (14, 13), (15, 14), (16, 15), (17, 16), (18, 17), (19, 18), (20, 19), (21, 20), (22, 21), (23, 22), (0, 23), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
-
-
-def create_eyes_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(0.8928930759429932*size, -0.7071065902709961*size, 0.0*size), (0.8928932547569275*size, 0.7071067690849304*size, 0.0*size), (-1.8588197231292725*size, -0.9659252762794495*size, 0.0*size), (-2.100001096725464*size, -0.8660248517990112*size, 0.0*size), (-2.3071072101593018*size, -0.7071059942245483*size, 0.0*size), (-2.4660258293151855*size, -0.49999913573265076*size, 0.0*size), (-2.5659260749816895*size, -0.258818119764328*size, 0.0*size), (-2.5999999046325684*size, 8.575012770961621e-07*size, 0.0*size), (-2.5659255981445312*size, 0.2588198482990265*size, 0.0*size), (-2.4660253524780273*size, 0.5000006556510925*size, 0.0*size), (-2.3071064949035645*size, 0.7071075439453125*size, 0.0*size), (-2.099999189376831*size, 0.866025984287262*size, 0.0*size), (-1.8588184118270874*size, 0.9659261703491211*size, 0.0*size), (-1.5999996662139893*size, 1.000000238418579*size, 0.0*size), (-1.341180443763733*size, 0.9659258723258972*size, 0.0*size), (-1.0999995470046997*size, 0.8660253882408142*size, 0.0*size), (-0.8928929567337036*size, 0.7071067094802856*size, 0.0*size), (-0.892893373966217*size, -0.7071066498756409*size, 0.0*size), (-1.100000262260437*size, -0.8660252690315247*size, 0.0*size), (-1.3411810398101807*size, -0.9659255743026733*size, 0.0*size), (1.600000023841858*size, 1.0*size, 0.0*size), (1.3411810398101807*size, 0.9659258127212524*size, 0.0*size), (1.100000023841858*size, 0.8660253882408142*size, 0.0*size), (-1.600000262260437*size, -0.9999997615814209*size, 0.0*size), (1.0999997854232788*size, -0.8660252690315247*size, 0.0*size), (1.341180682182312*size, -0.9659257531166077*size, 0.0*size), (1.5999996662139893*size, -1.0*size, 0.0*size), (1.8588186502456665*size, -0.965925931930542*size, 0.0*size), (2.0999996662139893*size, -0.8660256266593933*size, 0.0*size), (2.3071064949035645*size, -0.7071071863174438*size, 0.0*size), (2.4660253524780273*size, -0.5000002980232239*size, 0.0*size), (2.5659255981445312*size, -0.25881943106651306*size, 0.0*size), (2.5999999046325684*size, -4.649122899991198e-07*size, 0.0*size), (2.5659260749816895*size, 0.25881853699684143*size, 0.0*size), (2.4660258293151855*size, 0.4999994933605194*size, 0.0*size), (2.3071072101593018*size, 0.707106351852417*size, 0.0*size), (2.1000006198883057*size, 0.8660250902175903*size, 0.0*size), (1.8588197231292725*size, 0.9659256339073181*size, 0.0*size), (-1.8070557117462158*size, -0.7727401852607727*size, 0.0*size), (-2.0000009536743164*size, -0.6928198337554932*size, 0.0*size), (-2.1656856536865234*size, -0.5656847357749939*size, 0.0*size), (-2.292820692062378*size, -0.3999992609024048*size, 0.0*size), (-2.3727407455444336*size, -0.20705445110797882*size, 0.0*size), (-2.3999998569488525*size, 7.336847716032935e-07*size, 0.0*size), (-2.3727405071258545*size, 0.207055926322937*size, 0.0*size), (-2.2928202152252197*size, 0.40000057220458984*size, 0.0*size), (-2.1656851768493652*size, 0.5656861066818237*size, 0.0*size), (-1.9999992847442627*size, 0.6928208470344543*size, 0.0*size), (-1.8070547580718994*size, 0.7727410197257996*size, 0.0*size), (-1.5999996662139893*size, 0.8000002503395081*size, 0.0*size), (-1.3929443359375*size, 0.7727407813072205*size, 0.0*size), (-1.1999995708465576*size, 0.6928203701972961*size, 0.0*size), (-1.0343143939971924*size, 0.5656854510307312*size, 0.0*size), (-1.0343146324157715*size, -0.5656852722167969*size, 0.0*size), (-1.2000001668930054*size, -0.6928201913833618*size, 0.0*size), (-1.3929448127746582*size, -0.7727404236793518*size, 0.0*size), (-1.6000001430511475*size, -0.7999997735023499*size, 0.0*size), (1.8070557117462158*size, 0.772739827632904*size, 0.0*size), (2.0000009536743164*size, 0.6928195953369141*size, 0.0*size), (2.1656856536865234*size, 0.5656843781471252*size, 0.0*size), (2.292820692062378*size, 0.39999890327453613*size, 0.0*size), (2.3727407455444336*size, 0.20705409348011017*size, 0.0*size), (2.3999998569488525*size, -1.0960745839838637e-06*size, 0.0*size), (2.3727405071258545*size, -0.20705628395080566*size, 0.0*size), (2.2928202152252197*size, -0.4000009298324585*size, 0.0*size), (2.1656851768493652*size, -0.5656863451004028*size, 0.0*size), (1.9999992847442627*size, -0.692821204662323*size, 0.0*size), (1.8070547580718994*size, -0.7727413773536682*size, 0.0*size), (1.5999996662139893*size, -0.8000004887580872*size, 0.0*size), (1.3929443359375*size, -0.7727410197257996*size, 0.0*size), (1.1999995708465576*size, -0.6928204894065857*size, 0.0*size), (1.0343143939971924*size, -0.5656855702400208*size, 0.0*size), (1.0343146324157715*size, 0.5656850337982178*size, 0.0*size), (1.2000004053115845*size, 0.6928199529647827*size, 0.0*size), (1.3929448127746582*size, 0.7727401852607727*size, 0.0*size), (1.6000001430511475*size, 0.7999995350837708*size, 0.0*size), ]
-        edges = [(24, 0), (1, 22), (16, 1), (17, 0), (23, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (21, 20), (22, 21), (13, 14), (14, 15), (15, 16), (17, 18), (18, 19), (19, 23), (25, 24), (26, 25), (27, 26), (28, 27), (29, 28), (30, 29), (31, 30), (32, 31), (33, 32), (34, 33), (35, 34), (36, 35), (37, 36), (20, 37), (56, 38), (38, 39), (39, 40), (40, 41), (41, 42), (42, 43), (43, 44), (44, 45), (45, 46), (46, 47), (47, 48), (48, 49), (49, 50), (50, 51), (51, 52), (53, 54), (54, 55), (55, 56), (75, 57), (57, 58), (58, 59), (59, 60), (60, 61), (61, 62), (62, 63), (63, 64), (64, 65), (65, 66), (66, 67), (67, 68), (68, 69), (69, 70), (70, 71), (72, 73), (73, 74), (74, 75), (52, 72), (53, 71), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
-
-
-def create_ear_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(-2.4903741291382175e-09*size, 1.0*size, -3.123863123732917e-08*size), (-7.450580596923828e-09*size, 0.9829629063606262*size, 0.0776456817984581*size), (-1.4901161193847656e-08*size, 0.9330127239227295*size, 0.1499999761581421*size), (-2.9802322387695312e-08*size, 0.8535534143447876*size, 0.2121320217847824*size), (-2.9802322387695312e-08*size, 0.75*size, 0.25980761647224426*size), (-2.9802322387695312e-08*size, 0.6294095516204834*size, 0.2897777259349823*size), (-2.9802322387695312e-08*size, 0.5000000596046448*size, 0.29999998211860657*size), (-5.960464477539063e-08*size, 0.37059056758880615*size, 0.2897777855396271*size), (-5.960464477539063e-08*size, 0.25000008940696716*size, 0.25980767607688904*size), (-4.470348358154297e-08*size, 0.14644670486450195*size, 0.21213211119174957*size), (-4.470348358154297e-08*size, 0.06698736548423767*size, 0.15000009536743164*size), (-4.470348358154297e-08*size, 0.017037123441696167*size, 0.07764581590890884*size), (-3.6718930118695425e-08*size, 0.0*size, 1.1981423142515268e-07*size), (-2.9802322387695312e-08*size, 0.017037034034729004*size, -0.07764559239149094*size), (-2.9802322387695312e-08*size, 0.06698718667030334*size, -0.14999987185001373*size), (-1.4901161193847656e-08*size, 0.14644640684127808*size, -0.21213191747665405*size), (0.0*size, 0.24999985098838806*size, -0.25980761647224426*size), (0.0*size, 0.3705902695655823*size, -0.2897777259349823*size), (0.0*size, 0.4999997615814209*size, -0.30000004172325134*size), (0.0*size, 0.6294092535972595*size, -0.2897777855396271*size), (0.0*size, 0.7499997615814209*size, -0.2598077356815338*size), (1.4901161193847656e-08*size, 0.8535531759262085*size, -0.21213220059871674*size), (0.0*size, 0.9330125451087952*size, -0.15000019967556*size), (0.0*size, 0.9829628467559814*size, -0.07764596492052078*size), ]
-        edges = [(1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (9, 8), (10, 9), (11, 10), (12, 11), (13, 12), (14, 13), (15, 14), (16, 15), (17, 16), (18, 17), (19, 18), (20, 19), (21, 20), (22, 21), (23, 22), (0, 23), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
-
-
-def create_jaw_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(0.606898307800293*size, 0.6533132195472717*size, 0.09324522316455841*size), (0.5728408694267273*size, 0.7130533456802368*size, 0.04735109210014343*size), (0.478340744972229*size, 0.856249213218689*size, 0.0167550016194582*size), (0.3405401408672333*size, 1.0092359781265259*size, 0.003642391413450241*size), (0.1764744222164154*size, 1.1159402132034302*size, 0.0003642391529865563*size), (0.5728408694267273*size, 0.7130533456802368*size, 0.1391393542289734*size), (0.478340744972229*size, 0.856249213218689*size, 0.16973544657230377*size), (0.3405401408672333*size, 1.0092359781265259*size, 0.18284805119037628*size), (0.1764744222164154*size, 1.1159402132034302*size, 0.1861262023448944*size), (0.0*size, 1.153113603591919*size, 0.0*size), (-0.606898307800293*size, 0.6533132195472717*size, 0.09324522316455841*size), (-0.5728408694267273*size, 0.7130533456802368*size, 0.04735109210014343*size), (-0.478340744972229*size, 0.856249213218689*size, 0.0167550016194582*size), (-0.3405401408672333*size, 1.0092359781265259*size, 0.003642391413450241*size), (-0.1764744222164154*size, 1.1159402132034302*size, 0.0003642391529865563*size), (0.0*size, 1.153113603591919*size, 0.18649044632911682*size), (-0.5728408694267273*size, 0.7130533456802368*size, 0.1391393542289734*size), (-0.478340744972229*size, 0.856249213218689*size, 0.16973544657230377*size), (-0.3405401408672333*size, 1.0092359781265259*size, 0.18284805119037628*size), (-0.1764744222164154*size, 1.1159402132034302*size, 0.1861262023448944*size), ]
-        edges = [(1, 0), (2, 1), (3, 2), (4, 3), (9, 4), (6, 5), (7, 6), (8, 7), (15, 8), (5, 0), (11, 10), (12, 11), (13, 12), (14, 13), (9, 14), (17, 16), (18, 17), (19, 18), (15, 19), (16, 10), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
-
-
-def create_teeth_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(0.6314387321472168*size, 0.4999997019767761*size, 0.09999999403953552*size), (0.5394065976142883*size, 0.29289281368255615*size, 0.09999999403953552*size), (0.3887903690338135*size, 0.1339743733406067*size, 0.09999999403953552*size), (0.19801488518714905*size, 0.03407406806945801*size, 0.09999999403953552*size), (-3.4034394502668874e-07*size, 0.0*size, 0.09999999403953552*size), (-0.19801555573940277*size, 0.034074246883392334*size, 0.09999999403953552*size), (-0.7000000476837158*size, 1.0000001192092896*size, -0.10000000894069672*size), (-0.6778771877288818*size, 0.7411810755729675*size, -0.10000000894069672*size), (-0.6314389705657959*size, 0.5000001192092896*size, -0.10000000894069672*size), (-0.5394070148468018*size, 0.2928934097290039*size, -0.10000000894069672*size), (-0.38879096508026123*size, 0.13397473096847534*size, -0.10000000894069672*size), (-0.19801555573940277*size, 0.034074246883392334*size, -0.10000000894069672*size), (-3.4034394502668874e-07*size, 0.0*size, -0.10000000894069672*size), (0.19801488518714905*size, 0.03407406806945801*size, -0.10000000894069672*size), (0.3887903690338135*size, 0.1339743733406067*size, -0.10000000894069672*size), (0.5394065976142883*size, 0.29289281368255615*size, -0.10000000894069672*size), (0.6314387321472168*size, 0.4999997019767761*size, -0.10000000894069672*size), (0.6778769493103027*size, 0.7411805391311646*size, -0.10000000894069672*size), (0.6999999284744263*size, 0.9999995231628418*size, -0.10000000894069672*size), (-0.38879096508026123*size, 0.13397473096847534*size, 0.09999999403953552*size), (-0.5394070148468018*size, 0.2928934097290039*size, 0.09999999403953552*size), (-0.6314389705657959*size, 0.5000001192092896*size, 0.09999999403953552*size), (-0.6778771877288818*size, 0.7411810755729675*size, 0.09999999403953552*size), (-0.7000000476837158*size, 1.0000001192092896*size, 0.09999999403953552*size), (0.6778769493103027*size, 0.7411805391311646*size, 0.09999999403953552*size), (0.6999999284744263*size, 0.9999995231628418*size, 0.09999999403953552*size), ]
-        edges = [(25, 24), (24, 0), (0, 1), (1, 2), (2, 3), (3, 4), (7, 6), (8, 7), (9, 8), (10, 9), (11, 10), (12, 11), (13, 12), (14, 13), (15, 14), (16, 15), (17, 16), (18, 17), (4, 5), (5, 19), (19, 20), (20, 21), (21, 22), (22, 23), (18, 25), (6, 23), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
-
-def create_face_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(-0.25*size, -0.25*size, 0.07499998807907104*size), (-0.25*size, 0.25*size, 0.07499998807907104*size), (0.25*size, 0.25*size, 0.07499998807907104*size), (0.25*size, -0.25*size, 0.07499998807907104*size), (-0.25*size, -0.25*size, -0.07499998807907104*size), (-0.25*size, 0.25*size, -0.07499998807907104*size), (0.25*size, 0.25*size, -0.07499998807907104*size), (0.25*size, -0.25*size, -0.07499998807907104*size), ]
-        edges = [(4, 5), (5, 1), (1, 0), (0, 4), (5, 6), (6, 2), (2, 1), (6, 7), (7, 3), (3, 2), (7, 4), (0, 3), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
-
-
-def create_ikarrow_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(0.10000000149011612*size, 0.0*size, -0.30000001192092896*size), (0.10000000149011612*size, 0.699999988079071*size, -0.30000001192092896*size), (-0.10000000149011612*size, 0.0*size, -0.30000001192092896*size), (-0.10000000149011612*size, 0.699999988079071*size, -0.30000001192092896*size), (0.20000000298023224*size, 0.699999988079071*size, -0.30000001192092896*size), (0.0*size, 1.0*size, -0.30000001192092896*size), (-0.20000000298023224*size, 0.699999988079071*size, -0.30000001192092896*size), (0.10000000149011612*size, 0.0*size, 0.30000001192092896*size), (0.10000000149011612*size, 0.699999988079071*size, 0.30000001192092896*size), (-0.10000000149011612*size, 0.0*size, 0.30000001192092896*size), (-0.10000000149011612*size, 0.699999988079071*size, 0.30000001192092896*size), (0.20000000298023224*size, 0.699999988079071*size, 0.30000001192092896*size), (0.0*size, 1.0*size, 0.30000001192092896*size), (-0.20000000298023224*size, 0.699999988079071*size, 0.30000001192092896*size), ]
-        edges = [(0, 1), (2, 3), (1, 4), (4, 5), (3, 6), (5, 6), (0, 2), (7, 8), (9, 10), (8, 11), (11, 12), (10, 13), (12, 13), (7, 9), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
-
-
-def create_hand_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    # Create hand widget
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(0.0*size, 1.5*size, -0.7000000476837158*size), (1.1920928955078125e-07*size, -0.25*size, -0.6999999284744263*size), (0.0*size, -0.25*size, 0.7000000476837158*size), (-1.1920928955078125e-07*size, 1.5*size, 0.6999999284744263*size), (5.960464477539063e-08*size, 0.7229999899864197*size, -0.699999988079071*size), (-5.960464477539063e-08*size, 0.7229999899864197*size, 0.699999988079071*size), (1.1920928955078125e-07*size, -2.9802322387695312e-08*size, -0.699999988079071*size), (0.0*size, 2.9802322387695312e-08*size, 0.699999988079071*size), ]
-        edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7)]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-
-        mod = obj.modifiers.new("subsurf", 'SUBSURF')
-        mod.levels = 2
-        return obj
-    else:
-        return None
-
-def create_foot_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    # Create hand widget
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(-0.6999998688697815*size, -0.5242648720741272*size, 0.0*size), (-0.7000001072883606*size, 1.2257349491119385*size, 0.0*size), (0.6999998688697815*size, 1.2257351875305176*size, 0.0*size), (0.7000001072883606*size, -0.5242648720741272*size, 0.0*size), (-0.6999998688697815*size, 0.2527350187301636*size, 0.0*size), (0.7000001072883606*size, 0.2527352571487427*size, 0.0*size), (-0.7000001072883606*size, 0.975735068321228*size, 0.0*size), (0.6999998688697815*size, 0.9757352471351624*size, 0.0*size), ]
-        edges = [(1, 2), (0, 3), (0, 4), (3, 5), (4, 6), (1, 6), (5, 7), (2, 7), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-
-        mod = obj.modifiers.new("subsurf", 'SUBSURF')
-        mod.levels = 2
-        return obj
-    else:
-        return None
-
-def create_ballsocket_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(-0.050000108778476715*size, 0.779460072517395*size, -0.2224801927804947*size), (0.049999915063381195*size, 0.779460072517395*size, -0.22248023748397827*size), (0.09999985247850418*size, 0.6790841817855835*size, -0.3658318817615509*size), (-2.3089636158601934e-07*size, 0.5930476188659668*size, -0.488704651594162*size), (-0.10000013560056686*size, 0.6790841817855835*size, -0.3658317029476166*size), (0.04999981075525284*size, 0.6790841817855835*size, -0.36583182215690613*size), (-0.050000183284282684*size, 0.6790841817855835*size, -0.3658318519592285*size), (-0.3658319115638733*size, 0.6790841221809387*size, 0.05000019446015358*size), (-0.3658318817615509*size, 0.6790841221809387*size, -0.04999979957938194*size), (-0.36583176255226135*size, 0.6790841221809387*size, 0.10000018030405045*size), (-0.48870471119880676*size, 0.5930476188659668*size, 2.4472291215715813e-07*size), (-0.3658319413661957*size, 0.679084062576294*size, -0.0999998077750206*size), (-0.22248037159442902*size, 0.7794600129127502*size, -0.04999985918402672*size), (-0.22248034179210663*size, 0.7794600129127502*size, 0.05000016465783119*size), (0.3658319115638733*size, 0.6790841221809387*size, -0.05000000819563866*size), (0.3658319115638733*size, 0.6790841221809387*size, 0.05000000074505806*size), (0.36583179235458374*size, 0.6790841221809387*size, -0.09999998658895493*size), (0.4887046813964844*size, 0.5930476188659668*size, -3.8399143420519977e-08*size), (0.3658319413661957*size, 0.679084062576294*size, 0.10000000149011612*size), (0.050000034272670746*size, 0.7794599533081055*size, 0.2224804311990738*size), (-0.04999997466802597*size, 0.7794599533081055*size, 0.2224804311990738*size), (-0.09999992698431015*size, 0.679084062576294*size, 0.36583200097084045*size), (1.267315070663244e-07*size, 0.5930474996566772*size, 0.48870477080345154*size), (0.1000000610947609*size, 0.679084062576294*size, 0.3658318519592285*size), (-0.049999915063381195*size, 0.679084062576294*size, 0.3658319413661957*size), (0.05000007897615433*size, 0.679084062576294*size, 0.36583197116851807*size), (0.22248029708862305*size, 0.7794600129127502*size, 0.05000004544854164*size), (0.22248028218746185*size, 0.7794600129127502*size, -0.04999994859099388*size), (-4.752442350763886e-08*size, 0.8284152746200562*size, -0.1499999612569809*size), (-0.03882290795445442*size, 0.8284152746200562*size, -0.14488883316516876*size), (-0.07500004768371582*size, 0.8284152746200562*size, -0.12990377843379974*size), (-0.10606606304645538*size, 0.8284152746200562*size, -0.10606598109006882*size), (-0.1299038827419281*size, 0.8284152746200562*size, -0.07499996572732925*size), (-0.14488893747329712*size, 0.8284152746200562*size, -0.038822825998067856*size), (-0.15000006556510925*size, 0.8284152746200562*size, 2.4781975582754967e-08*size), (-0.1448889672756195*size, 0.8284152746200562*size, 0.038822878152132034*size), (-0.1299038827419281*size, 0.8284152746200562*size, 0.07500001043081284*size), (-0.10606609284877777*size, 0.8284152746200562*size, 0.1060660257935524*size), (-0.0750000923871994*size, 0.8284152746200562*size, 0.12990383803844452*size), (-0.038822952657938004*size, 0.8284152746200562*size, 0.14488889276981354*size), (-1.0593657862045802e-07*size, 0.8284152746200562*size, 0.15000005066394806*size), (0.03882275149226189*size, 0.8284152746200562*size, 0.14488892257213593*size), (0.07499989867210388*size, 0.8284152746200562*size, 0.1299038976430893*size), (0.10606591403484344*size, 0.8284152746200562*size, 0.10606611520051956*size), (0.12990373373031616*size, 0.8284152746200562*size, 0.0750000849366188*size), (0.14488881826400757*size, 0.8284152746200562*size, 0.038822952657938004*size), (0.1499999463558197*size, 0.8284152746200562*size, 1.0584351883835552e-07*size), (0.14488881826400757*size, 0.8284152746200562*size, -0.03882275149226189*size), (0.12990379333496094*size, 0.8284152746200562*size, -0.07499989122152328*size), (0.10606604814529419*size, 0.8284152746200562*size, -0.10606592148542404*size), (0.07500004768371582*size, 0.8284152746200562*size, -0.12990371882915497*size), (0.03882291540503502*size, 0.8284152746200562*size, -0.14488880336284637*size), ]
-        edges = [(1, 0), (3, 2), (5, 2), (4, 3), (6, 4), (1, 5), (0, 6), (13, 7), (12, 8), (7, 9), (9, 10), (8, 11), (27, 14), (26, 15), (14, 16), (16, 17), (15, 18), (17, 18), (10, 11), (12, 13), (20, 19), (22, 21), (24, 21), (23, 22), (29, 28), (30, 29), (31, 30), (32, 31), (33, 32), (34, 33), (35, 34), (36, 35), (37, 36), (38, 37), (39, 38), (40, 39), (41, 40), (42, 41), (43, 42), (44, 43), (45, 44), (46, 45), (47, 46), (48, 47), (49, 48), (50, 49), (51, 50), (28, 51), (26, 27), (25, 23), (20, 24), (19, 25), ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        return obj
-    else:
-        return None
diff --git a/rigify/legacy/rigs/pitchipoy/tentacle.py b/rigify/legacy/rigs/pitchipoy/tentacle.py
deleted file mode 100644
index 36c7f40a2b8f851407c0cf861a53e031fe3ebcb4..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/pitchipoy/tentacle.py
+++ /dev/null
@@ -1,503 +0,0 @@
-import bpy
-from ...utils    import copy_bone
-from ...utils    import strip_org, make_deformer_name, connected_children_names
-from ...utils    import make_mechanism_name, put_bone, create_sphere_widget
-from ...utils    import create_widget, create_circle_widget
-from ...utils    import MetarigError
-
-from ....utils.mechanism import make_property
-
-script = """
-controls    = [%s]
-master_name = '%s'
-
-if is_selected( controls ):
-    layout.prop( pose_bones[ master_name ], '["%s"]', slider = True )
-    layout.prop( pose_bones[ master_name ], '["%s"]', slider = True )
-"""
-
-class Rig:
-
-    def __init__(self, obj, bone_name, params):
-        self.obj = obj
-        self.org_bones = [bone_name] + connected_children_names(obj, bone_name)
-        self.params = params
-
-        if params.tweak_extra_layers:
-            self.tweak_layers = list( params.tweak_layers )
-        else:
-            self.tweak_layers = None
-
-        if len(self.org_bones) <= 1:
-            raise MetarigError(
-                "RIGIFY ERROR: invalid rig structure" % (strip_org(bone_name))
-            )
-
-
-    def make_mch( self ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        org_bones  = self.org_bones
-        mch_parent = self.obj.data.bones[ org_bones[0] ].parent
-
-        mch_parent_name = mch_parent.name  # Storing the mch parent's name
-
-        if not mch_parent:
-            mch_parent = self.obj.data.edit_bones[ org_bones[0] ]
-            mch_bone = copy_bone(
-                self.obj,
-                mch_parent_name,
-                make_mechanism_name( strip_org( org_bones[0] ) )
-            )
-        else:
-            mch_bone = copy_bone(
-                self.obj,
-                mch_parent_name,
-                make_mechanism_name( strip_org( org_bones[0] ) )
-            )
-
-            put_bone( self.obj, mch_bone, eb[ mch_parent_name ].tail )
-
-        eb[ mch_bone ].length /= 4 # reduce length to fourth of original
-
-        return mch_bone
-
-
-    def make_master( self ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-
-        org_bones = self.org_bones
-
-        master_bone = copy_bone(
-            self.obj,
-            org_bones[0],
-            "master_" + strip_org( org_bones[0] )
-        )
-
-        # Make widgets
-        bpy.ops.object.mode_set(mode ='OBJECT')
-
-        create_square_widget( self.obj, master_bone )
-
-        return master_bone
-
-
-    def make_controls( self ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-
-        org_bones = self.org_bones
-
-        ctrl_chain = []
-        for i in range( len( org_bones ) ):
-            name = org_bones[i]
-
-            ctrl_bone  = copy_bone(
-                self.obj,
-                name,
-                strip_org(name)
-            )
-
-            ctrl_chain.append( ctrl_bone )
-
-        # Make widgets
-        bpy.ops.object.mode_set(mode ='OBJECT')
-
-        for ctrl in ctrl_chain:
-            create_circle_widget(self.obj, ctrl, radius=0.3, head_tail=0.5)
-
-        return ctrl_chain
-
-
-    def make_tweaks( self ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-        org_bones = self.org_bones
-
-        tweak_chain = []
-        for i in range( len( org_bones ) + 1 ):
-            if i == len( org_bones ):
-                # Make final tweak at the tip of the tentacle
-                name = org_bones[i-1]
-            else:
-                name = org_bones[i]
-
-            tweak_bone = copy_bone(
-                self.obj,
-                name,
-                "tweak_" + strip_org(name)
-            )
-
-            tweak_e = eb[ tweak_bone ]
-
-            tweak_e.length /= 2 # Set size to half
-
-            if i == len( org_bones ):
-                # Position final tweak at the tip
-                put_bone( self.obj, tweak_bone, eb[ org_bones[-1]].tail )
-
-            tweak_chain.append( tweak_bone )
-
-        # Make widgets
-        bpy.ops.object.mode_set(mode = 'OBJECT')
-
-        for tweak in tweak_chain:
-            create_sphere_widget( self.obj, tweak )
-
-            tweak_pb = self.obj.pose.bones[ tweak ]
-
-            # Set locks
-            if tweak_chain.index( tweak ) != len( tweak_chain ) - 1:
-                tweak_pb.lock_rotation = (True, False, True)
-                tweak_pb.lock_scale    = (False, True, False)
-            else:
-                tweak_pb.lock_rotation_w = True
-                tweak_pb.lock_rotation   = (True, True, True)
-                tweak_pb.lock_scale      = (True, True, True)
-
-            # Set up tweak bone layers
-            if self.tweak_layers:
-                tweak_pb.bone.layers = self.tweak_layers
-
-        return tweak_chain
-
-
-    def make_deform( self ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-
-        org_bones = self.org_bones
-
-        def_chain = []
-        for i in range( len( org_bones ) ):
-            name = org_bones[i]
-
-            def_bone  = copy_bone(
-                self.obj,
-                name,
-                make_deformer_name(strip_org(name))
-            )
-
-            def_chain.append( def_bone )
-
-        return def_chain
-
-
-    def parent_bones( self, all_bones ):
-        bpy.ops.object.mode_set(mode ='EDIT')
-
-        org_bones = self.org_bones
-        eb        = self.obj.data.edit_bones
-
-        """ for category in all_bones:
-            if isinstance( all_bones[category], list ):
-                for bone in all_bones[category]:
-                    print( "Bone: " + bone )
-                    eb[bone].parent = None
-            else:
-                eb[ all_bones[category] ].parent = None
-        """
-
-        # mch bone remains parentless and will be parented to root by rigify
-
-        # Parent master bone
-        # eb[ all_bones['master'] ].parent = eb[ all_bones['mch'] ]
-
-        # Parent control bones
-        # ctrls_n_parent = [ all_bones['master'] ] + all_bones['control']
-
-        for bone in ctrls_n_parent[1:]:
-            previous_index    = ctrls_n_parent.index( bone ) - 1
-            eb[ bone ].parent = eb[ ctrls_n_parent[previous_index] ]
-
-        # Parent tweak bones
-        tweaks = all_bones['tweak']
-        for tweak in all_bones['tweak']:
-            parent = ''
-            if tweaks.index( tweak ) == len( tweaks ) - 1:
-                parent = all_bones['control'][ -1 ]
-            else:
-                parent = all_bones['control'][ tweaks.index( tweak ) ]
-
-            eb[ tweak ].parent = eb[ parent ]
-
-        # Parent deform bones
-        for bone in all_bones['deform'][1:]:
-            previous_index = all_bones['deform'].index( bone ) - 1
-
-            eb[ bone ].parent = eb[ all_bones['deform'][previous_index] ]
-            eb[ bone ].use_connect = True
-
-        # Parent org bones ( to tweaks by default, or to the controls )
-        for org, tweak in zip( org_bones, all_bones['tweak'] ):
-            eb[ org ].parent = eb[ tweak ]
-
-
-    def make_constraints( self, all_bones ):
-        bpy.ops.object.mode_set(mode ='OBJECT')
-
-        org_bones = self.org_bones
-        pb        = self.obj.pose.bones
-
-        ## MCH bone constraints
-        if pb[ org_bones[0] ].parent:
-            mch_pb = pb[ all_bones['mch'] ]
-
-            con           = mch_pb.constraints.new('COPY_LOCATION')
-            con.target    = self.obj
-            con.subtarget = pb[ org_bones[0] ].parent.name
-            con.head_tail = 1.0
-
-            con           = mch_pb.constraints.new('COPY_ROTATION')
-            con.target    = self.obj
-            con.subtarget = pb[ org_bones[0] ].parent.name
-
-            con           = mch_pb.constraints.new('COPY_SCALE')
-            con.target    = self.obj
-            con.subtarget = pb[ org_bones[0] ].parent.name
-
-            """
-            # Setting the MCH prop
-            master_pb = pb[ all_bones['master'] ]
-            prop_name_r = "rotation_follow"
-            prop_name_s = "scale_follow"
-
-            prop_names = [ prop_name_r, prop_name_s ]
-
-            for prop_name in prop_names:
-                make_property(master_pb, prop_name, 1.0)
-
-                # driving the MCH follow rotation switch
-
-                drv = mch_pb.constraints[
-                    prop_names.index(prop_name) +1
-                ].driver_add("influence").driver
-
-                drv.type='SUM'
-
-                var = drv.variables.new()
-                var.name = prop_name
-                var.type = "SINGLE_PROP"
-                var.targets[0].id = self.obj
-                var.targets[0].data_path = \
-                    master_pb.path_from_id() + '['+ '"' + prop_name + '"' + ']'
-
-                """
-
-        ## Deform bones' constraints
-        ctrls   = all_bones['control']
-        tweaks  = all_bones['tweak'  ]
-        deforms = all_bones['deform' ]
-
-        for deform, tweak, ctrl in zip( deforms, tweaks, ctrls ):
-            con           = pb[deform].constraints.new('COPY_TRANSFORMS')
-            con.target    = self.obj
-            con.subtarget = tweak
-
-            con           = pb[deform].constraints.new('DAMPED_TRACK')
-            con.target    = self.obj
-            con.subtarget = tweaks[ tweaks.index( tweak ) + 1 ]
-
-            con           = pb[deform].constraints.new('STRETCH_TO')
-            con.target    = self.obj
-            con.subtarget = tweaks[ tweaks.index( tweak ) + 1 ]
-
-            ## Control bones' constraints
-            if self.params.make_rotations:
-                if ctrl != ctrls[0]:
-                    con = pb[ctrl].constraints.new('COPY_ROTATION')
-                    con.target       = self.obj
-                    con.subtarget    = ctrls[ ctrls.index(ctrl) - 1 ]
-                    con.mix_mode     = 'OFFSET'
-                    con.target_space = 'LOCAL'
-                    con.owner_space  = 'LOCAL'
-
-
-    def generate(self):
-        bpy.ops.object.mode_set(mode ='EDIT')
-        eb = self.obj.data.edit_bones
-
-        # Clear all initial parenting
-        for bone in self.org_bones:
-        #    eb[ bone ].parent      = None
-            eb[ bone ].use_connect = False
-
-        # Creating all bones
-        mch         = self.make_mch()
-        # master      = self.make_master()
-        ctrl_chain  = self.make_controls()
-        tweak_chain = self.make_tweaks()
-        def_chain   = self.make_deform()
-
-        all_bones = {
-            'mch'     : mch,
-            # 'master'  : master,
-            'control' : ctrl_chain,
-            'tweak'   : tweak_chain,
-            'deform'  : def_chain
-        }
-
-        self.make_constraints( all_bones )
-        self.parent_bones( all_bones )
-
-        """
-        # Create UI
-        all_controls    = all_bones['control'] + all_bones['tweak'] # + [ all_bones['master'] ]
-        controls_string = ", ".join(["'" + x + "'" for x in all_controls])
-        return [script % (
-            controls_string,
-            'rotation_follow',
-            'scale_follow'
-            )]
-        """
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    params.make_rotations = bpy.props.BoolProperty(
-        name        = "Rotations",
-        default     = True,
-        description = "Make bones follow parent rotation"
-    )
-
-    # Setting up extra tweak layers
-    params.tweak_extra_layers = bpy.props.BoolProperty(
-        name        = "tweak_extra_layers",
-        default     = True,
-        description = ""
-        )
-
-    params.tweak_layers = bpy.props.BoolVectorProperty(
-        size        = 32,
-        description = "Layers for the tweak controls to be on",
-        default     = tuple( [ i == 1 for i in range(0, 32) ] )
-        )
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-
-    r = layout.row()
-    r.prop(params, "make_rotations")
-
-    r = layout.row()
-    r.prop(params, "tweak_extra_layers")
-    r.active = params.tweak_extra_layers
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-
-    for i in range( 8 ): # Layers 0-7
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    row = col.row(align=True)
-
-    for i in range( 16, 24 ): # Layers 16-23
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    col = r.column(align=True)
-    row = col.row(align=True)
-
-    for i in range( 8, 16 ): # Layers 8-15
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-    row = col.row(align=True)
-
-    for i in range( 24, 32 ): # Layers 24-31
-        row.prop(params, "tweak_layers", index=i, toggle=True, text="")
-
-
-def create_square_widget(rig, bone_name, size=1.0, bone_transform_name=None):
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [
-            (  0.5 * size, -2.9802322387695312e-08 * size,  0.5 * size ),
-            ( -0.5 * size, -2.9802322387695312e-08 * size,  0.5 * size ),
-            (  0.5 * size,  2.9802322387695312e-08 * size, -0.5 * size ),
-            ( -0.5 * size,  2.9802322387695312e-08 * size, -0.5 * size ),
-        ]
-
-        edges = [(0, 1), (2, 3), (0, 2), (3, 1) ]
-        faces = []
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, faces)
-        mesh.update()
-        mesh.update()
-        return obj
-    else:
-        return None
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-    bones = {}
-
-    bone = arm.edit_bones.new('tentacle')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = 0.0000, 0.0000, 1.0000
-    bone.roll = 0.0000
-    bone.use_connect = False
-
-    bones['tentacle'] = bone.name
-
-    bone = arm.edit_bones.new('tentacle.001')
-    bone.head[:] = 0.0000, 0.0000, 1.0000
-    bone.tail[:] = 0.0000, 0.0000, 2.0000
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['tentacle']]
-
-    bones['tentacle.001'] = bone.name
-
-    bone = arm.edit_bones.new('tentacle.002')
-    bone.head[:] = 0.0000, 0.0000, 2.0000
-    bone.tail[:] = 0.0000, 0.0000, 3.0000
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['tentacle.001']]
-    bones['tentacle.002'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-
-    pbone = obj.pose.bones[bones['tentacle']]
-    pbone.rigify_type = 'tentacle'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-
-    pbone.rotation_mode = 'QUATERNION'
-
-    pbone = obj.pose.bones[bones['tentacle.001']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-
-    pbone.rotation_mode = 'QUATERNION'
-
-    pbone = obj.pose.bones[bones['tentacle.002']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    bpy.ops.object.mode_set(mode='EDIT')
-
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/rigs/spine.py b/rigify/legacy/rigs/spine.py
deleted file mode 100644
index 44b9acc8446f99081c25b99895740b9432e34a7a..0000000000000000000000000000000000000000
--- a/rigify/legacy/rigs/spine.py
+++ /dev/null
@@ -1,552 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-""" TODO:
-    - Add parameters for bone transform alphas.
-    - Add IK spine controls
-"""
-
-from math import floor
-
-import bpy
-from mathutils import Vector
-
-from ..utils import MetarigError
-from ..utils import copy_bone, new_bone, flip_bone, put_bone
-from ..utils import connected_children_names
-from ..utils import strip_org, make_mechanism_name, make_deformer_name
-from ..utils import create_circle_widget, create_cube_widget
-
-from ...utils.mechanism import make_property
-
-script = """
-main = "%s"
-spine = [%s]
-if is_selected([main]+ spine):
-    layout.prop(pose_bones[main], '["pivot_slide"]', text="Pivot Slide (" + main + ")", slider=True)
-
-for name in spine[1:-1]:
-    if is_selected(name):
-        layout.prop(pose_bones[name], '["auto_rotate"]', text="Auto Rotate (" + name + ")", slider=True)
-"""
-
-
-class Rig:
-    """ A "spine" rig.  It turns a chain of bones into a rig with two controls:
-        One for the hips, and one for the rib cage.
-
-    """
-    def __init__(self, obj, bone_name, params):
-        """ Gather and validate data about the rig.
-
-        """
-        self.obj = obj
-        self.org_bones = [bone_name] + connected_children_names(obj, bone_name)
-        self.params = params
-
-        # Collect control bone indices
-        self.control_indices = [0, len(self.org_bones) - 1]
-        temp = self.params.chain_bone_controls.split(",")
-        for i in temp:
-            try:
-                j = int(i) - 1
-            except ValueError:
-                pass
-            else:
-                if (j > 0) and (j < len(self.org_bones)) and (j not in self.control_indices):
-                    self.control_indices += [j]
-        self.control_indices.sort()
-
-        self.pivot_rest = self.params.rest_pivot_slide
-        # Clamp pivot_rest to within the middle bones of the spine
-        self.pivot_rest = max(self.pivot_rest, 1.0 / len(self.org_bones))
-        self.pivot_rest = min(self.pivot_rest, 1.0 - (1.0 / len(self.org_bones)))
-
-        if len(self.org_bones) <= 1:
-            raise MetarigError("RIGIFY ERROR: Bone '%s': input to rig type must be a chain of 2 or more bones" % (strip_org(bone_name)))
-
-    def gen_deform(self):
-        """ Generate the deformation rig.
-
-        """
-        for name in self.org_bones:
-            bpy.ops.object.mode_set(mode='EDIT')
-            eb = self.obj.data.edit_bones
-
-            # Create deform bone
-            bone_e = eb[copy_bone(self.obj, name)]
-
-            # Change its name
-            bone_e.name = make_deformer_name(strip_org(name))
-            bone_name = bone_e.name
-
-            # Leave edit mode
-            bpy.ops.object.mode_set(mode='OBJECT')
-
-            # Get the pose bone
-            bone = self.obj.pose.bones[bone_name]
-
-            # Constrain to the original bone
-            con = bone.constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = name
-
-    def gen_control(self):
-        """ Generate the control rig.
-
-        """
-        bpy.ops.object.mode_set(mode='EDIT')
-        eb = self.obj.data.edit_bones
-        #-------------------------
-        # Get rest slide position
-        a = self.pivot_rest * len(self.org_bones)
-        i = floor(a)
-        a -= i
-        if i == len(self.org_bones):
-            i -= 1
-            a = 1.0
-
-        pivot_rest_pos = eb[self.org_bones[i]].head.copy()
-        pivot_rest_pos += eb[self.org_bones[i]].vector * a
-
-        #----------------------
-        # Create controls
-
-        # Create control bones
-        controls = []
-        for i in self.control_indices:
-            name = copy_bone(self.obj, self.org_bones[i], strip_org(self.org_bones[i]))
-            controls += [name]
-
-        # Create control parents
-        control_parents = []
-        for i in self.control_indices[1:-1]:
-            name = new_bone(self.obj, make_mechanism_name("par_" + strip_org(self.org_bones[i])))
-            control_parents += [name]
-
-        # Create sub-control bones
-        subcontrols = []
-        for i in self.control_indices:
-            name = new_bone(self.obj, make_mechanism_name("sub_" + strip_org(self.org_bones[i])))
-            subcontrols += [name]
-
-        # Create main control bone
-        main_control = new_bone(self.obj, self.params.spine_main_control_name)
-
-        eb = self.obj.data.edit_bones
-
-        # Parent the main control
-        eb[main_control].use_connect = False
-        eb[main_control].parent = eb[self.org_bones[0]].parent
-
-        # Parent the controls and sub-controls
-        for name, subname in zip(controls, subcontrols):
-            eb[name].use_connect = False
-            eb[name].parent = eb[main_control]
-            eb[subname].use_connect = False
-            eb[subname].parent = eb[name]
-
-        # Parent the control parents
-        for name, par_name in zip(controls[1:-1], control_parents):
-            eb[par_name].use_connect = False
-            eb[par_name].parent = eb[main_control]
-            eb[name].parent = eb[par_name]
-
-        # Position the main bone
-        put_bone(self.obj, main_control, pivot_rest_pos)
-        eb[main_control].length = sum([eb[b].length for b in self.org_bones]) / 2
-
-        # Position the controls and sub-controls
-        for name, subname in zip(controls, subcontrols):
-            put_bone(self.obj, name, pivot_rest_pos)
-            put_bone(self.obj, subname, pivot_rest_pos)
-            eb[subname].length = eb[name].length / 3
-
-        # Position the control parents
-        for name, par_name in zip(controls[1:-1], control_parents):
-            put_bone(self.obj, par_name, pivot_rest_pos)
-            eb[par_name].length = eb[name].length / 2
-
-        #-----------------------------------------
-        # Control bone constraints and properties
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        # Lock control locations
-        for name in controls:
-            bone = pb[name]
-            bone.lock_location = True, True, True
-
-        # Main control doesn't use local location
-        pb[main_control].bone.use_local_location = False
-
-        # Intermediate controls follow hips and spine
-        for name, par_name, i in zip(controls[1:-1], control_parents, self.control_indices[1:-1]):
-            bone = pb[par_name]
-
-            # Custom bend_alpha property
-            make_property(pb[name], "bend_alpha", i / (len(self.org_bones) - 1)) # set bend alpha
-
-            # Custom auto_rotate
-            make_property(pb[name], "auto_rotate", 1.0)
-
-            # Constraints
-            con1 = bone.constraints.new('COPY_TRANSFORMS')
-            con1.name = "copy_transforms"
-            con1.target = self.obj
-            con1.subtarget = subcontrols[0]
-
-            con2 = bone.constraints.new('COPY_TRANSFORMS')
-            con2.name = "copy_transforms"
-            con2.target = self.obj
-            con2.subtarget = subcontrols[-1]
-
-            # Drivers
-            fcurve = con1.driver_add("influence")
-            driver = fcurve.driver
-            driver.type = 'AVERAGE'
-            var = driver.variables.new()
-            var.name = "auto"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = pb[name].path_from_id() + '["auto_rotate"]'
-
-            fcurve = con2.driver_add("influence")
-            driver = fcurve.driver
-            driver.type = 'SCRIPTED'
-            driver.expression = "alpha * auto"
-            var = driver.variables.new()
-            var.name = "alpha"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = pb[name].path_from_id() + '["bend_alpha"]'
-            var = driver.variables.new()
-            var.name = "auto"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = pb[name].path_from_id() + '["auto_rotate"]'
-
-        #-------------------------
-        # Create flex spine chain
-        bpy.ops.object.mode_set(mode='EDIT')
-        flex_bones = []
-        flex_subs = []
-        prev_bone = None
-        for b in self.org_bones:
-            # Create bones
-            bone = copy_bone(self.obj, b, make_mechanism_name(strip_org(b) + ".flex"))
-            sub = new_bone(self.obj, make_mechanism_name(strip_org(b) + ".flex_s"))
-            flex_bones += [bone]
-            flex_subs += [sub]
-
-            eb = self.obj.data.edit_bones
-            bone_e = eb[bone]
-            sub_e = eb[sub]
-
-            # Parenting
-            bone_e.use_connect = False
-            sub_e.use_connect = False
-            if prev_bone is None:
-                sub_e.parent = eb[controls[0]]
-            else:
-                sub_e.parent = eb[prev_bone]
-            bone_e.parent = sub_e
-
-            # Position
-            put_bone(self.obj, sub, bone_e.head)
-            sub_e.length = bone_e.length / 4
-            if prev_bone is not None:
-                sub_e.use_connect = True
-
-            prev_bone = bone
-
-        #----------------------------
-        # Create reverse spine chain
-
-        # Create bones/parenting/positioning
-        bpy.ops.object.mode_set(mode='EDIT')
-        rev_bones = []
-        prev_bone = None
-        for b in zip(flex_bones, self.org_bones):
-            # Create bones
-            bone = copy_bone(self.obj, b[1], make_mechanism_name(strip_org(b[1]) + ".reverse"))
-            rev_bones += [bone]
-            eb = self.obj.data.edit_bones
-            bone_e = eb[bone]
-
-            # Parenting
-            bone_e.use_connect = False
-            bone_e.parent = eb[b[0]]
-
-            # Position
-            flip_bone(self.obj, bone)
-            bone_e.tail = Vector(eb[b[0]].head)
-            #bone_e.head = Vector(eb[b[0]].tail)
-            if prev_bone is None:
-                put_bone(self.obj, bone, pivot_rest_pos)
-            else:
-                put_bone(self.obj, bone, eb[prev_bone].tail)
-
-            prev_bone = bone
-
-        # Constraints
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-        prev_bone = None
-        for bone in rev_bones:
-            bone_p = pb[bone]
-
-            con = bone_p.constraints.new('COPY_LOCATION')
-            con.name = "copy_location"
-            con.target = self.obj
-            if prev_bone is None:
-                con.subtarget = main_control
-            else:
-                con.subtarget = prev_bone
-                con.head_tail = 1.0
-            prev_bone = bone
-
-        #----------------------------------------
-        # Constrain original bones to flex spine
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        for obone, fbone in zip(self.org_bones, flex_bones):
-            con = pb[obone].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = fbone
-
-        #---------------------------
-        # Create pivot slide system
-        pb = self.obj.pose.bones
-        bone_p = pb[self.org_bones[0]]
-        main_control_p = pb[main_control]
-
-        # Custom pivot_slide property
-        make_property(
-            main_control_p, "pivot_slide", self.pivot_rest,
-            soft_min = 1.0 / len(self.org_bones),
-            soft_max = 1.0 - (1.0 / len(self.org_bones))
-        )
-
-        # Anchor constraints
-        con = bone_p.constraints.new('COPY_LOCATION')
-        con.name = "copy_location"
-        con.target = self.obj
-        con.subtarget = rev_bones[0]
-
-        # Slide constraints
-        i = 1
-        tot = len(rev_bones)
-        for rb in rev_bones:
-            con = bone_p.constraints.new('COPY_LOCATION')
-            con.name = "slide." + str(i)
-            con.target = self.obj
-            con.subtarget = rb
-            con.head_tail = 1.0
-
-            # Driver
-            fcurve = con.driver_add("influence")
-            driver = fcurve.driver
-            var = driver.variables.new()
-            driver.type = 'AVERAGE'
-            var.name = "slide"
-            var.targets[0].id_type = 'OBJECT'
-            var.targets[0].id = self.obj
-            var.targets[0].data_path = main_control_p.path_from_id() + '["pivot_slide"]'
-            mod = fcurve.modifiers[0]
-            mod.poly_order = 1
-            mod.coefficients[0] = 1 - i
-            mod.coefficients[1] = tot
-
-            i += 1
-
-        #----------------------------------
-        # Constrain flex spine to controls
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        # Constrain the bones that correspond exactly to the controls
-        for i, name in zip(self.control_indices, subcontrols):
-            con = pb[flex_subs[i]].constraints.new('COPY_TRANSFORMS')
-            con.name = "copy_transforms"
-            con.target = self.obj
-            con.subtarget = name
-
-        # Constrain the bones in-between the controls
-        for i, j, name1, name2 in zip(self.control_indices, self.control_indices[1:], subcontrols, subcontrols[1:]):
-            if (i + 1) < j:
-                for n in range(i + 1, j):
-                    bone = pb[flex_subs[n]]
-                    # Custom bend_alpha property
-                    make_property(bone, "bend_alpha", (n - i) / (j - i), overridable=False)  # set bend alpha
-
-                    con = bone.constraints.new('COPY_TRANSFORMS')
-                    con.name = "copy_transforms"
-                    con.target = self.obj
-                    con.subtarget = name1
-
-                    con = bone.constraints.new('COPY_TRANSFORMS')
-                    con.name = "copy_transforms"
-                    con.target = self.obj
-                    con.subtarget = name2
-
-                    # Driver
-                    fcurve = con.driver_add("influence")
-                    driver = fcurve.driver
-                    var = driver.variables.new()
-                    driver.type = 'AVERAGE'
-                    var.name = "alpha"
-                    var.targets[0].id_type = 'OBJECT'
-                    var.targets[0].id = self.obj
-                    var.targets[0].data_path = bone.path_from_id() + '["bend_alpha"]'
-
-        #-------------
-        # Final stuff
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = self.obj.pose.bones
-
-        # Control appearance
-        # Main
-        create_cube_widget(self.obj, main_control)
-
-        # Spines
-        for name, i in zip(controls[1:-1], self.control_indices[1:-1]):
-            pb[name].custom_shape_transform = pb[self.org_bones[i]]
-            # Create control widgets
-            create_circle_widget(self.obj, name, radius=1.0, head_tail=0.5, with_line=True, bone_transform_name=self.org_bones[i])
-
-        # Hips
-        pb[controls[0]].custom_shape_transform = pb[self.org_bones[0]]
-        # Create control widgets
-        create_circle_widget(self.obj, controls[0], radius=1.0, head_tail=0.5, with_line=True, bone_transform_name=self.org_bones[0])
-
-        # Ribs
-        pb[controls[-1]].custom_shape_transform = pb[self.org_bones[-1]]
-        # Create control widgets
-        create_circle_widget(self.obj, controls[-1], radius=1.0, head_tail=0.5, with_line=True, bone_transform_name=self.org_bones[-1])
-
-        # Layers
-        pb[main_control].bone.layers = pb[self.org_bones[0]].bone.layers
-
-        return [main_control] + controls
-
-    def generate(self):
-        """ Generate the rig.
-            Do NOT modify any of the original bones, except for adding constraints.
-            The main armature should be selected and active before this is called.
-
-        """
-        self.gen_deform()
-        controls = self.gen_control()
-
-        controls_string = ", ".join(["'" + x + "'" for x in controls[1:]])
-        return [script % (controls[0], controls_string)]
-
-
-def add_parameters(params):
-    """ Add the parameters of this rig type to the
-        RigifyParameters PropertyGroup
-    """
-    params.spine_main_control_name = bpy.props.StringProperty(name="Main control name", default="torso", description="Name that the main control bone should be given")
-    params.rest_pivot_slide = bpy.props.FloatProperty(name="Rest Pivot Slide", default=0.0, min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, description="The pivot slide value in the rest pose")
-    params.chain_bone_controls = bpy.props.StringProperty(name="Control bone list", default="", description="Define which bones have controls")
-
-
-def parameters_ui(layout, params):
-    """ Create the ui for the rig parameters.
-    """
-    r = layout.row()
-    r.prop(params, "spine_main_control_name")
-
-    r = layout.row()
-    r.prop(params, "rest_pivot_slide", slider=True)
-
-    r = layout.row()
-    r.prop(params, "chain_bone_controls")
-
-
-def create_sample(obj):
-    # generated by rigify.utils.write_metarig
-    bpy.ops.object.mode_set(mode='EDIT')
-    arm = obj.data
-
-    bones = {}
-
-    bone = arm.edit_bones.new('hips')
-    bone.head[:] = 0.0000, 0.0000, 0.0000
-    bone.tail[:] = -0.0000, -0.0590, 0.2804
-    bone.roll = -0.0000
-    bone.use_connect = False
-    bones['hips'] = bone.name
-    bone = arm.edit_bones.new('spine')
-    bone.head[:] = -0.0000, -0.0590, 0.2804
-    bone.tail[:] = 0.0000, 0.0291, 0.5324
-    bone.roll = 0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['hips']]
-    bones['spine'] = bone.name
-    bone = arm.edit_bones.new('ribs')
-    bone.head[:] = 0.0000, 0.0291, 0.5324
-    bone.tail[:] = -0.0000, 0.0000, 1.0000
-    bone.roll = -0.0000
-    bone.use_connect = True
-    bone.parent = arm.edit_bones[bones['spine']]
-    bones['ribs'] = bone.name
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    pbone = obj.pose.bones[bones['hips']]
-    pbone.rigify_type = 'spine'
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['spine']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['ribs']]
-    pbone.rigify_type = ''
-    pbone.lock_location = (False, False, False)
-    pbone.lock_rotation = (False, False, False)
-    pbone.lock_rotation_w = False
-    pbone.lock_scale = (False, False, False)
-    pbone.rotation_mode = 'QUATERNION'
-    pbone = obj.pose.bones[bones['hips']]
-    pbone['rigify_type'] = 'spine'
-    pbone.rigify_parameters.chain_bone_controls = "1, 2, 3"
-
-    bpy.ops.object.mode_set(mode='EDIT')
-    for bone in arm.edit_bones:
-        bone.select = False
-        bone.select_head = False
-        bone.select_tail = False
-    for b in bones:
-        bone = arm.edit_bones[bones[b]]
-        bone.select = True
-        bone.select_head = True
-        bone.select_tail = True
-        arm.edit_bones.active = bone
diff --git a/rigify/legacy/ui.py b/rigify/legacy/ui.py
deleted file mode 100644
index 5bd47b7f80535f144f5813e6f920852539523e0d..0000000000000000000000000000000000000000
--- a/rigify/legacy/ui.py
+++ /dev/null
@@ -1,434 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-from bpy.props import StringProperty
-
-from .utils import get_rig_type, MetarigError
-from .utils import write_metarig, write_widget
-from . import rig_lists
-from . import generate
-
-
-class DATA_PT_rigify_buttons(bpy.types.Panel):
-    bl_label = "Rigify Buttons"
-    bl_space_type = 'PROPERTIES'
-    bl_region_type = 'WINDOW'
-    bl_context = "data"
-    #bl_options = {'DEFAULT_OPEN'}
-
-    @classmethod
-    def poll(cls, context):
-        if not context.armature:
-            return False
-        #obj = context.object
-        #if obj:
-        #    return (obj.mode in {'POSE', 'OBJECT', 'EDIT'})
-        #return False
-        return True
-
-    def draw(self, context):
-        C = context
-        layout = self.layout
-        obj = context.object
-        id_store = C.window_manager
-
-        if obj.mode in {'POSE', 'OBJECT'}:
-            layout.operator("pose.rigify_generate", text="Generate")
-        elif obj.mode == 'EDIT':
-            # Build types list
-            collection_name = str(id_store.rigify_collection).replace(" ", "")
-
-            for i in range(0, len(id_store.rigify_types)):
-                id_store.rigify_types.remove(0)
-
-            for r in rig_lists.rig_list:
-                # collection = r.split('.')[0]  # UNUSED
-                if collection_name == "All":
-                    a = id_store.rigify_types.add()
-                    a.name = r
-                elif r.startswith(collection_name + '.'):
-                    a = id_store.rigify_types.add()
-                    a.name = r
-                elif (collection_name == "None") and ("." not in r):
-                    a = id_store.rigify_types.add()
-                    a.name = r
-
-            ## Rig collection field
-            #row = layout.row()
-            #row.prop(id_store, 'rigify_collection', text="Category")
-
-            # Rig type list
-            row = layout.row()
-            row.template_list("UI_UL_list", "rigify_types", id_store, "rigify_types", id_store, 'rigify_active_type')
-
-            props = layout.operator("armature.metarig_sample_add", text="Add sample")
-            props.metarig_type = id_store.rigify_types[id_store.rigify_active_type].name
-
-
-class DATA_PT_rigify_layer_names(bpy.types.Panel):
-    bl_label = "Rigify Layer Names"
-    bl_space_type = 'PROPERTIES'
-    bl_region_type = 'WINDOW'
-    bl_context = "data"
-    bl_options = {'DEFAULT_CLOSED'}
-
-    @classmethod
-    def poll(cls, context):
-        if not context.armature:
-            return False
-        return True
-
-    def draw(self, context):
-        layout = self.layout
-        obj = context.object
-        arm = obj.data
-
-        # Ensure that the layers exist
-        if 0:
-            for i in range(1 + len(arm.rigify_layers), 29):
-                arm.rigify_layers.add()
-        else:
-            # Can't add while drawing, just use button
-            if len(arm.rigify_layers) < 28:
-                layout.operator("pose.rigify_layer_init")
-                return
-
-        # UI
-        for i, rigify_layer in enumerate(arm.rigify_layers):
-            # note: rigify_layer == arm.rigify_layers[i]
-            if (i % 16) == 0:
-                col = layout.column()
-                if i == 0:
-                    col.label(text="Top Row:")
-                else:
-                    col.label(text="Bottom Row:")
-            if (i % 8) == 0:
-                col = layout.column(align=True)
-            row = col.row()
-            row.prop(arm, "layers", index=i, text="", toggle=True)
-            split = row.split(factor=0.8)
-            split.prop(rigify_layer, "name",  text="Layer %d" % (i + 1))
-            split.prop(rigify_layer, "row",   text="")
-
-            #split.prop(rigify_layer, "column", text="")
-
-
-class BONE_PT_rigify_buttons(bpy.types.Panel):
-    bl_label = "Rigify Type"
-    bl_space_type = 'PROPERTIES'
-    bl_region_type = 'WINDOW'
-    bl_context = "bone"
-    #bl_options = {'DEFAULT_OPEN'}
-
-    @classmethod
-    def poll(cls, context):
-        if not context.armature or not context.active_pose_bone:
-            return False
-        obj = context.object
-        if obj:
-            return obj.mode == 'POSE'
-        return False
-
-    def draw(self, context):
-        C = context
-        id_store = C.window_manager
-        bone = context.active_pose_bone
-        collection_name = str(id_store.rigify_collection).replace(" ", "")
-        rig_name = str(context.active_pose_bone.rigify_type).replace(" ", "")
-
-        layout = self.layout
-
-        # Build types list
-        for i in range(0, len(id_store.rigify_types)):
-            id_store.rigify_types.remove(0)
-
-        for r in rig_lists.rig_list:
-            # collection = r.split('.')[0]  # UNUSED
-            if collection_name == "All":
-                a = id_store.rigify_types.add()
-                a.name = r
-            elif r.startswith(collection_name + '.'):
-                a = id_store.rigify_types.add()
-                a.name = r
-            elif collection_name == "None" and len(r.split('.')) == 1:
-                a = id_store.rigify_types.add()
-                a.name = r
-
-        # Rig type field
-        row = layout.row()
-        row.prop_search(bone, "rigify_type", id_store, "rigify_types", text="Rig type:")
-
-        # Rig type parameters / Rig type non-exist alert
-        if rig_name != "":
-            try:
-                rig = get_rig_type(rig_name)
-                rig.Rig
-            except (ImportError, AttributeError):
-                row = layout.row()
-                box = row.box()
-                box.label(text="ALERT: type \"%s\" does not exist!" % rig_name)
-            else:
-                try:
-                    rig.parameters_ui
-                except AttributeError:
-                    col = layout.column()
-                    col.label(text="No options")
-                else:
-                    col = layout.column()
-                    col.label(text="Options:")
-                    box = layout.box()
-                    rig.parameters_ui(box, bone.rigify_parameters)
-
-
-class VIEW3D_PT_tools_rigify_dev(bpy.types.Panel):
-    bl_label = "Rigify Dev Tools"
-    bl_space_type = 'VIEW_3D'
-    bl_region_type = 'UI'
-    bl_category = 'Rigify'
-
-    @classmethod
-    def poll(cls, context):
-        return context.active_object is not None and context.mode in {'EDIT_ARMATURE','EDIT_MESH'}
-
-    def draw(self, context):
-        obj = context.active_object
-        if obj is not None:
-            if context.mode == 'EDIT_ARMATURE':
-                r = self.layout.row()
-                r.operator("armature.rigify_encode_metarig", text="Encode Metarig to Python")
-                r = self.layout.row()
-                r.operator("armature.rigify_encode_metarig_sample", text="Encode Sample to Python")
-
-            if context.mode == 'EDIT_MESH':
-                r = self.layout.row()
-                r.operator("mesh.rigify_encode_mesh_widget", text="Encode Mesh Widget to Python")
-
-#~ class VIEW3D_MT_armature_metarig_add(bpy.types.Menu):
-    #~ bl_idname = "VIEW3D_MT_armature_metarig_add"
-    #~ bl_label = "Meta-Rig"
-
-    #~ def draw(self, context):
-        #~ import rigify
-
-        #~ layout = self.layout
-        #~ layout.operator_context = 'INVOKE_REGION_WIN'
-
-        #~ for submodule_type in rigify.get_submodule_types():
-            #~ text = bpy.path.display_name(submodule_type)
-            #~ layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type
-
-
-def rigify_report_exception(operator, exception):
-    import traceback
-    import sys
-    import os
-    # find the module name where the error happened
-    # hint, this is the metarig type!
-    exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
-    fn = traceback.extract_tb(exceptionTraceback)[-1][0]
-    fn = os.path.basename(fn)
-    fn = os.path.splitext(fn)[0]
-    message = []
-    if fn.startswith("__"):
-        message.append("Incorrect armature...")
-    else:
-        message.append("Incorrect armature for type '%s'" % fn)
-    message.append(exception.message)
-
-    message.reverse()  # XXX - stupid! menu's are upside down!
-
-    operator.report({'INFO'}, '\n'.join(message))
-
-
-class LayerInit(bpy.types.Operator):
-    """Initialize armature rigify layers"""
-
-    bl_idname = "pose.rigify_layer_init"
-    bl_label = "Add Rigify Layers"
-    bl_options = {'UNDO'}
-
-    def execute(self, context):
-        obj = context.object
-        arm = obj.data
-        for i in range(1 + len(arm.rigify_layers), 29):
-            arm.rigify_layers.add()
-        return {'FINISHED'}
-
-
-class Generate(bpy.types.Operator):
-    """Generates a rig from the active metarig armature"""
-
-    bl_idname = "pose.rigify_generate"
-    bl_label = "Rigify Generate Rig"
-    bl_options = {'UNDO'}
-
-    def execute(self, context):
-        import importlib
-        importlib.reload(generate)
-
-        try:
-            generate.generate_rig(context, context.object)
-        except MetarigError as rig_exception:
-            rigify_report_exception(self, rig_exception)
-
-        return {'FINISHED'}
-
-
-class Sample(bpy.types.Operator):
-    """Create a sample metarig to be modified before generating """ \
-    """the final rig"""
-
-    bl_idname = "armature.metarig_sample_add"
-    bl_label = "Add a sample metarig for a rig type"
-    bl_options = {'UNDO'}
-
-    metarig_type: StringProperty(
-        name="Type",
-        description="Name of the rig type to generate a sample of",
-        maxlen=128,
-    )
-
-    def execute(self, context):
-        if context.mode == 'EDIT_ARMATURE' and self.metarig_type != "":
-            try:
-                rig = get_rig_type(self.metarig_type)
-                create_sample = rig.create_sample
-            except (ImportError, AttributeError):
-                raise Exception("rig type '" + self.metarig_type + "' has no sample.")
-            else:
-                create_sample(context.active_object)
-            finally:
-                bpy.ops.object.mode_set(mode='EDIT')
-
-        return {'FINISHED'}
-
-
-class EncodeMetarig(bpy.types.Operator):
-    """ Creates Python code that will generate the selected metarig.
-    """
-    bl_idname = "armature.rigify_encode_metarig"
-    bl_label = "Rigify Encode Metarig"
-    bl_options = {'UNDO'}
-
-    @classmethod
-    def poll(self, context):
-        return context.mode == 'EDIT_ARMATURE'
-
-    def execute(self, context):
-        name = "metarig.py"
-
-        if name in bpy.data.texts:
-            text_block = bpy.data.texts[name]
-            text_block.clear()
-        else:
-            text_block = bpy.data.texts.new(name)
-
-        text = write_metarig(context.active_object, layers=True, func_name="create")
-        text_block.write(text)
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        return {'FINISHED'}
-
-
-class EncodeMetarigSample(bpy.types.Operator):
-    """ Creates Python code that will generate the selected metarig
-        as a sample.
-    """
-    bl_idname = "armature.rigify_encode_metarig_sample"
-    bl_label = "Rigify Encode Metarig Sample"
-    bl_options = {'UNDO'}
-
-    @classmethod
-    def poll(self, context):
-        return context.mode == 'EDIT_ARMATURE'
-
-    def execute(self, context):
-        name = "metarig_sample.py"
-
-        if name in bpy.data.texts:
-            text_block = bpy.data.texts[name]
-            text_block.clear()
-        else:
-            text_block = bpy.data.texts.new(name)
-
-        text = write_metarig(context.active_object, layers=False, func_name="create_sample")
-        text_block.write(text)
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        return {'FINISHED'}
-
-
-class EncodeWidget(bpy.types.Operator):
-    """ Creates Python code that will generate the selected metarig.
-    """
-    bl_idname = "mesh.rigify_encode_mesh_widget"
-    bl_label = "Rigify Encode Widget"
-    bl_options = {'UNDO'}
-
-    @classmethod
-    def poll(self, context):
-        return context.mode == 'EDIT_MESH'
-
-    def execute(self, context):
-        name = "widget.py"
-
-        if name in bpy.data.texts:
-            text_block = bpy.data.texts[name]
-            text_block.clear()
-        else:
-            text_block = bpy.data.texts.new(name)
-
-        text = write_widget(context.active_object)
-        text_block.write(text)
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        return {'FINISHED'}
-
-
-#menu_func = (lambda self, context: self.layout.menu("VIEW3D_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE'))
-
-#from bl_ui import space_info  # ensure the menu is loaded first
-
-def register():
-    bpy.utils.register_class(DATA_PT_rigify_layer_names)
-    bpy.utils.register_class(DATA_PT_rigify_buttons)
-    bpy.utils.register_class(BONE_PT_rigify_buttons)
-    bpy.utils.register_class(VIEW3D_PT_tools_rigify_dev)
-    bpy.utils.register_class(LayerInit)
-    bpy.utils.register_class(Generate)
-    bpy.utils.register_class(Sample)
-    bpy.utils.register_class(EncodeMetarig)
-    bpy.utils.register_class(EncodeMetarigSample)
-    bpy.utils.register_class(EncodeWidget)
-    #space_info.VIEW3D_MT_armature_add.append(ui.menu_func)
-
-
-def unregister():
-    bpy.utils.unregister_class(DATA_PT_rigify_layer_names)
-    bpy.utils.unregister_class(DATA_PT_rigify_buttons)
-    bpy.utils.unregister_class(BONE_PT_rigify_buttons)
-    bpy.utils.unregister_class(VIEW3D_PT_tools_rigify_dev)
-    bpy.utils.unregister_class(LayerInit)
-    bpy.utils.unregister_class(Generate)
-    bpy.utils.unregister_class(Sample)
-    bpy.utils.unregister_class(EncodeMetarig)
-    bpy.utils.unregister_class(EncodeMetarigSample)
-    bpy.utils.unregister_class(EncodeWidget)
diff --git a/rigify/legacy/utils.py b/rigify/legacy/utils.py
deleted file mode 100644
index cd7d61c39136c808d1b29d5e5fa09bf0fdd7d829..0000000000000000000000000000000000000000
--- a/rigify/legacy/utils.py
+++ /dev/null
@@ -1,977 +0,0 @@
-#====================== BEGIN GPL LICENSE BLOCK ======================
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-#======================= END GPL LICENSE BLOCK ========================
-
-# <pep8 compliant>
-
-import bpy
-import importlib
-import importlib
-import math
-import random
-import time
-from mathutils import Vector, Matrix
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-RIG_DIR = "rigs"  # Name of the directory where rig types are kept
-METARIG_DIR = "metarigs"  # Name of the directory where metarigs are kept
-
-ORG_PREFIX = "ORG-"  # Prefix of original bones.
-MCH_PREFIX = "MCH-"  # Prefix of mechanism bones.
-DEF_PREFIX = "DEF-"  # Prefix of deformation bones.
-WGT_PREFIX = "WGT-"  # Prefix for widget objects
-ROOT_NAME = "root"   # Name of the root bone.
-
-MODULE_NAME = "rigify"  # Windows/Mac blender is weird, so __package__ doesn't work
-
-
-#=======================================================================
-# Error handling
-#=======================================================================
-class MetarigError(Exception):
-    """ Exception raised for errors.
-    """
-    def __init__(self, message):
-        self.message = message
-
-    def __str__(self):
-        return repr(self.message)
-
-
-#=======================================================================
-# Name manipulation
-#=======================================================================
-def org_name(name):
-    """ Returns the name with ORG_PREFIX stripped from it.
-    """
-    if name.startswith(ORG_PREFIX):
-        return name[len(ORG_PREFIX):]
-    else:
-        return name
-
-
-def strip_org(name):
-    """ Returns the name with ORG_PREFIX stripped from it.
-    """
-    if name.startswith(ORG_PREFIX):
-        return name[len(ORG_PREFIX):]
-    else:
-        return name
-org_name = strip_org
-
-
-def org(name):
-    """ Prepends the ORG_PREFIX to a name if it doesn't already have
-        it, and returns it.
-    """
-    if name.startswith(ORG_PREFIX):
-        return name
-    else:
-        return ORG_PREFIX + name
-make_original_name = org
-
-
-def mch(name):
-    """ Prepends the MCH_PREFIX to a name if it doesn't already have
-        it, and returns it.
-    """
-    if name.startswith(MCH_PREFIX):
-        return name
-    else:
-        return MCH_PREFIX + name
-make_mechanism_name = mch
-
-
-def deformer(name):
-    """ Prepends the DEF_PREFIX to a name if it doesn't already have
-        it, and returns it.
-    """
-    if name.startswith(DEF_PREFIX):
-        return name
-    else:
-        return DEF_PREFIX + name
-make_deformer_name = deformer
-
-
-def insert_before_lr(name, text):
-    if name[-1] in ['l', 'L', 'r', 'R'] and name[-2] in ['.', '-', '_']:
-        return name[:-2] + text + name[-2:]
-    else:
-        return name + text
-
-
-#=======================
-# Bone manipulation
-#=======================
-def new_bone(obj, bone_name):
-    """ Adds a new bone to the given armature object.
-        Returns the resulting bone's name.
-    """
-    if obj == bpy.context.active_object and bpy.context.mode == 'EDIT_ARMATURE':
-        edit_bone = obj.data.edit_bones.new(bone_name)
-        name = edit_bone.name
-        edit_bone.head = (0, 0, 0)
-        edit_bone.tail = (0, 1, 0)
-        edit_bone.roll = 0
-        bpy.ops.object.mode_set(mode='OBJECT')
-        bpy.ops.object.mode_set(mode='EDIT')
-        return name
-    else:
-        raise MetarigError("Can't add new bone '%s' outside of edit mode" % bone_name)
-
-def copy_bone_simple(obj, bone_name, assign_name=''):
-    """ Makes a copy of the given bone in the given armature object.
-        but only copies head, tail positions and roll. Does not
-        address parenting either.
-    """
-    #if bone_name not in obj.data.bones:
-    if bone_name not in obj.data.edit_bones:
-        raise MetarigError("copy_bone(): bone '%s' not found, cannot copy it" % bone_name)
-
-    if obj == bpy.context.active_object and bpy.context.mode == 'EDIT_ARMATURE':
-        if assign_name == '':
-            assign_name = bone_name
-        # Copy the edit bone
-        edit_bone_1 = obj.data.edit_bones[bone_name]
-        edit_bone_2 = obj.data.edit_bones.new(assign_name)
-        bone_name_1 = bone_name
-        bone_name_2 = edit_bone_2.name
-
-        # Copy edit bone attributes
-        edit_bone_2.layers = list(edit_bone_1.layers)
-
-        edit_bone_2.head = Vector(edit_bone_1.head)
-        edit_bone_2.tail = Vector(edit_bone_1.tail)
-        edit_bone_2.roll = edit_bone_1.roll
-
-        return bone_name_2
-    else:
-        raise MetarigError("Cannot copy bones outside of edit mode")
-
-def copy_bone(obj, bone_name, assign_name=''):
-    """ Makes a copy of the given bone in the given armature object.
-        Returns the resulting bone's name.
-    """
-    #if bone_name not in obj.data.bones:
-    if bone_name not in obj.data.edit_bones:
-        raise MetarigError("copy_bone(): bone '%s' not found, cannot copy it" % bone_name)
-
-    if obj == bpy.context.active_object and bpy.context.mode == 'EDIT_ARMATURE':
-        if assign_name == '':
-            assign_name = bone_name
-        # Copy the edit bone
-        edit_bone_1 = obj.data.edit_bones[bone_name]
-        edit_bone_2 = obj.data.edit_bones.new(assign_name)
-        bone_name_1 = bone_name
-        bone_name_2 = edit_bone_2.name
-
-        edit_bone_2.parent = edit_bone_1.parent
-        edit_bone_2.use_connect = edit_bone_1.use_connect
-
-        # Copy edit bone attributes
-        edit_bone_2.layers = list(edit_bone_1.layers)
-
-        edit_bone_2.head = Vector(edit_bone_1.head)
-        edit_bone_2.tail = Vector(edit_bone_1.tail)
-        edit_bone_2.roll = edit_bone_1.roll
-
-        edit_bone_2.use_inherit_rotation = edit_bone_1.use_inherit_rotation
-        edit_bone_2.use_local_location = edit_bone_1.use_local_location
-        edit_bone_2.inherit_scale = edit_bone_1.inherit_scale
-
-        edit_bone_2.use_deform = edit_bone_1.use_deform
-        edit_bone_2.bbone_segments = edit_bone_1.bbone_segments
-        edit_bone_2.bbone_easein = edit_bone_1.bbone_easein
-        edit_bone_2.bbone_easeout = edit_bone_1.bbone_easeout
-
-        bpy.ops.object.mode_set(mode='OBJECT')
-
-        # Get the pose bones
-        pose_bone_1 = obj.pose.bones[bone_name_1]
-        pose_bone_2 = obj.pose.bones[bone_name_2]
-
-        # Copy pose bone attributes
-        pose_bone_2.rotation_mode = pose_bone_1.rotation_mode
-        pose_bone_2.rotation_axis_angle = tuple(pose_bone_1.rotation_axis_angle)
-        pose_bone_2.rotation_euler = tuple(pose_bone_1.rotation_euler)
-        pose_bone_2.rotation_quaternion = tuple(pose_bone_1.rotation_quaternion)
-
-        pose_bone_2.lock_location = tuple(pose_bone_1.lock_location)
-        pose_bone_2.lock_scale = tuple(pose_bone_1.lock_scale)
-        pose_bone_2.lock_rotation = tuple(pose_bone_1.lock_rotation)
-        pose_bone_2.lock_rotation_w = pose_bone_1.lock_rotation_w
-        pose_bone_2.lock_rotations_4d = pose_bone_1.lock_rotations_4d
-
-        # Copy custom properties
-        for key in pose_bone_1.keys():
-            if key != "_RNA_UI" \
-            and key != "rigify_parameters" \
-            and key != "rigify_type":
-                prop1 = rna_idprop_ui_prop_get(pose_bone_1, key, create=False)
-                prop2 = rna_idprop_ui_prop_get(pose_bone_2, key, create=True)
-                pose_bone_2[key] = pose_bone_1[key]
-                for key in prop1.keys():
-                    prop2[key] = prop1[key]
-
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        return bone_name_2
-    else:
-        raise MetarigError("Cannot copy bones outside of edit mode")
-
-
-def flip_bone(obj, bone_name):
-    """ Flips an edit bone.
-    """
-    if bone_name not in obj.data.bones:
-        raise MetarigError("flip_bone(): bone '%s' not found, cannot copy it" % bone_name)
-
-    if obj == bpy.context.active_object and bpy.context.mode == 'EDIT_ARMATURE':
-        bone = obj.data.edit_bones[bone_name]
-        head = Vector(bone.head)
-        tail = Vector(bone.tail)
-        bone.tail = head + tail
-        bone.head = tail
-        bone.tail = head
-    else:
-        raise MetarigError("Cannot flip bones outside of edit mode")
-
-
-def put_bone(obj, bone_name, pos):
-    """ Places a bone at the given position.
-    """
-    if bone_name not in obj.data.bones:
-        raise MetarigError("put_bone(): bone '%s' not found, cannot move it" % bone_name)
-
-    if obj == bpy.context.active_object and bpy.context.mode == 'EDIT_ARMATURE':
-        bone = obj.data.edit_bones[bone_name]
-
-        delta = pos - bone.head
-        bone.translate(delta)
-    else:
-        raise MetarigError("Cannot 'put' bones outside of edit mode")
-
-
-def make_nonscaling_child(obj, bone_name, location, child_name_postfix=""):
-    """ Takes the named bone and creates a non-scaling child of it at
-        the given location.  The returned bone (returned by name) is not
-        a true child, but behaves like one sans inheriting scaling.
-
-        It is intended as an intermediate construction to prevent rig types
-        from scaling with their parents.  The named bone is assumed to be
-        an ORG bone.
-    """
-    if bone_name not in obj.data.bones:
-        raise MetarigError("make_nonscaling_child(): bone '%s' not found, cannot copy it" % bone_name)
-
-    if obj == bpy.context.active_object and bpy.context.mode == 'EDIT_ARMATURE':
-        # Create desired names for bones
-        name1 = make_mechanism_name(strip_org(insert_before_lr(bone_name, child_name_postfix + "_ns_ch")))
-        name2 = make_mechanism_name(strip_org(insert_before_lr(bone_name, child_name_postfix + "_ns_intr")))
-
-        # Create bones
-        child = copy_bone(obj, bone_name, name1)
-        intermediate_parent = copy_bone(obj, bone_name, name2)
-
-        # Get edit bones
-        eb = obj.data.edit_bones
-        child_e = eb[child]
-        intrpar_e = eb[intermediate_parent]
-
-        # Parenting
-        child_e.use_connect = False
-        child_e.parent = None
-
-        intrpar_e.use_connect = False
-        intrpar_e.parent = eb[bone_name]
-
-        # Positioning
-        child_e.length *= 0.5
-        intrpar_e.length *= 0.25
-
-        put_bone(obj, child, location)
-        put_bone(obj, intermediate_parent, location)
-
-        # Object mode
-        bpy.ops.object.mode_set(mode='OBJECT')
-        pb = obj.pose.bones
-
-        # Add constraints
-        con = pb[child].constraints.new('COPY_LOCATION')
-        con.name = "parent_loc"
-        con.target = obj
-        con.subtarget = intermediate_parent
-
-        con = pb[child].constraints.new('COPY_ROTATION')
-        con.name = "parent_loc"
-        con.target = obj
-        con.subtarget = intermediate_parent
-
-        bpy.ops.object.mode_set(mode='EDIT')
-
-        return child
-    else:
-        raise MetarigError("Cannot make nonscaling child outside of edit mode")
-
-
-#=============================================
-# Widget creation
-#=============================================
-
-def obj_to_bone(obj, rig, bone_name):
-    """ Places an object at the location/rotation/scale of the given bone.
-    """
-    if bpy.context.mode == 'EDIT_ARMATURE':
-        raise MetarigError("obj_to_bone(): does not work while in edit mode")
-
-    bone = rig.data.bones[bone_name]
-
-    mat = rig.matrix_world @ bone.matrix_local
-
-    obj.location = mat.to_translation()
-
-    obj.rotation_mode = 'XYZ'
-    obj.rotation_euler = mat.to_euler()
-
-    scl = mat.to_scale()
-    scl_avg = (scl[0] + scl[1] + scl[2]) / 3
-    obj.scale = (bone.length * scl_avg), (bone.length * scl_avg), (bone.length * scl_avg)
-
-
-def create_circle_polygon(number_verts, axis, radius=1.0, head_tail=0.0):
-    """ Creates a basic circle around of an axis selected.
-        number_verts: number of vertices of the polygon
-        axis: axis normal to the circle
-        radius: the radius of the circle
-        head_tail: where along the length of the bone the circle is (0.0=head, 1.0=tail)
-    """
-    verts = []
-    edges = []
-    angle = 2 * math.pi / number_verts
-    i = 0
-
-    assert(axis in 'XYZ')
-
-    while i < (number_verts):
-        a = math.cos(i * angle)
-        b = math.sin(i * angle)
-
-        if axis == 'X':
-            verts.append((head_tail, a * radius, b * radius))
-        elif axis == 'Y':
-            verts.append((a * radius, head_tail, b * radius))
-        elif axis == 'Z':
-            verts.append((a * radius, b * radius, head_tail))
-
-        if i < (number_verts - 1):
-            edges.append((i , i + 1))
-
-        i += 1
-
-    edges.append((0, number_verts - 1))
-
-    return verts, edges
-
-
-def create_widget(rig, bone_name, bone_transform_name=None):
-    """ Creates an empty widget object for a bone, and returns the object.
-    """
-    if bone_transform_name is None:
-        bone_transform_name = bone_name
-
-    obj_name = WGT_PREFIX + bone_name
-    scene = bpy.context.scene
-    collection = ensure_widget_collection(bpy.context)
-
-    # Check if it already exists in the scene
-    if obj_name in scene.objects:
-        # Move object to bone position, in case it changed
-        obj = scene.objects[obj_name]
-        obj_to_bone(obj, rig, bone_transform_name)
-
-        return None
-    else:
-        # Delete object if it exists in blend data but not scene data.
-        # This is necessary so we can then create the object without
-        # name conflicts.
-        if obj_name in bpy.data.objects:
-            bpy.data.objects[obj_name].user_clear()
-            bpy.data.objects.remove(bpy.data.objects[obj_name])
-
-        # Create mesh object
-        mesh = bpy.data.meshes.new(obj_name)
-        obj = bpy.data.objects.new(obj_name, mesh)
-        collection.objects.link(obj)
-
-        # Move object to bone position and set layers
-        obj_to_bone(obj, rig, bone_transform_name)
-
-        return obj
-
-
-# Common Widgets
-
-def create_line_widget(rig, bone_name, bone_transform_name=None):
-    """ Creates a basic line widget, a line that spans the length of the bone.
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        mesh = obj.data
-        mesh.from_pydata([(0, 0, 0), (0, 1, 0)], [(0, 1)], [])
-        mesh.update()
-
-
-def create_circle_widget(rig, bone_name, radius=1.0, head_tail=0.0, with_line=False, bone_transform_name=None):
-    """ Creates a basic circle widget, a circle around the y-axis.
-        radius: the radius of the circle
-        head_tail: where along the length of the bone the circle is (0.0=head, 1.0=tail)
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts, edges = create_circle_polygon(32, 'Y', radius, head_tail)
-
-        if with_line:
-            edges.append((8, 24))
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, [])
-        mesh.update()
-        return obj
-    else:
-        return None
-
-
-def create_cube_widget(rig, bone_name, radius=0.5, bone_transform_name=None):
-    """ Creates a basic cube widget.
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        r = radius
-        verts = [(r, r, r), (r, -r, r), (-r, -r, r), (-r, r, r), (r, r, -r), (r, -r, -r), (-r, -r, -r), (-r, r, -r)]
-        edges = [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6), (6, 7), (7, 4), (0, 4), (1, 5), (2, 6), (3, 7)]
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, [])
-        mesh.update()
-
-
-def create_sphere_widget(rig, bone_name, bone_transform_name=None):
-    """ Creates a basic sphere widget, three pependicular overlapping circles.
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts_x, edges_x = create_circle_polygon(16, 'X', 0.5)
-        verts_y, edges_y = create_circle_polygon(16, 'Y', 0.5)
-        verts_z, edges_z = create_circle_polygon(16, 'Z', 0.5)
-
-        verts = verts_x + verts_y + verts_z
-
-        edges = [
-            (0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8),
-            (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (0, 15),
-            (16, 17), (17, 18), (18, 19), (19, 20), (20, 21), (21, 22), (22, 23), (23, 24),
-            (24, 25), (25, 26), (26, 27), (27, 28), (28, 29), (29, 30), (30, 31), (16, 31),
-            (32, 33), (33, 34), (34, 35), (35, 36), (36, 37), (37, 38), (38, 39), (39, 40),
-            (40, 41), (41, 42), (42, 43), (43, 44), (44, 45), (45, 46), (46, 47), (32, 47),
-            ]
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, [])
-        mesh.update()
-
-
-def create_limb_widget(rig, bone_name, bone_transform_name=None):
-    """ Creates a basic limb widget, a line that spans the length of the
-        bone, with a circle around the center.
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts, edges = create_circle_polygon(32, "Y", 0.25, 0.5)
-        verts.append((0, 0, 0))
-        verts.append((0, 1, 0))
-        edges.append((32, 33))
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, [])
-        mesh.update()
-
-
-def create_bone_widget(rig, bone_name, bone_transform_name=None):
-    """ Creates a basic bone widget, a simple obolisk-esk shape.
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(0.04, 1.0, -0.04), (0.1, 0.0, -0.1), (-0.1, 0.0, -0.1), (-0.04, 1.0, -0.04), (0.04, 1.0, 0.04), (0.1, 0.0, 0.1), (-0.1, 0.0, 0.1), (-0.04, 1.0, 0.04)]
-        edges = [(1, 2), (0, 1), (0, 3), (2, 3), (4, 5), (5, 6), (6, 7), (4, 7), (1, 5), (0, 4), (2, 6), (3, 7)]
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, [])
-        mesh.update()
-
-
-def create_compass_widget(rig, bone_name, bone_transform_name=None):
-    """ Creates a compass-shaped widget.
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts, edges = create_circle_polygon(32, "Z", 1.0, 0.0)
-        i = 0
-        for v in verts:
-            if i in {0, 8, 16, 24}:
-                verts[i] = (v[0] * 1.2, v[1] * 1.2, v[2])
-            i += 1
-
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, [])
-        mesh.update()
-
-
-def create_root_widget(rig, bone_name, bone_transform_name=None):
-    """ Creates a widget for the root bone.
-    """
-    obj = create_widget(rig, bone_name, bone_transform_name)
-    if obj is not None:
-        verts = [(0.7071067690849304, 0.7071067690849304, 0.0), (0.7071067690849304, -0.7071067690849304, 0.0), (-0.7071067690849304, 0.7071067690849304, 0.0), (-0.7071067690849304, -0.7071067690849304, 0.0), (0.8314696550369263, 0.5555701851844788, 0.0), (0.8314696550369263, -0.5555701851844788, 0.0), (-0.8314696550369263, 0.5555701851844788, 0.0), (-0.8314696550369263, -0.5555701851844788, 0.0), (0.9238795042037964, 0.3826834261417389, 0.0), (0.9238795042037964, -0.3826834261417389, 0.0), (-0.9238795042037964, 0.3826834261417389, 0.0), (-0.9238795042037964, -0.3826834261417389, 0.0), (0.9807852506637573, 0.19509035348892212, 0.0), (0.9807852506637573, -0.19509035348892212, 0.0), (-0.9807852506637573, 0.19509035348892212, 0.0), (-0.9807852506637573, -0.19509035348892212, 0.0), (0.19509197771549225, 0.9807849526405334, 0.0), (0.19509197771549225, -0.9807849526405334, 0.0), (-0.19509197771549225, 0.9807849526405334, 0.0), (-0.19509197771549225, -0.9807849526405334, 0.0), (0.3826850652694702, 0.9238788485527039, 0.0), (0.3826850652694702, -0.9238788485527039, 0.0), (-0.3826850652694702, 0.9238788485527039, 0.0), (-0.3826850652694702, -0.9238788485527039, 0.0), (0.5555717945098877, 0.8314685821533203, 0.0), (0.5555717945098877, -0.8314685821533203, 0.0), (-0.5555717945098877, 0.8314685821533203, 0.0), (-0.5555717945098877, -0.8314685821533203, 0.0), (0.19509197771549225, 1.2807848453521729, 0.0), (0.19509197771549225, -1.2807848453521729, 0.0), (-0.19509197771549225, 1.2807848453521729, 0.0), (-0.19509197771549225, -1.2807848453521729, 0.0), (1.280785322189331, 0.19509035348892212, 0.0), (1.280785322189331, -0.19509035348892212, 0.0), (-1.280785322189331, 0.19509035348892212, 0.0), (-1.280785322189331, -0.19509035348892212, 0.0), (0.3950919806957245, 1.2807848453521729, 0.0), (0.3950919806957245, -1.2807848453521729, 0.0), (-0.3950919806957245, 1.2807848453521729, 0.0), (-0.3950919806957245, -1.2807848453521729, 0.0), (1.280785322189331, 0.39509034156799316, 0.0), (1.280785322189331, -0.39509034156799316, 0.0), (-1.280785322189331, 0.39509034156799316, 0.0), (-1.280785322189331, -0.39509034156799316, 0.0), (0.0, 1.5807849168777466, 0.0), (0.0, -1.5807849168777466, 0.0), (1.5807852745056152, 0.0, 0.0), (-1.5807852745056152, 0.0, 0.0)]
-        edges = [(0, 4), (1, 5), (2, 6), (3, 7), (4, 8), (5, 9), (6, 10), (7, 11), (8, 12), (9, 13), (10, 14), (11, 15), (16, 20), (17, 21), (18, 22), (19, 23), (20, 24), (21, 25), (22, 26), (23, 27), (0, 24), (1, 25), (2, 26), (3, 27), (16, 28), (17, 29), (18, 30), (19, 31), (12, 32), (13, 33), (14, 34), (15, 35), (28, 36), (29, 37), (30, 38), (31, 39), (32, 40), (33, 41), (34, 42), (35, 43), (36, 44), (37, 45), (38, 44), (39, 45), (40, 46), (41, 46), (42, 47), (43, 47)]
-        mesh = obj.data
-        mesh.from_pydata(verts, edges, [])
-        mesh.update()
-
-
-#=============================================
-# Math
-#=============================================
-
-def angle_on_plane(plane, vec1, vec2):
-    """ Return the angle between two vectors projected onto a plane.
-    """
-    plane.normalize()
-    vec1 = vec1 - (plane * (vec1.dot(plane)))
-    vec2 = vec2 - (plane * (vec2.dot(plane)))
-    vec1.normalize()
-    vec2.normalize()
-
-    # Determine the angle
-    angle = math.acos(max(-1.0, min(1.0, vec1.dot(vec2))))
-
-    if angle < 0.00001:  # close enough to zero that sign doesn't matter
-        return angle
-
-    # Determine the sign of the angle
-    vec3 = vec2.cross(vec1)
-    vec3.normalize()
-    sign = vec3.dot(plane)
-    if sign >= 0:
-        sign = 1
-    else:
-        sign = -1
-
-    return angle * sign
-
-
-def align_bone_roll(obj, bone1, bone2):
-    """ Aligns the roll of two bones.
-    """
-    bone1_e = obj.data.edit_bones[bone1]
-    bone2_e = obj.data.edit_bones[bone2]
-
-    bone1_e.roll = 0.0
-
-    # Get the directions the bones are pointing in, as vectors
-    y1 = bone1_e.y_axis
-    x1 = bone1_e.x_axis
-    y2 = bone2_e.y_axis
-    x2 = bone2_e.x_axis
-
-    # Get the shortest axis to rotate bone1 on to point in the same direction as bone2
-    axis = y1.cross(y2)
-    axis.normalize()
-
-    # Angle to rotate on that shortest axis
-    angle = y1.angle(y2)
-
-    # Create rotation matrix to make bone1 point in the same direction as bone2
-    rot_mat = Matrix.Rotation(angle, 3, axis)
-
-    # Roll factor
-    x3 = rot_mat @ x1
-    dot = x2 @ x3
-    if dot > 1.0:
-        dot = 1.0
-    elif dot < -1.0:
-        dot = -1.0
-    roll = math.acos(dot)
-
-    # Set the roll
-    bone1_e.roll = roll
-
-    # Check if we rolled in the right direction
-    x3 = rot_mat @ bone1_e.x_axis
-    check = x2 @ x3
-
-    # If not, reverse
-    if check < 0.9999:
-        bone1_e.roll = -roll
-
-
-def align_bone_x_axis(obj, bone, vec):
-    """ Rolls the bone to align its x-axis as closely as possible to
-        the given vector.
-        Must be in edit mode.
-    """
-    bone_e = obj.data.edit_bones[bone]
-
-    vec = vec.cross(bone_e.y_axis)
-    vec.normalize()
-
-    dot = max(-1.0, min(1.0, bone_e.z_axis.dot(vec)))
-    angle = math.acos(dot)
-
-    bone_e.roll += angle
-
-    dot1 = bone_e.z_axis.dot(vec)
-
-    bone_e.roll -= angle * 2
-
-    dot2 = bone_e.z_axis.dot(vec)
-
-    if dot1 > dot2:
-        bone_e.roll += angle * 2
-
-
-def align_bone_z_axis(obj, bone, vec):
-    """ Rolls the bone to align its z-axis as closely as possible to
-        the given vector.
-        Must be in edit mode.
-    """
-    bone_e = obj.data.edit_bones[bone]
-
-    vec = bone_e.y_axis.cross(vec)
-    vec.normalize()
-
-    dot = max(-1.0, min(1.0, bone_e.x_axis.dot(vec)))
-    angle = math.acos(dot)
-
-    bone_e.roll += angle
-
-    dot1 = bone_e.x_axis.dot(vec)
-
-    bone_e.roll -= angle * 2
-
-    dot2 = bone_e.x_axis.dot(vec)
-
-    if dot1 > dot2:
-        bone_e.roll += angle * 2
-
-
-#=============================================
-# Misc
-#=============================================
-
-def copy_attributes(a, b):
-    keys = dir(a)
-    for key in keys:
-        if not key.startswith("_") \
-        and not key.startswith("error_") \
-        and key != "group" \
-        and key != "is_valid" \
-        and key != "rna_type" \
-        and key != "bl_rna":
-            try:
-                setattr(b, key, getattr(a, key))
-            except AttributeError:
-                pass
-
-
-def get_rig_type(rig_type):
-    """ Fetches a rig module by name, and returns it.
-    """
-    name = "rigify.legacy.%s.%s" % (RIG_DIR, rig_type)
-    submod = importlib.import_module(name, package=MODULE_NAME)
-    importlib.reload(submod)
-    return submod
-
-
-def get_metarig_module(metarig_name):
-    """ Fetches a rig module by name, and returns it.
-    """
-    name = "rigify.legacy.%s.%s" % (METARIG_DIR, metarig_name)
-    submod = importlib.import_module(name, package=MODULE_NAME)
-    importlib.reload(submod)
-    return submod
-
-
-def connected_children_names(obj, bone_name):
-    """ Returns a list of bone names (in order) of the bones that form a single
-        connected chain starting with the given bone as a parent.
-        If there is a connected branch, the list stops there.
-    """
-    bone = obj.data.bones[bone_name]
-    names = []
-
-    while True:
-        connects = 0
-        con_name = ""
-
-        for child in bone.children:
-            if child.use_connect:
-                connects += 1
-                con_name = child.name
-
-        if connects == 1:
-            names += [con_name]
-            bone = obj.data.bones[con_name]
-        else:
-            break
-
-    return names
-
-
-def has_connected_children(bone):
-    """ Returns true/false whether a bone has connected children or not.
-    """
-    t = False
-    for b in bone.children:
-        t = t or b.use_connect
-    return t
-
-
-def get_layers(layers):
-    """ Does it's best to extract a set of layers from any data thrown at it.
-    """
-    if type(layers) == int:
-        return [x == layers for x in range(0, 32)]
-    elif type(layers) == str:
-        s = layers.split(",")
-        l = []
-        for i in s:
-            try:
-                l += [int(float(i))]
-            except ValueError:
-                pass
-        return [x in l for x in range(0, 32)]
-    elif type(layers) == tuple or type(layers) == list:
-        return [x in layers for x in range(0, 32)]
-    else:
-        try:
-            list(layers)
-        except TypeError:
-            pass
-        else:
-            return [x in layers for x in range(0, 32)]
-
-
-def write_metarig(obj, layers=False, func_name="create"):
-    """
-    Write a metarig as a python script, this rig is to have all info needed for
-    generating the real rig with rigify.
-    """
-    code = []
-
-    code.append("import bpy\n\n")
-
-    code.append("def %s(obj):" % func_name)
-    code.append("    # generated by rigify.utils.write_metarig")
-    bpy.ops.object.mode_set(mode='EDIT')
-    code.append("    bpy.ops.object.mode_set(mode='EDIT')")
-    code.append("    arm = obj.data")
-
-    arm = obj.data
-
-    # Rigify layer layout info
-    if layers and len(arm.rigify_layers) > 0:
-        code.append("\n    for i in range(" + str(len(arm.rigify_layers)) + "):")
-        code.append("        arm.rigify_layers.add()\n")
-
-        for i in range(len(arm.rigify_layers)):
-            name = arm.rigify_layers[i].name
-            row = arm.rigify_layers[i].row
-            code.append('    arm.rigify_layers[' + str(i) + '].name = "' + name + '"')
-            code.append('    arm.rigify_layers[' + str(i) + '].row = ' + str(row))
-
-    # write parents first
-    bones = [(len(bone.parent_recursive), bone.name) for bone in arm.edit_bones]
-    bones.sort(key=lambda item: item[0])
-    bones = [item[1] for item in bones]
-
-    code.append("\n    bones = {}\n")
-
-    for bone_name in bones:
-        bone = arm.edit_bones[bone_name]
-        code.append("    bone = arm.edit_bones.new(%r)" % bone.name)
-        code.append("    bone.head[:] = %.4f, %.4f, %.4f" % bone.head.to_tuple(4))
-        code.append("    bone.tail[:] = %.4f, %.4f, %.4f" % bone.tail.to_tuple(4))
-        code.append("    bone.roll = %.4f" % bone.roll)
-        code.append("    bone.use_connect = %s" % str(bone.use_connect))
-        if bone.parent:
-            code.append("    bone.parent = arm.edit_bones[bones[%r]]" % bone.parent.name)
-        code.append("    bones[%r] = bone.name" % bone.name)
-
-    bpy.ops.object.mode_set(mode='OBJECT')
-    code.append("")
-    code.append("    bpy.ops.object.mode_set(mode='OBJECT')")
-
-    # Rig type and other pose properties
-    for bone_name in bones:
-        pbone = obj.pose.bones[bone_name]
-
-        code.append("    pbone = obj.pose.bones[bones[%r]]" % bone_name)
-        code.append("    pbone.rigify_type = %r" % pbone.rigify_type)
-        code.append("    pbone.lock_location = %s" % str(tuple(pbone.lock_location)))
-        code.append("    pbone.lock_rotation = %s" % str(tuple(pbone.lock_rotation)))
-        code.append("    pbone.lock_rotation_w = %s" % str(pbone.lock_rotation_w))
-        code.append("    pbone.lock_scale = %s" % str(tuple(pbone.lock_scale)))
-        code.append("    pbone.rotation_mode = %r" % pbone.rotation_mode)
-        if layers:
-            code.append("    pbone.bone.layers = %s" % str(list(pbone.bone.layers)))
-        # Rig type parameters
-        for param_name in pbone.rigify_parameters.keys():
-            param = getattr(pbone.rigify_parameters, param_name)
-            if str(type(param)) == "<class 'bpy_prop_array'>":
-                param = list(param)
-            if type(param) == str:
-                param = '"' + param + '"'
-            code.append("    try:")
-            code.append("        pbone.rigify_parameters.%s = %s" % (param_name, str(param)))
-            code.append("    except AttributeError:")
-            code.append("        pass")
-
-    code.append("\n    bpy.ops.object.mode_set(mode='EDIT')")
-    code.append("    for bone in arm.edit_bones:")
-    code.append("        bone.select = False")
-    code.append("        bone.select_head = False")
-    code.append("        bone.select_tail = False")
-
-    code.append("    for b in bones:")
-    code.append("        bone = arm.edit_bones[bones[b]]")
-    code.append("        bone.select = True")
-    code.append("        bone.select_head = True")
-    code.append("        bone.select_tail = True")
-    code.append("        arm.edit_bones.active = bone")
-
-    # Set appropriate layers visible
-    if layers:
-        # Find what layers have bones on them
-        active_layers = []
-        for bone_name in bones:
-            bone = obj.data.bones[bone_name]
-            for i in range(len(bone.layers)):
-                if bone.layers[i]:
-                    if i not in active_layers:
-                        active_layers.append(i)
-        active_layers.sort()
-
-        code.append("\n    arm.layers = [(x in " + str(active_layers) + ") for x in range(" + str(len(arm.layers)) + ")]")
-
-    code.append('\nif __name__ == "__main__":')
-    code.append("    " + func_name + "(bpy.context.active_object)")
-
-    return "\n".join(code)
-
-
-def write_widget(obj):
-    """ Write a mesh object as a python script for widget use.
-    """
-    script = ""
-    script += "def create_thing_widget(rig, bone_name, size=1.0, bone_transform_name=None):\n"
-    script += "    obj = create_widget(rig, bone_name, bone_transform_name)\n"
-    script += "    if obj is not None:\n"
-
-    # Vertices
-    if len(obj.data.vertices) > 0:
-        script += "        verts = ["
-        for v in obj.data.vertices:
-            script += "(" + str(v.co[0]) + "*size, " + str(v.co[1]) + "*size, " + str(v.co[2]) + "*size), "
-        script += "]\n"
-
-    # Edges
-    if len(obj.data.edges) > 0:
-        script += "        edges = ["
-        for e in obj.data.edges:
-            script += "(" + str(e.vertices[0]) + ", " + str(e.vertices[1]) + "), "
-        script += "]\n"
-
-    # Faces
-    if len(obj.data.polygons) > 0:
-        script += "        faces = ["
-        for f in obj.data.polygons:
-            script += "("
-            for v in f.vertices:
-                script += str(v) + ", "
-            script += "), "
-        script += "]\n"
-
-    # Build mesh
-    script += "\n        mesh = obj.data\n"
-    script += "        mesh.from_pydata(verts, edges, faces)\n"
-    script += "        mesh.update()\n"
-    script += "        mesh.update()\n"
-    script += "        return obj\n"
-    script += "    else:\n"
-    script += "        return None\n"
-
-    return script
-
-
-def random_id(length=8):
-    """ Generates a random alphanumeric id string.
-    """
-    tlength = int(length / 2)
-    rlength = int(length / 2) + int(length % 2)
-
-    chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
-    text = ""
-    for i in range(0, rlength):
-        text += random.choice(chars)
-    text += str(hex(int(time.time())))[2:][-tlength:].rjust(tlength, '0')[::-1]
-    return text
-
-
-def find_layer_collection_by_collection(layer_collection, collection):
-    if collection == layer_collection.collection:
-        return layer_collection
-
-    # go recursive
-    for child in layer_collection.children:
-        layer_collection = find_layer_collection_by_collection(child, collection)
-        if layer_collection:
-            return layer_collection
-
-
-def ensure_widget_collection(context):
-    wgts_collection_name = "Widgets"
-
-    view_layer = context.view_layer
-    layer_collection = bpy.context.layer_collection
-    collection = layer_collection.collection
-
-    widget_collection = bpy.data.collections.get(wgts_collection_name)
-    if not widget_collection:
-        # ------------------------------------------
-        # Create the widget collection
-        widget_collection = bpy.data.collections.new(wgts_collection_name)
-        widget_collection.hide_viewport = True
-        widget_collection.hide_render = True
-
-        widget_layer_collection = None
-    else:
-        widget_layer_collection = find_layer_collection_by_collection(view_layer.layer_collection, widget_collection)
-
-    if not widget_layer_collection:
-        # Add the widget collection to the tree
-        collection.children.link(widget_collection)
-        widget_layer_collection = [c for c in layer_collection.children if c.collection == widget_collection][0]
-
-    # Make the widget the active collection for the upcoming added (widget) objects
-    view_layer.active_layer_collection = widget_layer_collection
-    return widget_collection
diff --git a/rigify/ui.py b/rigify/ui.py
index 6a3b81a6d3297beeb541771f72b534bb80938266..02912934f1c656657efc758d61d418f98d05ce8a 100644
--- a/rigify/ui.py
+++ b/rigify/ui.py
@@ -635,7 +635,7 @@ class VIEW3D_PT_tools_rigify_dev(bpy.types.Panel):
     bl_label = "Rigify Dev Tools"
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'UI'
-    bl_category = 'Rigify'
+    bl_category = "Rigify"
 
     @classmethod
     def poll(cls, context):
@@ -664,7 +664,7 @@ class VIEW3D_PT_rigify_animation_tools(bpy.types.Panel):
     bl_context = "posemode"
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'UI'
-    bl_category = 'Rigify'
+    bl_category = "Rigify"
 
     @classmethod
     def poll(cls, context):
@@ -810,24 +810,6 @@ class UpgradeMetarigTypes(bpy.types.Operator):
             if type(obj.data) == bpy.types.Armature:
                 upgradeMetarigTypes(obj)
         return {'FINISHED'}
-
-
-class SwitchToLegacy(bpy.types.Operator):
-    """Switch to Legacy mode"""
-
-    bl_idname = "pose.rigify_switch_to_legacy"
-    bl_label = "Legacy Mode will disable Rigify new features"
-    bl_description = 'Switches Rigify to Legacy Mode'
-    bl_options = {'UNDO', 'INTERNAL'}
-
-    def invoke(self, context, event):
-        return context.window_manager.invoke_confirm(self, event)
-
-    def execute(self, context):
-        bpy.context.preferences.addons['rigify'].preferences.legacy_mode = True
-        return {'FINISHED'}
-
-
 class Sample(bpy.types.Operator):
     """Create a sample metarig to be modified before generating the final rig"""
 
@@ -1394,7 +1376,6 @@ classes = (
     LayerInit,
     Generate,
     UpgradeMetarigTypes,
-    SwitchToLegacy,
     Sample,
     VIEW3D_MT_rigify,
     EncodeMetarig,