608060405234801561000f575f80fd5b506040518060400160405280601481526020017f41756374696f6e2043727970746f47656e6975730000000000000000000000008152506040518060400160405280600381526020017f4155430000000000000000000000000000000000000000000000000000000000815250815f908161008a919061031c565b50806001908161009a919061031c565b5050503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103eb565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061015d57607f821691505b6020821081036101705761016f610119565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610197565b6101dc8683610197565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61022061021b610216846101f4565b6101fd565b6101f4565b9050919050565b5f819050919050565b61023983610206565b61024d61024582610227565b8484546101a3565b825550505050565b5f90565b610261610255565b61026c818484610230565b505050565b5b8181101561028f576102845f82610259565b600181019050610272565b5050565b601f8211156102d4576102a581610176565b6102ae84610188565b810160208510156102bd578190505b6102d16102c985610188565b830182610271565b50505b505050565b5f82821c905092915050565b5f6102f45f19846008026102d9565b1980831691505092915050565b5f61030c83836102e5565b9150826002028217905092915050565b610325826100e2565b67ffffffffffffffff81111561033e5761033d6100ec565b5b6103488254610146565b610353828285610293565b5f60209050601f831160018114610384575f8415610372578287015190505b61037c8582610301565b8655506103e3565b601f19841661039286610176565b5f5b828110156103b957848901518255600182019150602085019450602081019050610394565b868310156103d657848901516103d2601f8916826102e5565b8355505b6001600288020188555050505b505050505050565b614a75806103f85f395ff3fe6080604052600436106101c1575f3560e01c806361e2db55116100f6578063b88d4fde11610094578063c87b56dd11610063578063c87b56dd1461062a578063cbd2bdfd14610666578063d63d4af014610690578063e985e9c5146106cc576101c1565b8063b88d4fde14610594578063b9a2de3a146105bc578063c2db2c42146105e4578063c4e41b2214610600576101c1565b80638da5cb5b116100d05780638da5cb5b146104ee57806395d89b4114610518578063a22cb46514610542578063ae1911fc1461056a576101c1565b806361e2db551461044e5780636352211e1461047657806370a08231146104b2576101c1565b80633ccfd60b1161016357806342842e0e1161013d57806342842e0e1461039e578063454a2ab3146103c6578063571a26a0146103e25780635b06053014610426576101c1565b80633ccfd60b1461030b5780633f8994391461032157806341abf5711461035d576101c1565b8063095ea7b31161019f578063095ea7b31461026757806318160ddd1461028f57806323b872dd146102b95780632a5c792a146102e1576101c1565b806301ffc9a7146101c557806306fdde0314610201578063081812fc1461022b575b5f80fd5b3480156101d0575f80fd5b506101eb60048036038101906101e69190613669565b610708565b6040516101f891906136ae565b60405180910390f35b34801561020c575f80fd5b50610215610768565b6040516102229190613737565b60405180910390f35b348015610236575f80fd5b50610251600480360381019061024c919061378a565b6107f7565b60405161025e91906137f4565b60405180910390f35b348015610272575f80fd5b5061028d60048036038101906102889190613837565b610812565b005b34801561029a575f80fd5b506102a3610828565b6040516102b09190613884565b60405180910390f35b3480156102c4575f80fd5b506102df60048036038101906102da919061389d565b61082e565b005b3480156102ec575f80fd5b506102f561092d565b6040516103029190613a9b565b60405180910390f35b348015610316575f80fd5b5061031f610b62565b005b34801561032c575f80fd5b5061034760048036038101906103429190613abb565b610c23565b6040516103549190613c79565b60405180910390f35b348015610368575f80fd5b50610383600480360381019061037e919061378a565b610f80565b60405161039596959493929190613c99565b60405180910390f35b3480156103a9575f80fd5b506103c460048036038101906103bf919061389d565b6110d0565b005b6103e060048036038101906103db919061378a565b6110ef565b005b3480156103ed575f80fd5b506104086004803603810190610403919061378a565b6112f4565b60405161041d99989796959493929190613d06565b60405180910390f35b348015610431575f80fd5b5061044c60048036038101906104479190613ecb565b611494565b005b348015610459575f80fd5b50610474600480360381019061046f9190613f53565b6115a8565b005b348015610481575f80fd5b5061049c6004803603810190610497919061378a565b6117de565b6040516104a991906137f4565b60405180910390f35b3480156104bd575f80fd5b506104d860048036038101906104d39190613abb565b6117ef565b6040516104e59190613884565b60405180910390f35b3480156104f9575f80fd5b506105026118a5565b60405161050f91906137f4565b60405180910390f35b348015610523575f80fd5b5061052c6118ca565b6040516105399190613737565b60405180910390f35b34801561054d575f80fd5b5061056860048036038101906105639190614019565b61195a565b005b348015610575575f80fd5b5061057e611970565b60405161058b9190613884565b60405180910390f35b34801561059f575f80fd5b506105ba60048036038101906105b591906140f5565b611975565b005b3480156105c7575f80fd5b506105e260048036038101906105dd919061378a565b611992565b005b6105fe60048036038101906105f9919061378a565b611c3f565b005b34801561060b575f80fd5b50610614611daf565b6040516106219190613884565b60405180910390f35b348015610635575f80fd5b50610650600480360381019061064b919061378a565b611dc5565b60405161065d9190613737565b60405180910390f35b348015610671575f80fd5b5061067a611ed0565b6040516106879190613c79565b60405180910390f35b34801561069b575f80fd5b506106b660048036038101906106b19190613abb565b6121ba565b6040516106c39190613a9b565b60405180910390f35b3480156106d7575f80fd5b506106f260048036038101906106ed9190614175565b612462565b6040516106ff91906136ae565b60405180910390f35b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107615750610760826124f0565b5b9050919050565b60605f8054610776906141e0565b80601f01602080910402602001604051908101604052809291908181526020018280546107a2906141e0565b80156107ed5780601f106107c4576101008083540402835291602001916107ed565b820191905f5260205f20905b8154815290600101906020018083116107d057829003601f168201915b5050505050905090565b5f610801826125d1565b5061080b82612657565b9050919050565b610824828261081f612690565b612697565b5050565b60085481565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361089e575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161089591906137f4565b60405180910390fd5b5f6108b183836108ac612690565b6126a9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610927578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161091e93929190614210565b60405180910390fd5b50505050565b60605f60095467ffffffffffffffff81111561094c5761094b613da7565b5b60405190808252806020026020018201604052801561098557816020015b61097261355c565b81526020019060019003908161096a5790505b5090505f6009541115610b5b575f5b60016009546109a39190614272565b8161ffff1611610b5957600c5f8261ffff1681526020019081526020015f206040518060c00160405290815f82015481526020016001820180546109e6906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a12906141e0565b8015610a5d5780601f10610a3457610100808354040283529160200191610a5d565b820191905f5260205f20905b815481529060010190602001808311610a4057829003601f168201915b5050505050815260200160028201548152602001600382018054610a80906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac906141e0565b8015610af75780601f10610ace57610100808354040283529160200191610af7565b820191905f5260205f20905b815481529060010190602001808311610ada57829003601f168201915b50505050508152602001600482015f9054906101000a900460ff16151515158152602001600582015481525050828261ffff1681518110610b3b57610b3a6142a5565b5b60200260200101819052508080610b51906142df565b915050610994565b505b8091505090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610bc6573d5f803e3d5ffd5b507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1647604051610c19929190614308565b60405180910390a1565b60605f610c2f836117ef565b90505f8167ffffffffffffffff811115610c4c57610c4b613da7565b5b604051908082528060200260200182016040528015610c8557816020015b610c72613590565b815260200190600190039081610c6a5790505b5090505f821115610f76575f805b6001600a54610ca29190614272565b8161ffff1611610f73575f610ccd600b5f8461ffff1681526020019081526020015f205f01546117de565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f5f57600b5f8361ffff1681526020019081526020015f20604051806101200160405290815f8201548152602001600182018054610d3c906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610d68906141e0565b8015610db35780601f10610d8a57610100808354040283529160200191610db3565b820191905f5260205f20905b815481529060010190602001808311610d9657829003601f168201915b50505050508152602001600282018054610dcc906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610df8906141e0565b8015610e435780601f10610e1a57610100808354040283529160200191610e43565b820191905f5260205f20905b815481529060010190602001808311610e2657829003601f168201915b50505050508152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015f9054906101000a900460ff161515151581525050848461ffff1681518110610f4557610f446142a5565b5b60200260200101819052508280610f5b906142df565b9350505b508080610f6b906142df565b915050610c93565b50505b8092505050919050565b600c602052805f5260405f205f91509050805f015490806001018054610fa5906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd1906141e0565b801561101c5780601f10610ff35761010080835404028352916020019161101c565b820191905f5260205f20905b815481529060010190602001808311610fff57829003601f168201915b505050505090806002015490806003018054611037906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611063906141e0565b80156110ae5780601f10611085576101008083540402835291602001916110ae565b820191905f5260205f20905b81548152906001019060200180831161109157829003601f168201915b505050505090806004015f9054906101000a900460ff16908060050154905086565b6110ea83838360405180602001604052805f815250611975565b505050565b600b5f8281526020019081526020015f20600501543411611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9061439f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f8381526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123757600b5f8281526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600b5f8481526020019081526020015f206005015490811502906040515f60405180830381858888f19350505050158015611235573d5f803e3d5ffd5b505b34600b5f8381526020019081526020015f206005018190555033600b5f8381526020019081526020015f206006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16817f558a0d5d5468d74b0db24c74eb348b42271c2ebb4c9e953ced38aaed95fa4361346040516112e99190613884565b60405180910390a350565b600b602052805f5260405f205f91509050805f015490806001018054611319906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611345906141e0565b80156113905780601f1061136757610100808354040283529160200191611390565b820191905f5260205f20905b81548152906001019060200180831161137357829003601f168201915b5050505050908060020180546113a5906141e0565b80601f01602080910402602001604051908101604052809291908181526020018280546113d1906141e0565b801561141c5780601f106113f35761010080835404028352916020019161141c565b820191905f5260205f20905b8154815290600101906020018083116113ff57829003601f168201915b505050505090806003015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806004015490806005015490806006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007015490806008015f9054906101000a900460ff16905089565b5f60095490505f8490506040518060c001604052808381526020018581526020018481526020018281526020016001151581526020015f815250600c5f8481526020019081526020015f205f820151815f015560208201518160010190816114fc919061455a565b5060408201518160020155606082015181600301908161151c919061455a565b506080820151816004015f6101000a81548160ff02191690831515021790555060a0820151816005015590505061155333836128b4565b61155d82826129a7565b60095f81548092919061156f90614629565b9190505550817f0b0e1efe43e1d56f854d6465fc899ed56ba06463eebf7e2ba402df15e6ee7e7e60405160405180910390a25050505050565b5f600a5490505f8590506040518061012001604052808381526020018681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018581526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020016116278542612a0190919063ffffffff16565b81526020015f1515815250600b5f8481526020019081526020015f205f820151815f01556020820151816001019081611660919061455a565b506040820151816002019081611676919061455a565b506060820151816003015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a0820151816005015560c0820151816006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070155610100820151816008015f6101000a81548160ff02191690831515021790555090505061174e33836128b4565b61175882826129a7565b600a5f81548092919061176a90614629565b91905055503373ffffffffffffffffffffffffffffffffffffffff16827f180b43a9f50a1f2dc5fa0d10afda303d033bc082b2dabad3465ad821abf5fab48787600b5f8881526020019081526020015f20600701546040516117ce93929190614670565b60405180910390a3505050505050565b5f6117e8826125d1565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611860575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161185791906137f4565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600180546118d9906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611905906141e0565b80156119505780601f1061192757610100808354040283529160200191611950565b820191905f5260205f20905b81548152906001019060200180831161193357829003601f168201915b5050505050905090565b61196c611965612690565b8383612a5e565b5050565b600581565b61198084848461082e565b61198c84848484612bc7565b50505050565b600b5f8281526020019081526020015f206008015f9054906101000a900460ff16156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea906146f6565b60405180910390fd5b6001600b5f8381526020019081526020015f206008015f6101000a81548160ff0219169083151502179055505f60646005600b5f8581526020019081526020015f2060050154611a439190614714565b611a4d9190614782565b90505f81600b5f8581526020019081526020015f2060050154611a709190614272565b90505f73ffffffffffffffffffffffffffffffffffffffff16600b5f8581526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bea57600b5f8481526020019081526020015f206003015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611b4e573d5f803e3d5ffd5b50600b5f8481526020019081526020015f206006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16837fd2aa34a4fdbbc6dff6a3e56f46e0f3ae2a31d7785ff3487aa5c95c642acea501600b5f8781526020019081526020015f2060050154604051611bdd9190613884565b60405180910390a3611c3a565b5f73ffffffffffffffffffffffffffffffffffffffff16837fd2aa34a4fdbbc6dff6a3e56f46e0f3ae2a31d7785ff3487aa5c95c642acea5015f604051611c3191906147eb565b60405180910390a35b505050565b600c5f8281526020019081526020015f206004015f9054906101000a900460ff16611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c969061484e565b60405180910390fd5b5f6064600534611caf9190614714565b611cb99190614782565b90505f8134611cc89190614272565b9050611cd3836117de565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d15573d5f803e3d5ffd5b50611d29611d22846117de565b3385612d79565b42600c5f8581526020019081526020015f206005018190555034600c5f8581526020019081526020015f2060020181905550823373ffffffffffffffffffffffffffffffffffffffff167f3ceffd410054fdaed44f598ff5c1fb450658778e2241892da4aa646979dee61734604051611da29190613884565b60405180910390a3505050565b5f600a54600954611dc0919061486c565b905090565b6060611dd0826125d1565b505f60065f8481526020019081526020015f208054611dee906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1a906141e0565b8015611e655780601f10611e3c57610100808354040283529160200191611e65565b820191905f5260205f20905b815481529060010190602001808311611e4857829003601f168201915b505050505090505f611e75612ee1565b90505f815103611e89578192505050611ecb565b5f82511115611ebd578082604051602001611ea59291906148d9565b60405160208183030381529060405292505050611ecb565b611ec684612ef7565b925050505b919050565b60605f600a5467ffffffffffffffff811115611eef57611eee613da7565b5b604051908082528060200260200182016040528015611f2857816020015b611f15613590565b815260200190600190039081611f0d5790505b5090505f600a5411156121b3575f5b6001600a54611f469190614272565b8161ffff16116121b157600b5f8261ffff1681526020019081526020015f20604051806101200160405290815f8201548152602001600182018054611f8a906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb6906141e0565b80156120015780601f10611fd857610100808354040283529160200191612001565b820191905f5260205f20905b815481529060010190602001808311611fe457829003601f168201915b5050505050815260200160028201805461201a906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612046906141e0565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b50505050508152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015f9054906101000a900460ff161515151581525050828261ffff1681518110612193576121926142a5565b5b602002602001018190525080806121a9906142df565b915050611f37565b505b8091505090565b60605f6121c6836117ef565b90505f8167ffffffffffffffff8111156121e3576121e2613da7565b5b60405190808252806020026020018201604052801561221c57816020015b61220961355c565b8152602001906001900390816122015790505b5090505f821115612458575f805b60016009546122399190614272565b8161ffff1611612455575f612264600c5f8461ffff1681526020019081526020015f205f01546117de565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361244157600c5f8361ffff1681526020019081526020015f206040518060c00160405290815f82015481526020016001820180546122d2906141e0565b80601f01602080910402602001604051908101604052809291908181526020018280546122fe906141e0565b80156123495780601f1061232057610100808354040283529160200191612349565b820191905f5260205f20905b81548152906001019060200180831161232c57829003601f168201915b505050505081526020016002820154815260200160038201805461236c906141e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612398906141e0565b80156123e35780601f106123ba576101008083540402835291602001916123e3565b820191905f5260205f20905b8154815290600101906020018083116123c657829003601f168201915b50505050508152602001600482015f9054906101000a900460ff16151515158152602001600582015481525050848461ffff1681518110612427576124266142a5565b5b6020026020010181905250828061243d906142df565b9350505b50808061244d906142df565b91505061222a565b50505b8092505050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806125ca57506125c982612f5d565b5b9050919050565b5f806125dc83612fc6565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361264e57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016126459190613884565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6126a48383836001612fff565b505050565b5f806126b484612fc6565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126f5576126f48184866131be565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612780576127345f855f80612fff565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146127ff57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612924575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161291b91906137f4565b60405180910390fd5b5f61293083835f6126a9565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146129a2575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161299991906137f4565b60405180910390fd5b505050565b8060065f8481526020019081526020015f2090816129c5919061455a565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516129f59190613884565b60405180910390a15050565b5f808284612a0f919061486c565b905083811015612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614946565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ace57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401612ac591906137f4565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bba91906136ae565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115612d73578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c0a612690565b8685856040518563ffffffff1660e01b8152600401612c2c94939291906149b6565b6020604051808303815f875af1925050508015612c6757506040513d601f19601f82011682018060405250810190612c649190614a14565b60015b612ce8573d805f8114612c95576040519150601f19603f3d011682016040523d82523d5f602084013e612c9a565b606091505b505f815103612ce057836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612cd791906137f4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d7157836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612d6891906137f4565b60405180910390fd5b505b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612de9575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612de091906137f4565b60405180910390fd5b5f612df583835f6126a9565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e6757816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612e5e9190613884565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612edb578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401612ed293929190614210565b60405180910390fd5b50505050565b606060405180602001604052805f815250905090565b6060612f02826125d1565b505f612f0c612ee1565b90505f815111612f2a5760405180602001604052805f815250612f55565b80612f3484613281565b604051602001612f459291906148d9565b6040516020818303038152906040525b915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061303757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613169575f613046846125d1565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130b057508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156130c357506130c18184612462565b155b1561310557826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016130fc91906137f4565b60405180910390fd5b811561316757838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6131c983838361334b565b61327c575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361323d57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016132349190613884565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401613273929190614308565b60405180910390fd5b505050565b60605f600161328f8461340b565b0190505f8167ffffffffffffffff8111156132ad576132ac613da7565b5b6040519080825280601f01601f1916602001820160405280156132df5781602001600182028036833780820191505090505b5090505f82602001820190505b600115613340578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161333557613334614755565b5b0494505f85036132ec575b819350505050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561340257508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133c357506133c28484612462565b5b8061340157508273ffffffffffffffffffffffffffffffffffffffff166133e983612657565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613467577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161345d5761345c614755565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106134a4576d04ee2d6d415b85acef8100000000838161349a57613499614755565b5b0492506020810190505b662386f26fc1000083106134d357662386f26fc1000083816134c9576134c8614755565b5b0492506010810190505b6305f5e10083106134fc576305f5e10083816134f2576134f1614755565b5b0492506008810190505b612710831061352157612710838161351757613516614755565b5b0492506004810190505b60648310613544576064838161353a57613539614755565b5b0492506002810190505b600a8310613553576001810190505b80915050919050565b6040518060c001604052805f8152602001606081526020015f8152602001606081526020015f151581526020015f81525090565b6040518061012001604052805f815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f151581525090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61364881613614565b8114613652575f80fd5b50565b5f813590506136638161363f565b92915050565b5f6020828403121561367e5761367d61360c565b5b5f61368b84828501613655565b91505092915050565b5f8115159050919050565b6136a881613694565b82525050565b5f6020820190506136c15f83018461369f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613709826136c7565b61371381856136d1565b93506137238185602086016136e1565b61372c816136ef565b840191505092915050565b5f6020820190508181035f83015261374f81846136ff565b905092915050565b5f819050919050565b61376981613757565b8114613773575f80fd5b50565b5f8135905061378481613760565b92915050565b5f6020828403121561379f5761379e61360c565b5b5f6137ac84828501613776565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137de826137b5565b9050919050565b6137ee816137d4565b82525050565b5f6020820190506138075f8301846137e5565b92915050565b613816816137d4565b8114613820575f80fd5b50565b5f813590506138318161380d565b92915050565b5f806040838503121561384d5761384c61360c565b5b5f61385a85828601613823565b925050602061386b85828601613776565b9150509250929050565b61387e81613757565b82525050565b5f6020820190506138975f830184613875565b92915050565b5f805f606084860312156138b4576138b361360c565b5b5f6138c186828701613823565b93505060206138d286828701613823565b92505060406138e386828701613776565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61391f81613757565b82525050565b5f82825260208201905092915050565b5f61393f826136c7565b6139498185613925565b93506139598185602086016136e1565b613962816136ef565b840191505092915050565b61397681613694565b82525050565b5f60c083015f8301516139915f860182613916565b50602083015184820360208601526139a98282613935565b91505060408301516139be6040860182613916565b50606083015184820360608601526139d68282613935565b91505060808301516139eb608086018261396d565b5060a08301516139fe60a0860182613916565b508091505092915050565b5f613a14838361397c565b905092915050565b5f602082019050919050565b5f613a32826138ed565b613a3c81856138f7565b935083602082028501613a4e85613907565b805f5b85811015613a895784840389528151613a6a8582613a09565b9450613a7583613a1c565b925060208a01995050600181019050613a51565b50829750879550505050505092915050565b5f6020820190508181035f830152613ab38184613a28565b905092915050565b5f60208284031215613ad057613acf61360c565b5b5f613add84828501613823565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b18816137d4565b82525050565b5f61012083015f830151613b345f860182613916565b5060208301518482036020860152613b4c8282613935565b91505060408301518482036040860152613b668282613935565b9150506060830151613b7b6060860182613b0f565b506080830151613b8e6080860182613916565b5060a0830151613ba160a0860182613916565b5060c0830151613bb460c0860182613b0f565b5060e0830151613bc760e0860182613916565b50610100830151613bdc61010086018261396d565b508091505092915050565b5f613bf28383613b1e565b905092915050565b5f602082019050919050565b5f613c1082613ae6565b613c1a8185613af0565b935083602082028501613c2c85613b00565b805f5b85811015613c675784840389528151613c488582613be7565b9450613c5383613bfa565b925060208a01995050600181019050613c2f565b50829750879550505050505092915050565b5f6020820190508181035f830152613c918184613c06565b905092915050565b5f60c082019050613cac5f830189613875565b8181036020830152613cbe81886136ff565b9050613ccd6040830187613875565b8181036060830152613cdf81866136ff565b9050613cee608083018561369f565b613cfb60a0830184613875565b979650505050505050565b5f61012082019050613d1a5f83018c613875565b8181036020830152613d2c818b6136ff565b90508181036040830152613d40818a6136ff565b9050613d4f60608301896137e5565b613d5c6080830188613875565b613d6960a0830187613875565b613d7660c08301866137e5565b613d8360e0830185613875565b613d9161010083018461369f565b9a9950505050505050505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613ddd826136ef565b810181811067ffffffffffffffff82111715613dfc57613dfb613da7565b5b80604052505050565b5f613e0e613603565b9050613e1a8282613dd4565b919050565b5f67ffffffffffffffff821115613e3957613e38613da7565b5b613e42826136ef565b9050602081019050919050565b828183375f83830152505050565b5f613e6f613e6a84613e1f565b613e05565b905082815260208101848484011115613e8b57613e8a613da3565b5b613e96848285613e4f565b509392505050565b5f82601f830112613eb257613eb1613d9f565b5b8135613ec2848260208601613e5d565b91505092915050565b5f805f60608486031215613ee257613ee161360c565b5b5f84013567ffffffffffffffff811115613eff57613efe613610565b5b613f0b86828701613e9e565b935050602084013567ffffffffffffffff811115613f2c57613f2b613610565b5b613f3886828701613e9e565b9250506040613f4986828701613776565b9150509250925092565b5f805f8060808587031215613f6b57613f6a61360c565b5b5f85013567ffffffffffffffff811115613f8857613f87613610565b5b613f9487828801613e9e565b945050602085013567ffffffffffffffff811115613fb557613fb4613610565b5b613fc187828801613e9e565b9350506040613fd287828801613776565b9250506060613fe387828801613776565b91505092959194509250565b613ff881613694565b8114614002575f80fd5b50565b5f8135905061401381613fef565b92915050565b5f806040838503121561402f5761402e61360c565b5b5f61403c85828601613823565b925050602061404d85828601614005565b9150509250929050565b5f67ffffffffffffffff82111561407157614070613da7565b5b61407a826136ef565b9050602081019050919050565b5f61409961409484614057565b613e05565b9050828152602081018484840111156140b5576140b4613da3565b5b6140c0848285613e4f565b509392505050565b5f82601f8301126140dc576140db613d9f565b5b81356140ec848260208601614087565b91505092915050565b5f805f806080858703121561410d5761410c61360c565b5b5f61411a87828801613823565b945050602061412b87828801613823565b935050604061413c87828801613776565b925050606085013567ffffffffffffffff81111561415d5761415c613610565b5b614169878288016140c8565b91505092959194509250565b5f806040838503121561418b5761418a61360c565b5b5f61419885828601613823565b92505060206141a985828601613823565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806141f757607f821691505b60208210810361420a576142096141b3565b5b50919050565b5f6060820190506142235f8301866137e5565b6142306020830185613875565b61423d60408301846137e5565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61427c82613757565b915061428783613757565b925082820390508181111561429f5761429e614245565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61ffff82169050919050565b5f6142e9826142d2565b915061ffff82036142fd576142fc614245565b5b600182019050919050565b5f60408201905061431b5f8301856137e5565b6143286020830184613875565b9392505050565b7f426964206d75737420626520686967686572207468616e2063757272656e74205f8201527f6869676865737420626964000000000000000000000000000000000000000000602082015250565b5f614389602b836136d1565b91506143948261432f565b604082019050919050565b5f6020820190508181035f8301526143b68161437d565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026144197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826143de565b61442386836143de565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61445e61445961445484613757565b61443b565b613757565b9050919050565b5f819050919050565b61447783614444565b61448b61448382614465565b8484546143ea565b825550505050565b5f90565b61449f614493565b6144aa81848461446e565b505050565b5b818110156144cd576144c25f82614497565b6001810190506144b0565b5050565b601f821115614512576144e3816143bd565b6144ec846143cf565b810160208510156144fb578190505b61450f614507856143cf565b8301826144af565b50505b505050565b5f82821c905092915050565b5f6145325f1984600802614517565b1980831691505092915050565b5f61454a8383614523565b9150826002028217905092915050565b614563826136c7565b67ffffffffffffffff81111561457c5761457b613da7565b5b61458682546141e0565b6145918282856144d1565b5f60209050601f8311600181146145c2575f84156145b0578287015190505b6145ba858261453f565b865550614621565b601f1984166145d0866143bd565b5f5b828110156145f7578489015182556001820191506020850194506020810190506145d2565b868310156146145784890151614610601f891682614523565b8355505b6001600288020188555050505b505050505050565b5f61463382613757565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361466557614664614245565b5b600182019050919050565b5f6060820190508181035f83015261468881866136ff565b90506146976020830185613875565b6146a46040830184613875565b949350505050565b7f41756374696f6e2068617320616c726561647920656e646564000000000000005f82015250565b5f6146e06019836136d1565b91506146eb826146ac565b602082019050919050565b5f6020820190508181035f83015261470d816146d4565b9050919050565b5f61471e82613757565b915061472983613757565b925082820261473781613757565b9150828204841483151761474e5761474d614245565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61478c82613757565b915061479783613757565b9250826147a7576147a6614755565b5b828204905092915050565b5f819050919050565b5f6147d56147d06147cb846147b2565b61443b565b613757565b9050919050565b6147e5816147bb565b82525050565b5f6020820190506147fe5f8301846147dc565b92915050565b7f546f6b656e206e6f7420617661696c61626c65000000000000000000000000005f82015250565b5f6148386013836136d1565b915061484382614804565b602082019050919050565b5f6020820190508181035f8301526148658161482c565b9050919050565b5f61487682613757565b915061488183613757565b925082820190508082111561489957614898614245565b5b92915050565b5f81905092915050565b5f6148b3826136c7565b6148bd818561489f565b93506148cd8185602086016136e1565b80840191505092915050565b5f6148e482856148a9565b91506148f082846148a9565b91508190509392505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614930601b836136d1565b915061493b826148fc565b602082019050919050565b5f6020820190508181035f83015261495d81614924565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61498882614964565b614992818561496e565b93506149a28185602086016136e1565b6149ab816136ef565b840191505092915050565b5f6080820190506149c95f8301876137e5565b6149d660208301866137e5565b6149e36040830185613875565b81810360608301526149f5818461497e565b905095945050505050565b5f81519050614a0e8161363f565b92915050565b5f60208284031215614a2957614a2861360c565b5b5f614a3684828501614a00565b9150509291505056fea26469706673582212208df902400c832863a16f71aafd33896a626f7fbfb146fb8e8c92979c5746990f64736f6c63430008190033